Azure PowerShell を使用して Bicep ファイルをデプロイする
この記事では、Azure PowerShell と Bicep ファイルを使用して、Azure にリソースをデプロイする方法について説明します。 Azure ソリューションのデプロイと管理に慣れていない場合は、「Bicep とは」を参照してください。
前提条件
デプロイする Bicep ファイルが必要であり、そのファイルはローカルである必要があります。 Azure PowerShell が必要であり、それが Azure に接続されている必要があります。
- ローカル コンピューターに Azure PowerShell コマンドレットをインストールします。 Bicep ファイルをデプロイするには、Azure PowerShell バージョン 5.6.0 以降が必要です。 詳細については、Azure PowerShell の概要に関するページを参照してください。
- Bicep CLI をインストールします。 Bicep CLI は、Azure PowerShell で自動的にインストールされないため、手動でインストールする必要があります。
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 の組み込みロールに関するページを参照してください。
デプロイのスコープ
リソース グループ、サブスクリプション、管理グループ、またはテナントをデプロイのターゲットにすることができます。 デプロイのスコープに応じて異なるコマンドを使用します。また、Bicep ファイルをデプロイするユーザーには、すべてのスコープのリソースを作成するために必要なアクセス許可が必要です。
リソース グループにデプロイするには、
New-AzResourceGroupDeployment
を使用します。New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-bicep>
サブスクリプションにデプロイするには、
New-AzSubscriptionDeployment
を使用します。これは、New-AzDeployment
コマンドレットの別名です。New-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-bicep>
サブスクリプション レベルのデプロイの詳細については、Bicep ファイルを使用したサブスクリプションへのリソースのデプロイに関するページを参照してください。
管理グループにデプロイするには、
New-AzManagementGroupDeployment
を使用します。New-AzManagementGroupDeployment -ManagementGroupId <management-group-id> -Location <location> -TemplateFile <path-to-bicep>
管理グループ レベルのデプロイの詳細については、Bicep ファイルを使用した管理グループへのリソースのデプロイに関するページを参照してください。
テナントにデプロイするには、
New-AzTenantDeployment
を使用します。New-AzTenantDeployment -Location <location> -TemplateFile <path-to-bicep>
テナント レベルのデプロイの詳細については、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
TemplateParameterObject
パラメーターを使用すると、テンプレートのパラメーターを含むハッシュテーブルを渡すことができます。
$params = @{
exampleString = "inline string"
exampleArray = "value1", "value2"
}
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-TemplateParameterObject $params
また、ファイルの内容を取得し、その内容をインライン パラメーターとして指定することもできます。
$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 の値を指定できます。
オブジェクトの配列で渡す必要がある場合は、Azure 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 パラメーター ファイル
スクリプトでパラメーターをインライン値として渡すのではなく、パラメーター値を含む Bicep パラメーター ファイルまたは JSON パラメーター ファイルを使用する方が簡単な場合があります。 Bicep ファイルはローカルである必要がありますが、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
JSON パラメーター ファイル
JSON パラメーター ファイルは、ローカル ファイルまたはアクセス可能な URI を持つ外部ファイルにすることができます。
ローカル パラメーター ファイルを渡すには、次のように 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
パラメーターは JSON パラメーター ファイルのみをサポートするため、.bicepparam
ファイルはサポートされません。
同じデプロイ操作で、インライン パラメーターと場所パラメータ ファイルを使用できます。 詳細については、「パラメーターの優先順位」を参照してください。
変更のプレビュー
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 ファイルの構造と構文について」を参照してください。