演習 - copy を使用して繰り返しを減らす

完了

この最後の演習では、引き続きストレージ アカウントを使用します。 ここでは、copy コンストラクトを使用して、1 つの定義から複数のストレージ アカウントをプロビジョニングします。

Copy を使用すると、要件が変更されたときに、中央の 1 か所を更新するだけで済みます。

ARM テンプレートを作成する

ここでは、ストレージ アカウント リソースを定義する Azure Resource Manager (ARM) テンプレートを作成します。 テンプレートで copy を使用して、同じリソースの類似バージョンを指定された回数だけ作成します。

  1. Visual Studio Code で、azuredeploy.json が格納されているディレクトリに、copy.json という名前のファイルを作成します。

  2. 次の内容を copy.json に追加します。

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageCount": {
          "type": "int",
          "defaultValue": 1,
          "metadata": {
            "description": "the number of storage accounts copies being deployed"
          }
        },
        "storageAccountName": {
          "type": "string",
          "defaultValue": "storage",
          "metadata": {
            "description": "the name of the storage account"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[concat(parameters('storageAccountName'), copyIndex())]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "storageaccount1"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Premium_LRS",
            "tier": "Premium"
          },
          "copy": {
            "name": "storagecopy",
            "count": "[parameters('storageCount')]"
          }
        }
      ],
      "outputs": {}
    }
    

storageCount パラメーターを使用して、作成するコピーの数を定義します。

resources で、ストレージ アカウント リソースを指定します。 ストレージ アカウント名を一意にするには、テンプレートで copyIndex() を使用して、現在のインデックスをストレージ アカウント名に追加します。

copy セクションにより、storageCount パラメーターから作成するコピーの数が読み取られます。

テンプレートのデプロイ

