Azure Deployment Manager で安全なデプロイを実施できるようにする (パブリック プレビュー)Enable safe deployment practices with Azure Deployment Manager (Public preview)

多くのリージョンにわたってサービスをデプロイし、各リージョンで期待どおりに実行できるようにするには、Azure Deployment Manager を使用してサービスの段階的ロールアウトを調整します。To deploy your service across many regions and make sure it's running as expected in each region, you can use Azure Deployment Manager to coordinate a staged rollout of the service. Azure のデプロイの場合と同様に、Resource Manager テンプレートでサービスのリソースを定義します。Just as you would for any Azure deployment, you define the resources for your service in Resource Manager templates. テンプレートを作成した後、Deployment Manager を使用して、サービスのトポロジとロールアウトする方法について記述します。After creating the templates, you use Deployment Manager to describe the topology for your service and how it should be rolled out.

Deployment Manager は、Resource Manager の一機能です。Deployment Manager is a feature of Resource Manager. デプロイ中に機能を拡張します。It expands your capabilities during deployment. 複数のリージョンにデプロイする必要のある複雑なサービスが存在する場合は、Deployment Manager を使用します。Use Deployment Manager when you have a complex service that needs to be deployed to several regions. サービスのロールアウトを段階的に行えば、すべてのリージョンにサービスがデプロイされる前に潜在的な問題を見つけることができます。By staging the rollout of your service, you can find potential problems before it has been deployed to all regions. 段階的なロールアウトの特別な注意事項が不要な場合は、Resource Manager の標準デプロイ オプションを使用してください。If you don't need the extra precautions of a staged rollout, use the standard deployment options for Resource Manager. Deployment Manager は、継続的インテグレーションと継続的デリバリー (CI/CD) のサービスなど、Resource Manager のデプロイをサポートするすべての既存のサードパーティ ツールとシームレスに統合します。Deployment Manager seamlessly integrates with all existing third-party tools that support Resource Manager deployments, such as continuous integration and continuous delivery (CI/CD) offerings.

Azure Deployment Manager はプレビュー段階です。Azure Deployment Manager is in preview. フィードバックを提供して、機能の改善にご協力ください。Help us improve the feature by providing feedback.

Deployment Manager を使用するには、次の 4 つのファイルを作成する必要があります。To use Deployment Manager, you need to create four files:

  • トポロジ テンプレートTopology template
  • ロールアウト テンプレートRollout template
  • トポロジのパラメーター ファイルParameter file for topology
  • ロールアウトのパラメーター ファイルParameter file for rollout

トポロジ テンプレートをデプロイしてから、ロールアウト テンプレートをデプロイします。You deploy the topology template before deploying the rollout template.

その他のリソース:Additional resources:

ID とアクセスIdentity and access

Deployment Manager では、ユーザー割り当てマネージド ID がデプロイ操作を実行します。With Deployment Manager, a user-assigned managed identity performs the deployment actions. デプロイの開始前にこの ID を作成します。You create this identity before starting your deployment. この ID には、サービスをデプロイしているサブスクリプションへのアクセス権と、デプロイを完了するための十分な特権が与えられている必要があります。It must have access to the subscription you're deploying the service to, and sufficient permission to complete the deployment. ロールを介して認められるアクションの詳細については、「Azure リソースの組み込みロール」を参照してください。For information about the actions granted through roles, see Built-in roles for Azure resources.

ID は、ロールアウトと同じ場所に存在する必要があります。The identity must reside in the same location as the rollout.

トポロジ テンプレートTopology template

トポロジ テンプレートでは、サービスを構成する Azure リソースとそのデプロイ先を記述します。The topology template describes the Azure resources that make up your service and where to deploy them. 次の図は、サービス例のトポロジを示しています。The following image shows the topology for an example service:

サービス トポロジからサービス、サービス ユニットに至る階層

