初めての Azure Resource Manager テンプレートを作成およびデプロイするCreate and deploy your first Azure Resource Manager template

このトピックでは、Azure Resource Manager テンプレートを初めて作成する際の手順を説明します。This topic walks you through the steps of creating your first Azure Resource Manager template. Resource Manager テンプレートとは、ソリューションに対してデプロイが必要なリソースを定義した JSON ファイルのことをいいます。Resource Manager templates are JSON files that define the resources you need to deploy for your solution. Azure ソリューションのデプロイと管理に関する概念について理解を深めるには、「Azure Resource Manager の概要」を参照してください。To understand the concepts associated with deploying and managing your Azure solutions, see Azure Resource Manager overview. 既にリソースがあり、そのリソースのテンプレートを取得するには、「既存のリソースから Azure Resource Manager テンプレートをエクスポートする」を参照してください。If you have existing resources and want to get a template for those resources, see Export an Azure Resource Manager template from existing resources.

テンプレートの作成と編集には、JSON エディターが必要です。To create and revise templates, you need a JSON editor. 軽量なオープンソースのクロスプラットフォーム コード エディターとしては、Visual Studio Code があります。Visual Studio Code is a lightweight, open-source, cross-platform code editor. Resource Manager テンプレートの作成には Visual Studio Code を使用することを強くお勧めします。We strongly recommend using Visual Studio Code for creating Resource Manager templates. この記事は、VS Code の使用を前提として書かれています。This article assumes you are using VS Code. 別の JSON エディター (Visual Studio など) があれば、そちらを使っても問題ありません。If you have another JSON editor (like Visual Studio), you can use that editor.

前提条件Prerequisites

  • Visual Studio Code。Visual Studio Code. 必要に応じて、https://code.visualstudio.com/ からインストールします。If needed, install it from https://code.visualstudio.com/.
  • Azure サブスクリプション。An Azure subscription. Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。If you don't have an Azure subscription, create a free account before you begin.

テンプレートの作成Create template

ストレージ アカウントをサブスクリプションにデプロイする単純なテンプレートから始めましょう。Let's start with a simple template that deploys a storage account to your subscription.

  1. [ファイル] > [新しいファイル] を選択します。Select File > New File.

    [新しいファイル]

  2. 以下の JSON 構文をコピーして、ファイルに貼り付けます。Copy and paste the following JSON syntax into your file:

    {
      "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
      },
      "variables": {
      },
      "resources": [
        {
          "name": "[concat('storage', uniqueString(resourceGroup().id))]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2016-01-01",
          "sku": {
            "name": "Standard_LRS"
          },
          "kind": "Storage",
          "location": "South Central US",
          "tags": {},
          "properties": {}
        }
      ],
      "outputs": {  }
    }
    

    ストレージ アカウント名には制約がいくつもあるため、設定の難易度が高くなっています。Storage account names have several restrictions that make them difficult to set. 名前の長さは 3 ~ 24 文字で、使用できるのは数字と小文字のみです。また、一意になっている必要があります。The name must be between 3 and 24 characters in length, use only numbers and lower-case letters, and be unique. 上記のテンプレートでは、uniqueString 関数を使用してハッシュ値を生成しています。The preceding template uses the uniqueString function to generate a hash value. このハッシュ値に他の意味も加えるために、プレフィックス storage を追加します。To give this hash value more meaning, it adds the prefix storage.

  3. このファイルを azuredeploy.json という名前でローカル フォルダーに保存します。Save this file as azuredeploy.json to a local folder.

    テンプレートを保存する

テンプレートのデプロイDeploy template

これでこのテンプレートをデプロイする準備が整いました。You are ready to deploy this template. PowerShell または Azure CLI を使用して、リソース グループを作成します。You use either PowerShell or Azure CLI to create a resource group. 次に、そのリソース グループにストレージ アカウントをデプロイします。Then, you deploy a storage account to that resource group.

  • PowerShell の場合、テンプレートを含むフォルダーから次のコマンドを使用します。For PowerShell, use the following commands from the folder containing the template:

    Login-AzureRmAccount
    
    New-AzureRmResourceGroup -Name examplegroup -Location "South Central US"
    New-AzureRmResourceGroupDeployment -ResourceGroupName examplegroup -TemplateFile azuredeploy.json
    
  • Azure CLI のローカル インストールの場合は、テンプレートを含むフォルダーから次のコマンドを使用します。For a local installation of Azure CLI, use the following commands from the folder containing the template:

    az login
    
    az group create --name examplegroup --location "South Central US"
    az group deployment create --resource-group examplegroup --template-file azuredeploy.json
    

