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 テンプレートをチェックするため、リント ステージとジョブをパイプラインに追加することができます。

Diagram that shows a pipeline with a lint stage containing a single job that runs the linter on the file.

この追加は、パイプラインの 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 との通信が必要ですが、実際にはいずれのリソースもデプロイされません。

Diagram that shows a pipeline with lint and validate stages, each containing a single job. The validate stage communicates with Azure.

AzureResourceManagerTemplateDeployment タスクを使用して、プレフライト検証のために Bicep ファイルを送信し、deploymentModeValidation に設定できます。

- 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 ファイルをデプロイすることができます。