Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

ARMやBicepでコーディングしたIaCをPSRule for Azureでチェックする

こんにちは。かとぅーんです。

夏が終わった頃に一度キャンプに行く機会がありました。
ちょうどいい気候で快適に楽しめました。
それからというもの、気づいたらキャンプに嵌まってしまったようで
キャンプ系動画の視聴やキャンプグッツを探すようになり
気づいたらキャンプ道具一式が揃っていました。

もしもの災害に対処できるように、キャンプスキルを上げたいと
考えながら最近はソロキャン修行しています。


さて、普段Azureインフラ構築でBicepを書いていますが
書き方や構成といった面で、よりAzureに準拠したベストな書き方ができているのか?
という点において、気になっていてレビューでも指摘があったりするので
都度どうにかならないものかと気にかけていた部分がありました。

IaCをコーディングする中でそのような課題を解決してくれるツールを
他の何かを調べている途中に、ふと発見したので今回はそれを紹介しようと思います。

PSRule for Azure

PSRule for Azure
azure.github.io

PSRule for Azureは、AzureのInfrastructures as Code(ARM, Bicep)のテストツールです。
AzureリソースがRuleに沿って構成されているかの単体テストをPowershellで実施することができます。

具体的なRuleとしては、Azure Well-Architected Frameworkに沿ったAzure環境をIaCで構築するためのチェックが行えます。
Azure Well-Architected Frameworkとは、Azureアーキテクチャのベストプラクティスをまとめたものになりますが、詳しくは以下のブログ記事を是非ご覧ください。

aadojo.alterbooth.com

主な機能

主に以下の3点について、Azure Well-Architected Frameworkに基づいたチェックの結果を提案してくれます。

  • Suggest changes:ソリューションの品質向上のための変更点の提案
  • Link to documentation:チェック内容のドキュメントへのリンク
  • Demonstrate:具体的な変更実装手段の提案

また、チェックについては、独自のチェックをコーディングにより作成することもできるようにも構成されています。
既に400以上のテストが作成されているためよりそれぞれのプロジェクトの要求に即したテストの実施が可能です。

PSRuleの利用方法

主に3通りの使い方が提供されています。

  • ローカルでのVS Codeチェック
  • CI パイプラインのワークフロー
  • 既存Azureリソースに対してのチェック

ローカルでのVS Codeチェック

Visual Studio Code拡張機能でPSRuleを利用可能です。
IaC開発時のテストとして活用が可能です。
開発時にチェックできるため主に使いそうな機能です。

CI パイプラインのワークフロー

GitHub ActionsやAzure DevOps Pipelinesの公式ワークフローに組み込まれているため CIで検証するタスクを組み込めます。
デプロイワークフローに組み込んだ場合に活用できます。

GitHub Actions
PSRule · Actions · GitHub Marketplace · GitHub
microsoft/ps-ruleアクションで検証できます。

Azure DevOps Pipelines
PSRule - Visual Studio Marketplace
ps-rule-assertタスクで検証できます。

既存Azureリソースに対してのチェック

既存リソースのルールデータをエクスポートすることで
既に作成しているAzureリソースに対してチェックを行うことができます。
IaCのコードレベルに限らず、既に作成されているリソースに対しても
テストを実施することができます。

ここまで作りこまれているツールに正直驚きました。

検証

今回は、ローカルでのVS Codeチェックで検証したいと思います。

PSRuleのインストール

まず、VS CodeのマーケットプレイスよりPSRuleをインストールします。

VS Code PSRule

各モジュールのインストール

PSRuleで使われるモジュールをPowerShellでインストールします。

Install-Module -Name PowerShellGet -Repository PSGallery -Scope CurrentUser -Force
Install-Module -Name PSRule -Repository PSGallery -Scope CurrentUser -AllowPrerelease
Install-Module -Name PSRule.Rules.Azure -Repository PSGallery -Scope CurrentUser -AllowPrerelease

PSRule設定ファイルの作成

ルートディレクトリに、PSRule設定のyamlファイルps-rule.yamlを作成します。
ps-rule.yamlでは、読み込むルールや対象ファイルなどを指定します。
デフォルトでプロジェクト配下すべてが検査の対象となっているため
ファイルを限定する場合、ファイルを指定する必要があります。

デフォルトモジュールのPSRule.Rules.Azureでチェックします。
各ルールについてはの詳細は以下ドキュメントに記載があります。

Reference - PSRule for Azure

requires:
  PSRule.Rules.Azure: '>=1.29.0'

include:
  module:
  - PSRule.Rules.Azure

PSRule実行

設定ファイルを作成することで、タスクランナーからタスクが実行可能となるので
Terminal > Run Task > PSRule: Run analysis からPSRuleを実行します。

PSRuleの実行

結果、16項目のチェックが実行されました。

過去に作っていたBicepファイルなどをチェックしましたが
チェックOKとなっていたので、いろいろとチェックしていったところ
サンプルのARMテンプレートファイルで以下、failedが1件検出されました。

Using PSRule v2.9.0
Using PSRule.Rules.Azure v1.31.3

   WARN  The option 'Execution.NotProcessedWarning' is deprecated and will be 
removed with PSRule v3. See http://aka.ms/ps-rule/deprecations for more detail.

> main.json : .json [15/16]

   FAIL  Azure.Template.UseComments (AZR-000234)

  Use comments for each resource in ARM template to communicate purpose.      

  File: main.json::

  Recommend:
  Specify comments for each resource in the template.

  Reason:
  - The template (C:\temp\main.json) has (2) 
resource/s without comments.

  Help:
  - https://azure.github.io/PSRule.Rules.Azure/en/rules/Azure.Template.UseComments/


Rules processed: 16, failed: 1, errored: 0

今回検出した内容は
ARM templateにコメントが入っていないための警告でした。
コメントを入れ修正すると正常にチェックはクリアできました。

まとめ

今回は、PSRuleの検証を通してIaCコーディング実装時のチェックについて見ていきました。

このようにIaC開発時にテストを行うことで、よりAzureアーキテクチャのベストプラクティスに沿ったIaCを記述することが可能となります。
更に、CI時にも設定可能なので品質の担保に、より良いツールだと感じました。
現在v2ですが、次バージョンのv3も開発が進んでいるようなので今後も期待したいです。

12月というのに暑かったり寒かったりが続きますが、みなさま体調にはご自愛ください。
では明日もAlterbooth Advent Calendarをお楽しみに!

サービス一覧 www.alterbooth.com cloudpointer.tech www.alterbooth.com