チュートリアル:ARM テンプレートでの条件の使用

Azure Resource Manager テンプレート (ARM テンプレート) で条件に基づいて Azure リソースをデプロイする方法について説明します。

リソースのデプロイ順序の設定に関するチュートリアルでは、仮想マシン、仮想ネットワーク、およびその他の依存リソース (ストレージ アカウントなど) を作成します。 新しいストレージ アカウントを毎回作成する代わりに、新しいストレージ アカウントを作成するか、既存のストレージ アカウントを使用するかをユーザーに選択してもらいます。 この目的を達成するために、追加のパラメーターを定義します。 パラメーターの値に new が指定されると、新しいストレージ アカウントが作成されます。 それ以外の場合、名前が指定された既存のストレージ アカウントが使用されます。

条件を使用する Resource Manager テンプレートの図

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

  • クイック スタート テンプレートを開く
  • テンプレートの変更
  • テンプレートのデプロイ
  • リソースをクリーンアップする

このチュートリアルでは、条件を使用する基本的なシナリオについてのみ説明します。 詳細については、次を参照してください。

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

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

前提条件

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

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

Azure クイックスタート テンプレートは、ARM テンプレートのリポジトリです。 テンプレートを最初から作成しなくても、サンプル テンプレートを探してカスタマイズすることができます。 このチュートリアルで使用するテンプレートは、「Deploy a simple Windows VM」(単純な Windows VM をデプロイする) と呼ばれます。

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

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

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

  4. テンプレートによって定義されたリソースは、6 つあります。

    テンプレートをカスタマイズする前に、テンプレートのリファレンスを確認しておくと参考になります。

  5. [ファイル]>[Save As](名前を付けて保存) を選択し、このファイルのコピーを azuredeploy.json という名前でローカル コンピューターに保存します。

テンプレートの変更

既存のテンプレートに 2 つの変更を加えます。

  • ストレージ アカウント名パラメーターを追加します。 ユーザーは、新しいストレージ アカウント名を指定するか、または既存のストレージ アカウント名を指定することができます。
  • newOrExisting という新しいパラメーターを追加します。 デプロイする際には、新しいストレージ アカウントを作成するか、既存のストレージ アカウントを使用するかどうかが、このパラメーターを使用して判別されます。

変更を行う手順は次のとおりです。

  1. Visual Studio Code で azuredeploy.json を開きます。

  2. テンプレート全体で 3 つの variables('storageAccountName')parameters('storageAccountName') に置き換えます。

  3. 次の変数定義を削除します。

    削除する必要のある変数定義が強調表示されているスクリーンショット。

  4. parameters セクションの先頭に、次の 2 つのパラメーターを追加します。

    "storageAccountName": {
      "type": "string"
    },
    "newOrExisting": {
      "type": "string",
      "allowedValues": [
        "new",
        "existing"
      ]
    },
    

    Visual Studio Code で Alt + Shift + F キーを押してテンプレートの書式を設定します。

    更新したパラメーター定義は次のようになります。

    Resource Manager での条件の使用

  5. ストレージ アカウント定義の先頭に次の行を追加します。

    "condition": "[equals(parameters('newOrExisting'),'new')]",
    

    この条件では、パラメーター newOrExisting の値が確認されます。 パラメーターの値に new が指定されていると、ストレージ アカウントが作成されます。

    更新したストレージ アカウント定義は次のようになります。

    更新したストレージ アカウント定義を示すスクリーンショット。

  6. 仮想マシンのリソース定義の storageUri プロパティを次の値に更新します。

    "storageUri": "[format('https://{0}.blob.core.windows.net', parameters('storageAccountName'))]"
    

    この変更は、異なるリソース グループの既存のストレージ アカウントを使用するときに必要になります。

  7. 変更を保存します。

テンプレートのデプロイ

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

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

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

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

  4. 次の PowerShell スクリプトを実行してテンプレートをデプロイします。

    重要

    ストレージ アカウント名は Azure 内で一意である必要があります。 名前に使用できるのは、小文字と数字だけです。 24 文字以内にする必要があります。 ストレージ アカウント名は、プロジェクト名に store が追加されたものです。 プロジェクト名と生成されたストレージ アカウント名がストレージ アカウント名の要件を満たしていることを確認してください。

    $projectName = Read-Host -Prompt "Enter a project name that is used to generate resource group name and resource names"
    $newOrExisting = Read-Host -Prompt "Create new or use existing (Enter new or existing)"
    $location = Read-Host -Prompt "Enter the Azure location (i.e. centralus)"
    $vmAdmin = Read-Host -Prompt "Enter the admin username"
    $vmPassword = Read-Host -Prompt "Enter the admin password" -AsSecureString
    $dnsLabelPrefix = Read-Host -Prompt "Enter the DNS Label prefix"
    
    $resourceGroupName = "${projectName}rg"
    $storageAccountName = "${projectName}store"
    
    New-AzResourceGroup -Name $resourceGroupName -Location $location
    New-AzResourceGroupDeployment `
        -ResourceGroupName $resourceGroupName `
        -adminUsername $vmAdmin `
        -adminPassword $vmPassword `
        -dnsLabelPrefix $dnsLabelPrefix `
        -storageAccountName $storageAccountName `
        -newOrExisting $newOrExisting `
        -TemplateFile "$HOME/azuredeploy.json"
    
    Write-Host "Press [ENTER] to continue ..."
    

    Note

    newOrExistingnew のときに、指定したストレージ アカウント名のストレージ アカウントが既に存在している場合、デプロイは失敗します。

newOrExistingexisting に設定した別のデプロイを作成して、既存のストレージ アカウントを指定します。 事前にストレージ アカウントを作成する場合は、「ストレージ アカウントの作成」を参照してください。

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

Azure リソースが不要になったら、リソース グループを削除して、デプロイしたリソースをクリーンアップします。 リソース グループを削除するには、 [Try it]/(試してみる/) を選択し Cloud Shell を開きます。 PowerShell スクリプトを貼り付けるには、シェル ウィンドウを右クリックし、 [貼り付け] を選択します。

$projectName = Read-Host -Prompt "Enter the same project name you used in the last procedure"
$resourceGroupName = "${projectName}rg"

Remove-AzResourceGroup -Name $resourceGroupName

Write-Host "Press [ENTER] to continue ..."

次のステップ

このチュートリアルでは、新しいストレージ アカウントを作成するか、既存のストレージ アカウントを使用するかをユーザーが選択できるテンプレートを作成しました。 Azure Key Vault からシークレットを取得し、テンプレートのデプロイでそのシークレットをパスワードとして使用する方法については、以下を参照してください。