演習 - Azure Resource Manager テンプレートにパラメーターと出力を追加する

完了

この演習では、デプロイ時に Azure ストレージ アカウント名を定義するパラメーターを追加します。 次に、許可されるストレージ アカウント SKU を定義するパラメータを追加し、このデプロイにどれを使用するかを定義します。 また、デプロイ プロセスの後半で使用できる出力を追加して、Azure Resource Manager テンプレート (ARM テンプレート) の有用性を高めます。

ARM テンプレートのパラメーターを作成する

ここでは、実行時に設定できるパラメーターを追加することで、ARM テンプレートの柔軟性を高めます。 storageName 値のパラメーターを作成します。

  1. Visual Studio Code の azuredeploy.json ファイルで、parameters 属性の中かっこ内にカーソルを置きます。 これは "parameters":{}, のようになります。

  2. Enter を選択してから、「par」と入力します。 関連するスニペットの一覧が表示されます。 new-parameter を選択します。これは、テンプレートに汎用パラメータを追加します。 次の例のようになります。

     "parameters": {
        "parameter1": {
        "type": "string",
        "metadata": {
            "description": "description"
        }
      }
    },
    
  3. パラメータを parameter1 から storageName に変更し、型は文字列のままにします。 minLength3maxLength24 を追加します。 description 値 The name of the Azure storage resource を追加します。

  4. これで、パラメーター ブロックは次の例のようになります。

    "parameters": {
      "storageName": {
        "type": "string",
        "minLength": 3,
        "maxLength": 24,
        "metadata": {
          "description": "The name of the Azure storage resource"
        }
      }
    },
    
  5. namedisplayName の両方の値の resources ブロックで新しいパラメーターを使用します。 ファイル全体は、次のコード例のようになります。

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 24,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2023-05-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Standard_LRS"
          }
        }
      ],
      "outputs": {}
    }
    
  6. ファイルを保存します。

パラメーター化された ARM テンプレートをデプロイする

ここでは、このデプロイの実行内容を適切に反映するようにデプロイの名前を変更して、新しいパラメーターの値を入力します。

ターミナルで、次の Azure CLI コマンドを入力します。 このスニペットは以前に使用したコードと同じですが、デプロイの名前が変更されています。 storageName パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のユニットで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today

az deployment group create \
  --name $DeploymentName \
  --template-file $templateFile \
  --parameters storageName={your-unique-name}

ターミナルで、次の Azure PowerShell コマンドを実行します。 このスニペットは以前に使用したコードと同じですが、デプロイの名前が変更されています。 storageName パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のユニットで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
  -Name $deploymentName `
  -TemplateFile $templateFile `
  -storageName {your-unique-name}

デプロイをチェックする

  1. デプロイが完了したら、ブラウザーの Azure portal に戻ります。 リソース グループに移動して、3 件成功デプロイがあることを確認します。 このリンクを選択します。

    3 つすべてのデプロイが一覧に表示されていることに注意してください。

  2. 前に行ったように、addnameparameter デプロイを探索します。

許可される値を制限する別のパラメーターを追加する

ここでは、パラメーターを使用して、1 つのパラメーターに使用できる値を制限します。

  1. storageName パラメーターの右中かっこの後にカーソルを置きます。 コンマを追加し、Enter を選択します。

  2. 再び、「par」と入力し、新しいパラメーターを選択します。

  3. 新しいジェネリック パラメーターを次のコードのように変更します。

    "storageSKU": {
       "type": "string",
       "defaultValue": "Standard_LRS",
       "allowedValues": [
         "Standard_LRS",
         "Standard_GRS",
         "Standard_RAGRS",
         "Standard_ZRS",
         "Premium_LRS",
         "Premium_ZRS",
         "Standard_GZRS",
         "Standard_RAGZRS"
       ]
     }
    

    ここには、このパラメーターで許可されている値が一覧表示されます。 許可されていない値でテンプレートが実行された場合、デプロイは失敗します。

  4. このパラメーターにコメントを追加します。

    コメントを示している azuredeploy.json ファイルのスクリーンショット。これは storageSKU パラメータの上の行の Azure ストレージ アカウントに許可されている値です。

    ARM テンプレートでは、///* */ のコメントがサポートされています。

  5. storageSKU パラメーターを使用するようにリソースを更新します。 Visual Studio Code で IntelliSense を利用すると、この手順が簡単になります。

    "sku": {
         "name": "[parameters('storageSKU')]"
       }
    

    ファイル全体は、次のコード例のようになります。

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 24,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        },
        "storageSKU": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "allowedValues": [
            "Standard_LRS",
            "Standard_GRS",
            "Standard_RAGRS",
            "Standard_ZRS",
            "Premium_LRS",
            "Premium_ZRS",
            "Standard_GZRS",
            "Standard_RAGZRS"
          ]
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2023-05-01",
          "name": "[parameters('storageName')]",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "[parameters('storageSKU')]"
          }
        }
      ],
      "outputs": {}
    }
    
  6. ファイルを保存します。

