Alternative Architecture DOJO

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

ARMテンプレートテストツールキット(arm-ttk)を使ってみた

この記事は、オルターブース Advent Calendar 2020 2日目 MLBお兄さん から2年連続バトンを受け取って、3日目の記事です。

aadojo.alterbooth.com

ARMテンプレートテストツールキット(arm-ttk)?

docs.microsoft.com

Azure Resource Manager (ARM) テンプレート テスト ツールキットでは、推奨される方法がテンプレートで使用されているかどうかが確認されます。 テンプレートが推奨されるプラクティスに準拠していない場合は、推奨される変更を含む警告の一覧が返されます。 テスト ツールキットを使用すると、テンプレートの開発での一般的な問題を回避する方法がわかります。

これまで ARMテンプレートの書き方ってこれで本当にいいの・・・? という思いがありました。もちろん動くARMテンプレートなので使う上では問題ありません。

このARM-TTKを使えば、

  • 推奨の方法で書く
  • 人によらない統一した書き方を保てる

をコントールすることができるので、ARMテンプレートの品質を維持につながります。テスト内容はカスタマイズしたり、ARM-TTKをパイプラインに組み込んだりすることもできます。

何をテストできるの?

ARMテンプレートにARM-TTKを流すと、結果はこのような形で出てきます。

テストは緑色が合格、赤色が不合格で表示されます。各テスト項目の詳細はこちらから確認できます。

docs.microsoft.com

使うには?

docs.microsoft.com

ARM-TTKはPowerShellスクリプトです。各OSへPowerShellをインストールして利用します。

  • Windows
  • Linux
  • macOS

私的環境準備

  • macOS
  • ローカル環境汚したくない
  • PowerShellに慣れてない

という個人的背景から、ARM-TTKが動くDockerを準備してみました。Dockerにしておけば、環境準備も配布も楽ですからね。

FROM mcr.microsoft.com/powershell:lts-ubuntu-18.04 as build

RUN apt-get update && apt-get install -y --no-install-recommends \
        git \
    && rm -rf /var/lib/apt/lists/*

RUN git clone https://github.com/Azure/arm-ttk.git

FROM mcr.microsoft.com/powershell:lts-ubuntu-18.04

COPY --from=build /arm-ttk/arm-ttk /arm-ttk

WORKDIR /arm-ttk

CMD ["./Test-AzTemplate.sh", "-?"]

作成したDockerfileとDockerイメージはこちらに置いてあります。

github.com

hub.docker.com

dockerでARM-TTKを動かしてみます。試しに、このARMテンプレートをARM-TTKで流してみました。

azure-quickstart-templates/101-webapp-basic-windows at master · Azure/azure-quickstart-templates · GitHub

cd 101-webapp-basic-windows
docker run -it --rm -v $PWD:/template hawaku/arm-ttk ./Test-AzTemplate.sh -TemplatePath /template

Validating template\azuredeploy.json
  deploymentTemplate
    [+] adminUsername Should Not Be A Literal (168 ms)
    [+] apiVersions Should Be Recent (109 ms)
    [+] artifacts parameter (18 ms)
    [+] DependsOn Best Practices (22 ms)
    [+] Deployment Resources Must Not Be Debug (28 ms)
    [+] DeploymentTemplate Must Not Contain Hardcoded Uri (31 ms)
    [+] DeploymentTemplate Schema Is Correct (6 ms)
    [+] Dynamic Variable References Should Not Use Concat (6 ms)
    [+] IDs Should Be Derived From ResourceIDs (110 ms)
    [+] Location Should Not Be Hardcoded (48 ms)
    [+] ManagedIdentityExtension must not be used (4 ms)
    [+] Min And Max Value Are Numbers (9 ms)
    [+] Outputs Must Not Contain Secrets (12 ms)
    [+] Parameters Must Be Referenced (15 ms)
    [+] Parameters Property Must Exist (5 ms)
    [+] providers apiVersions Is Not Permitted (3 ms)
    [+] ResourceIds should not contain (26 ms)
    [+] Resources Should Have Location (8 ms)
    [+] Secure String Parameters Cannot Have Default (5 ms)
    [+] Template Should Not Contain Blanks (11 ms)
    [+] Variables Must Be Referenced (28 ms)
    [+] Virtual Machines Should Not Be Preview (55 ms)
    [+] VM Images Should Use Latest Version (2 ms)
    [+] VM Size Should Be A Parameter (45 ms)

ちなみに、自作のARMテンプレートにARM-TTKを流したら沢山の不合格がでて、「うぁぁぁぁ」ってなりました。不合格が出てもARMテンプレートとしては役目をしてくれ(直します)。

それでは、4日目もお楽しみに! オルターブース AADOJO Advent Calendar 2020 - Adventar

www.alterbooth.com

www.alterbooth.com

cloudpointer.tech