Bicep コードをリントして検証する

完了

パイプライン ステージが何であるかがわかったので、Bicep デプロイ パイプラインに追加できる最初の一連の検証ステップについて考えてみましょう。 このユニットでは、Bicep テンプレートの検証について学習します。 検証ステージで通常実行される 2 つのアクティビティ (リンティングおよびプレフライト検証) についても学習します。

有効な Bicep ファイルとは

有効な Bicep ファイルとは、いずれの構文エラーも含まれていないもののことです。 また、デプロイする予定の Azure リソースの定義が有効である必要があります。 また、ファイルに定義されているリソースをデプロイするときは、Azure サブスクリプションに存在するクォータと制限内に留まる必要があります。

構文エラー、有効な Azure リソース定義、コード品質のチェックなど、一部のチェックは Bicep ファイルで別個に実行されます。 これらの手順は、 linting と呼ばれるプロセスの一部です。 その他の問題を確認するには、Azure Resource Manager サービスがテンプレートを検証し、Azure 環境を考慮するように要求する必要があります。

有効な Bicep テンプレートを使用すると、デプロイが成功する可能性が高くなります。 Bicep テンプレートをデプロイせずにフィードバックを受け取ります。 無効な Bicep ファイルをデプロイすると、テンプレートで説明されているリソースのサブセットのみが Azure によってデプロイまたは変更される可能性があるため、検証をお勧めします。 結果は、環境の状態に一貫性がなく、期待どおりに動作しない可能性があることを意味する場合があります。

Bicep コードをビルドしてリントする

Bicep ファイルをデプロイすると、Bicep ツールによって最初にいくつかの基本的な検証ステップが行われます。 これらのステップは、Visual Studio Code を使用してファイルを変更するときに行われるのと同じものです。 Bicep 言語キーワードが正しく使用されていること、および各リソースの種類の要件に従って Azure リソースが定義されていることを確認します。

さらに、Bicep はファイルに対して "リンター" を実行します。 リンティングは、コードを一連の推奨事項と照合するプロセスです。 Bicep リンターではファイルを調べ、保守容易性、正確さ、柔軟性、および拡張性に関するベスト プラクティスに従っていることが確認されます。

リンターには、これらのカテゴリごとに定義済みのルールのセットが含まれています。 リンター ルールの例を次に示します。

  • 未使用のパラメーター。 リンターにより、Bicep ファイル内のどこにも使用されていないパラメーターがスキャンされます。 未使用のパラメーターを削除することで、不要な値を指定する必要がないため、テンプレートのデプロイが簡単になります。 また、他のユーザーが Bicep ファイルを操作しようとしたときの混乱を減らすこともできます。
  • 文字列補間。 リンターにより、ファイルで Bicep 文字列補間ではなく concat() 関数が使用されているかどうかがチェックされます。 文字列補間により、Bicep ファイルがより読みやすくなります。
  • セキュリティで保護されたパラメーターの既定値@secure() デコレーターでマークされているパラメーターの既定値を設定すると、リンターによって警告が表示されます。 セキュリティで保護されたパラメーターの既定値は、セキュリティで保護されたパラメーターに人間が判読できる値を提供し、ユーザーがデプロイ前に変更しない可能性があるため、不適切な方法です。

Bicep ツールを使用すると、Bicep リンターが自動的に実行されます。 Bicep ファイルをビルドするたび、リンターによってベスト プラクティスと照合されます。 リンティングは、Bicep ファイルを Azure にデプロイするときに自動的に行われます。 しかし、パイプラインでは通常、ファイルをデプロイする前に検証およびリンティング ステップを行う必要があります。 Bicep CLI を使用して Bicep ファイルを手動でビルドすることで、ファイルを確認するように Bicep を構成できます。

az bicep build --file main.bicep
bicep build main.bicep

build コマンドを実行すると、Bicep により、Bicep コードの JSON ARM テンプレートへのトランスパイルも行われます。 通常、出力されるファイルは必要ないので、無視してかまいません。

誰かがコードをリポジトリにチェックインするたびにリンターで Bicep テンプレートをチェックするため、リント ステージとジョブをパイプラインに追加することができます。