ARM テンプレートをデプロイする

ここでは、許可リストに含まれる storageSKU パラメーターを使用して、正常にデプロイします。 次に、許可リストに含まれていない storageSKU パラメーターを使用して、テンプレートのデプロイを試みます。 2 番目のデプロイは、想定したとおりに失敗します。

  1. 次のコマンドを実行して、テンプレートをデプロイします。 storageName パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_GRS storageName={your-unique-name}
    

    このデプロイの完了を許可します。 このデプロイは、想定どおりに成功します。 許可される値のリストにより、テンプレートのユーザーは、リソースに対して機能しないパラメータ値を渡すことができなくなります。 無効な SKU を指定するとどうなるかを見てみましょう。

  2. 許可されていないパラメーターでテンプレートをデプロイするには、次のコマンドを実行します。 ここでは、storageSKU パラメーターを Basic に変更しました。 storageName パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Basic storageName={your-unique-name}
    

    このデプロイは失敗します。 エラーに注意してください。

    デプロイの検証エラーを表示しているターミナル ウィンドウのスクリーンショット。

  1. 次のコマンドを実行して、テンプレートをデプロイします。 storageName パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_GRS
    

    このデプロイの完了を許可します。 このデプロイは、想定どおりに成功します。 許可される値のリストにより、テンプレートのユーザーは、リソースに対して機能しないパラメータ値を渡すことができなくなります。 無効な SKU を指定するとどうなるかを見てみましょう。

  2. 許可されていないパラメーターでテンプレートをデプロイするには、次のコマンドを実行します。 ここでは、storageSKU パラメーターを Basic に変更しました。 storageName パラメーターの一意の名前を入力します。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Basic
    

    このデプロイは失敗します。 エラーに注意してください。

    デプロイの検証エラーを表示しているターミナル ウィンドウのスクリーンショット。

ARM テンプレートに出力を追加する

ここでは、ARM テンプレートの outputs セクションにストレージ アカウント リソースのエンドポイントの出力を追加します。

  1. Visual Studio Code の azuredeploy.json ファイルで、出力属性 "outputs":{}, の中かっこ内にカーソルを置きます。

  2. Enter キーを押し、「out」と入力します。関連するスニペットの一覧が表示されます。 [新しい出力] を選択します。 次の例のような一般的な出力がテンプレートに追加されます。

    "outputs": {
      "output1": {
        "type": "string",
        "value": "value"
      }
    
  3. "output1""storageEndpoint" に変更し、type の値を "object" に変更します。 value の値を "[reference(parameters('storageName')).primaryEndpoints]" に変更します。 この式は、前のユニットでエンドポイント データを取得する際に説明したものです。 型として "object" を指定したので、オブジェクトが JSON 形式で返されます。

    "outputs": {
      "storageEndpoint": {
        "type": "object",
        "value": "[reference(parameters('storageName')).primaryEndpoints]"
      }
    
  4. ファイルを保存します。

出力を含む ARM テンプレートをデプロイする

ここでは、テンプレートをデプロイし、JSON として出力されたエンドポイントを確認します。 storageName パラメーターの一意の名前を入力する必要があります。 この名前は Azure 全体で一意である必要があることにご注意ください。 直前のセクションで作成した一意の名前を使用できます。 その場合、Azure によって、新しいリソースが作成されるのではなく、リソースが更新されます。

  1. 次のコマンドを実行して、テンプレートをデプロイします。 {your-unique-name} を必ずご自分にとって一意の文字列に置き換えてください。

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addoutputs-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_LRS storageName={your-unique-name}
    

    出力に注意してください。

    JSON として出力されたプライマリ エンドポイントを表示しているターミナル ウィンドウのスクリーンショット。

  1. 次のコマンドを実行して、テンプレートをデプロイします。 {your-unique-name} を必ずご自分にとって一意の文字列に置き換えてください。

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addOutputs-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_LRS
    

    出力に注意してください。

    JSON として出力されたプライマリ エンドポイントを表示しているターミナル ウィンドウのスクリーンショット。

出力のデプロイを確認する

Azure portal で、ご自分の addOutputs デプロイにアクセスします。 ここには出力もあります。

左側のメニューの出力の選択項目を示している Azure portal のスクリーンショット。