クイックスタート: 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 文字で、数字と小文字のみを使用する必要があるというメッセージも表示されます。 指定したプレフィックスがその要件を満たしませんでした。 このエラー コードの詳細については、「 ストレージ アカウント名のエラーを解決する」を参照してください。

エラーはプレフライトでキャッチされたため、履歴にデプロイは存在しません。

Azure ポータルの展開履歴セクションに、Bicep ファイルのデプロイメントがないことを示すスクリーンショット

ただし、失敗したデプロイはアクティビティ ログに存在します。

Azure ポータルのアクティビティ ログのスクリーンショットで、Bicep ファイルのデプロイメントに関するプリフライト検証エラーが表示されています。

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

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

ファイルをもう一度デプロイし、名前プレフィックス パラメーターに使用できる値を指定します。

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

デプロイは開始されますが、仮想ネットワークが見つからなかったというメッセージで失敗します。 通常は、リソースへの参照を変更することで、このエラーを修正します。 このクイック スタートでは、参照を削除します。 このエラー コードの詳細については、「 リソースが見つからないエラーを解決する」を参照してください。

ポータルの履歴にデプロイが表示されていることに気づいてください。

Azure ポータルのデプロイ履歴セクションのスクリーンショットで、Bicep ファイルのデプロイ失敗を示しています。

デプロイ履歴のエントリを開いて、エラーの詳細を取得できます。 このエラーはアクティビティ ログにも存在します。

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 ポータルで、検索ボックスに「Resource groups」と入力します。
  2. [ 名前でフィルター] フィールドに、リソース グループ名を入力します。
  3. リソース グループ名を選択します。
  4. [ リソース グループの削除] を選択します
  5. 削除を確定するには、リソース グループ名を入力し、[ 削除] を選択します。

次のステップ

このクイックスタートでは、Bicep ファイルのデプロイエラーのトラブルシューティング方法について学びました。