デプロイが完了すると、リソース グループにストレージ アカウントが含まれた状態になります。When deployment finishes, your storage account exists in the resource group.

Cloud Shell からのテンプレートのデプロイDeploy template from Cloud Shell

テンプレートは、Cloud Shell を使ってデプロイすることができます。You can use Cloud Shell to deploy your template. ただし、最初に Cloud Shell のファイル共有にテンプレートを読み込む必要があります。However, you must first load your template into the file share for your Cloud Shell. Cloud Shell の使用経験がない場合は、その設定について Azure Cloud Shell の概要に関するページを参照してください。If you have not used Cloud Shell, see Overview of Azure Cloud Shell for information about setting it up.

  1. Azure Portal にログインします。Log in to the Azure portal.

  2. Cloud Shell リソース グループを選択します。Select your Cloud Shell resource group. 名前のパターンは cloud-shell-storage-<region> です。The name pattern is cloud-shell-storage-<region>.

    リソース グループの選択

  3. Cloud Shell のストレージ アカウントを選択します。Select the storage account for your Cloud Shell.

    ストレージ アカウントを選択する

  4. [ファイル] を選択します。Select Files.

    Select files

  5. Cloud Shell のファイル共有を選択します。Select the file share for Cloud Shell. 名前のパターンは cs-<user>-<domain>-com-<uniqueGuid> です。The name pattern is cs-<user>-<domain>-com-<uniqueGuid>.

    ファイル共有を選択する

  6. [ディレクトリの追加] を選択します。Select Add directory.

    [ディレクトリの追加]

  7. templates という名前を付け、[OK] を選択します。Name it templates, and select Okay.

    ディレクトリに名前を付ける

  8. 新しいディレクトリを選択します。Select your new directory.

    新しいディレクトリを選択する

  9. [アップロード]を選択します。Select Upload.

    [アップロード] を選択する

  10. テンプレートを見つけてアップロードします。Find and upload your template.

    ファイルをアップロードする

  11. プロンプトを開きます。Open the prompt.

    Cloud Shell を開く

Azure CLI の場合は、次のコマンドを使用します。For Azure CLI, use the following commands:

az group create --name examplegroup --location "South Central US"
az group deployment create --resource-group examplegroup --template-file clouddrive/templates/azuredeploy.json

現在、PowerShell は Cloud Shell でプレビューとして提供されています。Currently, PowerShell is available in the Cloud Shell as a preview. PowerShell の場合は、次のコマンドを使用します。For PowerShell, use the following commands:

New-AzureRmResourceGroup -Name examplegroup -Location "South Central US"
New-AzureRmResourceGroupDeployment -ResourceGroupName examplegroup -TemplateFile $home\CloudDrive\templates\azuredeploy.json

デプロイが完了すると、リソース グループにストレージ アカウントが含まれた状態になります。When deployment finishes, your storage account exists in the resource group.

テンプレートのカスタマイズCustomize the template

テンプレートは正常に機能しますが、柔軟ではありません。The template works fine, but it is not flexible. このテンプレートでは、ローカル冗長ストレージは常に米国中南部にデプロイされます。It always deploys a locally redundant storage to South Central US. 名前は、常に storage の後にハッシュ値が続く形式になります。The name is always storage followed by a hash value. さまざまなシナリオでテンプレートを使用できるようにするには、テンプレートにパラメーターを追加します。To enable using the template for different scenarios, add parameters to the template.

次の例は、2 つのパラメーターが含まれた parameters セクションを示しています。The following example shows the parameters section with two parameters. 最初のパラメーター storageSKU では、冗長性の種類を指定できます。The first parameter storageSKU enables you to specify the type of redundancy. これで、渡すことができる値を、ストレージ アカウントで有効な値に制限しています。It limits the values you can pass in to values that are valid for a storage account. また、既定値も指定しています。It also specifies a default value. 2 番目のパラメーター storageNamePrefix は、最大 11 文字を許可するように設定されています。The second parameter storageNamePrefix is set to allow a maximum of 11 characters. ここでは、既定値を指定しています。It specifies a default value.

