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

このトピックでは、Azure Resource Manager テンプレートを初めて作成する際の手順を説明します。 Resource Manager テンプレートとは、ソリューションに対してデプロイが必要なリソースを定義した JSON ファイルのことをいいます。 Azure ソリューションのデプロイと管理に関する概念について理解を深めるには、「Azure Resource Manager の概要」を参照してください。 既にリソースがあり、そのリソースのテンプレートを取得するには、「既存のリソースから Azure Resource Manager テンプレートをエクスポートする」を参照してください。

テンプレートの作成と編集には、JSON エディターが必要です。 軽量なオープンソースのクロスプラットフォーム コード エディターとしては、Visual Studio Code があります。 Resource Manager テンプレートの作成には Visual Studio Code を使用することを強くお勧めします。 このトピックは、VS Code を使用することを前提として書かれています。もっとも、別の JSON エディター (Visual Studio など) があれば、そちらを使っても問題ありません。

前提条件

  • Visual Studio Code。 必要に応じて、https://code.visualstudio.com/ からインストールします。
  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

テンプレートの作成

ストレージ アカウントをサブスクリプションにデプロイする単純なテンプレートから始めましょう。

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

    [新しいファイル]

  2. 以下の JSON 構文をコピーして、ファイルに貼り付けます。

    {
      "$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": {  }
    }
    

    ストレージ アカウント名には制約がいくつもあるため、設定の難易度が高くなっています。 名前の長さは 3 ~ 24 文字で、使用できるのは数字と小文字のみです。また、一意になっている必要があります。 上記のテンプレートでは、uniqueString 関数を使用してハッシュ値を生成しています。 このハッシュ値に他の意味も加えるために、プレフィックス storage を追加します。

  3. このファイルを azuredeploy.json という名前でローカル フォルダーに保存します。

    テンプレートを保存する

テンプレートのデプロイ

これでこのテンプレートをデプロイする準備が整いました。 PowerShell または Azure CLI を使用して、リソース グループを作成します。 次に、そのリソース グループにストレージ アカウントをデプロイします。

  • PowerShell の場合、テンプレートを含むフォルダーから次のコマンドを使用します。

    Login-AzureRmAccount
    
    New-AzureRmResourceGroup -Name examplegroup -Location "South Central US"
    New-AzureRmResourceGroupDeployment -ResourceGroupName examplegroup -TemplateFile azuredeploy.json
    
  • Azure CLI のローカル インストールの場合は、テンプレートを含むフォルダーから次のコマンドを使用します。

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

デプロイが完了すると、リソース グループにストレージ アカウントが含まれた状態になります。

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

Cloud Shell を使用して、テンプレートをデプロイするための Azure CLI コマンドを実行できます。 ただし、最初に Cloud Shell のファイル共有にテンプレートを読み込む必要があります。 Cloud Shell の使用経験がない場合は、その設定について Azure Cloud Shell の概要に関するページを参照してください。

  1. Azure Portal にログインします。

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

    リソース グループの選択

  3. Cloud Shell のストレージ アカウントを選択します。

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

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

    Select files

  5. Cloud Shell のファイル共有を選択します。 名前のパターンは cs-<user>-<domain>-com-<uniqueGuid> です。

    ファイル共有を選択する

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

    [ディレクトリの追加]

  7. templates という名前を付け、[OK] を選択します。

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

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

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

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

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

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

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

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

    Cloud Shell を開く

  12. Cloud Shell で次のコマンドを入力します。

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

デプロイが完了すると、リソース グループにストレージ アカウントが含まれた状態になります。

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

テンプレートは正常に機能しますが、柔軟ではありません。 このテンプレートでは、ローカル冗長ストレージは常に米国中南部にデプロイされます。 名前は、常に storage の後にハッシュ値が続く形式になります。 さまざまなシナリオでテンプレートを使用できるようにするには、テンプレートにパラメーターを追加します。

次の例は、2 つのパラメーターが含まれた parameters セクションを示しています。 最初のパラメーター storageSKU では、冗長性の種類を指定できます。 これで、渡すことができる値を、ストレージ アカウントで有効な値に制限しています。 また、既定値も指定しています。 2 番目のパラメーター storageNamePrefix は、最大 11 文字を許可するように設定されています。 ここでは、既定値を指定しています。

"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 という名前の変数を追加します。 ここでは、parameters からのプレフィックス値と uniqueString 関数からのハッシュ値を組み合わせています。 ここでは、toLower 関数を使用してすべての文字を小文字に変換しています。

"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": {}
  }
],

ストレージ アカウントの名前が追加した変数に設定されている点に注意してください。 SKU 名はパラメーターの値に設定されています。 場所は、リソース グループと同じ場所に設定されています。

ファイルを保存します。

この記事の手順を完了すると、テンプレートは次のようになります。

{
  "$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": {  }
}

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

異なる値が使用されたテンプレートを再デプロイします。

PowerShell では、次を使用します。

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

Azure CLI では、次を使用します。

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

Cloud Shell では、変更したテンプレートをファイル共有にアップロードします。 既存のファイルを上書きします。 次に、次のコマンドを使用します。

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

リソースのクリーンアップ

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

PowerShell では、次を使用します。

Remove-AzureRmResourceGroup -Name examplegroup

Azure CLI では、次を使用します。

az group delete --name examplegroup

次のステップ