Exportar (0) Imprimir
Expandir Tudo

Criar implantação

Atualizado: fevereiro de 2015

A operação assíncrona Create Deployment carrega um novo pacote de serviço e cria uma nova implantação nos ambientes de preparação ou produção.

Para que você possa executar essa operação, é necessário concluir as seguintes tarefas:

A solicitação Create Deployment é especificada como a seguir. Substitua <subscription-id> por sua ID da assinatura, <cloudservice-name> pelo nome do serviço de nuvem e <deployment-slot> com staging ou production.

 

Método URI de solicitação

POST

https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/<deployment-slot>

Verifique se a solicitação feita ao serviço de gerenciamento é segura. Para obter mais detalhes, consulte Autenticando solicitações do gerenciamento de serviços.

A tabela a seguir descreve os cabeçalhos da solicitação.

 

Cabeçalho de solicitação Descrição

Content-Type

Obrigatória. Defina este cabeçalho como application/xml.

x-ms-version

Obrigatória. Especifica a versão da operação a ser usada para esta solicitação. Este cabeçalho deve ser definido como 1/10/2009 ou posterior. Para obter mais informações sobre cabeçalhos de controle de versão, consulte Controle de versão de gerenciamento de serviço.

Formato do corpo da solicitação:


<?xml version="1.0" encoding="utf-8"?>
<CreateDeployment xmlns="http://schemas.microsoft.com/windowsazure">
  <Name>deployment-name</Name>
  <PackageUrl>package-url-in-blob-storage</PackageUrl>
  <Label>base64-encoded-deployment-label</Label>
  <Configuration>base64-encoded-configuration-file</Configuration>
  <StartDeployment>start-deployment</StartDeployment>
  <TreatWarningsAsError>prioritize-warnings</TreatWarningsAsError>
  <ExtendedProperties>
    <ExtendedProperty>
      <Name>property-name</Name>
      <Value>property-value</Value>
    </ExtendedProperty>
  </ExtendedProperties>
  <ExtensionConfiguration>
    <AllRoles>
      <Extension>
        <Id>identifier-of-extension</Id>
      </Extension>
    </AllRoles>
    <NamedRoles>
      <Role>
        <RoleName>role_name1</RoleName>
        <Extensions>
          <Extension>
            <Id>identifier-of-extension</Id>
          </Extension>
        </Extensions>
      </Role>
    </NamedRoles>
  </ExtensionConfiguration>
</CreateDeployment>

A tabela a seguir descreve os elementos no corpo da solicitação.

 

Nome do elemento Descrição

Nome

Obrigatória. Especifica o nome da implantação.

PackageUrl

Obrigatória. Especifica uma URL que faz referência ao local do pacote de serviço no serviço Blob. O pacote de serviço pode estar localizado em uma conta de armazenamento abaixo da mesma assinatura ou um URI de assinatura de acesso compartilhado (SAS) de qualquer conta de armazenamento. Para obter mais informações sobre assinaturas de acesso compartilhado, consulte Delegando acesso com uma assinatura de acesso compartilhado.

Configuração

Obrigatória. Especifica o arquivo de configuração do serviço codificado em base 64 para a implantação.

Rótulo

Obrigatória. Especifica um identificador para a implantação que é codificada em base 64. O identificador pode ter até 100 caracteres. É recomendável que o rótulo seja exclusivo dentro da assinatura. O rótulo pode ser usado para suas finalidades de acompanhamento.

StartDeployment

Opcional. Indica se deve começar a implantação imediatamente depois que ela foi criada. O valor padrão é false.

Se for false, o modelo de serviço ainda será implantado, mas o código não será executado imediatamente. Em vez disso, o serviço será Suspended até que você chame Atualizar status da implantação e defina o status como Running, quando o serviço será iniciado. Um serviço implantado ainda incorrerá em encargos, mesmo que ele seja suspenso.

O elemento StartDeployment só estará disponível com a versão 1/4/2010 ou superior.

TreatWarningsAsError

Opcional. Indica se as avisos de validação do pacote devem ser tratados como erros. O valor padrão é false. Se for definido como true, a operação Created Deployment falhará se houver avisos de validação no pacote de serviço.

O elemento TreatWarningsAsError só estará disponível com a versão 1/4/2011 ou superior.

Nome

Opcional. Especifica o nome de uma propriedade de implantação estendida. Cada propriedade estendida deve ter um nome e um valor definido. Você pode ter um máximo de 25 pares de nome e valor de propriedade estendida.

O comprimento máximo do elemento Nome é de 64 caracteres, somente os caracteres alfanuméricos e sublinhados são válidos no Nome, e o nome deve começar com uma letra.

O elemento Name só estará disponível com a versão 1/3/2012 ou superior.

Valor

Opcional. Especifica o valor de uma propriedade estendida do serviço de nuvem. Cada propriedade estendida deve ter um nome e um valor definido. Você pode ter até 25 pares de nome e valor da propriedade estendida, e cada valor de propriedade estendida terá um comprimento máximo de 255 caracteres.

