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

完了

ワークフロー ジョブが何であるかがわかったので、Bicep デプロイ ワークフローに追加できる最初の一連の検証ステップについて考えてみましょう。 このユニットでは、Bicep テンプレートの検証について学習します。 また、一般的に使用される 2 つの検証アクティビティ、つまりリンティングとプレフライト検証についても学習します。

有効な Bicep ファイルとは

有効な Bicep ファイルには、どのような構文エラーも含まれていません。 さらに、デプロイする予定の Azure リソースの定義は有効です。 ファイルに定義されているリソースがデプロイされる場合、お使いの Azure サブスクリプションに存在するクォータと制限内に収まります。

構文エラー、有効な Azure リソース定義、コード品質のチェックなど、一部のチェックは Bicep ファイルで別個に実行されます。 これらのステップは、''リンティング'' というプロセスの一部です。 その他の問題を確認するには、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

Note

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

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

ファイルでリンターを実行する 1 つのジョブを含むリント ジョブがあるワークフローを示す図。

この追加は、ワークフローの YAML ファイルで次のように表します。

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - 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 との通信が必要ですが、実際にはいずれのリソースもデプロイされません。

それぞれに 1 つのジョブが含まれている、リントおよび検証ジョブを含むワークフローを示す図。検証ジョブは Azure と通信します。

プレフライト検証のために Bicep ファイルを送信するには、arm-deploy アクションを使用し、deploymentModeValidate に設定します。

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: azure/login@v1
      with:
        client-id: ${{ secrets.AZURE_CLIENT_ID }}
        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    - uses: azure/arm-deploy@v1
      name: Run preflight validation
      with:
        resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
        template: ./deploy/main.bicep
        deploymentMode: Validate

また、Azure CLI の az deployment group validate コマンドも使用できます。

プレフライト検証は通常のデプロイに似ていますが、実際にはリソースをまったくデプロイしません。 テンプレートで使用されているリソースに対して追加のチェックが実行されます。

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

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

重要

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

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