Quantcast
Channel: ほりひログ
Viewing all articles
Browse latest Browse all 44

Bicepに書いたリソースの名前チェックをしてみたかった

$
0
0

これはMicrosoft Azure Advent Calendar 2024の8日目の記事です。


Bicepを書いて作るリソースの名前を設定する時、馴染みのないリソースがあると「このリソースの省略形、何だっけ???」となり↓を検索して調べる、というのを繰り返している。

learn.microsoft.com

割と面倒くさい。

調べるのも大変だし、このリソースの省略形は、リソース名の命名規約に入ることも多いので、規約に従ったリソース名を付けているか、世の現場ではどうチェックしているのかが気になる。

Azure Policyを使えば、リソースをデプロイする時に name に指定の文字列が含まれているかどうかのチェックはできる。
けど正規表現みたいにパターンでチェック、みたいのはできなかったはず*1

Bicepでリソース名のチェックについて調べてみたけど、解決策どころか困っている声も見当たらなかった。
うーん、自分以外は誰も困ってないのかもしれない。。。*2

けど、自分は今困っているので何とかしてみようと思った。

何とかしてみる。

textlintを使ってリソース名チェックをしてみた。

textlint.github.io

textlintは、テキストファイル/HTML/Markdownをメインに、ファイル中の構文等をチェックできるLinterツールで、さらにカスタムの構文解析プラグインとカスタムのチェックルールを追加することができる。

ただtextlintの標準機能だけでは nameの値をチェックすることはできないので、今回はBicepの構文を解析するtextlintプラグインと、リソース名をチェックするtextlintルール、この2つを作ってtextlintにBicep内のリソース名チェックをさせてみることにした。

github.com

github.com

npmにも登録済み*3

正直なところ、textlintでBicepみたいな構文がカッチリ決まったDSLをチェックすることは想定外かもしれないけど、他にやり方が思いつかなかったので。

使ってみる。

まずは環境構築から。

  1. 最初にtextlintを入れる。
    今回はtextlintを使うのでこれは必須。

    この種の開発/補助ツールは、大抵対象のプロジェクト専用のものとして入れるのが習わしなので、 --save-devを付けてインストールする。

     $ npm install --save-dev textlint
    
  2. 次に textlint 用のカスタムルール @horihiro/textlint-rule-azure-naming-conventionとカスタムプラグイン@horihiro/textlint-plugin-bicepを入れる。

    入れる場所は textlintのインストールに合わせるので --save-devを付けてインストール。

     $ npm install --save-dev @horihiro/textlint-rule-azure-naming-convention @horihiro/textlint-plugin-bicep
    
  3. 最後に設定ファイルを作る。
    これはtextlintコマンド(--save-devで入れたのでnpxで実行)に--initオプションを付けると作れる。

     $ npx textlint --init
    

    設定ファイル .textlintrc.jsonができているはず。
    プラグインとルールがインストールされていれば、それぞれ↓のように "plugins"と "rulesに設定されているはず。

     {
       "plugins": {
         "@horihiro/bicep": true
       },
       "filters": {},
       "rules": {
         "@horihiro/azure-naming-convention": true
       }
     }
    

環境構築は以上で完了。

環境構築が終わったら、実際にBicepファイルで試してみる。

試してみるにはBicepが必要なので、GitHub Copilotに作ってもらった。
AKSクラスターリソースであることに特に意味はなし。

resource aksCluster 'Microsoft.ContainerService/managedClusters@2022-09-01' = {name:'myAKSCluster'location:'japaneast'sku:{name:'Basic'tier:'Free'}properties:{
    (以下略)

チェックするリソース名の箇所はname: 'myAKSCluster'と書かれている。

このBicepを対象にしてtextlintコマンド npx textlint sample.bicepを実行してみると、

/PATH/TO/sample.bicep 2:10 error [Naming violation] The name for 'microsoft.containerservice/managedclusters' should match by the pattern '^aks-' @horihiro/textlint-rule-azure-naming-convention

✖ 1 problem (1 error, 0 warnings)

インストールしたカスタムルールには、既定でリソース名が{リソースの省略形}-で始まるパターンをチェックするルールが設定されていて、AKSクラスターの省略形は aksなので、aks-...というリソース名かどうかをチェックする。

myAKSClusterはそうではないのでエラーが出てる。
リソース名を aks-...に変えればこのエラーは出なくなる。

チェックパターンを変える。

このカスタムルールの既定のパターンは、リソースの省略形が接頭辞として使われることを決め打ちで作ったので、命名規則上別のパターンが必要な場合は設定ファイル .textlintrc.jsonをいじる。

例えば、名前のどこでもいいから「AKS」という文字が含まれていれば問題なしとするなら(ありえないけど)、

{"plugins": {"@horihiro/bicep": true},
  "filters": {},
  "rules": {"@horihiro/azure-naming-convention": {"patterns": {"microsoft.containerservice/managedclusters": "^.*AKS.*$"
      }}}}

等と書く。

さっきのBicepの例だと、リソース名myAKSClusterはこのパターンにマッチしているので、textlintコマンドを同じように実行してもエラーは出なくなる。

VSCodeから使ってみる。

VSCode用拡張 vscode-textlint を使えば、VSCodeでBicepファイルを開いた状態でリアルタイムにリソース名チェックの結果確認できる*4

marketplace.visualstudio.com

これはお好みで。

vscode-textlint も使ってVSCode上でリソース名チェック&修正している様子はコチラ。
# 全画面にしないとわけがわからないけど。

動画内の VSCodeのエディター部分ではBicepファイルを開いていて、その中でApp Service リソース(microsoft.web/sites)が書かれている。

VSCode下部の PROBLEMSタブには「リソース名がパターン ^app-に沿ってないぞ」というエラー表示。
エラーメッセージが示すエラー箇所(3行目の10文字目)は赤の波下線で強調されていて、実際に nameweb-から始まっているので、エラーメッセージ通りなのがわかる。

という感じで、vscode-textlintと組み合わせれば、VSCodeでBicepを書いている最中に命名規則から外れてることに気づくことができる。

後半は Quick Fixから Fix using Copilotとやると、GitHub Copilot がエラーメッセージを理解してリソース名を app-...に修正してエラーが消えてる様子。
この部分は「Copilotって便利だね」っていう別の話。
正直後半の方が映える。

「またつまらぬものを作ってしまった」

以上。


*1:できるならごめんなさい

*2:ちなみにbicepのコマンドにも linter の機能はあるはあるけど、ルールは組み込みのものだけで、リソース名をチェックする組み込みルールはなさそうだ。おしい。https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/bicep/linter

*3:最後にnpmにモジュールを公開したのが5年前だったらしく、npmへのログイン方法からさっぱり忘れてた。。。

*4:ただこの拡張機能、最終更新が2年前で、開発が停滞しているのが気になる。


Viewing all articles
Browse latest Browse all 44

Trending Articles