テスト ツールキット モジュールを使用してベスト プラクティスを適用する

完了

Azure Resource Manager テンプレート (ARM テンプレート) を開発する場合、いくつかの方法で有効なテンプレートを簡単に作成でき、その品質を向上する推奨事項を提供できます。 これらの推奨事項はどのようなもので、テンプレートでそれに準拠するとなぜよいのでしょうか。

パラメーターや変数から、リソースに適用される推奨事項まで、さまざまなレベルの推奨事項があります。 これらの推奨事項を大まかに調べて、これらを遵守することによって何が得られるかを確認しましょう。

  • 保守容易性。 テンプレートを開発する際、初めて作成するときから更新まで、テンプレートをクリーンで整然とした状態に保つことは時間の経過と共に困難になります。 テンプレートが大きくなると、パラメーターや変数の数も増えます。 それぞれの用途と、適切な使用方法を理解することが重要です。

    たとえば、パラメーターに不適切な名前が付けられていて、その機能を理解するのに苦労するようなシナリオを想像してください。 または、不適切な場所でハードコーディングされた値を使用していて、何かが変更されると Azure のサービスがダウンするような場合です。 このような問題はすべて、見ているものを理解した後で棄却しなければならないという負荷をもたらします。 名前付けの方法の規則に従い、ものごとを明確にしておくことは、これらのシナリオの影響を軽減するのに役立ちます。

  • 正確さ。 すべてを正しい方法で名前付けしようする場合、追跡する規則が多すぎることもあります。 このような状況では、これらすべての規則と規制を把握し、それらを適用できるツールが必要です。

  • 柔軟性。 テンプレートがどのような環境でも使用できる柔軟性を備えていることを確認します。 テンプレートを適切にパラメーター化しないと、再利用できない可能性があります。

  • 拡張性。 独自の推奨事項を追加することが必要な場合があります。 会社またはチームに、適用する独自のルールがある場合があります。

注意

このような推奨事項に対するコードのチェックは、"リンティング" と呼ばれる場合があります。

ARM テンプレート テスト ツールキット

テスト ツールを使用するのはよい方法です。ツールによって問題が検出され、テンプレートの品質が向上することを把握しながら、作成に専念することができます。 ARM テンプレート テスト ツールキット (ARM-TTK とも呼ばれる) のようなツールがあります。 一連のテストを実行することで、上記の問題に対処できます。 テストは、次のカテゴリに分類できます。

  • ユーザーの意図の検証。 このカテゴリでは、宣言されている変数やパラメーターがすべて使用されているかどうかが調べられ、そうでない場合は警告されます。
  • セキュリティ プラクティスの順守。 もう 1 つの重要な側面は、API シークレットなど、機密性が高い可能性のある情報がテンプレートから返されないようにすることです。
  • 適切な言語構造の使用。 ハードコーディングされた値に依存しないように、言語のコンストラクトやヘルパー関数を使用する必要があります。

注意

これらは推奨事項であり、要件ではありません。 ただし、これらに従うことを強くお勧めします。

ツールのインストール

このツールは PowerShell モジュールです。 実行するには、次のステップに従う必要があります。

  1. PowerShell をインストールします。 このタスクの実行方法は、Linux、Mac、Windows のいずれを使用しているかによって異なります。
  2. モジュールをダウンロードします。 このモジュールは GitHub リポジトリでホストされています。 そこからダウンロードすることも、git clone コマンドを使用してフェッチすることもできます。
  3. モジュールをインポートします。 このステップは PowerShell セッションに入る単なる 1 行の命令で、これにより ARM-TTK コマンドが使用できるようになります。

このすべての方法について、次のユニットで説明します。 ツールをインストールしたら、テンプレートでテストを実行する準備が整います。

テストの実行

テストを実行するには、適切なパラメーターを指定してモジュールを呼び出します。 -TemplatePath は必須のパラメーターであり、デプロイ テンプレート ファイルの場所を指す文字列を指定する必要があります。 テンプレート ファイル名は、azuredeploy.json または maintemplate.json のどちらかにする必要があります。 したがって、一般的なテストの実行は次のコマンドのようになります。

Test-AzTemplate -TemplatePath path/to/template

このツールでは、テンプレート ファイルがテストされ、同じディレクトリとそのサブフォルダー内のすべてのテンプレート ファイルもテストされます。

テストの実行からの一般的な出力は次のようになります。

[+] adminUsername Should Not Be A Literal (24 ms)
[+] apiVersions Should Be Recent (18 ms)
[+] artifacts parameter (16 ms)
[+] DeploymentTemplate Schema Is Correct (17 ms)
[+] IDs Should Be Derived From ResourceIDs (15 ms)
[-] Location Should Not Be Hardcoded (41 ms)
     azuredeploy.json must use the location parameter, not resourceGroup().location (except when used as a default value in the main template)

成功したテストは緑で示され、先頭に [+] が付けられます。 失敗したテストは赤で示され、先頭に [-] が付けられます。

テスト パラメーターを使用してテストの実行を構成する

ここまでは、ツールを実行するときにパラメーター -TemplatePath を含めることが必須であることについて説明してきました。 ツールに省略可能なパラメーターを指定することもできます。 これらのパラメーターを使用すると、特定のファイルまたは特定のテストを実行できます。 これらのパラメーターを使用すると、テンプレートの作成とデバッグの両方をよりきめ細かく制御できるようになります。

パラメーター -File は、特定のファイルを実行するために使用されます。 パラメーター -Test を使用すると、実行するテスト シナリオを指定できます。

このパラメーターは、次の方法で使用できます。

  • 1 つのファイルに対してテストを実行します。 現在作業している 1 つのファイルに対してのみテストを実行したい場合があります。 その理由は、特定のテンプレート ファイルの作成に集中しやすくなるためです。 さらに、出力に含まれるノイズが少なくなり、関心のあるものだけが表示されるという利点もあります。 -File パラメーターを使用してファイルへのパス (ファイル名を含む) を指定すると、そのファイルに対してのみテストを実行できます。

    重要

    このパラメーターを使用する場合も、azuredeploy.json または maintemplate.json が指定した場所に存在している必要があります。

  • すべてのファイルに対して単一の種類のテストを実行します。 場合によっては、1 種類のテストだけを実行して、そのシナリオだけに対する条件が満たされていることを確認したい場合があります。 このタスクは、パラメーター -Test を使用して実行できます。 このパラメーターには、テストの完全な名前 (例: リソースには場所が必要である) を引用符付きで指定する必要があります。