O elemento Value só estará disponível com a versão 1/3/2012 ou superior.

ExtensionConfiguration

Opcional. Especifica uma extensão que é adicionada ao serviço de nuvem. No Windows Azure, um processo pode ser executado como uma extensão de um serviço de nuvem. Você deve adicionar uma extensão do serviço de nuvem usando Adicionar extensão antes que ela possa ser adicionada à implantação.

O elemento ExtensionConfiguration só estará disponível com a versão 1/3/2013 ou superior.

Especifica uma extensão que é adicionada ao serviço de nuvem.

 

Nome do elemento Descrição

AllRoles

Opcional. Especifica uma lista de extensões aplicadas a todas as funções em uma implantação.

Extensão

Obrigatória. Especifica uma extensão que deve ser implantada em uma função em um serviço de nuvem.

NamedRoles

Opcional. Especifica uma lista de extensões aplicadas a funções específicas em uma implantação.

Especifica uma extensão que deve ser implantada em uma função em um serviço de nuvem.

 

Nome do elemento Descrição

Id

Obrigatória. Especifica o identificador da extensão. O identificador é criado quando a extensão é adicionada ao serviço de nuvem. Você pode localizar o identificador de uma extensão que foi adicionada a um serviço de nuvem usando Listar extensões.

Especifica uma lista de extensões aplicadas a funções específicas em uma implantação.

 

Nome do elemento Descrição

Função

Obrigatória. Especifica uma função específica à qual a extensão é adicionada.

RoleName

Obrigatória. Especifica o nome da função.

Extensão

Obrigatória. Especifica uma extensão que deve ser implantada em uma função em um serviço de nuvem.

A resposta inclui um código de status HTTP e um conjunto de cabeçalhos de resposta.

Uma operação bem-sucedida retorna o código de status 200 (OK). Para obter informações sobre códigos de status, consulte Status de Gerenciamento de Serviço e códigos de erro.

A resposta para esta operação inclui os cabeçalhos a seguir. A resposta também pode incluir cabeçalhos padrão HTTP adicionais. Todos os cabeçalhos padrão obedecem à especificação de protocolo HTTP/1.1.

 

Cabeçalho de resposta Descrição

x-ms-request-id

Um valor que identifica exclusivamente uma solicitação feita no serviço de gerenciamento. Para uma operação assíncrona, você pode chamar Obter status da operação com o valor do cabeçalho para determinar se a operação foi concluída, se falhou ou se ainda está em andamento.

O exemplo de aplicativo de console a seguir mostra como implantar um aplicativo. Substitua os seguintes valores de variáveis:

  • Impressão digital – com a impressão digital de um certificado de gerenciamento em sua assinatura

  • SubscriptionId – com o identificador da assinatura que você obteve do Portal de Gerenciamento

  • ServiceName – com o nome do serviço de nuvem que você criou

  • DeploymentName – com o nome que você deseja usar para a implantação



    noteObservação
    Você pode usar Locais de lista para obter o local apropriado.

  • PackageName – com o caminho no armazenamento de Blob para o arquivo de pacote

  • ConfigFile – com o nome do arquivo de configuração do serviço


using System;
using System.Collections.Generic;
using System.Xml.Linq;
using System.Text;
using System.Security.Cryptography.X509Certificates;
using System.Net;
using System.IO;
using System.Xml;

namespace CreateDeployment
{
  class Program
  {
    private static XNamespace wa = "http://schemas.microsoft.com/windowsazure";
    private const string Thumbprint = "certificate-thumbprint";
    private const string SubscriptionId = "identifier-of-subscription";
    private const string ServiceName = "name-of-cloud-service";
    private const string DeploymentName = "name-of-deployment-name";
    private const string PackageName = "location-of-package";
    private const string ConfigFile = "name-of-configuration-file";
    private const string Version = "2013-08-01";

    static void Main(string[] args)
    {
      // Set the certificate that matches the Thumbprint value.
      X509Certificate2 certificate = GetStoreCertificate(Thumbprint);
      
       // Create the URI for the request
      string uriFormat = "https://management.core.windows.net/{0}/" +
        "services/hostedservices/{1}/deploymentslots/production";
      Uri uri = new Uri(String.Format(uriFormat, SubscriptionId, ServiceName));
      
      // Base-64 encode the label of the deployment   
      byte[] bytes = System.Text.Encoding.UTF8.GetBytes(ServiceName);
      string base64Label = Convert.ToBase64String(bytes);

       // Create the request body
      XDocument requestBody = new XDocument(
      new XDeclaration("1.0", "UTF-8", "no"),
        new XElement(wa + "CreateDeployment",
          new XElement(wa + "Name", DeploymentName),
          new XElement(wa + "PackageUrl", PackageName),
          new XElement(wa + "Label", base64Label),
          new XElement(wa + "Configuration", ConvertFile(ConfigFile)),
          new XElement(wa + "StartDeployment", true)));

       // Submit the request and get the response
      XDocument responseBody;
      HttpWebResponse response = InvokeRequest(uri, "POST", certificate, requestBody, out responseBody);
      string requestId = String.Empty;
      if (response.Headers != null)
      {
        requestId = response.Headers["x-ms-request-id"];
      }

      if (responseBody != null)
      {
        Console.WriteLine(responseBody.ToString(SaveOptions.OmitDuplicateNamespaces));
      }
      
      XDocument statusResponse = GetStatus(requestId);
      if (statusResponse != null)
      {
        Console.WriteLine(statusResponse.ToString(SaveOptions.OmitDuplicateNamespaces));
      }
      Console.Write("Press any key to continue:");
      Console.ReadKey();
    }

