Bicep と Azure PowerShell を使用してリソースをデプロイする
この記事では、Azure PowerShell と Bicep ファイルを使用して、Azure にリソースをデプロイする方法について説明します。 Azure ソリューションのデプロイと管理の概念について詳しくない場合は、Bicep 概要に関する記事を参照してください。
前提条件
デプロイする Bicep ファイルが必要です。 ファイルはローカルである必要があります。
Azure PowerShell と、Azure に接続されている必要があります。
- ローカル コンピューターに Azure PowerShell コマンドレットをインストールします。 Bicep ファイルをデプロイするには、Azure PowerShell バージョン 5.6.0 以降が必要です。 詳細については、Azure PowerShell の概要に関するページを参照してください。
- Bicep CLI をインストールします。 Azure PowerShell では、Bicep CLI は自動的にインストールされません。 代わりに、Bicep CLI を手動でインストールする必要があります。
- Connect-AzAccount を使用して Azure に接続します。 Azure サブスクリプションが複数ある場合は、Set-AzContext を実行する必要が生じることもあります。 詳しくは、「Use multiple Azure subscriptions (複数の Azure サブスクリプションを使用する)」をご覧ください。
PowerShell がインストールされていない場合は、Azure Cloud Shell を使用できます。 詳細については、「Azure Cloud Shell から Bicep ファイルをデプロイする」を参照してください。
必要なアクセス許可
Bicep ファイルまたは ARM テンプレートをデプロイするには、デプロイしているリソースに対する書き込みアクセス権が必要であり、また、Microsoft.Resources/デプロイ リソース タイプにあらゆる操作を実行するアクセス権かの゛必要です。 たとえば、仮想マシンをデプロイするには、Microsoft.Compute/virtualMachines/write
および Microsoft.Resources/deployments/*
アクセス許可が必要です。 What-If 操作のアクセス許可要件も同じです。
ロールとアクセス許可の一覧については、Azure の組み込みロールに関するページを参照してください。
デプロイのスコープ
リソース グループ、サブスクリプション、管理グループ、またはテナントをデプロイのターゲットにすることができます。 使用するコマンドは、デプロイのスコープに応じて異なります。
リソース グループにデプロイするには、New-AzResourceGroupDeployment を使用します。
New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-bicep>
サブスクリプションにデプロイするには、
New-AzDeployment
コマンドレットの別名である New-AzSubscriptionDeployment を使用します。New-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-bicep>
サブスクリプション レベルでのデプロイの詳細については、「サブスクリプション レベルでリソース グループとリソースを作成する」を参照してください。
管理グループにデプロイするには、新しい AzManagementGroupDeploymentを使用します。
New-AzManagementGroupDeployment -ManagementGroupId <management-group-id> -Location <location> -TemplateFile <path-to-bicep>
管理グループ レベルでのデプロイの詳細については、「管理グループ レベルでリソースを作成する」を参照してください。
テナントにデプロイするには、新しい AzTenantDeployment を使用します。
New-AzTenantDeployment -Location <location> -TemplateFile <path-to-bicep>
テナント レベルでのデプロイの詳細については、「テナント レベルでリソースを作成する」を参照してください。
各スコープに対して、テンプレートをデプロイするユーザーにはリソースを作成するためのアクセス許可が必要です。
ローカルの Bicep ファイルをデプロイする
ローカル コンピューターの Bicep ファイル、または外部に格納されているものをデプロイできます。 このセクションでは、ローカルの Bicep ファイルのデプロイについて説明します。
存在しないリソース グループにデプロイする場合、リソース グループを作成する必要があります。 リソース グループ名には、英数字、ピリオド、アンダースコア、ハイフン、かっこのみを含めることができます。 最大長は 90 文字です。 名前の末尾をピリオドにすることはできません。
New-AzResourceGroup -Name ExampleGroup -Location "Central US"
ローカル Bicep ファイルをデプロイするには、デプロイメント コマンドで -TemplateFile
スイッチを使用します。
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleGroup `
-TemplateFile <path-to-bicep>
デプロイが完了するまでに数分かかる場合があります。
リモートの Bicep ファイルをデプロイする
現在、Azure PowerShell ではリモート Bicep ファイルのデプロイはサポートされていません。 Bicep CLI を使用して、Bicep ファイルを JSON テンプレートにビルドし、その JSON ファイルをリモートの場所に読み込みます。
パラメーター
パラメーター値を渡すには、インライン パラメーターまたはパラメーター ファイルのいずれかを使用できます。 パラメーター ファイルは、Bicep パラメーター ファイルまたは JSON パラメーター ファイルのどちらかにできます。
インライン パラメーター
インライン パラメーターを渡すには、New-AzResourceGroupDeployment
コマンドでパラメーターの名前を指定します。 たとえば、文字列と配列を Bicep ファイルに渡すには、以下を使用します。
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-exampleString "inline string" `
-exampleArray $arrayParam
ファイルの内容を取得し、その内容をインライン パラメーターとして提供することもできます。
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
-exampleArray $arrayParam
ファイルからのパラメーター値の取得は、構成値を指定する必要がある場合に便利です。 たとえば、Linux 仮想マシン用の cloud-init の値を指定できます。
オブジェクトの配列を渡す必要がある場合、PowerShell でハッシュ テーブルを作成し、そのテーブルを配列に追加します。 デプロイの際に、その配列をパラメーターとして渡します。
$hash1 = @{ Name = "firstSubnet"; AddressPrefix = "10.0.0.0/24"}
$hash2 = @{ Name = "secondSubnet"; AddressPrefix = "10.0.1.0/24"}
$subnetArray = $hash1, $hash2
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-exampleArray $subnetArray
Bicep パラメーター ファイル
スクリプトでパラメーターをインライン値として渡すのではなく、パラメーター値を含むパラメーター ファイル (.bicepparam
ファイルまたは JSON パラメーター ファイル) を使用する方が簡単な場合があります。 Bicep パラメーター ファイルはローカル ファイルである必要があります。
Azure PowerShell バージョン 10.4.0 以降と Bicep CLI バージョン 0.22.X 以上では、Bicep パラメーター ファイルを利用して Bicep ファイルをデプロイできます。 Bicep パラメーター ファイル内の using
ステートメントを使用すると、-TemplateParameterFile
スイッチの Bicep パラメーター ファイルを指定するときに -TemplateFile
スイッチを指定する必要はありません。
次の例は、storage.bicepparam という名前のパラメータ ファイルを示しています。 ファイルは、このコマンドを実行するのと同じディレクトリにあります。
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateParameterFile storage.bicepparam
パラメーター ファイルの詳細については、「Resource Manager パラメーター ファイルを作成する」をご覧ください。
JSON パラメーター ファイル
JSON パラメーター ファイルは、ローカル ファイルまたはアクセス可能な URI を持つ外部ファイルにすることができます。 パラメーター ファイルの詳細については、「Resource Manager パラメーター ファイルを作成する」をご覧ください。
ローカル パラメーター ファイルを渡すには、次のように JSON パラメーター ファイルで TemplateParameterFile
スイッチを使用します。
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateFile c:\BicepFiles\storage.bicep `
-TemplateParameterFile c:\BicepFiles\storage.parameters.json
外部パラメータ ファイルを渡すには、TemplateParameterUri
パラメータを使用します。
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateFile c:\BicepFiles\storage.bicep `
-TemplateParameterUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.parameters.json
TemplateParameterUri
パラメータは .bicepparam
ファイルをサポートせず、JSON パラメータ ファイルのみをサポートします。
同じデプロイ操作で、インライン パラメーターと場所パラメータ ファイルを使用できます。 詳細については、「パラメーターの優先順位」を参照してください。
変更のプレビュー
Bicep ファイルをデプロイする前に、Bicep ファイルが環境に与える変更をプレビューすることができます。 what-if 操作を使用して、必要な変更が Bicep ファイルによって行われるかどうかを確認します。 また、Bicep ファイルのエラーも what-if で検証されます。
テンプレート スペックをデプロイする
現在、Azure PowerShell では、Bicep ファイルを指定してテンプレート スペックを作成することはサポートされていません。 ただし、Microsoft.Resources/templateSpecs リソースを使用して Bicep ファイルを作成し、テンプレート スペックをデプロイできます。Bicep ファイルでテンプレート スペックを作成する方法については、テンプレート スペックの作成サンプルを参照してください。 また、Bicep CLI を使用して Bicep ファイルを JSON に組み込み、JSON テンプレートを使用してテンプレート スペックを作成することもできます。
デプロイ名
Bicep ファイルをデプロイするときに、デプロイに名前を付けることができます。 この名前は、デプロイ履歴からデプロイを取得するのに役立ちます。 デプロイの名前を指定しない場合は、Bicep ファイルの名前が使用されます。 たとえば、main.bicep
という名前の Bicep をデプロイし、デプロイ名を指定しなかった場合、デプロイは main
という名前になります。
デプロイを実行するたびに、リソース グループのデプロイ履歴にデプロイ名のエントリが追加されます。 別のデプロイを実行するときに同じ名前を付けると、現在のデプロイによって前のエントリが置き換えられます。 デプロイ履歴に一意のエントリを保持する場合は、デプロイごとに一意の名前を付けます。
一意の名前を作成するために、ランダムな数値を割り当てることができます。
$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix
または、日付の値を追加します。
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="ExampleDeployment"+"$today"
同じリソース グループに対して同じ名前のデプロイを同時に実行した場合は、最後のデプロイのみが完了します。 完了していない同じ名前のデプロイは、最後のデプロイによって置き換えられます。 たとえば、storage1
という名前のストレージ アカウントをデプロイする newStorage
という名前のデプロイを実行し、storage2
という名前のストレージ アカウントをデプロイする newStorage
という名前の別のデプロイを同時に実行した場合は、1 つのストレージ アカウントのみがデプロイされます。 結果のストレージ アカウントの名前は storage2
になります。
ただし、storage1
という名前のストレージ アカウントをデプロイする newStorage
という名前のデプロイを実行し、その完了直後に、storage2
という名前のストレージ アカウントをデプロイする newStorage
という名前の別のデプロイを実行した場合は、ストレージ アカウントは 2 つになります。 1 つは storage1
という名前に、もう 1 つは storage2
という名前になります。 ただし、デプロイ履歴にはエントリが 1 つだけ存在します。
デプロイごとに一意の名前を指定すると、競合なしでそれらを同時に実行できます。 storage1
という名前のストレージ アカウントをデプロイする newStorage1
という名前のデプロイを実行し、storage2
という名前のストレージ アカウントをデプロイする newStorage2
という名前の別のデプロイを同時に実行した場合は、2 つのストレージ アカウントがデプロイされ、デプロイ履歴には 2 つのエントリが存在します。
同時デプロイによる競合を回避し、デプロイ履歴に一意のエントリが確実に存在するようにするには、各デプロイに一意の名前を付けます。
次のステップ
- ファイルでパラメーターを定義する方法については、「Bicep ファイルの構造と構文について」を参照してください。