見出し画像

Terraform と Google Cloud Deployment Manager の観点別比較 (2022 年 11 月版)

はじめに

こんにちは!!
株式会社グロービスにて、データサイエンスチーム、データエンジニアリングユニットのユニットリーダーをしております、爲岡 (@zettaittenani) です。
グロービスのテックマガジンに寄稿させていただくのは今回で 2 度めになります。よろしければ前回の記事と、ユニットメンバーの皆さんの記事も併せてご覧いただければと思います。

今回は、データサイエンスチームで進めている Infrastructure as Code (以降 IaC と略します) 化のプロジェクトに関連して、複数の観点で Terraform と Google Cloud Deployment Manager の比較を行いましたので、その内容に関して共有させていただければと思います。

💡 この記事は、Terraform もしくは Google Cloud Deployment Manager (以降 Deployment Manager と略します)、どちらかが優れている、であったり、どちらかを利用したほうがいい、ということを推奨したりするものではありません
利用するツールは重要視する観点や用途によって変わると考えていますので、状況に応じて判断していただければと思います。

背景

グロービスのデータ基盤は、Google Cloud Platform (以降 GCP と略します) をベースに構築・運用されています。
2020 年のチーム発足後からこれまでの間、提供している Web サービスのデータ連携や、分析のためのデータマネジメントなど、ビジネスのために必要な機能要件を優先してきたため、非機能要件に着手する時間が十分に取れる状況ではありませんでした。しかし、 2022 年に入り、ようやく最優先で対応すべきとされていたビジネス課題に一通り対応できてきています。
一方で、開発・運用に関わる非機能要件に関するペインが徐々に大きくなってきました。具体的には下記になります。

  • 歴史的経緯から GCP の設定は GUI 経由で行っているため、 Airflow や Cloud Composer のバージョンアップの際、本番環境の設定を確認した上で対処するのが手間である。

  • データ基盤の開発環境が無いため、 Airflow の DAG を開発する際には、一度本番環境に DAG をデプロイして動作確認をする必要がある。

  • GCP に関わるアカウントの権限が統一的に管理できておらず、オペレーションが煩雑になっている。

    • 最低限、Google Groups を利用して read, write 権限は管理しているものの、閲覧権限など細かいところまで踏み込めていない。

    • かつ、GUI での設定が続けられてきたため、権限の統一的な管理のためには、設定が複雑になっている現状の把握からスタートする必要がある。

上記のような課題を統一的に解消するために、データエンジニアリングユニットにて、 IaC 化プロジェクトを立ち上げ、進行することになりました。
プロジェクトの進行にあたり、利用する IaC ツールを選定する必要があります。今日では Pulumi など、宣言的でない IaC ツールも存在しており、様々な観点での比較をすることが適切であると考えられますが、我々に関して言いますと、他部署とのノウハウの共有のしやすさなどの理由で、 Terraform が第一候補となりました。
一方で、我々は GCP を利用したデータ基盤を運用しているので、Google Cloud が提供する IaC ツールである Deployment Manager も選択肢になりうるのではないか、と考えました。
そこで、執筆時点である 2022 年 11 月時点の Deployment Manager の特徴とその状況について調査し、複数の観点で Terraform のそれと比較を行いました。

🐈 本記事では、一部独自に調査した部分もあるものの、基本的には後述の「参考記事リスト」をもとに、有識者の方々のご意見を参考にさせていただき、予め観点を整理した上で比較を行いました。

参考記事リスト

参考にさせていただいた記事、ドキュメントとしては下記になります。
※ 参照内容はすべて、 2022 年 11 月 27 日にアクセスした時点のものです。

公式ドキュメント

比較記事

記事としては、2021年1月1日以降に書かれたもののみ採用しています。

  1. Nguyen, Huy. “Terraform vs Google Cloud Deployment Manager.” huy.dev, 20 January 2021.

  2. Mahesh. “Four reasons why Cloud Deployment Manager would vanish soon & Terraform would ROCK as GCP's IaC.” YouTube, 30 November 2021.

  3. Nguyen, Larry. “Comparing Terraform and Cloud Deployment Manager” Medium, 17 January 2022.

  4. Yanay. “Terraform vs Google Cloud Deployment Manager” The learning Bus, 11 November 2022.

観点

記事や公式ドキュメントを読みながら情報収集するうちに、 Terraform と Deployment Manager の両者を比較する際に、特に重要視すべき観点が整理できたので、下記の 6 つの項目にまとめました。

1. 金銭的コスト

  • インフラの管理のために金銭的コストが継続的に発生するかどうか。

2. 学習曲線

  • 採用するツールの機能や利用方法を学習するために必要な時間と、それに対する効果。

3. マルチクラウドの対応状況

  • 採用するツールがマルチクラウドシステムの構築・運用をサポートしているかどうか。

4. 状態管理の要不要

  • Terraform において、現在の環境の状況に対する差分を得るために、環境の状態管理が作業として必要になる。

  • 調べた限り、その管理のための運用コストが大きいようなので、状態管理の要不要を 1 つの観点として加える。

5. サポート対象のリソースの範囲

  • 利用するツールがサポートしている GCP リソースの範囲はどの程度か。

6. 持続可能性

  • 利用するツールが継続的にメンテナンスされているかどうか。また、今後も開発が続けられそうかどうか。

調査結果

サマリ

各観点における、 Terraform と Deployment Manager の特徴と優位性をサマリとして表にあらわすと、下記のようになりました。

各観点における、 Terraform と Deployment Manager の特徴と優位性


以降、各観点に関する詳細な内容に関して記載します。

優位性に明確な差が無いと思われるもの

1. 金銭的コスト