ファイルでリンターを実行する 1 つのジョブを含むリント ステージがあるパイプラインを示す図。

この追加は、パイプラインの YAML ファイルで次のように表すことができます。

stages:

- stage: Lint
  jobs: 
  - job: Lint
    steps:
      - script: |
          az bicep build --file deploy/main.bicep

リンターの警告とエラー

既定では、リンターにより、Bicep ファイル内の規則違反が検出されると警告が出力されます。 Bicep リンターが出力する警告はエラーとして扱われないため、パイプラインの実行を停止したり、後続のステージの実行を停止したりすることはありません。

リンターの規則違反を警告ではなくエラーとして扱うように Bicep を構成することで、この動作を変更できます。 この構成を行うには、Bicep ファイルを含むフォルダーに bicepconfig.json ファイルを追加します。 リンターの問題を、エラーとして扱う必要があるか、警告のままにしておく必要があるかを決定できます。 リンター ルールの更新方法については、このモジュールの後半で説明します。

ヒント

bicepconfig.json ファイルは、Visual Studio Code でエディターでエラーと警告を表示する方法も制御します。 Bicep テンプレートで正しく構成されていない部分の下に、赤と黄色の波線が表示されます。 これらのインジケーターにより、Bicep コードを記述するときにより迅速にフィードバックが得られ、エラーが発生する可能性がさらに軽減します。

エラーを出力するようにリンターを再構成した後、リンターによって問題が検出されるたびに、パイプラインで実行が停止され、後続のジョブやステージは実行されません。 このセットアップは、問題のある Bicep コードがデプロイされないようにするのに役立ちます。

プレフライト検証

Bicep テンプレートが Azure 環境に正常にデプロイされる可能性が高いかどうかを確認する必要もあります。 このチェックは プレフライト検証と呼ばれ、Azure からの情報を必要とするチェックを実行します。 これらの種類のチェックには次のようなものがあります。

  • Bicep リソースに指定した名前は有効ですか?
  • Bicep リソースに指定した名前は既に使用されていますか?
  • リソースをデプロイするリージョンは有効ですか?

プレフライト検証には Azure との通信が必要ですが、実際にはいずれのリソースもデプロイされません。

lint ステージと検証ステージを含むパイプラインを示す図。それぞれに 1 つのジョブが含まれています。検証ステージは Azure と通信します。

AzureResourceManagerTemplateDeployment タスクを使用して、プレフライト検証用の Bicep ファイルを送信できます。 deploymentModeするようにValidationを構成します。

- stage: Validate
  jobs:
  - job: Validate
    steps:
      - task: AzureResourceManagerTemplateDeployment@3
        inputs:
          connectedServiceName: 'MyServiceConnection'
          location: $(deploymentDefaultLocation)
          deploymentMode: Validation
          resourceGroupName: $(ResourceGroupName)
          csmFile: deploy/main.bicep

このコマンドは、既に使用したデプロイ タスクに似ていますが、実際にはリソースをデプロイしません。 テンプレートで使用されているリソースに対して追加のチェックが実行されます。

たとえば、Bicep ファイルにストレージ アカウントが含まれているとします。 プレフライト検証では、選択した名前が別のストレージ アカウントに既に存在するかどうかを確認します。 また、ストレージ アカウントに対して選択した名前が名前付け規則に準拠するかどうかをチェックします。

プレフライト検証コマンドでは、Bicep リンターが実行されます。 しかし、通常はリンターを個別に実行することをお勧めします。 そうすれば、リンター エラーが発生した場合に、検証プロセスが終了するのを待たずにすばやく検出できます。 検証には時間がかかります。

重要

プレフライト検証を実行すると、各 Azure リソース プロバイダーによって独自のチェックが実行されます。 一部のリソース プロバイダーは多くのチェックを実行しませんが、実行するものもあります。そのため、ファイルが有効であると判断するためにプレフライト検証に依存することはできません。 それでも、これは便利なツールであり、パイプラインに含める価値があります。

リンターを実行してプレフライト検証を実行するための検証ステージをパイプラインに追加することで、より自信を持って Bicep ファイルをデプロイすることができます。