Google Cloudのサービス構築にTerraformを採用するときに顧客に伝えたいこと
Google Cloudのサービス構築にTerraformを採用するときに顧客に伝えたいこと
Google CloudのインフラリソースをInfrastructure as Code (IaC)で管理したい。ですが、顧客もアプリケーションロールよりのリーダーも、インフラリソースをコード管理する意義は認めてるものの、その詳しい内情には詳しくなさそう。
そんな状況下でTerraformerな開発者であるあなたはまず何をすべきでしょうか?
Terraformの採用に関して顧客とチームに説明と了承を得ることですよね。[1]
初期のころに書いたコードが爬虫類脳がごとく残り続けることは珍しくありません。それがIaCに関する内容ならなおさらです。その初期選択を変えるのはデータ移行にも匹敵するぐらい、なかなか難しいものです。
だからこそ相手に対しては慎重に話を持っていく必要があります。インフラエンジニアにとってTerraformは愛ですが、他の人にとっては数あるツールに過ぎませんから。
それに、Third-party製のプロダクトよりもマネージドサービスが良いというポリシーを持つ方はどんなにツールに知名度があっても一定数いらっしゃいます。Google Cloudの中で、Terraformを使った構築は次に説明するように半ば公式推奨扱いであることを、プロジェクトリーダーと顧客に説明してまずは理解を求めるべきです。
具体的には、昨年発表されたように Google CloudとHashicorpは戦略的パートナー関係にあり、(条件次第では)両社からテクニカルサポートを受けられる ことを説明すると良いでしょう。
Google Cloud、Hashicorpと顧客がどのようなサポート契約を結んでいるかにもよりますが、テクニカルサポートの有無は重要な判断材料です。
そもそも前提を聞かれたら?
そもそもTerraformを使うメリットはなにか?そして、Google CloudにてTerraformを使うメリットは?ということに関して改めて説明を求められた場合は、Google Cloudのユーザーコミュニティに向けて書かれた、TerraformとGoogle Cloudのパートナーシップを説明する下記のブログ(英語)が参考になるでしょう。
その中でも、Google Cloud’s commitment to Terraform (Google CloudによるTerraformへの約束事)は、両者の関係がよくわかる内容だったので、抄訳で紹介したいと思います。
[2]
Google CloudによるTerraformへの約束事Core: 主要機能
Core: We’re committed to improving the core functionality of the Terraform Provider for Google Cloud, including performance, reliability, and security.
主要機能:わたしたちTerraform Provider for Google Cloudの主要機能の主要機能について、パフォーマンス、信頼性、そしてセキュリティの面で向上させることを約束します。
Discovery: 発見する
Discovery: We’re making it easier to discover and use Terraform resources - including documentation and tutorials and the Terraform Registry where users can easily find, share, and install Terraform modules.
発見する:Terraformリソースを発見し、使用するのを分かりやすくします。ドキュメントやチュートリアル、Terraform Registryを通じて、Terraformモジュールの探索、共有、インストールを手助けします。
Enable: 可能にする
Enable: In addition to documentation and modules, Google is committed to providing enablement and training resources to help users learn and use Terraform, including hands-on labs and training courses, certification programs, support forums, and live Q&A events.
可能にする:GoogleはTerraformを学び、使用するユーザーをサポートするために、ドキュメントとモジュールに加えて、ハンズオンラボや研修コース、認定プログラム、サポートフォーラム、ライブ形式のQ&Aイベントなどの教育・トレーニングリソースを提供することを約束します。
Author: 作成者
Author: We’re making it easier for users to author Terraform code and configurations with Jump Start solutions (pre-built solution templates), Terraform resource samples, and Cloud Foundation Toolkit & Fabric.
作成者:ジャンプスタートソリューション(予め構築されたソリューションテンプレート)、Terraformリソースのサンプル、Cloud Foundation Toolkit & Fabricにより、Terraformコードの編集と構成をユーザーが簡単に行えるようにします。
Deploy & manage: デプロイ&管理
Deploy & manage: We’re building closer integrations between Terraform and Google Cloud in partnership with HashiCorp. In Q3, we are launching a native Terraform config and deployment management product offering - Blueprints Controller - so you can automatically apply and manage Terraform manifests in your environment. We also provide best practice guidance of building self-managed IaC config management using Cloud Build.
デプロイ&管理:HachiCorp社とのパートナーシップにより、TerraformとGoogle Cloud間の連携をより強化していきます。第3四半期に、ネイティブのTerraformの構成・デプロイ管理プロダクトであるBlueprints Controller[3]を立ち上げます。これにより、環境内のTerraformマニフェストを自動的に適用し、管理できるようになるでしょう。またCloud Buildを使用した自己管理型のIaC構成管理のベストプラクティスに沿ったガイダンスも提供します。
Policy: ポリシー
Policy: Google is providing Terraform support for policy-based management of infrastructure to more easily enforce security, compliance and other custom policies, including integration with Google Cloud's IAM and Cloud Audit Logging services.
ポリシー:Googleは、Google CloudのIAMやCloud Audit Loggingサービスとのインテグレーションを含む、セキュリティ、コンプライアンス、その他のカスタムポリシーをより簡単に適用できるように、インフラのポリシーベースの管理のためのTerraformサポートを提供しています。
Support: サポート
Support: We’re committed to providing support for users of Terraform on Google Cloud with improved response times for bug fixes and feature requests.
サポート:Google CloudのTerraformユーザーに対するサポートに力を入れており、バグ修正や機能リクエストに対する返答時間の短縮に努めています。
上記のコミットメントについて、併せて調べたことをセルフQA表でまとめました。
Q. Google側のTerraformへの関与度って実際のところ、どうなのでしょうか?
A. Terraform Providerに関して言えば、想像以上にガッツリです
Contributorの存在
Terraformはプラグイン型のアーキテクチャを採用しており、構築したいクラウドサービスに応じて、リソースを制御するためのProviderが存在します。
たとえば、Google CloudならTerraform Provider for Google Cloud、AWSならTerraform Provider for AWSといった風にあるのですが、Google Cloud、AWS、Azureと、主要なクラウドサービスのProviderを比較したときに、実はGoogle Cloudだけにしかない大きな違いがあります。
それは クラウドサービス側の企業所属のContributor の存在です。
プロバイダーサービスは基本的にHashicorp社の中の人が取りまとめる形で、コミュニティベースで開発が進められています。クラウドサービス側の開発者が積極的に関与しているわけではありません。AWSもAzureも例外ではなく、Contributorの上位陣に中の人は見受けられませんでした。
しかし、Google Cloudは異なります。GitHubのリポジトリを確認すると、数年前より複数名のGoogle所属の開発者が関わっており、積極的に活動しているようです。その恩恵はサポート契約者という狭い範囲ではなく、Terraform on Google Cloudのユーザーに対して幅広く享受されるものでしょう。
主要なクラウドサービスのTerraform Provider間での開発者の違いは、地味に驚いた気づきでした。
Q. 教育やトレーニングに使えそうな書籍、ドキュメントはありますか?
A. Google Cloudの公式ドキュメントを当たりましょう
最初の一歩
Google CloudでTerraformを扱う際に、真っ先に参考にしたいのがGoogle Cloudが出しているTerraformに関する公式ドキュメントです。
個人的にはGoogle Cloudをこれから触るインフラエンジニアには、こちらの資料の「ガイド」->「使ってみる」で、まずは触ってみることをお勧めしています。
Google Cloud Skills Boost
Google Cloudが学習者向けに有償で提供しているオンライン学習コンテンツがGoogle Cloud Skills Boostです。"学習を始める" たびに、新規でGoogleアカウントが払い出されるのでGoogle Cloudのコンソール画面を直接実際にセルフペースで操作しながら学べるのは、なかなかない大きな特徴だと思います。
このGoogle Cloud Skills Boostに、当然TerraformでGoogle Cloud内のインフラリソースを構築するコンテンツも複数存在します。 Managing Cloud Infrastructure with Terraform
ではCloud SQL構築等の構築操作が可能なので、上記と合わせてお勧めしています。
Q. 実装ってどれを参照にすればいいのか迷います
A. まずは参照実装ごとの特徴を知りましょう。
上記の Author: 作成者
でも触れていますが、リポジトリにはサンプルコードが数多く存在します。それぞれの特徴について軽く触れたいと思います。
Google Cloudのジャンプスタートソリューションガイド
あるサービスをさくっと作って感じを確認したい...そんな要望に応えるのがジャンプスタートソリューションガイドです。このソリューションガイドでは、構築方法としてGoogle CLIを使用したデプロイ方法と並んで Terraformを使用したデプロイ という手順があらかじめ存在するのが大きな特徴でしょう。
中身のサンプルコードは、基本的にTerraformはモジュールではなくリソースが使用されているので、これをベースに拡張していくのはある程度の規模からは辛いと思いますが、内容を手短に把握したいという要望に強く答えていると思います。
Cloud Foundation Toolkit & Cloud Foundation Fabric
Cloud Foundation Toolkit(CFT)とCloud Foundation Fabric(CFF)はいずれも、Terraformモジュールを基本的な単位として、個別のソリューション、あるいはベストプラクティス集としてサンプルをまとめたものです。
自分の見解では、
- Cloud Foundation ToolkitはTerraform Registryに登録されたGoogle Cloudモジュールを利用した汎用的な構成ソリューションが多い
- Cloud Foundation Fabricは専用線を用いた閉域網をオンプレミスとGoogle Cloud間で構成するような、エンプラ向けの大規模開発を行いたい環境向けソリューションが多い
という印象です。違いについてはリポジトリの公式ドキュメントにまとめられていますが、機会があれば解説したいと思います。
リポジトリのリンク集
上記を踏まえて、ユースケースごとに個人的に目安として使っているリンク集を置いておきます。
- ソリューションカットでさくっと構成を確認したい
- Google Cloudのリソース種別に応じて、Terraformモジュールの実装例を確認したい
- Google Cloud の Terraform ブループリントとモジュール のうち、terraform-google-modules のリポジトリ配下のリンク
- エンプラ向けにある程度統制やセキュリティを意識しながらゴリゴリTerraformを書きたい
所感
このエントリは、Terrraformのライセンス変更や同時期に発表されたInfrastructure Managerという実質的なTerraformのマネージドサービスの登場を契機に、チームで当たり前になってたGoogle Cloudのインフラ構築でTerraformを使う理由について改めて調べてみた内容です。
Deployment ManagerやConfig Controller等のマネージドサービスや公式の開発ツールを差し置いてTerraformを使う理由について、実際に顧客から突っ込まれた経験はありませんが、想像してみた場合うまく説明できる気がしませんでした。口下手な自分でも理論武装できるように参考資料を集めていたところ、開発性や保守性に繋がる両者の強固な関係を知って安心しました。
プロジェクトの立ち上がり時はインフラ観点で言えば最も忙しく、要件定義などと並行して開発環境の準備をする必要があるため、正直その環境を作るためにどんなツールを使ってるか検討する余裕はあまりありません。
その中で、こうしてGoogle Cloud側が公式ドキュメントを通じてあらかじめ道を作ってるのは、Terraformを愛する開発者としては嬉しい限りです。
-
実際は、事例調査、非機能要件の整理、システム稼働時の概算出し等の楽しくない工程を踏んだ上でやっとTerraformに触れることができます。 ↩︎
-
Google Cloudコミュニティブログ-Introduction to Terraform on Google Cloud: Solutions, benefits, resources, and FAQs -Google Cloud’s commitment to Terraform より引用 ↩︎
-
流れ的に、2023年の9月にブログで発表があり、使えるようになったInfrastructure Managerのことだと思いますが、中の人、ご教授いただければ幸いです。 ↩︎
Discussion