チュートリアル:リンクされた Azure Resource Manager テンプレートの作成Tutorial: Create linked Azure Resource Manager templates

リンクされた Azure Resource Manager テンプレートを作成する方法について説明します。Learn how to create linked Azure Resource Manager templates. リンクされたテンプレートを使用すると、あるテンプレートから別のテンプレートを呼び出すことができます。Using linked templates, you can have one template call another template. これは、テンプレートをモジュール化する場合に役立ちます。It is great for modularizing templates. このチュートリアルでは、「チュートリアル: 依存リソースを含む Azure Resource Manager テンプレートを作成する」で使用したものと同じテンプレートを使用し、仮想マシン、仮想ネットワーク、その他の依存リソース (ストレージ アカウントを含む) を作成します。In this tutorial, you use the same template used in Tutorial: Create Azure Resource Manager templates with dependent resources, which creates a virtual machine, a virtual network, and other dependent resource including a storage account. リンクされたテンプレートにストレージ アカウントのリソース作成を分離します。You separate the storage account resource creation to a linked template.

リンクされたテンプレートの呼び出しは、関数の呼び出しと似ています。Calling a linked template is like making a function call. また、リンクされたテンプレートにパラメーター値を渡す方法と、リンクされたテンプレートから "戻り値" を取得する方法についても説明します。You also learn how to pass parameter values to the linked template, and how to get "return values" from the linked template.

このチュートリアルに含まれるタスクは次のとおりです。This tutorial covers the following tasks:

  • クイック スタート テンプレートを開くOpen a QuickStart template
  • リンクされたテンプレートを作成するCreate the linked template
  • リンクされたテンプレートをアップロードするUpload the linked template
  • リンクされたテンプレートにリンクするLink to the linked template
  • 依存関係を構成するConfigure dependency
  • テンプレートのデプロイDeploy the template
  • 追加のプラクティスAdditional practices

詳細については、「Azure リソース デプロイ時のリンクされたテンプレートおよび入れ子になったテンプレートの使用」を参照してください。For more information, see Use linked and nested templates when deploying Azure resources.

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. インストール手順については、Azure PowerShell のインストール を参照してください。For installation instructions, see Install Azure PowerShell.

前提条件Prerequisites

この記事を完了するには、以下が必要です。To complete this article, you need:

クイック スタート テンプレートを開くOpen a Quickstart template

Azure クイック スタート テンプレートは、Resource Manager テンプレートのリポジトリです。Azure QuickStart Templates is a repository for Resource Manager templates. テンプレートを最初から作成しなくても、サンプル テンプレートを探してカスタマイズすることができます。Instead of creating a template from scratch, you can find a sample template and customize it. このチュートリアルで使用するテンプレートは、「Deploy a simple Windows VM」(単純な Windows VM をデプロイする) と呼ばれます。The template used in this tutorial is called Deploy a simple Windows VM. これは「チュートリアル: 依存リソースを含む Azure Resource Manager テンプレートを作成する」で使用されたものと同じテンプレートです。This is the same template used in Tutorial: Create Azure Resource Manager templates with dependent resources. 以下と同じ使用するテンプレートの 2 つのコピーを保存します。You save two copies of the same template to be used as:

  • メイン テンプレート: ストレージ アカウントを除くすべてのリソースを作成します。The main template: create all the resources except the storage account.
  • リンクされたテンプレート: ストレージ アカウントを作成します。The linked template: create the storage account.
  1. Visual Studio Code から、[ファイル]>[ファイルを開く] を選択します。From Visual Studio Code, select File>Open File.

  2. [ファイル名] に以下の URL を貼り付けます。In File name, paste the following URL:

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-simple-windows/azuredeploy.json
    
  3. [開く] を選択して、ファイルを開きます。Select Open to open the file.

  4. テンプレートによって定義されたリソースは、5 つあります。There are five resources defined by the template:

  5. [ファイル]>[Save As](名前を付けて保存) を選択し、このファイルのコピーを azuredeploy.json という名前でローカル コンピューターに保存します。Select File>Save As to save a copy of the file to your local computer with the name azuredeploy.json.

  6. [ファイル] > [名前を付けて保存] を選択し、このファイルの別のコピーを linkedTemplate.json という名前で作成します。Select File>Save As to create another copy of the file with the name linkedTemplate.json.

リンクされたテンプレートを作成するCreate the linked template