"parameters": {
  "storageSKU": {
    "type": "string",
    "allowedValues": [
      "Standard_LRS",
      "Standard_ZRS",
      "Standard_GRS",
      "Standard_RAGRS",
      "Premium_LRS"
    ],
    "defaultValue": "Standard_LRS",
    "metadata": {
      "description": "The type of replication to use for the storage account."
    }
  },
  "storageNamePrefix": {
    "type": "string",
    "maxLength": 11,
    "defaultValue": "storage",
    "metadata": {
      "description": "The value to use for starting the storage account name. Use only lowercase letters and numbers."
    }
  }
},

variables セクションに storageName という名前の変数を追加します。In the variables section, add a variable named storageName. ここでは、parameters からのプレフィックス値と uniqueString 関数からのハッシュ値を組み合わせています。It combines the prefix value from the parameters and a hash value from the uniqueString function. ここでは、toLower 関数を使用してすべての文字を小文字に変換しています。It uses the toLower function to convert all characters to lowercase.

"variables": {
  "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
},

これらの新しい値をストレージ アカウントに使用するために、リソース定義を変更します。To use these new values for your storage account, change the resource definition:

"resources": [
  {
    "name": "[variables('storageName')]",
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2016-01-01",
    "sku": {
      "name": "[parameters('storageSKU')]"
    },
    "kind": "Storage",
    "location": "[resourceGroup().location]",
    "tags": {},
    "properties": {}
  }
],

ストレージ アカウントの名前が追加した変数に設定されている点に注意してください。Notice that the name of the storage account is now set to the variable that you added. SKU 名はパラメーターの値に設定されています。The SKU name is set to the value of the parameter. 場所は、リソース グループと同じ場所に設定されています。The location is set the same location as the resource group.

ファイルを保存します。Save your file.

ここまでの作業が終わった時点で、テンプレートは以下のようになります。Your template now looks like:

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageSKU": {
      "type": "string",
      "allowedValues": [
        "Standard_LRS",
        "Standard_ZRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Premium_LRS"
      ],
      "defaultValue": "Standard_LRS",
      "metadata": {
        "description": "The type of replication to use for the storage account."
      }
    },   
    "storageNamePrefix": {
      "type": "string",
      "maxLength": 11,
      "defaultValue": "storage",
      "metadata": {
        "description": "The value to use for starting the storage account name. Use only lowercase letters and numbers."
      }
    }
  },
  "variables": {
    "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "name": "[variables('storageName')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2016-01-01",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "Storage",
      "location": "[resourceGroup().location]",
      "tags": {},
      "properties": {}
    }
  ],
  "outputs": {  }
}

テンプレートの再デプロイRedeploy template

異なる値が使用されたテンプレートを再デプロイします。Redeploy the template with different values.

PowerShell では、次を使用します。For PowerShell, use:

New-AzureRmResourceGroupDeployment -ResourceGroupName examplegroup -TemplateFile azuredeploy.json -storageNamePrefix newstore -storageSKU Standard_RAGRS

Azure CLI では、次を使用します。For Azure CLI, use:

az group deployment create --resource-group examplegroup --template-file azuredeploy.json --parameters storageSKU=Standard_RAGRS storageNamePrefix=newstore

Cloud Shell では、変更したテンプレートをファイル共有にアップロードします。For the Cloud Shell, upload your changed template to the file share. 既存のファイルを上書きします。Overwrite the existing file. 次に、次のコマンドを使用します。Then, use the following command:

az group deployment create --resource-group examplegroup --template-file clouddrive/templates/azuredeploy.json --parameters storageSKU=Standard_RAGRS storageNamePrefix=newstore

オートコンプリートの使用Use autocomplete

ここまでは、単にこの記事から JSON をコピーして貼り付けることによってのみテンプレートの作業を行ってきましたが、So far, your work on the template has consisted of only copying and pasting JSON from this article. 独自のテンプレートを作成するときは、リソースの種類に応じて利用可能なプロパティと値を探して指定することができます。However, when developing your own templates, you want to find and specify properties and values that are available for the resource type. VS Code は、リソースの種類に対応したスキーマを読み取り、プロパティと値の候補を表示します。VS Code reads the schema for the resource type, and suggests properties and values. オートコンプリート機能を見るために、テンプレートの properties 要素に移動し、新しい行を追加してみましょう。To see the autocomplete feature, go the properties element of your template and add a new line. 引用符を入力するとすぐに、その properties 要素内で利用できる名前の候補が VS Code によって表示されることがわかります。Type a quotation mark, and notice that VS Code immediately suggests names that available within the properties element.

