セールス: 1-800-867-1380

Create Deployment

更新日: 2014年7月

Create Deployment 非同期操作は、新しいサービス パッケージをアップロードし、ステージング環境または運用環境に新しいデプロイを作成します。

この操作を実行する前に、次の作業を完了する必要があります。

  • サブスクリプションを作成して、サブスクリプション識別子を取得します。Microsoft Azure サブスクリプションの作成の詳細については、「Microsoft Azure へようこそ」を参照してください。サブスクリプション識別子は、管理ポータルの [設定] ページで取得できます。

  • 操作を承認するための管理証明書を作成しアップロードします。詳細については、「Microsoft Azure の管理証明書の作成とアップロード」を参照してください。

  • Create Cloud Service を使用してクラウド サービスを作成します。

  • ステージング環境または運用環境にアプリケーションをデプロイするかどうかを決定します。詳細については、「クラウド サービスとは

Create Deployment 要求は、次のように指定します。<subscription-id> をサブスクリプション ID で、<cloudservice-name> をクラウド サービスの名前で、<deployment-slot>staging または production でそれぞれ置き換えます。

 

メソッド 要求 URI

POST

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

管理サービスに対して行われる要求をセキュリティで保護する必要があります。詳細については、「サービス管理要求の認証」を参照してください。

要求ヘッダーの説明を次の表に示します。

 

要求ヘッダー 説明

Content-Type

必須。このヘッダーには、application/xml を設定します。

x-ms-version

必須。この要求に使用する操作のバージョンを指定します。このヘッダーは、2009/10/01 以上のバージョンに設定する必要があります。バージョン管理ヘッダーの詳細については、「サービス管理のバージョン管理」を参照してください。

要求本文の形式は次のとおりです。


<?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>

要求本文の要素を次の表に示します。

 

要素名 説明

名前

必須。デプロイの名前を指定します。

PackageUrl

必須。BLOB サービス内のサービス パッケージの場所を表す URL を指定します。サービス パッケージは、同じサブスクリプションのストレージ アカウント、または任意のストレージ アカウントの共有アクセス署名 (SAS) URI にあります。共有アクセス署名の詳細については、「共有アクセス署名を使用したアクセスの委任」を参照してください。

構成

必須。デプロイの Base 64 エンコード サービス構成ファイルを指定します。

Label

必須。Base 64 でエンコードされたデプロイの識別子を指定します。識別子の最大長は 100 文字です。サブスクリプション内で一意のラベルを使用することをお勧めします。ラベルは追跡の目的で使用できます。

StartDeployment

省略可能。作成後すぐにデプロイを開始するかどうかを指定します。既定値は false です。

false の場合、サービス モデルは引き続きデプロイされますが、コードはすぐには実行されません。Update Deployment Status を呼び出して、ステータスを Suspended に設定すると、その時点でサービスは開始されますが、それまでサービスのステータスは Running です。デプロイされたサービスについては、中断されていても料金がかかります。

StartDeployment 要素は、バージョン 2010/04/01 以上を使用している場合のみ使用できます。

TreatWarningsAsError

省略可能。パッケージの検証警告をエラーとして処理するかどうかを示します。既定値は false です。true に設定した場合、サービス パッケージの検証警告があると、Created Deployment 操作は失敗します。

TreatWarningsAsError 要素は、バージョン 2011/04/01 以上を使用している場合のみ使用できます。

名前

省略可能。デプロイの拡張プロパティの名前を指定します。各拡張プロパティには、定義済みの名前と値の両方が必要です。拡張プロパティの名前と値のペアは最大 25 組使用できます。

Name 要素の最大長は 64 文字です。Name では英数字とアンダースコアのみが有効であり、名前の先頭にはアルファベットを使用する必要があります。

Name 要素は、バージョン 2012-03-01 以上を使用している場合のみ使用できます。

省略可能。クラウド サービスの拡張プロパティの値を指定します。各拡張プロパティには、定義済みの名前と値の両方が必要です。拡張プロパティの名前と値のペアは最大 25 組使用できます。各拡張プロパティ値の最大長は 255 文字です。

Value 要素は、バージョン 2012-03-01 以上を使用している場合のみ使用できます。

ExtensionConfiguration

省略可能。クラウド サービスに追加される拡張機能を指定します。Windows Azure では、プロセスはクラウド サービスの拡張機能として実行できます。拡張機能をデプロイに追加する前に、拡張機能の追加 を使用して拡張機能をクラウド サービスに追加する必要があります。

ExtensionConfiguration 要素は、バージョン 2013/03/01 以上を使用している場合のみ使用できます。

クラウド サービスに追加される拡張機能を指定します。

 

要素名 説明

AllRoles

省略可能。デプロイ内のすべてのロールに適用される拡張機能のリストを指定します。

Extension

必須。クラウド サービスのロールにデプロイされる拡張機能を指定します。

NamedRoles

省略可能。デプロイの特定のロールに適用される拡張機能のリストを指定します。

クラウド サービスのロールにデプロイされる拡張機能を指定します。

 

要素名 説明

ID

必須。拡張機能の識別子を指定します。識別子は、クラウド サービスに拡張機能が追加されると作成されます。クラウド サービスに追加された拡張機能の識別子は、拡張機能の一覧表示 を使用して検索できます。

デプロイの特定のロールに適用される拡張機能のリストを指定します。

 

要素名 説明

ロール

必須。拡張機能が追加される特定のロールを指定します。

RoleName

必須。ロールの名前を指定します。

Extension

必須。クラウド サービスのロールにデプロイされる拡張機能を指定します。

応答には、HTTP 状態コードおよび一連の応答ヘッダーが含まれています。

操作が正常に終了すると、ステータス コード 200 (OK) が返されます。ステータス コードの詳細については、「サービス管理のステータス コードとエラー コード」を参照してください。

この操作の応答には、次のヘッダーが含まれています。応答に追加の標準 HTTP ヘッダーが含まれる場合もあります。標準ヘッダーはすべて、HTTP/1.1 プロトコル仕様に準拠しています。

 

応答ヘッダー 説明

x-ms-request-id

管理サービスに対して行われた要求を一意に識別する値。非同期操作の場合は、ヘッダーの値を指定して Get Operation Status を呼び出して、操作が正常に終了したか、失敗したか、または処理中かを確認できます。

なし。

次のコンソール アプリケーションの例は、アプリケーションのデプロイ方法を示しています。次の変数の値は置き換えてください。

  • Thumbprint – サブスクリプションの管理証明書のサムプリントに置き換えます。

  • SubscriptionId – 管理ポータルから取得したサブスクリプション識別子に置き換えます。

  • ServiceName - 作成したクラウド サービスの名前に置き換えます。

  • DeploymentName - デプロイに使用する名前に置き換えます。



    noteメモ
    List Locations を使用して、適切な場所を取得できます。

  • PackageName - BLOB ストレージでのパッケージ ファイルへのパスに置き換えます。

  • ConfigFile - サービス構成ファイルの名前に置き換えます。


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));
    }
  }
}

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました
表示:
© 2014 Microsoft