リンクされたテンプレートにより、ストレージ アカウントが作成されます。The linked template creates a storage account. リンクされたテンプレートは、ストレージ アカウントを作成するスタンドアロンのテンプレートとして使用できます。The linked template can be used as a standalone template to create a storage account. このチュートリアルでは、リンクされたテンプレートで 2 つのパラメーターを受け取り、値をメイン テンプレートに渡し返します。In this tutorial, the linked template takes two parameters, and passes a value back to the main template. この "戻り" 値は outputs 要素で定義されます。This "return" value is defined in the outputs element.

  1. linkedTemplate.json が開いていない場合、このファイルを Visual Studio Code で開きます。Open linkedTemplate.json in Visual Studio Code if the file is not opened.

  2. 次の変更を行います。Make the following changes:

    • location 以外のパラメーターをすべて削除します。Remove all the parameters other than location.

    • storageAccountName というパラメーターを追加します。Add a parameter called storageAccountName.

      "storageAccountName":{
        "type": "string",
        "metadata": {
            "description": "Azure Storage account name."
        }
      },
      

      ストレージ アカウント名と場所は、パラメーターとして、メイン テンプレートからリンクされたテンプレートに渡されます。The storage account name and location are passed from the main template to the linked template as parameters.

    • variables 要素とすべての変数定義を削除します。Remove the variables element, and all the variable definitions.

    • ストレージ アカウント以外のすべてのリソースを削除します。Remove all the resources other than the storage account. 合計で 4 つのリソースを削除します。You remove a total of four resources.

    • ストレージ アカウント リソースの name 要素の値を次の目的で更新します。Update the value of the name element of the storage account resource to:

        "name": "[parameters('storageAccountName')]",
      
    • outputs 要素を更新します。その結果、次のようになります。Update the outputs element, so it looks like:

      "outputs": {
        "storageUri": {
            "type": "string",
            "value": "[reference(parameters('storageAccountName')).primaryEndpoints.blob]"
          }
      }
      

      storageUriは、メイン テンプレートの仮想マシン リソース定義で必要です。storageUri is required by the virtual machine resource definition in the main template. この値を、出力値としてメイン テンプレートに値を渡し返します。You pass the value back to the main template as an output value.

      完了すると、テンプレートは次のようになります。When you are done, the template shall look like:

      {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
          "storageAccountName": {
            "type": "string",
            "metadata": {
              "description": "Azure Storage account name."
            }
          },
          "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
              "description": "Location for all resources."
            }
          }
        },
        "resources": [
          {
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[parameters('storageAccountName')]",
            "location": "[parameters('location')]",
            "apiVersion": "2018-07-01",
            "sku": {
              "name": "Standard_LRS"
            },
            "kind": "Storage",
            "properties": {}
          }
        ],
        "outputs": {
          "storageUri": {
            "type": "string",
            "value": "[reference(parameters('storageAccountName')).primaryEndpoints.blob]"
          }
        }
      }
      
  3. 変更を保存します。Save the changes.

リンクされたテンプレートをアップロードするUpload the linked template

メイン テンプレートとリンクされたテンプレートには、デプロイを実行する場所からアクセス可能にする必要があります。The main template and the linked template need to be accessible from where you run the deployment. このチュートリアルでは、「チュートリアル: 依存リソースを含む Azure Resource Manager テンプレートを作成する」で使用されたものと同じテンプレートです。In this tutorial, you use the Cloud shell deployment method as you used in Tutorial: Create Azure Resource Manager templates with dependent resources. メイン テンプレート (azuredeploy.json) は、シェルにアップロードされます。The main template (azuredeploy.json) is uploaded to the shell. リンクされたテンプレート (linkedTemplate.json) は、別の場所で安全に共有する必要があります。The linked template (linkedTemplate.json) must be shared somewhere securely. 次の PowerShell スクリプトでは、Azure Storage アカウントが作成され、ストレージ アカウントにテンプレートがアップロードされ、テンプレート ファイルへの制限付きアクセスを付与する目的で SAS トークンが生成されます。The following PowerShell script creates an Azure Storage account, uploads the template to the Storage account, and then generates a SAS token to grant limited access to the template file. チュートリアルを簡単にするために、スクリプトによって、リンクされたテンプレートが完全な形で共有の場所からダウンロードされます。To simplify the tutorial, the script downloads a completed linked template from a shared location. 自分で作成したリンク済みテンプレートを使用する場合、Cloud Shell を使用してリンク済みテンプレートをアップロードし、独自のリンク済みテンプレートを使用するようにスクリプトを変更します。If you want to use the linked template you created, you can use the Cloud shell to upload your linked template, and then modify the script to use your own linked template.

注意

スクリプトによって、8 時間以内に使用するように SAS トークンに制限が与えられます。The script limits the SAS token to be used within eight hours. このチュートリアルを完了するためにもっと時間が必要な場合、有効期限を延ばしてください。If you need more time to complete this tutorial, increase the expiry time.

$projectNamePrefix = Read-Host -Prompt "Enter a project name:"   # This name is used to generate names for Azure resources, such as storage account name.
$location = Read-Host -Prompt "Enter a location (i.e. centralus)"

$resourceGroupName = $projectNamePrefix + "rg"
$storageAccountName = $projectNamePrefix + "store"
$containerName = "linkedtemplates" # The name of the Blob container to be created.