トポロジ テンプレートには、次のリソースが含まれています。The topology template includes the following resources:

  • 成果物ソース - Resource Manager テンプレートおよびパラメーターの格納場所Artifact source - where your Resource Manager templates and parameters are stored
  • サービス トポロジ - 成果物ソースへのポイントService topology - points to artifact source
    • サービス - 場所と Azure サブスクリプション ID を指定しますServices - specifies location and Azure subscription ID
      • サービス ユニット - リソース グループ、デプロイ モード、およびテンプレートとパラメーター ファイルへのパスを指定しますService units - specifies resource group, deployment mode, and path to template and parameter file

各レベルでの動作については、指定した値を確認すると役立ちます。To understand what happens at each level, it's helpful to see which values you provide.

各レベルの値

テンプレートの成果物ソースArtifact source for templates

トポロジ テンプレートで、テンプレート ファイルとパラメーター ファイルを保持する成果物ソースを作成します。In your topology template, you create an artifact source that holds the templates and parameters files. 成果物ソースは、デプロイ用のファイルを引き出す方法です。The artifact source is a way to pull the files for deployment. この記事の後半ではバイナリ用の別の成果物ソースが登場します。You'll see another artifact source for binaries later in this article.

次の例は、成果物ソースの一般的な形式を示します。The following example shows the general format of the artifact source.

{
    "type": "Microsoft.DeploymentManager/artifactSources",
    "name": "<artifact-source-name>",
    "location": "<artifact-source-location>",
    "apiVersion": "2018-09-01-preview",
    "properties": {
        "sourceType": "AzureStorage",
        "artifactRoot": "<root-folder-for-templates>",
        "authentication": {
            "type": "SAS",
            "properties": {
                "sasUri": "<SAS-URI-for-storage-container>"
            }
        }
    }
}

詳細については、artifactSources テンプレート リファレンスを参照してください。For more information, see artifactSources template reference.

サービス トポロジService topology

次の例は、サービス トポロジ リソースの一般的な形式を示します。The following example shows the general format of the service topology resource. テンプレートおよびパラメーター ファイルを保持する成果物ソースのリソース ID を提供します。You provide the resource ID of the artifact source that holds the templates and parameter files. サービス トポロジにはすべてのサービス リソースが含まれます。The service topology includes all service resources. 成果物ソースが使用可能であることを確認ために、サービス トポロジが成果物ソースに応じて異なります。To make sure the artifact source is available, the service topology depends on it.

{
    "type": "Microsoft.DeploymentManager/serviceTopologies",
    "name": "<topology-name>",
    "location": "<topology-location>",
    "apiVersion": "2018-09-01-preview",
    "properties": {
        "artifactSourceId": "<resource-ID-artifact-source>"
    },
    "dependsOn": [
        "<artifact-source>"
    ],
    "resources": [
        {
            "type": "services",
            ...
        }
    ]
}

詳細については、serviceTopologies テンプレート リファレンスを参照してください。For more information, see serviceTopologies template reference.

サービスServices

次の例は、サービス リソースの一般的な形式を示しています。The following example shows the general format of the services resource. 各サービスで、サービスのデプロイに使用する場所と Azure サブスクリプション ID を提供します。In each service, you provide the location and Azure subscription ID to use for deploying your service. 複数のリージョンにデプロイするには、リージョンごとにサービスを定義します。To deploy to several regions, you define a service for each region. サービスはサービス トポロジに依存します。The service depends on the service topology.

{
    "type": "services",
    "name": "<service-name>",
    "location": "<service-location>",
    "apiVersion": "2018-09-01-preview",
    "dependsOn": [
        "<service-topology>"
    ],
    "properties": {
        "targetSubscriptionId": "<subscription-ID>",
        "targetLocation": "<location-of-deployed-service>"
    },
    "resources": [
        {
            "type": "serviceUnits",
            ...
        }
    ]
}

詳細については、services テンプレート リファレンスを参照してください。For more information, see services template reference.

サービス ユニットService Units