    //Get the status of the request    
    private static XDocument GetStatus(string requestId)
    {
      // Set the certificate that matches the Thumbprint value.
      X509Certificate2 certificate = GetStoreCertificate(Thumbprint);
      
       // Create the URI for the request
      string uriFormat = "https://management.core.windows.net/{0}/" + "operations/" + requestId;
      Uri uri = new Uri(String.Format(uriFormat, SubscriptionId));
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
      request.Method = "GET";
      request.Headers.Add("x-ms-version", Version);
      request.ClientCertificates.Add(certificate);
      request.ContentType = "application/xml";

       // Submit the request and get the response
      XDocument responseBody = null;
      HttpWebResponse response;
      try
      {
        response = (HttpWebResponse)request.GetResponse();
      }
      catch (WebException ex)
      {
        response = (HttpWebResponse)ex.Response;
      }

      if (response.ContentLength > 0)
      {
        using (XmlReader reader = XmlReader.Create(response.GetResponseStream()))
        {
          responseBody = XDocument.Load(reader);
        }
      }
      response.Close();
      return responseBody;
    }
        
    // Add the request headers and get the response from the request
    private static HttpWebResponse InvokeRequest(
      Uri uri,
      string method,
      X509Certificate2 certificate,
      XDocument requestBody,
      out XDocument responseBody)
    {
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
      request.Method = method;
      request.Headers.Add("x-ms-version", Version);
      request.ClientCertificates.Add(certificate);
      request.ContentType = "application/xml";

      if (requestBody != null)
      {
        using (Stream requestStream = request.GetRequestStream())
        {
          using (StreamWriter streamWriter = new StreamWriter(
            requestStream, System.Text.UTF8Encoding.UTF8))
          {
            requestBody.Save(streamWriter, SaveOptions.DisableFormatting);
          }
        }
      }

      responseBody = null;
      HttpWebResponse response;
      try
      {
        response = (HttpWebResponse)request.GetResponse();
      }
      catch (WebException ex)
      {
        response = (HttpWebResponse)ex.Response;
      }

      XmlReaderSettings settings = new XmlReaderSettings();
      settings.DtdProcessing = DtdProcessing.Ignore;
      if (response.ContentLength > 0)
      {
        using (XmlReader reader = XmlReader.Create(response.GetResponseStream(), settings))
        {
          try
          {
            responseBody = XDocument.Load(reader);
          }
          catch
          {
            responseBody = null;
          }
        }
      }
      response.Close();
      return response;
    }
    
    // Base-64 encode the contents of the service configuration file.
    private static string ConvertFile(string configFileName)
    {
      string fileContents;
      string base64String = "";
      try
      {
        using (StreamReader reader = new StreamReader(
          File.Open(configFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read)))
        {
          fileContents = reader.ReadToEnd();
        }
      }
      catch (System.Exception exp)
      {
        Console.WriteLine(exp.Message);
        return base64String;
      }

      // Convert the binary input into base-64 encoded output. 
      try
      {
        base64String = Convert.ToBase64String(Encoding.UTF8.GetBytes(fileContents));
        return base64String;
      }
      catch (System.ArgumentNullException)
      {
        Console.WriteLine("Binary data array is null.");
        return base64String;
      }
    }

    // Gets the certificate matching the thumbprint from the local store.
    // Throws an ArgumentException if a matching certificate is not found.
    private static X509Certificate2 GetStoreCertificate(string thumbprint)
    {
      List<StoreLocation> locations = new List<StoreLocation>
      { 
        StoreLocation.CurrentUser, 
        StoreLocation.LocalMachine
      };

      foreach (var location in locations)
      {
        X509Store store = new X509Store("My", location);
        try
        {
          store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
          X509Certificate2Collection certificates = store.Certificates.Find(
            X509FindType.FindByThumbprint, thumbprint, false);
          if (certificates.Count == 1)
          {
            return certificates[0];
          }
        }
        finally
        {
          store.Close();
        }
      }
      throw new ArgumentException(string.Format(
        "A Certificate with Thumbprint '{0}' could not be located.",
        thumbprint));
    }
  }
}

Mostrar:
© 2015 Microsoft