ARM テンプレートを使用してクラウド サービス (延長サポート) をデプロイするDeploy a Cloud Service (extended support) using ARM templates

このチュートリアルでは、ARM テンプレートを使ってクラウド サービス (延長サポート) のデプロイを作成する方法を説明します。This tutorial explains how to create a Cloud Service (extended support) deployment using ARM templates.

重要

Cloud Services (延長サポート) は現在、パブリック プレビュー段階です。Cloud Services (extended support) is currently in public preview. このプレビュー バージョンはサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。This preview version is provided without a service level agreement, and it's not recommended for production workloads. 特定の機能はサポート対象ではなく、機能が制限されることがあります。Certain features might not be supported or might have constrained capabilities. 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。For more information, see Supplemental Terms of Use for Microsoft Azure Previews.

始める前にBefore you begin

  1. クラウド サービス (延長サポート) のデプロイの前提条件を確認し、関連するリソースを作成します。Review the deployment prerequisites for Cloud Services (extended support) and create the associated resources.

  2. Azure portal または PowerShell を使用して、新しいリソース グループを作成します。Create a new resource group using the Azure portal or PowerShell. 既存のリソース グループを使用する場合は、この手順は省略可能です。This step is optional if you are using an existing resource group.

  3. Azure portal または PowerShell を使用して、新しいストレージ アカウントを作成します。Create a new storage account using the Azure portal or PowerShell. 既存のストレージ アカウントを使用する場合は、この手順は省略可能です。This step is optional if you are using an existing storage account.

  4. Azure portalAzCopy、または PowerShell を使用して、サービス定義 (.csdef) ファイルとサービス構成 (.cscfg) ファイルをストレージ アカウントにアップロードします。Upload your Service Definition (.csdef) and Service Configuration (.cscfg) files to the storage account using the Azure portal, AzCopy or PowerShell. 両方のファイルについて、SAS URI を取得します。この URI は、このチュートリアルで後ほど ARM テンプレートに追加します。Obtain the SAS URIs of both files to be added to the ARM template later in this tutorial.

  5. (省略可能) キー コンテナーを作成し、証明書をアップロードします。(Optional) Create a Key vault and upload the certificates.

    • クラウド サービスに証明書を関連付けると、サービスとの間にセキュリティで保護された通信を実現できます。Certificates can be attached to cloud services to enable secure communication to and from the service. 証明書を使用するためには、サービス構成 (.cscfg) ファイル内でその証明書の拇印を指定したうえで、キー コンテナーにアップロードする必要があります。In order to use certificates, their thumbprints must be specified in your Service Configuration (.cscfg) file and uploaded to a Key vault. キー コンテナーは、Azure portal または PowerShell を使用して作成できます。A Key Vault can be created through the Azure portal or PowerShell.
    • 関連付けるキー コンテナーは、クラウド サービスと同じリージョンおよびサブスクリプションに配置する必要があります。The associated Key Vault must be located in the same region and subscription as cloud service.
    • また、クラウド サービス (延長サポート) リソースがキー コンテナーから証明書を取得できるようにするために、関連付けるキー コンテナーで適切なアクセス許可を有効にする必要があります。The associated Key Vault for must be enabled appropriate permissions so that Cloud Services (extended support) resource can retrieve certificate from Key Vault. 詳細については、証明書とキー コンテナーに関するページを参照してください。For more information, see Certificates and Key Vault
    • 以下の手順に示した ARM テンプレートの OsProfile セクションで、キー コンテナーを参照する必要があります。Key vault needs to be referenced in the OsProfile section of the ARM template shown in the below steps.