$linkedTemplateURL = "https://armtutorials.blob.core.windows.net/linkedtemplates/linkedStorageAccount.json" # A completed linked template used in this tutorial.
$fileName = "linkedStorageAccount.json" # A file name used for downloading and uploading the linked template.

# Download the tutorial linked template
Invoke-WebRequest -Uri $linkedTemplateURL -OutFile "$home/$fileName"

# Create a resource group
New-AzResourceGroup -Name $resourceGroupName -Location $location

# Create a storage account
$storageAccount = New-AzStorageAccount `
    -ResourceGroupName $resourceGroupName `
    -Name $storageAccountName `
    -Location $location `
    -SkuName "Standard_LRS"

$context = $storageAccount.Context

# Create a container
New-AzStorageContainer -Name $containerName -Context $context

# Upload the linked template
Set-AzStorageBlobContent `
    -Container $containerName `
    -File "$home/$fileName" `
    -Blob $fileName `
    -Context $context

# Generate a SAS token
$templateURI = New-AzStorageBlobSASToken `
    -Context $context `
    -Container $containerName `
    -Blob $fileName `
    -Permission r `
    -ExpiryTime (Get-Date).AddHours(8.0) `
    -FullUri

echo "You need the following values later in the tutorial:"
echo "Resource Group Name: $resourceGroupName"
echo "Linked template URI with SAS token: $templateURI"
  1. 緑のボタン [試してみる] を選択し、Azure Cloud Shell ウィンドウが開きます。Select the Try It green button to open the Azure cloud shell pane.
  2. [コピー] を選択し、PowerShell スクリプトがコピーされます。Select Copy to copy the PowerShell script.
  3. Shell ウィンドウ (濃紺色の部分) 内のどこでもよいので右クリックし、[貼り付け] を選択します。Right-click anywhere inside the shell pane (the navy blue part), and then select Paste.
  4. Shell ウィンドウの端にある 2 つの値をメモします (リソース グループ名とリンク済みテンプレート URI)。Make a note of the two values (Resource Group Name and Linked template URI) at the end of the shell pane. 値は、このチュートリアルの後の方で必要になります。You need the values later in the tutorial.
  5. [フォーカス モードの終了] を選択し、Shell ウィンドウを閉じます。Select Exit focus mode to close the shell pane.

実際には、メイン テンプレートをデプロイするときに SAS トークンを生成します。また、安全性を高める目的で、SAS トークンの有効期限を短くします。In practice, you generate a SAS token when you deploy the main template, and give the SAS token expiry a smaller window to make it more secure. 詳細については、「デプロイ時に SAS トークンを指定する」を参照してください。For more information, see Provide SAS token during deployment.

リンクされたテンプレートを呼び出すCall the linked template

メイン テンプレートは azuredeploy.json と呼ばれます。The main template is called azuredeploy.json.

  1. azuredeploy.json が開いていない場合、Visual Studio Code で開きます。Open azuredeploy.json in Visual Studio Code if it is not opened.

  2. テンプレートからストレージ アカウント リソース定義を削除します。Delete the storage account resource definition from the template:

    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "apiVersion": "2018-07-01",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    },
    
  3. 次の json スニペットを、ストレージ アカウント定義があった場所に追加します。Add the following json snippet to the place where you had the storage account definition:

    {
      "name": "linkedTemplate",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2018-05-01",
      "properties": {
          "mode": "Incremental",
          "templateLink": {
              "uri":"https://armtutorials.blob.core.windows.net/linkedtemplates/linkedStorageAccount.json"
          },
          "parameters": {
              "storageAccountName":{"value": "[variables('storageAccountName')]"},
              "location":{"value": "[parameters('location')]"}
          }
      }
    },
    

    次の点に注意してください。Pay attention to these details:

    • メイン テンプレートの Microsoft.Resources/deployments リソースは、別のテンプレートにリンクするために使用されます。A Microsoft.Resources/deployments resource in the main template is used to link to another template.
    • deployments リソースは、linkedTemplate という名前を持っています。The deployments resource has a name called linkedTemplate. この名前は、依存関係を構成する場合に使用されます。This name is used for configuring dependency.
    • リンクされたテンプレートを呼び出すときは、増分デプロイ モードのみを使用できます。You can only use Incremental deployment mode when calling linked templates.
    • templateLink/uri には、リンクされたテンプレート URI が含まれています。templateLink/uri contains the linked template URI. (SAS トークン付きの) リンクされたテンプレートをアップロードしたときに与えられた URI にこの値を更新します。Update the value to the URI you get when you upload the linked template (the one with a SAS token).
    • メイン テンプレートから、リンクされたテンプレートに値を渡すには、parameters を使用します。Use parameters to pass values from the main template to the linked template.
  4. (SAS トークン付きの) リンクされたテンプレートをアップロードしたときに与えられた値に uri 要素の値が更新されていることを確認します。Make sure you have updated the value of the uri element to the value you got when you upload the linked template (the one with a SAS token). 実際には、URI にパラメーターを与えることをお勧めします。In practice, you want to supply the URI with a parameter.

  5. 変更後のテンプレートを保存します。Save the revised template

