次のレベルのAzure IaC:Azure Verified Modules
Infrastructure-as-Code(IaC)、とりわけTerraformを用いたIaCは、当社のAzure Foundationの中核をなす要素であり、あらゆるクラウド移行の土台でもあります。IaCを体系的に使えば、クラウドサービスの導入も新しい製品の開発も速くなります。ここで浮かぶのが次の問いです。どこから始めるのが一番よいのでしょうか。

Azure Verified Module - Microsoftのベストプラクティスに沿ったIaC
Microsoftはこのテーマに本腰を入れて取り組み、Azure Verified Modules (AVM)という、ベストプラクティスに沿ってAzureにリソースを体系的にデプロイするためのフレームワークを作り上げました。
AVMには3つの種類があります。
- Resource Modules - 定義された1つのクラウドリソースをデプロイする
- Pattern Modules - 定義された1つのクラウドワークロードをデプロイする
- Utility Modules - Resource ModulesやPattern Modulesから利用される補助モジュール
統一された標準を保つため、Microsoftは新しいAVMリソースが満たすべき一連の要件を定めています。これはTerraformにも、Microsoft Azure独自のIaC言語であるBicepにも当てはまります。
どのAVMにもMicrosoftの担当者が割り当てられており、作成、継続的な開発、問題への対応を担当しています。
利用できるモジュールはすべてオープンソース(MITライセンス)として、Azure GitHub Organisationの公開GitHubリポジトリで入手できます。モジュールがうまく動かない場合や、必要なパラメーターがまだない場合は、誰でも問題を報告したり、開発に加わったりできます。
AVMはどのように始めるのか
AVMはTerraformやBicepの他のモジュールと同じように動作します。独立して呼び出され、必要なパラメーターをすべて受け取ります。AVMの作成要件により、必要なパラメーターは最小限に抑えられ、無理なく使い始められるようになっています。
Terraformの例です。追加のデータディスクを持つ仮想マシンをデプロイするには、Azureで少なくとも次のリソースが必要になります。
- azurerm_windows_virtual_machine または azurerm_linux_virtual_machine
- azurerm_network_interface
- azurerm_managed_disk
- azurerm_virtual_machine_data_disk_attachment<
これらのリソースにはそれぞれ必須のパラメーターがあり、リソースグループ名、対象リージョン、リソース自体の名称など、何度も繰り返し登場するものが少なくありません。
AVMを使うと、自分のコード内での呼び出しは必要なパラメーターを備えた単一のリソースに簡略化され、その先はモジュールの中で処理されます。AVMはMicrosoftの代表的なベストプラクティスをあらかじめ組み込んでいるため、多くのパラメーターには既定値が設定されており、追加の設定は不要です。たとえば多くのモジュールでは、TLS 1.2が既定値になっていたり、パブリックアクセスがブロックされていたりします。
使いたいリソースのAVMがまだない場合はどうするのか
AVMのオープンソースライセンスがあるので、フレームワークを土台に自分で開発を始められます。後日Microsoftの担当者が公式のAVMリソースの作成に着手した場合には、オープンソースの考え方どおり、それまでに積み上げた成果でその開発を後押しできます。
GKVM - glueckkanja ❤️ Open Source
glueckkanjaはまさにこのアプローチをとっており、AVMフレームワークを基にしたモジュールを開発し、その後に一般公開する取り組みでもお客様を支援しています。
当社はこれらのモジュールをGKVM(GlueckKanja Verified Modules)と呼んでいます。AVMの要件を満たしているだけでなく、数多くのプロジェクトで得た当社自身の知見も反映されているからです。
GKVM Resouce Modules:
GKVM Pattern Modules:
モジュールに機能を追加するきっかけになるイシューは、どれも歓迎します。















