クイックスタート: Bicep ファイルのデプロイのトラブルシューティング

このクイックスタートでは、Bicep ファイルのデプロイ エラーのトラブルシューティングを行う方法を説明します。 エラーのあるファイルを作成して、それらのエラーを修正する方法を学びます。

デプロイに関するエラーには 3 種類あります。

  • 検証エラー デプロイ開始前に、ファイル中の構文エラーによって発生します。 これらのエラーは、Visual Studio Code などのコード エディターで特定できます。
  • プレフライト検証エラーは、デプロイ コマンドが実行されてもリソースがデプロイされない場合に発生します。 これらのエラーは、デプロイを開始しなくても検出されます。 たとえば、パラメーターの値が正しくない場合は、プレフライト検証でエラーが検出されます。
  • デプロイ エラー Azure 環境におけるデプロイのプロセスで発生し、デプロイの進行状況を確認することでのみ検出できます。

どの種類のエラーでも、デプロイのトラブルシューティングに使用できるエラー コードが出力されます。 検証とプレフライトのエラーはアクティビティ ログに表示されますが、デプロイ履歴には表示されません。 構文エラーがある Bicep ファイルは JSON にコンパイルされず、アクティビティ ログに表示されません。

前提条件

このクイックスタートを実行するには、次のものが必要です。

エラーのある Bicep ファイルを作成する

次の Bicep ファイルをコピーしてローカルに保存します。 このファイルを使用して、検証エラー、プレフライト エラー、デプロイ エラーのトラブルシューティングを行います。 このクイックスタートでは、ファイルに troubleshoot.bicep という名前を付けていますが、実際には好きな名前を付けることができます。

@description('SKU for the storage account')
@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_ZRS'
  'Premium_LRS'
])
parameter storageAccountType string = 'Standard_LRS'

@description('Prefix for storage name.')
param prefixName string

var storageAccountName = '${prefixName}${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
  name: storageAccountName
  location: resourceGroup().location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

resource existingVNet 'Microsoft.Network/virtualNetworks@2021-03-01' existing = {
  name: 'doesnotexist'
}

output storageAccountName string = storageAccountName
output vnetResult object = existingVNet

検証エラーを修正する

Visual Studio Code でファイルを開きます。 Visual Studio Code により構文エラーが検出されます。 最初のパラメーター宣言が赤の波線でマークされ、エラーがあることを示しています。

Bicep ファイルに赤い波線で強調表示された構文エラーの Visual Studio Code のスクリーンショット。

エラーがあるためにマークされているのは次の行です。

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_ZRS'
  'Premium_LRS'
])
parameter storageAccountType string = 'Standard_LRS'

parameter にマウス ポインターを重ねると、エラー メッセージが表示されます。

Bicep ファイルの構文エラーをホバーしているときに詳細のエラー メッセージが表示される Visual Studio Code のスクリーンショット。

メッセージには "この宣言の型を認識できません。パラメーター、変数、リソースまたは出力の宣言を指定してください" と表示されています。このファイルをデプロイしようとすると、デプロイ コマンドから同じエラー メッセージが表示されます。

パラメーター宣言のドキュメントを読むと、実際のキーワードは param であることが分かります。 その構文を修正すると、検証エラーはなくなります。 @allowed デコレーターもエラーによりマークされますが、このエラーもパラメーター宣言を修正すれば解決できます。 このデコレーターがマークされたのは、デコレーターの後にパラメーター宣言がないことにより、エラーが発生しているからです。 宣言が正しくないので、この条件を満たせないのです。

修正後の行は次のようになります。

param storageAccountType string = 'Standard_LRS'

プレフライト エラーを修正する

検証エラーを修正したので、次はファイルをデプロイします。 ところが、入力するパラメーターが正しくないので、プレフライト エラーが発生します。

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.bicep \
  --parameters prefixName=longNamewith!!Charactersthatarenotallowed

Azure Resource Manager により、ストレージ アカウントの名前に許可されていない文字が含まれていると判定されます。 デプロイは実行されません。

プレフライト検証に通らなかったことを示すエラー メッセージが表示されます。 ストレージ アカウント名は長さが 3 - 24 文字で、数字と小文字だけを使用する必要がある、というメッセージも表示されます。 入力したプレフィックスが、この要件を満たしていませんでした。 このエラー コードの詳しい情報は、ストレージ アカウント名のエラーの解決に関する記事をご覧ください。

エラーを検出したのがプレフライトだったため、履歴にデプロイの記録がありません。

Bicep ファイルのデプロイがないことを示す Azure portal のデプロイ履歴のスクリーンショット。

ですが、Activity Log には失敗したデプロイが記録されます。

Bicep ファイルのデプロイのプレフライト検証エラーを表示する Azure portal のアクティビティ ログのスクリーンショット。

ログのエントリの詳細を開けばエラー メッセージを表示できます。

デプロイ エラーを修正する

名前のプレフィックス パラメーターに許可された値を入力して、もう一度ファイルをデプロイします。

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.bicep \
  --parameters prefixName=stg

デプロイが始まりますが、仮想ネットワークが見つからなかったことを示すメッセージが表示されて失敗します。 通常、リソースへの参照を修正すれば、このエラーを修正できます。 このクイックスタートでは、参照を削除します。 このエラー コードの詳しい情報は、リソースが見つからないエラーの解決に関する記事をご覧ください。

ポータルでは、履歴にデプロイが表示されます。

Bicep ファイルの失敗したデプロイを示す Azure portal のデプロイ履歴のスクリーンショット。

デプロイの履歴のエントリを開けば、エラーの詳細を取得できます。 このエラーは、アクティビティ ログにも記録されます。

この Bicep ファイルでは、リソース グループに存在しない仮想ネットワークを参照しようとします。 既存の仮想ネットワークへの参照を削除してエラーを解決します。

@description('SKU for the storage account')
@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_ZRS'
  'Premium_LRS'
])
param storageAccountType string = 'Standard_LRS'

@description('Prefix for storage name.')
param prefixName string

var storageAccountName = '${prefixName}${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
  name: storageAccountName
  location: resourceGroup().location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = storageAccountName

エラーを出さずに Bicep ファイルをデプロイできるようになります。

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

Azure リソースが必要なくなったときは、リソース グループを削除します。 リソース グループは Cloud Shell かポータルで削除できます。

az group delete --name troubleshootRG

ポータルでリソース グループを削除するには、このステップに従います。

  1. Azure portal で、検索ボックスに「リソース グループ」と入力します。
  2. [名前でフィルター] フィールドに、リソース グループ名を入力します。
  3. リソース グループ名を選択します。
  4. [リソース グループの削除] を選択します。
  5. 削除を確認するには、リソース グループ名を入力して [削除] を選択します。

次のステップ

このクイックスタートでは、Bicep ファイルのデプロイ エラーのトラブルシューティングを行う方法を説明します。