依存関係を構成するConfigure dependency

チュートリアル: 依存リソースを含む Azure Resource Manager テンプレートを作成する」の内容を思い出してください。仮想マシンのリソースはストレージ アカウントに依存します。Recall from Tutorial: Create Azure Resource Manager templates with dependent resources, the virtual machine resource depends on the storage account:

Azure Resource Manager テンプレートの依存関係図

ストレージ アカウントが、リンクされたテンプレートで定義されているので、Microsoft.Compute/virtualMachines リソースの次の 2 つの要素を更新する必要があります。Because the storage account is defined in the linked template now, you must update the following two elements of the Microsoft.Compute/virtualMachines resource.

  • dependOn 要素を再構成します。Reconfigure the dependOn element. ストレージ アカウントの定義が、リンクされたテンプレートに移動されます。The storage account definition is moved to the linked template.

  • properties/diagnosticsProfile/bootDiagnostics/storageUri 要素を再構成します。Reconfigure the properties/diagnosticsProfile/bootDiagnostics/storageUri element. リンクされたテンプレートを作成する」で、出力値を追加しました。In Create the linked template, you added an output value:

    "outputs": {
        "storageUri": {
            "type": "string",
            "value": "[reference(parameters('storageAccountName')).primaryEndpoints.blob]"
            }
    }
    

    この値は、メイン テンプレートで必要です。This value is required by the main template.

  1. azuredeploy.json が開いていない場合、Visual Studio Code で開きます。Open azuredeploy.json in Visual Studio Code if it is not opened.

  2. 仮想マシン リソース定義を展開し、次のスクリーンショットに示すように、dependsOn を更新します。Expand the virtual machine resource definition, update dependsOn as shown in the following screenshot:

    Azure Resource Manager のリンクされたテンプレートで依存関係を構成する

    "linkedTemplate" は、デプロイ リソースの名前です。linkedTemplate is the name of the deployments resource.

  3. 前のスクリーンショットに示すように、properties/diagnosticsProfile/bootDiagnostics/storageUri を更新します。Update properties/diagnosticsProfile/bootDiagnostics/storageUri as shown in the previous screenshot.

  4. 変更後のテンプレートを保存します。Save the revised template.

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

デプロイ手順については、「テンプレートのデプロイ」セクションを参照してください。Refer to the Deploy the template section for the deployment procedure. リンクされたテンプレートを保存するためのストレージ アカウントと同じリソース グループ名を使用します。Use the same resource group name as the storage account for storing the linked template. 次のセクションでリソースをクリーンアップする作業が楽になります。It makes it easier to clean up resources in the next section. セキュリティを向上させるには、生成されたパスワードを仮想マシンの管理者アカウントに対して使用します。To increase security, use a generated password for the virtual machine administrator account. 前提条件」を参照してください。See Prerequisites.

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

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

  1. Azure portal で、左側のメニューから [リソース グループ] を選択します。From the Azure portal, select Resource group from the left menu.
  2. [名前でフィルター] フィールドに、リソース グループ名を入力します。Enter the resource group name in the Filter by name field.
  3. リソース グループ名を選択します。Select the resource group name. リソース グループ内の合計 6 つのリソースが表示されます。You shall see a total of six resources in the resource group.
  4. トップ メニューから [リソース グループの削除] を選択します。Select Delete resource group from the top menu.

追加のプラクティスAdditional practice

プロジェクトを改善する目的で、完成したプロジェクトに次の追加変更を行います。To improve the project, make the following additional changes to the completed project:

  1. リンクされたテンプレートの URI 値がパラメーターから取得されるようにメイン テンプレート (azuredeploy.json) を変更します。Modify the main template (azuredeploy.json) so that it takes the linked template URI value via a parameter.
  2. リンクされたテンプレートをアップロードするときに SAS トークンを生成する代わりに、メイン テンプレートをデプロイするときにこのトークンを生成します。Instead of generating a SAS token when you upload the linked template, generate the token when you deploy the main template. 詳細については、「デプロイ時に SAS トークンを指定する」を参照してください。For more information, see Provide SAS token during deployment.

次の手順Next steps

このチュートリアルでは、テンプレートをメイン テンプレートとリンクされたテンプレートにモジュール化しました。In this tutorial, you modularized a template into a main template and a linked template. 仮想マシン拡張機能を使用してデプロイ後のタスクを実行する方法については、次を参照してください。To learn how to use virtual machine extensions to perform post deployment tasks, see: