チュートリアル:ARM テンプレートを使用した複数のリソース インスタンスの作成

Azure Resource Manager テンプレート (ARM テンプレート) で反復処理して、Azure リソースの複数のインスタンスを作成する方法について説明します。 このチュートリアルでは、3 つのストレージ アカウント インスタンスが作成されるようテンプレートを変更します。

Azure Resource Manager による複数のインスタンスの作成を示す図。

このチュートリアルに含まれるタスクは次のとおりです。

  • クイック スタート テンプレートを開く
  • テンプレートの編集
  • テンプレートのデプロイ

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

リソースのコピーについて取り上げた Learn モジュールについては、「高度な ARM テンプレート機能を使用して複雑なクラウド デプロイを管理する」を参照してください。

前提条件

この記事を完了するには、以下が必要です。

クイック スタート テンプレートを開く

Azure クイックスタート テンプレートは、ARM テンプレートのリポジトリです。 テンプレートを最初から作成しなくても、サンプル テンプレートを探してカスタマイズすることができます。 このクイック スタートで使用されるテンプレートは、Create a standard storage account と呼ばれます。 テンプレートにより、Azure ストレージ アカウント リソースが定義されます。

  1. Visual Studio Code から、 [ファイル]>[ファイルを開く] を選択します。

  2. [ファイル名] に以下の URL を貼り付けます。

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
    
  3. [開く] を選択して、ファイルを開きます。

  4. テンプレートに、Microsoft.Storage/storageAccounts リソースが定義されています。 テンプレートをテンプレート リファレンスと比較します。 カスタマイズする前にテンプレートの基本をある程度理解することは役に立ちます。

  5. [ファイル]>[名前を付けて保存] を選択し、ファイルを azuredeploy.json としてご自身のローカル コンピューターに保存します。

テンプレートの編集

既存のテンプレートでは、1 つのストレージ アカウントが作成されます。 3 つのストレージ アカウントが作成されるよう、テンプレートをカスタマイズします。

Visual Studio Code で、次の 4 つの変更を行います。

複数のインスタンスを作成する Azure Resource Manager を使用した Visual Studio Code のスクリーンショット。

  1. ストレージ アカウントのリソース定義に copy 要素を追加します。 copy 要素には、このループの反復回数と変数を指定します。 数値は正の整数で、800 を超えることはできません。

    "copy": {
      "name": "storageCopy",
      "count": 3
    },
    
  2. copyIndex() 関数は、ループ内の現在の繰り返しを返します。 インデックスを名前のプレフィックスとして使用します。 copyIndex() は 0 から始まります。 インデックス値をオフセットするには、copyIndex() 関数に値を渡します。 たとえば、「 copyIndex(1) 」のように入力します。

    "name": "[format('{0}storage{1}', copyIndex(), uniqueString(resourceGroup().id))]",
    
    
    
  3. storageAccountName パラメーター定義はもう使用しないため、削除します。

  4. outputs 要素を削除します。 これは不要になりました。

  5. metadata 要素を削除します。

完成したテンプレートは、次のようになります。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GRS",
        "Standard_GZRS",
        "Standard_LRS",
        "Standard_RAGRS",
        "Standard_RAGZRS",
        "Standard_ZRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for the storage account."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-06-01",
      "name": "[format('{0}storage{1}', copyIndex(), uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "copy": {
        "name": "storageCopy",
        "count": 3
      },
      "properties": {}
    }
  ]
}

変更を保存します。

複数のインスタンスの作成の詳細については、「ARM テンプレートでのリソースの反復処理」を参照してください

テンプレートのデプロイ

  1. Azure Cloud Shell にサインインします。

  2. 左上の [PowerShell] または [Bash] (CLI の場合) を選択して、希望の環境を選択します。 切り替えた場合は、シェルを再起動する必要があります。

    Azure portal の Cloud Shell のファイルのアップロード

  3. [ファイルのアップロード/ダウンロード] を選択し、 [アップロード] を選択します。 先のスクリーンショットをご覧ください。 前のセクションで保存したファイルを選択します。 ファイルをアップロードした後、ls コマンドと cat コマンドを使用して、ファイルが正常にアップロードされたことを確認できます。

  4. Cloud Shell で次のコマンドを実行します。 PowerShell コードまたは CLI コードを表示するタブを選択します。

    echo "Enter a project name that is used to generate resource group name:" &&
    read projectName &&
    echo "Enter the location (i.e. centralus):" &&
    read location &&
    resourceGroupName="${projectName}rg" &&
    az group create --name $resourceGroupName --location "$location" &&
    az deployment group create --resource-group $resourceGroupName --template-file "$HOME/azuredeploy.json"
    

テンプレートのデプロイが正常に完了したら、指定したリソース グループに作成された 3 つのストレージ アカウントを表示できます。 テンプレートの名前定義とストレージ アカウント名を比較します。

echo "Enter a project name that is used to generate resource group name:" &&
read projectName &&
resourceGroupName="${projectName}rg" &&
az storage account list --resource-group $resourceGroupName &&
echo "Press [ENTER] to continue ..."

リソースをクリーンアップする

Azure リソースが不要になったら、リソース グループを削除して、デプロイしたリソースをクリーンアップします。

  1. Azure portal で、左側のメニューから [リソース グループ] を選択します。
  2. [名前でフィルター] フィールドに、リソース グループ名を入力します。
  3. リソース グループ名を選択します。 リソース グループ内の合計 3 つのリソースが表示されます。
  4. トップ メニューから [リソース グループの削除] を選択します。

次のステップ

このチュートリアルでは、複数のストレージ アカウント インスタンスを作成する方法について説明しました。 次のチュートリアルでは、複数のリソースと複数のリソース タイプを含むテンプレートを作成します。 一部のリソースには依存リソースがあります。