ここでは、前と同じようにテンプレートをデプロイします。 デプロイ ステップにより、2 つの似たストレージ アカウントがプロビジョニングされます。

  1. ストレージ アカウントの名前を保持する PowerShell 変数を作成します。

    $STORAGE_ACCT_NAME="tailwindsa" + (Get-Random -Count 1)
    
  2. 次の New-AzResourceGroupDeployment コマンドを実行して、テンプレートをデプロイします。

    New-AzResourceGroupDeployment `
    -TemplateFile "./copy.json" `
    -storageAccountName $STORAGE_ACCT_NAME `
    -storageCount 2
    

    ここでは、2 つのストレージ アカウントをプロビジョニングするため、storageCount2 に設定します。

デプロイを検証する

出力には 2 つのストレージ アカウントが作成されたことが示されますが、ここでは、Get-AzResource コマンドを実行して出力リソースに注目します。

次の Get-AzResource コマンドを実行して、リソースがデプロイされたことを確認します。

Get-AzResource -Name tailwindsa* -ResourceGroupName <rgn>resource group name</rgn> | Select-Object -Property Name,ResourceId

tailwindsa* 引数を使用して、リソースに指定した名前のプレフィックスと一致する識別子だけを表示するように指定します。

次のような内容が出力されます。

Name                 ResourceId
----                 ----------
tailwindsa1852777810 /subscriptions/11112222-3333-4444-5555-1111222233334444/resourceGroups/<rgn>resoure group</rgn>/providers/Microsoft.Storage/storageAccount…
tailwindsa1852777811 /subscriptions/11112222-3333-4444-5555-1111222233334444/resourceGroups/<rgn>resoure group</rgn>/providers/Microsoft.Storage/storageAccount…

この例では、次のように記述されています。

  • tailwindsa185277781 は、ストレージ アカウントに対して生成されたベース名です ("tailwindsa" + Get-Random -Count 1)。
  • tailwindsa1852777810 (ベース名と "0") は、1 番目のストレージ アカウントです。
  • tailwindsa1852777811 (ベース名と "1") は、2 番目のストレージ アカウントです。

上出来 必要なパフォーマンス レベルなど、ニーズが変化したら、リソース定義を 1 つの場所から変更できます。

クリーンアップ

このモジュールを完了したら、サンド ボックスは、リソースを自動的にクリーンアップします。

独自のサブスクリプションを使用している場合は、プロジェクトの最後に、作成したリソースがまだ必要かどうかを確認してください。 リソースを実行したままにすると、コストが発生する可能性があります。 リソースは個別に削除することも、リソース グループを削除してリソースのセット全体を削除することもできます。

ARM テンプレートを作成する

ここでは、ストレージ アカウント リソースを定義する Azure Resource Manager (ARM) テンプレートを作成します。 テンプレートで copy を使用して、同じリソースの類似バージョンを指定された回数だけ作成します。

  1. Visual Studio Code で、azuredeploy.json が格納されているディレクトリに、copy.json という名前のファイルを作成します。

  2. 次の内容を copy.json に追加します。

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageCount": {
          "type": "int",
          "defaultValue": 1,
          "metadata": {
            "description": "the number of storage accounts being deployed"
          }
        },
        "storageAccountName": {
          "type": "string",
          "defaultValue": "storage",
          "metadata": {
            "description": "the name of the storage account"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[concat(parameters('storageAccountName'), copyIndex())]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "storageaccount1"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Premium_LRS",
            "tier": "Premium"
          },
          "copy": {
            "name": "storagecopy",
            "count": "[parameters('storageCount')]"
          }
        }
      ],
      "outputs": {}
    }
    

storageCount パラメーターを使用して、作成するコピーの数を定義します。

resources で、ストレージ アカウント リソースを指定します。 ストレージ アカウント名を一意にするには、テンプレートで copyIndex() を使用して、現在のインデックスをストレージ アカウント名に追加します。

copy セクションにより、storageCount パラメーターから作成するコピーの数が読み取られます。

テンプレートのデプロイ

ここでは、前と同じようにテンプレートをデプロイします。 デプロイ ステップにより、2 つの似たストレージ アカウントがプロビジョニングされます。

  1. ストレージ アカウントの名前を保持する Bash 変数を作成します。

    STORAGE_ACCT_NAME=tailwindsa$RANDOM
    
  2. 次の az deployment group create コマンドを実行して、テンプレートをデプロイします。

    az deployment group create \
      --template-file copy.json \
      --parameters storageAccountName=$STORAGE_ACCT_NAME storageCount=2
    

    ここでは、2 つのストレージ アカウントをプロビジョニングするため、storageCount2 に設定します。

デプロイを検証する

出力には 2 つのストレージ アカウントが作成されたことが示されますが、ここでは、az deployment group show コマンドを実行して出力リソースに注目します。

次の az deployment group show コマンドを実行して、デプロイについての詳細を表示します。

az deployment group show \
  --name copy \
  --query "properties.outputResources[].id" \
  --output tsv

--query 引数で、出力リソースから識別子だけを表示するように指定します。

次のような内容が出力されます。

/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>resource group name</rgn>/providers/Microsoft.Storage/storageAccounts/tailwindsa9820
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>resource group name</rgn>/providers/Microsoft.Storage/storageAccounts/tailwindsa9821

この例では、次のように記述されています。

  • tailwindsa982 は、ストレージ アカウントに対して生成されたベース名です (tailwindsa$RANDOM)。
  • tailwindsa9820 (ベース名と "0") は、1 番目のストレージ アカウントです。
  • tailwindsa9821 (ベース名と "1") は、2 番目のストレージ アカウントです。

上出来 必要なパフォーマンス レベルなど、ニーズが変化したら、リソース定義を 1 つの場所から変更できます。

クリーンアップ

このモジュールを完了したら、サンド ボックスは、リソースを自動的にクリーンアップします。

独自のサブスクリプションを使用している場合は、プロジェクトの最後に、作成したリソースがまだ必要かどうかを確認してください。 リソースを実行したままにすると、コストが発生する可能性があります。 リソースは個別に削除することも、リソース グループを削除してリソースのセット全体を削除することもできます。