金銭的コストに関して調査したところ、 Terraform と Deployment Manager 、いずれも基本利用のための金銭コストは不要です。
また、 Google Cloud は、 Deployment Manager に限定したサポート体制を持っておらず、 Terraform のサポートと、その費用に関する直接的な比較ができないため、サポートにかかる費用に関してはこの観点から除きます。
以上により、金銭的コストの観点に関しては、両者の優位性に差は無いと言えます。
Terraform CloudTerraform Enterprise の利用に際して発生する金銭的コストに関しては、後述の「状態管理の要不要」の項目に含めています。

2. 学習曲線

学習曲線に関しては、 Terraform では HCL (HashiCorp Configuration Language) という固有の DSL を利用しているため、 Terraform を利用する際にはその機能や syntax を理解し、使えるようにする必要があります。
一方で、Deployment Manager では Python, YAML, Jinja2 など、他の技術でも流用可能なプログラミング言語や DSL を利用して設定を書くことができます。
上記のため、この観点では Deployment Manager に優位性があると思われますが、 比較記事 3. の “Learning Curves” の章の内容を自分なりに訳して参照させていただくと、 HCL は宣言的な言語であり、ループや変数を利用するとなると多少複雑になるものの、基本的には非常に学びやすいようです。
以上のような理由から、一方のほうが他方よりも学習時間に対する効果が高い、と一概に言うことは難しいと思われます。

優位性に差があると思われるもの

3. マルチクラウドの対応状況

マルチクラウドに関して言いますと、 Terraform はマルチクラウドに対応していますが、 Deployment Manager は Google Cloud のリソースに関してのみ管理が可能であるようです。
よって、この観点では Terraform に優位性があると言えます。

4. 状態管理の要不要

Terraform では、ツール自身が現状の環境の状態と、新たに適用する設定内容との差分を正確に把握するために、状態管理を行う必要があります。
具体的に言うと、Terraform の状態を管理するために利用される tfstate ファイルは、各クラウドのストレージで管理する必要があります。これは、単に利用しているバージョン管理システムのリモートリポジトリに上げておけばいいというものではないため、管理が煩雑になる場合もあるようです。
また、Terraform における状態管理は、 Terraform CloudTerraform Enterprise に任せることもできるようですが、これらは利用人数によっては有料です。
つまり、Terraform を利用する場合は、その状態管理のために運用コスト、または金銭的コストを支払う必要があります。
一方で、 Deployment Manager に関しては、利用に際しての状態管理そのものが不要です。
以上により、Terraform Cloud や Terraform Enterprise の無料利用がスイートスポットとなりうるものの、この観点では、総じて Deployment Manager に優位性があると思われます。

5. サポート対象のリソースの範囲

サポート対象のリソースの範囲に関しては、 比較記事 2. にて言及されていますが、少なくとも下記のリソースに関しては、Terraform ではサポートされている一方で、 Deployment Manager ではサポートされていないようです。これは記事執筆時点 (2022 年 11 月 27 日) においても同様の状況になっています。

  • Secret Manager

  • Cloud Composer

  • Cloud Data Fusion

これに関して追加で調査したところ、 Deployment Manager の公式ドキュメントである Supported GCP type providers に記載されている、Deployment Manager でサポートされているリソースに関してはすべて Terraform でサポートされていました。
一方で Deployment Manager では、サポートされていないリソースが多く存在しています。代表的なもので言うと、上記で挙げているリソースの他に、下記のリソースはサポートされていないようです。

  • Cloud Run

  • Cloud Dataflow

  • Vertex AI

上記により、この観点では Terraform に優位性があると言えます。

6. 持続可能性

持続可能性に関しては、各ツールのリリースノートをみて、継続的なメンテナンスが実施されているかどうかを確認しました。
まず、 Terraform の release notes を確認すると、 v1.3.5 が 記事執筆時点 (2022 年 11 月 27 日) の最新版であり、2022 年 11 月 17 日にリリースされています。直近のリリース日が 10 日前であり、継続的にメンテナンスされていることがわかります。
一方で、 Deployment Manager release notes によると、Deployment Manager は 2020 年 4 月 16 日以降のリリースがないようです。
以上により、継続的にメンテナンスされている Terraform に優位性があると思われます。
※ 「サポート対象のリソースの範囲」の項目にて、サポート対象のリソースの範囲に大きな差がある、と言及しましたが、その要因は、Deployment Manager に関して直近のリリースが無いことであると考えられます。

まとめ

本記事では、複数の観点で Terraform と Google Cloud Deployment Manager の比較を行いました。
ツールの選定においては、どの観点を重要視するかによって、選択が変わってくると思います。
例えば、今回の調査結果を参考に判断を行うとすると、クラウドインフラに GCP を利用していて、状態管理にコストをかけられるほどの人的、時間的リソースが無く、それでも IaC でインフラを管理したい場合は、 Deployment Manager が第一の選択肢になると思います。
一方で、マルチクラウドを前提としたシステムを組む場合は、 Terraform が第一候補になるかと思います。
まずは重要視する観点を定め、個々の状況に応じた最適な選択肢が取れるとよいと思います。本記事がその一助になれば、とても嬉しいです。
また、今回の調査内容は多くの部分が二次情報で構成されています。各ツールの使い心地など、実際に触ってみたりしないとわからないことは大いにあると思います。もし、本記事の記載内容で事実と異なる箇所がありましたら、是非教えていただければ幸いです。
最後に、我々データサイエンスチームでは、一緒に働く仲間を絶賛募集中です。この記事を読んで、グロービスで働くことにご興味をお持ちになった方がいらっしゃいましたら、是非お気軽に下記のカジュアル面談にお申し込みいただければと思います。 (@zettaittenani まで直接ご連絡いただいても構いません。)

お読みいただきまして、誠にありがとうございました。

この記事が気に入ったらサポートをしてみませんか?