クラウド サービス (延長サポート) をデプロイするDeploy a Cloud Service (extended support)

  1. 仮想ネットワークを作成します。Create virtual network. 仮想ネットワークの名前は、サービス構成 (.cscfg) ファイル内の参照と一致している必要があります。The name of the virtual network must match the references in the Service Configuration (.cscfg) file. 既存の仮想ネットワークを使用する場合は、ARM テンプレートからこのセクションを削除してください。If using an existing virtual network, omit this section from the ARM template.

    "resources": [ 
        { 
          "apiVersion": "2019-08-01", 
          "type": "Microsoft.Network/virtualNetworks", 
          "name": "[parameters('vnetName')]", 
          "location": "[parameters('location')]", 
          "properties": { 
            "addressSpace": { 
              "addressPrefixes": [ 
                "10.0.0.0/16" 
              ] 
            }, 
            "subnets": [ 
              { 
                "name": "WebTier", 
                "properties": { 
                  "addressPrefix": "10.0.0.0/24" 
                } 
              } 
            ] 
          } 
        } 
    ] 
    

    新しい仮想ネットワークを作成する場合には、dependsOn セクションに以下を追加します。こうすることによって、クラウド サービスの作成前にプラットフォームにより仮想ネットワークが作成されます。If creating a new virtual network, add the following to the dependsOn section to ensure the platform creates the virtual network prior to creating the cloud service.

    "dependsOn": [ 
            "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]" 
     ] 
    
  2. パブリック IP アドレスを作成し、(必要に応じて) そのパブリック IP アドレスの DNS ラベル プロパティを設定します。Create a public IP address and (optionally) set the DNS label property of the public IP address. 静的 IP を使用する場合は、サービス構成 (.cscfg) ファイルで予約済み IP として参照する必要があります。If you are using a Static IP you need to reference it as a Reserved IP in Service Configuration (.cscfg) file. 既存の IP アドレスを使用する場合は、この手順をスキップし、ARM テンプレートのロード バランサーの構成設定に IP アドレスの情報を直接追加します。If using an existing IP address, skip this step and add the IP address information directly into the load balancer configuration settings of your ARM template.

    "resources": [ 
        { 
          "apiVersion": "2019-08-01", 
          "type": "Microsoft.Network/publicIPAddresses", 
          "name": "[parameters('publicIPName')]", 
          "location": "[parameters('location')]", 
          "properties": { 
            "publicIPAllocationMethod": "Dynamic", 
            "idleTimeoutInMinutes": 10, 
            "publicIPAddressVersion": "IPv4", 
            "dnsSettings": { 
              "domainNameLabel": "[variables('dnsName')]" 
            } 
          }, 
          "sku": { 
            "name": "Basic" 
          } 
        } 
    ] 
    

    新しい IP アドレスを作成する場合には、dependsOn セクションに以下を追加します。こうすることによって、クラウド サービスの作成前にプラットフォームにより IP アドレスが作成されます。If creating a new IP address, add the following to the dependsOn section to ensure the platform creates the IP address prior to creating the cloud service.

    "dependsOn": [ 
            "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" 
          ] 
    
  3. ネットワーク プロファイル オブジェクトを作成し、ロード バランサーのフロントエンドにパブリック IP アドレスを関連付けます。Create a Network Profile Object and associate the public IP address to the frontend of the load balancer. ロード バランサーは、プラットフォームによって自動的に作成されます。A Load balancer is automatically created by the platform.

    "networkProfile": { 
        "loadBalancerConfigurations": [ 
          { 
            "id": "[concat(variables('resourcePrefix'), 'Microsoft.Network/loadBalancers/', variables('lbName'))]", 
            "name": "[variables('lbName')]", 
            "properties": { 
              "frontendIPConfigurations": [ 
                { 
                  "name": "[variables('lbFEName')]", 
                  "properties": { 
                    "publicIPAddress": { 
                      "id": "[concat(variables('resourcePrefix'), 'Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]" 
                    } 
                  } 
                } 
              ] 
            } 
          } 
        ] 
      } 
    
  4. ARM テンプレートの  OsProfile セクションに、キー コンテナーの参照を追加します。Add your key vault reference in the OsProfile section of the ARM template. キー コンテナーは、クラウド サービス (延長サポート) に関連付けられている証明書を格納するために使用します。Key Vault is used to store certificates that are associated to Cloud Services (extended support). 証明書をキー コンテナーに追加してから、サービス構成 (.cscfg) ファイル内でその証明書の拇印を参照します。Add the certificates to Key Vault, then reference the certificate thumbprints in Service Configuration (.cscfg) file. また、クラウド サービス (延長サポート) リソースがキー コンテナーからシークレットとして格納されている証明書を取得できるようにするために、キー コンテナーで適切なアクセス許可を有効にする必要があります。You also need to enable Key Vault for appropriate permissions so that Cloud Services (extended support) resource can retrieve certificate stored as secrets from Key Vault. 詳細については、Cloud Services (延長サポート) で証明書を使用する方法に関するページを参照してください。For more information, see using certificates with Cloud Services (extended support).

    "osProfile": { 
          "secrets": [ 
            { 
              "sourceVault": { 
                "id": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.KeyVault/vaults/{keyvault-name}" 
              }, 
              "vaultCertificates": [ 
                { 
                  "certificateUrl": "https://{keyvault-name}.vault.azure.net:443/secrets/ContosoCertificate/{secret-id}" 
                } 
              ] 
            } 
          ] 
        } 
    

    注意

     sourceVault は、キー コンテナーの ARM リソース ID です。 SourceVault is the ARM Resource ID to your Key Vault. この情報は、キー コンテナーのプロパティ セクション内のリソース ID のところにあります。You can find this information by locating the Resource ID in the properties section of your Key Vault.

    • certificateUrl は、キー コンテナー内の証明書に移動し、 [シークレット識別子] というラベルの箇所を見ると確認できます。certificateUrl can be found by navigating to the certificate in the key vault labeled as Secret Identifier.
    • certificateUrl は、 https://{keyvault-endpoin}/secrets/{secretname}/{secret-id} の形式です。certificateUrl should be of the form https://{keyvault-endpoin}/secrets/{secretname}/{secret-id}
  5. ロール プロファイルを作成します。Create a Role Profile. ロールの数、ロールの名前、各ロールのインスタンス数、およびサイズが、サービス構成 (.cscfg)、サービス定義 (.csdef)、および ARM テンプレートのロール プロファイル セクションのいずれにおいても同じになっていることを確認します。Ensure that the number of roles, role names, number of instances in each role and sizes are the same across the Service Configuration (.cscfg), Service Definition (.csdef) and role profile section in ARM template.

    "roleProfile": { 
          "roles": { 
          "value": [ 
            { 
              "name": "WebRole1", 
              "sku": { 
                "name": "Standard_D1_v2", 
                "capacity": "1" 
              } 
            }, 
            { 
              "name": "WorkerRole1", 
              "sku": { 
                "name": "Standard_D1_v2", 
                "capacity": "1" 
              } 
            } 
        }
    }   
    
  6. (省略可能) クラウド サービスに拡張機能を追加する拡張機能プロファイルを作成します。(Optional) Create an extension profile to add extensions to your cloud service. この例では、リモート デスクトップ拡張機能と Microsoft Azure Diagnostics 拡張機能を追加します。For this example, we are adding the remote desktop and Windows Azure diagnostics extension.

        "extensionProfile": {
              "extensions": [
                {
                  "name": "RDPExtension",
                  "properties": {
                    "autoUpgradeMinorVersion": true,
                    "publisher": "Microsoft.Windows.Azure.Extensions",
                    "type": "RDP",
                    "typeHandlerVersion": "1.2.1",
                    "settings": "<PublicConfig>\r\n <UserName>[Insert Username]</UserName>\r\n <Expiration>1/21/2022 12:00:00 AM</Expiration>\r\n</PublicConfig>",
                    "protectedSettings": "<PrivateConfig>\r\n <Password>[Insert Password]</Password>\r\n</PrivateConfig>"
                  }
                },
                {
                  "name": "Microsoft.Insights.VMDiagnosticsSettings_WebRole1",
                  "properties": {
                    "autoUpgradeMinorVersion": true,
                    "publisher": "Microsoft.Azure.Diagnostics",
                    "type": "PaaSDiagnostics",
                    "typeHandlerVersion": "1.5",
                    "settings": "[parameters('wadPublicConfig_WebRole1')]",
                    "protectedSettings": "[parameters('wadPrivateConfig_WebRole1')]",
                    "rolesAppliedTo": [
                      "WebRole1"
              ]
            }
          }
        ]
      }
    
    
    
  7. テンプレート全体を確認します。Review the full template.

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "cloudServiceName": {
          "type": "string",
          "metadata": {
            "description": "Name of the cloud service"
          }
        },
        "location": {
          "type": "string",
          "metadata": {
            "description": "Location of the cloud service"
          }
        },
        "deploymentLabel": {
          "type": "string",
          "metadata": {
            "description": "Label of the deployment"
          }
        },
        "packageSasUri": {
          "type": "securestring",
          "metadata": {
            "description": "SAS Uri of the CSPKG file to deploy"
          }
        },
        "configurationSasUri": {
          "type": "securestring",
          "metadata": {
            "description": "SAS Uri of the service configuration (.cscfg)"
          }
        },
        "roles": {
          "type": "array",
          "metadata": {
            "description": "Roles created in the cloud service application"
          }
        },
        "wadPublicConfig_WebRole1": {
          "type": "string",
          "metadata": {
             "description": "Public configuration of Windows Azure Diagnostics extension"
          }
         },
        "wadPrivateConfig_WebRole1": {
          "type": "securestring",
          "metadata": {
            "description": "Private configuration of Windows Azure Diagnostics extension"
         }
        },
        "vnetName": {
          "type": "string",
          "defaultValue": "[concat(parameters('cloudServiceName'), 'VNet')]",
          "metadata": {
            "description": "Name of vitual network"
          }
        },
        "publicIPName": {
          "type": "string",
          "defaultValue": "contosocsIP",
          "metadata": {
            "description": "Name of public IP address"
          }
        },
        "upgradeMode": {
          "type": "string",
          "defaultValue": "Auto",
          "metadata": {
            "UpgradeMode": "UpgradeMode of the CloudService"
          }
        }
      },
      "variables": {
        "cloudServiceName": "[parameters('cloudServiceName')]",
        "subscriptionID": "[subscription().subscriptionId]",
        "dnsName": "[variables('cloudServiceName')]",
        "lbName": "[concat(variables('cloudServiceName'), 'LB')]",
        "lbFEName": "[concat(variables('cloudServiceName'), 'LBFE')]",
        "resourcePrefix": "[concat('/subscriptions/', variables('subscriptionID'), '/resourceGroups/', resourceGroup().name, '/providers/')]"
      },
      "resources": [
        {
          "apiVersion": "2019-08-01",
          "type": "Microsoft.Network/virtualNetworks",
          "name": "[parameters('vnetName')]",
          "location": "[parameters('location')]",
          "properties": {
            "addressSpace": {
              "addressPrefixes": [
                "10.0.0.0/16"
              ]
            },
            "subnets": [
              {
                "name": "WebTier",
                "properties": {
                  "addressPrefix": "10.0.0.0/24"
                }
              }
            ]
          }
        },
        {
          "apiVersion": "2019-08-01",
          "type": "Microsoft.Network/publicIPAddresses",
          "name": "[parameters('publicIPName')]",
          "location": "[parameters('location')]",
          "properties": {
            "publicIPAllocationMethod": "Dynamic",
            "idleTimeoutInMinutes": 10,
            "publicIPAddressVersion": "IPv4",
            "dnsSettings": {
              "domainNameLabel": "[variables('dnsName')]"
            }
          },
          "sku": {
            "name": "Basic"
          }
        },
        {
          "apiVersion": "2020-10-01-preview",
          "type": "Microsoft.Compute/cloudServices",
          "name": "[variables('cloudServiceName')]",
          "location": "[parameters('location')]",
          "tags": {
            "DeploymentLabel": "[parameters('deploymentLabel')]",
            "DeployFromVisualStudio": "true"
          },
          "dependsOn": [
            "[concat('Microsoft.Network/virtualNetworks/', parameters('vnetName'))]",
            "[concat('Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]"
          ],
          "properties": {
            "packageUrl": "[parameters('packageSasUri')]",
            "configurationUrl": "[parameters('configurationSasUri')]",
            "upgradeMode": "[parameters('upgradeMode')]",
            "roleProfile": {
              "roles": [
                {
                  "name": "WebRole1",
                  "sku": {
                    "name": "Standard_D1_v2",
                    "capacity": "1"
                  }
                },
                {
                  "name": "WorkerRole1",
                  "sku": {
                    "name": "Standard_D1_v2",
                    "capacity": "1"
                  }
                }
              ]
            },
            "networkProfile": {
              "loadBalancerConfigurations": [
                {
                  "id": "[concat(variables('resourcePrefix'), 'Microsoft.Network/loadBalancers/', variables('lbName'))]",
                  "name": "[variables('lbName')]",
                  "properties": {
                    "frontendIPConfigurations": [
                      {
                        "name": "[variables('lbFEName')]",
                        "properties": {
                          "publicIPAddress": {
                            "id": "[concat(variables('resourcePrefix'), 'Microsoft.Network/publicIPAddresses/', parameters('publicIPName'))]"
                          }
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "osProfile": {
              "secrets": [
                {
                  "sourceVault": {
                    "id": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.KeyVault/vaults/{keyvault-name}"
                  },
                  "vaultCertificates": [
                    {
                      "certificateUrl": "https://{keyvault-name}.vault.azure.net:443/secrets/ContosoCertificate/{secret-id}"
                    }
                  ]
                }
              ]
            },
        "extensionProfile": {
              "extensions": [
                {
                  "name": "RDPExtension",
                  "properties": {
                    "autoUpgradeMinorVersion": true,
                    "publisher": "Microsoft.Windows.Azure.Extensions",
                    "type": "RDP",
                    "typeHandlerVersion": "1.2.1",
                    "settings": "<PublicConfig>\r\n <UserName>[Insert Username]</UserName>\r\n <Expiration>1/21/2022 12:00:00 AM</Expiration>\r\n</PublicConfig>",
                    "protectedSettings": "<PrivateConfig>\r\n <Password>[Insert Password]</Password>\r\n</PrivateConfig>"
                  }
                },
                {
                  "name": "Microsoft.Insights.VMDiagnosticsSettings_WebRole1",
                  "properties": {
                    "autoUpgradeMinorVersion": true,
                    "publisher": "Microsoft.Azure.Diagnostics",
                    "type": "PaaSDiagnostics",
                    "typeHandlerVersion": "1.5",
                    "settings": "[parameters('wadPublicConfig_WebRole1')]",
                    "protectedSettings": "[parameters('wadPrivateConfig_WebRole1')]",
                    "rolesAppliedTo": [
                      "WebRole1"
                  ]
                }
              }
            ]
          }
        }
      }
    }
    
  8. テンプレートをデプロイし、クラウド サービス (延長サポート) のデプロイを作成します。Deploy the template and create the Cloud Service (extended support) deployment.

    New-AzResourceGroupDeployment -ResourceGroupName “ContosOrg -TemplateFile "file path to your template file”  
    

次のステップNext steps