チュートリアル:ARM テンプレートでの条件の使用
Azure Resource Manager テンプレート (ARM テンプレート) で条件に基づいて Azure リソースをデプロイする方法について説明します。
リソースのデプロイ順序の設定に関するチュートリアルでは、仮想マシン、仮想ネットワーク、およびその他の依存リソース (ストレージ アカウントなど) を作成します。 新しいストレージ アカウントを毎回作成する代わりに、新しいストレージ アカウントを作成するか、既存のストレージ アカウントを使用するかをユーザーに選択してもらいます。 この目的を達成するために、追加のパラメーターを定義します。 パラメーターの値に new が指定されると、新しいストレージ アカウントが作成されます。 それ以外の場合、名前が指定された既存のストレージ アカウントが使用されます。
このチュートリアルに含まれるタスクは次のとおりです。
- クイック スタート テンプレートを開く
- テンプレートの変更
- テンプレートのデプロイ
- リソースをクリーンアップする
このチュートリアルでは、条件を使用する基本的なシナリオについてのみ説明します。 詳細については、次を参照してください。
条件について取り上げた Learn モジュールについては、「高度な ARM テンプレート機能を使用して複雑なクラウド デプロイを管理する」を参照してください。
Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
前提条件
この記事を完了するには、以下が必要です。
Visual Studio Code と Resource Manager ツール拡張機能。 「クイック スタート:Visual Studio Code を使用して ARM テンプレートを作成する」を参照してください。
セキュリティを向上させるには、生成されたパスワードを仮想マシンの管理者アカウントに対して使用します。 Azure Cloud Shell を使用して、PowerShell または Bash で次のコマンドを実行できます。
openssl rand -base64 32
詳細については、
man openssl rand
を実行して man ページを開きます。Azure Key Vault は、暗号化キーおよびその他のシークレットを保護するために設計されています。 詳細については、ARM テンプレートのデプロイで Azure Key Vault を統合する」を参照してください。 パスワードは 3 か月ごとに更新することをお勧めします。
クイック スタート テンプレートを開く
Azure クイックスタート テンプレートは、ARM テンプレートのリポジトリです。 テンプレートを最初から作成しなくても、サンプル テンプレートを探してカスタマイズすることができます。 このチュートリアルで使用するテンプレートは、「Deploy a simple Windows VM」(単純な Windows VM をデプロイする) と呼ばれます。
Visual Studio Code から、 [ファイル]>[ファイルを開く] を選択します。
[ファイル名] に以下の URL を貼り付けます。
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
[開く] を選択して、ファイルを開きます。
テンプレートによって定義されたリソースは、6 つあります。
- Microsoft.Storage/storageAccounts。
- Microsoft.Network/publicIPAddresses。
- Microsoft.Network/networkSecurityGroups。
- Microsoft.Network/virtualNetworks。
- Microsoft.Network/networkInterfaces。
- Microsoft.Compute/virtualMachines。
テンプレートをカスタマイズする前に、テンプレートのリファレンスを確認しておくと参考になります。
[ファイル]>[Save As](名前を付けて保存) を選択し、このファイルのコピーを azuredeploy.json という名前でローカル コンピューターに保存します。
テンプレートの変更
既存のテンプレートに 2 つの変更を加えます。
- ストレージ アカウント名パラメーターを追加します。 ユーザーは、新しいストレージ アカウント名を指定するか、または既存のストレージ アカウント名を指定することができます。
-
newOrExisting
という新しいパラメーターを追加します。 デプロイする際には、新しいストレージ アカウントを作成するか、既存のストレージ アカウントを使用するかどうかが、このパラメーターを使用して判別されます。
変更を行う手順は次のとおりです。
Visual Studio Code で azuredeploy.json を開きます。
テンプレート全体で 3 つの
variables('storageAccountName')
をparameters('storageAccountName')
に置き換えます。次の変数定義を削除します。
parameters セクションの先頭に、次の 2 つのパラメーターを追加します。
"storageAccountName": { "type": "string" }, "newOrExisting": { "type": "string", "allowedValues": [ "new", "existing" ] },
Visual Studio Code で Alt + Shift + F キーを押してテンプレートの書式を設定します。
更新したパラメーター定義は次のようになります。
ストレージ アカウント定義の先頭に次の行を追加します。
"condition": "[equals(parameters('newOrExisting'),'new')]",
この条件では、パラメーター
newOrExisting
の値が確認されます。 パラメーターの値に new が指定されていると、ストレージ アカウントが作成されます。更新したストレージ アカウント定義は次のようになります。
仮想マシンのリソース定義の
storageUri
プロパティを次の値に更新します。"storageUri": "[format('https://{0}.blob.core.windows.net', parameters('storageAccountName'))]"
この変更は、異なるリソース グループの既存のストレージ アカウントを使用するときに必要になります。
変更を保存します。
テンプレートのデプロイ
Cloud Shell にサインインします。
左上の [PowerShell] または [Bash] (CLI の場合) を選択して、希望の環境を選択します。 切り替えた場合は、シェルを再起動する必要があります。
[ファイルのアップロード/ダウンロード] を選択し、 [アップロード] を選択します。 先のスクリーンショットをご覧ください。 前のセクションで保存したファイルを選択します。 ファイルをアップロードした後、
ls
コマンドとcat
コマンドを使用して、ファイルが正常にアップロードされたことを確認できます。次の 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
newOrExisting
が new のときに、指定したストレージ アカウント名のストレージ アカウントが既に存在している場合、デプロイは失敗します。
newOrExisting
を existing に設定した別のデプロイを作成して、既存のストレージ アカウントを指定します。 事前にストレージ アカウントを作成する場合は、「ストレージ アカウントの作成」を参照してください。
リソースをクリーンアップする
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 からシークレットを取得し、テンプレートのデプロイでそのシークレットをパスワードとして使用する方法については、以下を参照してください。