次の例は、サービス ユニット リソースの一般的な形式を示します。The following example shows the general format of the service units resource. 各サービス ユニットで、リソース グループ、デプロイに使用するデプロイ モード、およびテンプレートおよびパラメーター ファイルへのパスを指定します。In each service unit, you specify the resource group, the deployment mode to use for deployment, and the path to the template and parameter file. テンプレートとパラメーターの相対パスを指定する場合、完全なパスは成果物ソースのルート フォルダーから構成されます。If you specify a relative path for the template and parameters, the full path is constructed from the root folder in the artifacts source. テンプレートとパラメーターの絶対パスを指定できますが、リリースを簡単にバージョン管理する機能が失われます。You can specify an absolute path for the template and parameters, but you lose the ability to easily version your releases. サービス ユニットはサービスによって異なります。The service unit depends on the service.

{
    "type": "serviceUnits",
    "name": "<service-unit-name>",
    "location": "<service-unit-location>",
    "apiVersion": "2018-09-01-preview",
    "dependsOn": [
        "<service>"
    ],
    "tags": {
        "serviceType": "Service West US Web App"
    },
    "properties": {
        "targetResourceGroup": "<resource-group-name>",
        "deploymentMode": "Incremental",
        "artifacts": {
            "templateArtifactSourceRelativePath": "<relative-path-to-template>",
            "parametersArtifactSourceRelativePath": "<relative-path-to-parameter-file>"
        }
    }
}

各テンプレートには、1 つの手順でデプロイする関連リソースを含める必要があります。Each template should include the related resources that you want to deploy in one step. たとえば、サービス ユニットは、サービスのフロント エンドにすべてのリソースをデプロイするテンプレートを持つことができます。For example, a service unit could have a template that deploys all of the resources for your service's front end.

詳細については、serviceUnits テンプレート リファレンスを参照してください。For more information, see serviceUnits template reference.

ロールアウト テンプレートRollout template

ロールアウト テンプレートには、サービスのデプロイ時に行う手順を記述します。The rollout template describes the steps to take when deploying your service. 使用するサービス トポロジを指定し、サービス ユニットのデプロイの順序を定義します。You specify the service topology to use and define the order for deploying service units. デプロイ用バイナリを格納するための成果物ソースが含まれています。It includes an artifact source for storing binaries for the deployment. ロールアウト テンプレートでは、次の階層を定義します。In your rollout template, you define the following hierarchy:

  • 成果物ソースArtifact source
  • 手順Step
  • ロールアウトRollout
    • 手順グループStep groups
      • デプロイ操作Deployment operations

次の図は、ロールアウト テンプレートの階層を示します。The following image shows the hierarchy of the rollout template:

ロールアウトから手順までの階層

各ロールアウトには多くの手順グループを使用できます。Each rollout can have many step groups. 各手順グループには、サービス トポロジ内のサービス ユニットを指す 1 つのデプロイ操作があります。Each step group has one deployment operation that points to a service unit in the service topology.

バイナリの成果物ソースArtifact source for binaries

ロールアウト テンプレートでは、サービスにデプロイする必要があるバイナリの成果物ソースを作成します。In the rollout template, you create an artifact source for the binaries you need to deploy to the service. この成果物ソースは、テンプレートの成果物ソースに似ていますが、スクリプト、Web ページ、コンパイル済みコード、サービスで必要なその他のファイルが含まれている点が異なります。This artifact source is similar to the artifact source for templates, except that it contains the scripts, web pages, compiled code, or other files needed by your service.

手順Steps

デプロイ操作の前または後に実行する手順を定義できます。You can define a step to perform either before or after your deployment operation. 現在は、wait 手順と "healthCheck" 手順だけを利用できます。Currently, only the wait step and the 'healthCheck' step are available.