使用できるプロパティの表示

encryption を選択します。Select encryption. コロン (:) を入力すると、新しいオブジェクトを追加するように促されます。Type a colon (:), and VS Code suggests adding a new object.

オブジェクトの追加

オブジェクトを追加するには、Tab キーまたは Enter キーを押します。Press tab or enter to add the object.

もう一度引用符を入力すると、今度は、encryption で利用できるプロパティの候補が表示されます。Again, type a quotation mark, and see that VS Code now suggests properties that are available for encryption.

encryption のプロパティの表示

services を選択し、VS Code 拡張機能に基づく値を追加していき、次のコードを記述します。Select services and continue adding values based on VS Code extensions until you have:

"properties": {
    "encryption":{
        "services":{
            "blob":{
              "enabled":true
            }
        }
    }
}

ストレージ アカウントに関して BLOB の暗号化を有効にしました。You have enabled blob encryption for the storage account. ところが、VS Code によって問題が検出されています。However, VS Code has identified a problem. encryption に警告が表示されていることに注意してください。Notice that encryption has a warning.

暗号化の警告

警告を確認するには、緑色の線にマウス ポインターを合わせます。To see the warning, hover over the green line.

不足しているプロパティ

encryption 要素には keySource プロパティが必要であることがわかります。You see that the encryption element requires a keySource property. services オブジェクトの後にコンマを追加して keySource プロパティを追加します。Add a comma after the services object, and add the keySource property. 有効な値の候補として "Microsoft.Storage" が VS Code によって表示されます。VS Code suggests "Microsoft.Storage" as a valid value. 完成した properties 要素は次のようになります。When finished, the properties element is:

"properties": {
    "encryption":{
        "services":{
            "blob":{
              "enabled":true
            }
        },
        "keySource":"Microsoft.Storage"
    }
}

完成したテンプレートは次のとおりです。The final template is:

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageSKU": {
      "type": "string",
      "allowedValues": [
        "Standard_LRS",
        "Standard_ZRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Premium_LRS"
      ],
      "defaultValue": "Standard_LRS",
      "metadata": {
        "description": "The type of replication to use for the storage account."
      }
    },   
    "storageNamePrefix": {
      "type": "string",
      "maxLength": 11,
      "defaultValue": "storage",
      "metadata": {
        "description": "The value to use for starting the storage account name. Use only lowercase letters and numbers."
      }
    }
  },
  "variables": {
    "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "name": "[variables('storageName')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2016-01-01",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "Storage",
      "location": "[resourceGroup().location]",
      "tags": {},
      "properties": {
        "encryption":{
          "services":{
            "blob":{
              "enabled":true
            }
          },
          "keySource":"Microsoft.Storage"
        }
      }
    }
  ],
  "outputs": {}
}

暗号化されたストレージのデプロイDeploy encrypted storage

再度テンプレートをデプロイし、新しいストレージ アカウント名を入力します。Again, deploy the template and provide a new storage account name.

PowerShell では、次を使用します。For PowerShell, use:

New-AzureRmResourceGroupDeployment -ResourceGroupName examplegroup -TemplateFile azuredeploy.json -storageNamePrefix storesecure

Azure CLI では、次を使用します。For Azure CLI, use:

az group deployment create --resource-group examplegroup --template-file azuredeploy.json --parameters storageNamePrefix=storesecure

Cloud Shell では、変更したテンプレートをファイル共有にアップロードします。For the Cloud Shell, upload your changed template to the file share. 既存のファイルを上書きします。Overwrite the existing file. 次に、次のコマンドを使用します。Then, use the following command:

az group deployment create --resource-group examplegroup --template-file clouddrive/templates/azuredeploy.json --parameters storageNamePrefix=storesecure

リソースのクリーンアップClean up resources

デプロイしたリソースが不要になったら、リソース グループを削除して、そのリソースをクリーンアップします。When no longer needed, clean up the resources you deployed by deleting the resource group.

PowerShell では、次を使用します。For PowerShell, use:

Remove-AzureRmResourceGroup -Name examplegroup

Azure CLI では、次を使用します。For Azure CLI, use:

az group delete --name examplegroup

次のステップNext steps