Azure CLI を使用して Bicep ファイルをデプロイする
この記事では、Azure CLI と Bicep ファイルを使用してリソースを Azure にデプロイする方法について説明します。 Azure ソリューションのデプロイと管理に慣れていない場合は、「Bicep とは」を参照してください。
前提条件
デプロイする Bicep ファイルが必要であり、そのファイルはローカルである必要があります。 また、Azure CLI と、Azure への接続も必要です。
- ご利用のローカル コンピューターに Azure CLI コマンドをインストールします。 Bicep ファイルをデプロイするには、Azure CLI バージョン 2.20.0 以降が必要です。
az login
を使用して Azure に接続します。 複数の Azure サブスクリプションがある場合は、az account set
の実行も必要な場合があります。
Azure CLI のサンプルは、bash
シェル用に記述されています。 このサンプルを Windows PowerShell またはコマンド プロンプト (cmd) で実行するには、必要に応じてスクリプトの要素を変更します。
Azure CLI がインストールされていない場合は、Azure Cloud Shell を使用できます。 詳細については、Azure Cloud Shell を使用して Bicep ファイルをデプロイする方法に関する記事を参照してください。
必要なアクセス許可
Bicep ファイルまたは ARM テンプレートをデプロイするには、デプロイしているリソースに対する書き込みアクセス権が必要であり、また、Microsoft.Resources/デプロイ リソース タイプにあらゆる操作を実行するアクセス権かの゛必要です。 たとえば、仮想マシンをデプロイするには、Microsoft.Compute/virtualMachines/write
および Microsoft.Resources/deployments/*
アクセス許可が必要です。 What-If 操作のアクセス許可要件も同じです。
ロールとアクセス許可の一覧については、Azure の組み込みロールに関するページを参照してください。
デプロイのスコープ
リソース グループ、サブスクリプション、管理グループ、またはテナントをデプロイのターゲットにすることができます。 デプロイのスコープに応じて、異なるコマンドを使用します。また、Bicep ファイルをデプロイするユーザーは、すべてのスコープに対してリソースを作成するために必要なアクセス許可を持っている必要があります。
リソース グループにデプロイするには、
az deployment group create
を使用します。az deployment group create --resource-group <resource-group-name> --template-file <path-to-bicep>
サブスクリプションにデプロイするには、
az deployment sub create
を使用します。az deployment sub create --location <location> --template-file <path-to-bicep>
サブスクリプションレベルのデプロイの詳細については、Bicep を使用してリソースをサブスクリプションにデプロイする方法に関する記事を参照してください。
管理グループにデプロイするには、
az deployment mg create
を使用します。az deployment mg create --location <location> --template-file <path-to-bicep>
管理グループレベルのデプロイの詳細については、Bicep を使用してリソースを管理グループにデプロイする方法に関する記事を参照してください。
テナントにデプロイするには、
az deployment tenant create
を使用します。az deployment tenant create --location <location> --template-file <path-to-bicep>
テナントレベルのデプロイの詳細については、Bicep を使用してリソースをテナントにデプロイする方法に関する記事を参照してください。
ローカルの Bicep ファイルをデプロイする
Bicep ファイルは、ローカルまたは外部のコンピューターからデプロイできます。 このセクションでは、ローカルの Bicep ファイルをデプロイする方法について説明します。
存在しないリソース グループにデプロイする場合、リソース グループを作成する必要があります。 リソース グループ名には、英数字、ピリオド、アンダースコア、ハイフン、かっこのみを含めることができます。 最大 90 文字です。末尾にピリオドを付けることはできません。
az group create --name ExampleGroup --location "Central US"
ローカル Bicep ファイルをデプロイするには、デプロイメント コマンドで --template-file
スイッチを使用します。 次の例は、パラメーター値を設定する方法も示しています。
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-file <path-to-bicep> \
--parameters storageAccountType=Standard_GRS
デプロイが完了するまでに数分かかる場合があります。 完了すると、次の結果を含むメッセージが表示されます。
"provisioningState": "Succeeded",
リモートの Bicep ファイルをデプロイする
現在、Azure CLI はリモート Bicep ファイルのデプロイをサポートしていません。 Bicep CLI を使用して、Bicep ファイルを JSON テンプレートにビルドし、その JSON ファイルをリモートの場所に読み込むことができます。 詳細については、「リモート テンプレートのデプロイ」を参照してください。
パラメーター
パラメーター値を渡すには、インライン パラメーターまたはパラメーター ファイルのいずれかを使用できます。 パラメーター ファイルは、Bicep パラメーター ファイルまたは JSON パラメーター ファイルのどちらかにできます。
インライン パラメーター
インライン パラメーターを渡すには、parameters
に値を指定します。 たとえば、Bash シェルで文字列と配列を Bicep ファイルに渡すには、以下を使用します。
az deployment group create \
--resource-group testgroup \
--template-file <path-to-bicep> \
--parameters exampleString='inline string' exampleArray='["value1", "value2"]'
cmd または PowerShell で Azure CLI を使用している場合は、配列を exampleArray="['value1','value2']"
の形式で渡します。
ファイルの内容を取得して、その内容をインライン パラメーターとして提供することもできます。 ファイル名の先頭に @ を付けます。
az deployment group create \
--resource-group testgroup \
--template-file <path-to-bicep> \
--parameters exampleString=@stringContent.txt exampleArray=@arrayContent.json
ファイルからのパラメーター値の取得は、構成値を指定する必要がある場合に便利です。 たとえば、Linux 仮想マシン用の cloud-init の値を指定できます。
arrayContent.json 形式は次のようになります。
[
"value1",
"value2"
]
オブジェクトを渡すには、JSON を使用します (タグを設定する場合など)。 Bicep ファイルには次のようなパラメーターが含めることができます。
"resourceTags": {
"type": "object",
"defaultValue": {
"Cost Center": "IT Department"
}
}
次の Bash スクリプトに示すように、JSON 文字列を渡してパラメーターを設定することもできます。 オブジェクトに渡す JSON を二重引用符で囲みます。
tags='{"Owner":"Contoso","Cost Center":"2345-324"}'
az deployment group create --name addstorage --resource-group myResourceGroup \
--template-file $bicepFile \
--parameters resourceName=abcdef4556 resourceTags="$tags"
cmd または PowerShell で Azure CLI を使用している場合は、次の形式でオブジェクトを渡します。
$tags="{'Owner':'Contoso','Cost Center':'2345-324'}"
az deployment group create --name addstorage --resource-group myResourceGroup \
--template-file $bicepFile \
--parameters resourceName=abcdef4556 resourceTags=$tags
変数を使用してパラメーター値を格納できます。 この変数を Bash スクリプト内のすべてのパラメーター値に設定し、それをデプロイ コマンドに追加します。
params="prefix=start suffix=end"
az deployment group create \
--resource-group testgroup \
--template-file <path-to-bicep> \
--parameters $params
ただし、cmd または PowerShell で Azure CLI を使用している場合は、変数を JSON 文字列に設定してください。 引用符をエスケープします ($params = '{ \"prefix\": {\"value\":\"start\"}, \"suffix\": {\"value\":\"end\"} }'
)。
パラメーターの評価は順序に従って行われます。つまり、値が複数回割り当てられた場合、最後に割り当てられた値のみが使用されます。 パラメーターを適切に割り当てるには、最初にパラメーター ファイルを指定してから、KEY=VALUE 構文を使用して特定のパラメーターを選択的にオーバーライドすることをお勧めします。 .bicepparam
パラメーター ファイルを指定する場合、この引数は 1 回のみ使用できます。
Bicep パラメーター ファイル
スクリプトでパラメーターをインライン値として渡すのではなく、パラメーター値を含むパラメーター ファイル (Bicep パラメーター ファイルまたは JSON パラメーター ファイル) を使用する方が簡単な場合があります。 Azure CLI は外部パラメーター ファイルをサポートしていないため、パラメーター ファイルはローカル ファイルである必要があります。 パラメーター ファイルの詳細については、「Bicep デプロイ用のパラメーター ファイルを作成する」を参照してください。
Azure CLI バージョン 2.53.0 以降と Bicep CLI バージョン 0.22.X 以降では、Bicep パラメーター ファイルを使用して Bicep ファイルをデプロイできます。 Bicep パラメーター ファイル内の using
ステートメントを使用すると、--parameters
スイッチの Bicep パラメーター ファイルを指定するときに --template-file
スイッチを指定する必要はありません。 --template-file
スイッチを含めると、".bicepparam ファイルでは .bicep テンプレートのみを使用できます" というエラーが表示されます。
次の例は、storage.bicepparam という名前のパラメータ ファイルを示しています。 このファイルは、コマンドが実行されるディレクトリと同じ場所にあります。
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--parameters storage.bicepparam
JSON パラメーター ファイル
次の例は、storage.parameters.json という名前のパラメータ ファイルを示しています。 このファイルは、コマンドが実行されるディレクトリと同じ場所にあります。
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-file storage.bicep \
--parameters '@storage.parameters.json'
同じデプロイ操作で、インライン パラメーターと場所パラメータ ファイルを使用できます。 詳細については、「パラメーターの優先順位」を参照してください。
変更のプレビュー
Bicep ファイルをデプロイする前に、Bicep ファイルが環境に与える変更をプレビューすることができます。 what-if 操作を使用して、必要な変更が Bicep ファイルによって行われるかどうかを確認します。 また、Bicep ファイルのエラーも what-if で検証されます。
テンプレート スペックをデプロイする
現在、Azure CLI には、テンプレート スペックの作成に役立つ Bicep ファイルが用意されていません。 ただし、Microsoft.Resources/templateSpecs リソースを使用して Bicep ファイルを作成し、テンプレート スペックをデプロイできます。テンプレート スペックの作成サンプルは、Bicep ファイルでテンプレート スペックを作成する方法を示しています。 また、Bicep CLI を使用して Bicep ファイルを JSON にビルドしてから、JSON テンプレートを使用してテンプレート スペックを作成することもできます。
デプロイ名
Bicep ファイルをデプロイするときに、デプロイに名前を付けることができます。 この名前は、デプロイ履歴からデプロイを取得するのに役立ちます。 デプロイの名前を指定しない場合、その名前が Bicep ファイルの名前になります。 たとえば、main.bicep という Bicep ファイルをデプロイし、デプロイ名を指定しない場合、デプロイの名前は main
になります。
デプロイを実行するたびに、リソース グループのデプロイ履歴にデプロイ名のエントリが追加されます。 別のデプロイを実行するときに同じ名前を付けると、現在のデプロイによって前のエントリが置き換えられます。 デプロイ履歴に一意のエントリを保持する場合は、デプロイごとに一意の名前を付けます。
一意の名前を作成するには、乱数を割り当てます。
deploymentName='ExampleDeployment'$RANDOM
または、日付値を追加します。
deploymentName='ExampleDeployment'$(date +"%d-%b-%Y")
同じリソース グループに対して同じ名前のデプロイを同時に実行した場合は、最後のデプロイのみが完了します。 完了していない同じ名前のデプロイは、最後のデプロイによって置き換えられます。 たとえば、storage1
というストレージ アカウントをデプロイする newStorage
というデプロイを実行し、同時に storage2
というストレージ アカウントをデプロイする newStorage
という別のデプロイを実行する場合、デプロイするストレージ アカウントは 1 つだけです。 結果のストレージ アカウントの名前は storage2
になります。
ただし、storage1
というストレージ アカウントをデプロイする newStorage
というデプロイを実行し、最初のデプロイが完了した直後に、storage2
というストレージ アカウントをデプロイする newStorage
という別のデプロイを実行すると、2 つのストレージ アカウントが存在します。 1 つは storage1
という名前に、もう 1 つは storage2
という名前になります。 ただし、デプロイ履歴にはエントリが 1 つだけ存在します。
デプロイごとに一意の名前を指定すると、競合なしでそれらを同時に実行できます。 storage1
というストレージ アカウントをデプロイする newStorage1
というデプロイを実行し、同時に storage2
というストレージ アカウントをデプロイする newStorage2
という別のデプロイを実行すると、2 つのストレージ アカウントとデプロイ履歴に 2 つのエントリが作成されます。
同時デプロイによる競合を回避し、デプロイ履歴に一意のエントリが確実に存在するようにするには、各デプロイに一意の名前を付けます。
次のステップ
ファイルでパラメーターを定義する方法については、「Bicep ファイルの構造と構文について」を参照してください。