待機手順は、続行する前にデプロイを一時停止します。The wait step pauses the deployment before continuing. 次のサービス ユニットをデプロイする前に、サービスが期待どおりに実行されていることを確認できます。It allows you to verify that your service is running as expected before deploying the next service unit. 次の例は、待機手順の一般的な形式を示します。The following example shows the general format of a wait step.

{
    "apiVersion": "2018-09-01-preview",
    "type": "Microsoft.DeploymentManager/steps",
    "name": "waitStep",
        "location": "<step-location>",
    "properties": {
        "stepType": "wait",
        "attributes": {
          "duration": "PT1M"
        }
    }
},

duration プロパティは、ISO 8601 標準を使用します。The duration property uses ISO 8601 standard. 前述の例では、1 分間の待機を指定します。The preceding example specifies a one-minute wait.

正常性チェックの手順の詳細については、「Azure Deployment Manager に正常性統合ロールアウトを導入する」と「Tutorial:Use health check in Azure Deployment Manager」 (チュートリアル: Azure Deployment Manager で正常性チェックを使用する) を参照してください。For more information about the health check step, see Introduce health integration rollout to Azure Deployment Manager and Tutorial: Use health check in Azure Deployment Manager.

詳細については、steps テンプレート リファレンスを参照してください。For more information, see steps template reference.

ロールアウトRollouts

成果物ソースが使用可能であることを確認するために、ロールアウトが成果物ソースに応じて異なります。To make sure the artifact source is available, the rollout depends on it. ロールアウトは、デプロイされるサービス ユニットごとの手順グループを定義します。The rollout defines steps groups for each service unit that is deployed. デプロイの前または後に行うアクションを定義できます。You can define actions to take before or after deployment. たとえば、サービス ユニットがデプロイされた後にデプロイが待機することを指定できます。For example, you can specify that the deployment wait after the service unit has been deployed. 手順グループの順序を定義できます。You can define the order of the step groups.

ID オブジェクトは、デプロイ アクションを実行するユーザー割り当てマネージド ID を指定します。The identity object specifies the user-assigned managed identity that performs the deployment actions.

次の例は、ロールアウトの一般的な形式を示します。The following example shows the general format of the rollout.

{
    "type": "Microsoft.DeploymentManager/rollouts",
    "name": "<rollout-name>",
    "location": "<rollout-location>",
    "apiVersion": "2018-09-01-preview",
    "Identity": {
        "type": "userAssigned",
        "identityIds": [
            "<managed-identity-ID>"
        ]
    },
    "dependsOn": [
        "<artifact-source>"
    ],
    "properties": {
        "buildVersion": "1.0.0.0",
        "artifactSourceId": "<artifact-source-ID>",
        "targetServiceTopologyId": "<service-topology-ID>",
        "stepGroups": [
            {
                "name": "stepGroup1",
                "dependsOnStepGroups": ["<step-group-name>"],
                "preDeploymentSteps": ["<step-ID>"],
                "deploymentTargetId":
                    "<service-unit-ID>",
                "postDeploymentSteps": ["<step-ID>"]
            },
            ...
        ]
    }
}

詳細については、rollouts テンプレート リファレンスを参照してください。For more information, see rollouts template reference.

パラメーター ファイルParameter file

2 つのパラメーター ファイルを作成します。You create two parameter files. 一方のパラメーター ファイルはサービス トポロジのデプロイ時に使用され、もう一方はロールアウト デプロイに使用されます。One parameter file is used when deploying the service topology, and the other is used for the rollout deployment. 両方のパラメーター ファイルで同じであることを確認する必要のあるいくつかの値があります。There are some values that you need to make sure are the same in both parameter files.

containerRoot 変数containerRoot variable

バージョン管理されたデプロイでは、成果物へのパスを新しいバージョンごとに変更します。With versioned deployments, the path to your artifacts changes with each new version. デプロイを初めて実行するときに、パスは https://<base-uri-blob-container>/binaries/1.0.0.0 であるとします。The first time you run a deployment the path might be https://<base-uri-blob-container>/binaries/1.0.0.0. 2 回目は、https://<base-uri-blob-container>/binaries/1.0.0.1 になります。The second time it might be https://<base-uri-blob-container>/binaries/1.0.0.1. Deployment Manager は、$containerRoot 変数を使用すると、現在のデプロイに関する正しいルート パスの取得が簡略化されます。Deployment Manager simplifies getting the correct root path for the current deployment by using the $containerRoot variable. この値はバージョンごとに変更され、デプロイ前にはわかりません。This value changes with each version and isn't known before deployment.

テンプレート用のパラメーター ファイルで $containerRoot 変数を使用して、Azure リソースをデプロイします。Use the $containerRoot variable in the parameter file for template to deploy the Azure resources. デプロイ時に、この変数は、ロールアウトからの実際の値に置き換えられます。At deployment time, this variable is replaced with the actual values from the rollout.

たとえば、ロールアウト中に、バイナリの成果物の成果物ソースを作成します。For example, during rollout you create an artifact source for the binary artifacts.

{
    "type": "Microsoft.DeploymentManager/artifactSources",
    "name": "[variables('rolloutArtifactSource').name]",
    "location": "[parameters('azureResourceLocation')]",
    "apiVersion": "2018-09-01-preview",
    "properties": {
        "sourceType": "AzureStorage",
        "artifactRoot": "[parameters('binaryArtifactRoot')]",
        "authentication" :
        {
            "type": "SAS",
            "properties": {
                "sasUri": "[parameters('artifactSourceSASLocation')]"
            }
        }
    }
},

artifactRoot および sasUri プロパティを通知します。Notice the artifactRoot and sasUri properties. 成果物のルートは、binaries/1.0.0.0 のような値に設定できます。The artifact root might be set to a value like binaries/1.0.0.0. SAS URI は、アクセス用の SAS トークンを含むストレージ コンテナーの URI です。The SAS URI is the URI to your storage container with a SAS token for access. Deployment Manager は、$containerRoot 変数の値を自動的に構築します。Deployment Manager automatically constructs the value of the $containerRoot variable. <container>/<artifactRoot> の形式でこれらの値を組み合わせます。It combines those values in the format <container>/<artifactRoot>.

テンプレートおよびパラメーター ファイルは、バージョン管理されたバイナリを取得するための正しいパスを認識している必要があります。Your template and parameter file need to know the correct path for getting the versioned binaries. たとえば、Web アプリのファイルをデプロイするには、$containerRoot 変数で次のパラメータ ファイルを作成します。For example, to deploy files for a web app, create the following parameter file with the $containerRoot variable. パスには 2 つの円記号 (\\) を使用する必要があります。最初の円記号はエスケープ文字であるためです。You must use two backslashes (\\) for the path because the first is an escape character.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "deployPackageUri": {
            "value": "$containerRoot\\helloWorldWebAppWUS.zip"
        }
    }
}

次に、テンプレートでこのパラメータを使用します。Then, use that parameter in your template:

{
    "name": "MSDeploy",
    "type": "extensions",
    "location": "[parameters('location')]",
    "apiVersion": "2015-08-01",
    "dependsOn": [
        "[concat('Microsoft.Web/sites/', parameters('WebAppName'))]"
    ],
    "tags": {
        "displayName": "WebAppMSDeploy"
    },
    "properties": {
        "packageUri": "[parameters('deployPackageURI')]"
    }
}

新しいフォルダーを作成し、ロールアウト中にそのルートを渡すことによって、バージョン管理されたデプロイを管理します。You manage versioned deployments by creating new folders and passing in that root during rollout. パスは、リソースをデプロイするテンプレートにまで至ります。The path flows through to the template that deploys the resources.

次の手順Next steps

この記事では、Deployment Manager について学習しました。In this article, you learned about Deployment Manager. Deployment Manager でデプロイする方法については、次の記事に進んでください。Proceed to the next article to learn how to deploy with Deployment Manager.