HCP Terraform を導入するメリットを整理してみた

はじめに

Terraform には CE(コミュニティエディション)版1と SaaS 版、オンプレ版の 3 つの提供形態がある。CE 版についてはある程度知っていたが、それ以外に触れる機会がなかったので概要を勉強した上で、本記事では SaaS 版である HCP Terraform を導入する場合のメリットを整理してみた。

TL;DR

HCP Terraform を導入する大きなメリットは下記 3 点だと思う。

  • tfstate の管理
  • VCS との連携(CI/CD)
  • セキュリティとガバナンスの強化

それを踏まえると下記のような判断になるのではないだろうか。

  • 単なる運用の標準化・効率化(コード化、再利用、バージョン管理など)が目的
    • CE 版 Terraform で十分
  • 組織的なガバナンス、チーム横断の運用効率化、セキュリティや一元管理、CI/CD 連携などが求められる場合
    • HCP Terraform の導入を検討する

HCP Terraform とは

そもそも HCP Terraform についてだが、一言でいうと「Terraform をチーム・組織で運用していく上でいろんな便利な機能を備えた SaaS サービス」である。

What is HCP Terraform? | Terraform | HashiCorp Developer
HCP Terraform is an application that helps teams use Terraform to provision infrastructure. Learn how HCP Terraform can help you collaborate, manage remote state, and automate workflows.
What is HCP Terraform? | Terraform | HashiCorp Developer favicon developer.hashicorp.com
What is HCP Terraform? | Terraform | HashiCorp Developer

いろんな機能が提供されているため、本記事で全ての機能には触れないが、CE 版と比較して SaaS 版を契約するメリットについて後述していこうと思う。

ちなみに各提供形態の名称については以下の通りである。

  • CE 版: Terraform
    • 旧名称だと Terraform Cloud と呼ばれている時期もあったので、こちらが馴染みのある人も多いかも知れない。
  • SaaS 版: HCP Terraform
  • オンプレ版: Terraform Enterprise

HCP Terraform のメリット

tfstate の管理

HCP Terraform を利用するメリットの一つは、Terraform の tfstate ファイルをクラウド上で安全かつ一元的に管理できる点だと思う。

tfstate ファイルの管理については、チーム開発だとローカルで管理する訳にはいかないので、自前でリモートバックエンド(例えば AWS だと S3 のようなオブジェクトストレージ)を使った管理になるだろう。しかし、競合や破損、アクセス権限の管理、バックアップ運用、そもそもそのバックエンドの S3 などは Terraform で管理しないのかなど、、、クリティカルなものを扱うが故に地味に検討するポイントが多かった。

HCP Terraform では、各ワークスペースごとに tfstate ファイルを自動的に管理され、ロックやバージョン管理も標準でサポートされている。そのため、複数人での同時作業でも tfstate ファイルの競合や上書き事故を防ぐことができ、過去のバージョンを GUI から簡単にロールバックできる。

さらに、tfstate ファイルは暗号化されて保存されるため、セキュリティ面でも安心できる。

VCS との連携(CI/CD)

HCP Terraform のもう一つの大きな特徴が、GitHub や GitLab、Bitbucket など主要なバージョン管理システム(VCS)とシームレスに連携できる点だ。

VCS で Terraform コードを管理しつつ、手組で CI/CD を構築する必要があった。具体的には、CI 上で AWS などのクラウドのリソースをプロビジョニングするためのアクセスキー(あるいは assume role)などを設定しておく必要がある。

しかし、HCP Terraform で VCS 連携を有効にすると、例えば PR(Pull Request)作成や更新をトリガーに自動で terraform plan を実行し、PR マージをトリガーに terraform apply を実行する、といった CI/CD ワークフローをすぐに構築できる。

すなわち、インフラの変更がコードレビューや承認フローを経て安全に本番環境へ反映される仕組みをノーコードで実現できる。

上記の図の通り、「どのブランチにコードが push されたら、どの環境にデプロイをする」といったことを HCP Terraform 内に workspace を GUI で切って設定をするだけで簡単に実現できる。

プロダクトごとや GitHub のリポジトリごとに似たような CI/CD を毎回構築しているような組織や会社は個人的に多いような気がしていて、HCP Terraform のダッシュボード上で一括で管理できるのは組織全体を見ているようなチームからしたら標準化と、効率化の側面から嬉しいのではないだろうか。

セキュリティとガバナンスの強化

HCP Terraform では、組織的なセキュリティやガバナンスを強化するためのさまざまな機能が標準で提供されている。例えば、コードによるポリシー管理(Policy as Code)によって、組織独自のルールやコンプライアンス要件を自動的に適用できる。

また、RBAC 機能によりユーザーやチームごとに細かく権限を設定できたり、重要な変更に対して承認フローを組み込むことで、意図しない操作やヒューマンエラーを防止でききる。すべての操作履歴は監査ログとして記録されるため、後から誰が何をしたかを追跡でき、セキュリティやガバナンスの観点でも Terraform を安心して利用可能な体制を作ることができる。

まとめ

今回は、Terraform の SaaS 版である HCP Terraform のメリットについて 3 点に絞って解説した。

細かいことを言えば、Private Registry や Const Estimation などまだまだ語り足りないところもあるがが SaaS 版を契約する際にコストメリットに最も関わる部分はこのあたりかなと思う。

是非 HCP Terraform の採用を検討している方や組織は参考してもらえればと思う。

また、今回紹介できていない機能についてもう少し深堀りできたらそのうち記事したい。

参考

What is HCP Terraform? | Terraform | HashiCorp Developer
HCP Terraform is an application that helps teams use Terraform to provision infrastructure. Learn how HCP Terraform can help you collaborate, manage remote state, and automate workflows.
What is HCP Terraform? | Terraform | HashiCorp Developer favicon developer.hashicorp.com
What is HCP Terraform? | Terraform | HashiCorp Developer
AWSで始めるHCP Terraform入門
📚 このZenn Bookについて HCP Terraformには、組織でTerraformを運用する際に便利な機能が様々あります。Terraformは知っているけど、HCP Terraformは知らない人向けにAWSを使ってHCP Terraformの各種機能を説明します。
AWSで始めるHCP Terraform入門 favicon zenn.dev
AWSで始めるHCP Terraform入門
実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing))
本書は、Terraformを使ってAWS上にシステムを構築するノウハウを、200以上のサンプルコードとともに紹介する、Terraform初級者から中級者向け解説書です。ECS Fargateなどのマネージドサービスを中心にアーキテクチャ設計を行い、Terraformで実装します。サンプルコードはGitHubでも公開していますので、手を動かしながら一緒に学びましょう。 【目次】 1章 セットアップ 2章 基本操作 3章 基本構文 4章 全体設計 5章 権限管理 6章 ストレージ 7章 ネットワーク 8章 ロードバランサーとDNS 9章 コンテナオーケストレーション 10章 バッチ 11章 鍵管理 12章 設定管理 13章 データストア 14章 デプロイメントパイプライン 15章 SSHレスオペレーション 16章 ロギング 17章 Terraformベストプラクティス 18章 AWSベストプラクティス 19章 高度な構文 20章 tfstateファイルの管理 21章 構造化 22章 モジュール設計 23章 リソース参照パターン 24章 リファクタリング 25章 既存リソースのインポート 26章 チーム開発 27章 継続的Apply 28章 落ち穂拾い 付録A 巨人の肩の上に乗る 続きを読む
実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing))  favicon amazon.co.jp
実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing))
[詳解]AWS Infrastructure as Code――使って比べるTerraform&AWS CDK エンジニア選書
(概要) ※この商品はリフロー型epubで作成されております。デバイスに合わせて文字の大きさやレイアウトが変更可能です。また,電子書籍内で検索をかけたり,マーカーを引いたり,自動読み上げを行うことも可能です。 本書は、Amazon Web Services(AWS)のリソースを対象とした、コードによるインフラ管理――Infrastructure as Code(IaC)をテーマにした実践的な解説書です。IaCツールの中でも、幅広いシステムに対応できる「Terraform」と、抽象的なリソース記述が可能な「AWS CDK」を取り上げます。それぞれのツールの基本的な使い方や仕組みを解説するとともに、VPCやECSの構築といった具体例を通じてこれら2つのツールを横断的に比較・理解します。両ツールの「宣言的なコード記述」という共通点や、コード記述法や差分抽出プロセスの違いを掘り下げながら、AWSにおけるIaCの汎用的なスキルを習得できる内容となっています。IaCをこれから始めるユーザーに加え、Terraformユーザー、AWS CDKユーザーのどちらにも、新たな視点とスキルを提供します。 (こんな方におすすめ) ・すでにTerraform、AWS CDKを利用している人。AWSにおいてIaCをこれから始める人 (目次) 第1章 クラウドとInfrastructure as Code 1.1 クラウドとその利点 1.2 AWSサービスとリソース 1.3 Infrastructure as Code(IaC) 1.4 AWSのIaCのためのツール 1.5 CloudTrailを活用したアクションの実行ログの追跡 1.6 本書の構成 第2章 IaC環境の構築 2.1 AWS CLIのインストール 2.2 AWS IAM Identity Centerとその設定 2.3 Terraformのインストール 2.4 CDKのインストールとブートストラップ 2.5 開発環境・ツール 2.6 まとめ 第3章 [体験]IaCによるリソースのデプロイ 3.1 題材 3.2 AWSマネジメントコンソールによるリソースのデプロイ 3.3 Terraformによるリソースのデプロイ 3.4 CloudFormationによるリソースのデプロイ 3.5 CDKによるリソースのデプロイ 3.6 リソースの属性を変更する 3.7 IaCで構築したリソースの削除 3.8 まとめ 第4章 Terraform詳細解説 4.1 Terraformによるリソースのデプロイの基本的な流れ 4.2 Terraformのコンフィグファイルの記述 4.3 Terraformのコードの構成単位 4.4 ルートモジュールの記述 4.5 子モジュールの記述 4.6 子モジュールとその呼び出し 4.7 コンフィグファイルの記述に便利なその他の機能 4.8 Terraformのモジュールの配置 4.9 Terraformのコマンド 4.10 利用するTerraformやプロバイダのバージョン更新 4.11 まとめ 第5章 AWS CDK詳細解説 5.1 CDKによるリソースのデプロイの基本的な流れ 5.2 CDK最初の一歩:CDKプロジェクトの作成 5.3 初期のディレクトリ構成 5.4 Node.jsアプリとしてのCDK 5.5 リソースの記述とデプロイ 5.6 CDKのコンストラクタとツリー構造 5.7 スタックのコンストラクタ 5.8 複数の環境へのデプロイ 5.9 cdk.context.json 5.10 タグ 5.11 エスケープハッチとrawオーバーライド 5.12 スタック間の参照 5.13 CDKのスナップショットテスト 5.14 ブートストラップの役割 5.15 CloudFormationのスタックの操作に失敗したとき 5.16 まとめ 第6章 VPCのIaCによる記述 6.1 VPCを構成するリソース 6.2 構築するVPCの仕様 6.3 TerraformによるVPCの記述 6.4 CDKによるVPCの記述 6.5 まとめ 第7章 ECSサービスのIaCによる記述 7.1 構築するECSサービスの仕様 7.2 デプロイするアプリの仕様とコード 7.3 Terraformによるリソースの記述 7.4 CDKによるリソースの記述 7.5 まとめ 第8章 Terraform & AWS CDK注意すべき相違点 8.1 手動で変更されたリソースの差分検出 8.2 実行計画(差分)作成プロセス 8.3 差分表示のプロセス 8.4 既存のリソースの参照 8.5 IaCの管理下からリソースを除外する 8.6 リソースの置換と処理順序 8.7 まとめ 第9章 既存リソースのインポート 9.1 既存のリソースのインポートの必要性 9.2 題材 9.3 Terraformにおけるインポート 9.4 CDKにおけるインポート 9.5 CloudFormationからCDKへの移行 9.6 まとめ 第10章 Lambda関数のデプロイ 10.1 Lambda関数のデプロイ 10.2 題材 10.4 Terraformを用いたアセット分離戦略によるLambda関数のデプロイ 10.5 CDKを用いたアセット分離戦略によるLambda関数のデプロイ 10.6 アセット統合戦略によるLambda関数のデプロイ 10.7 CDKを用いたアセット統合戦略によるLambda関数のデプロイ 10.8 Terraformを用いたアセット統合戦略によるLambda関数のデプロイ 10.9 まとめ 第11章 IaCにおけるLambda関数の活用 11.1 CloudFormation(CDK)でLambda関数を活用する仕組み 11.3 カスタムリソースの最初の実践:Lambdaに渡されるイベントの記録 11.4 カスタムリソースの更新と物理ID 11.5 イベントタイプによって挙動が異なるLambda関数の例 11.6 カスタムリソースプロバイダの活用 11.7 TerraformにおけるLambda関数の活用 11.8 まとめ 続きを読む
[詳解]AWS Infrastructure as Code――使って比べるTerraform&AWS CDK エンジニア選書  favicon amazon.co.jp
[詳解]AWS Infrastructure as Code――使って比べるTerraform&AWS CDK エンジニア選書
詳解 Terraform 第3版 ―Infrastructure as Codeを実現する
本書は、Terraformのシンプルな宣言的表現によって、コマンド操作でインフラをデプロイし管理する方法を豊富なサンプルコードを使って解説します。 Terraformがインフラの状態をどのように管理し、ファイルのレイアウト、分離、ロックにどのように影響するかを学びます。またTerraformを使ったサーバクラスタやロードバランサ、データベースのデプロイ、Terraformモジュールでの再利用可能なインフラの作成、ゼロダウンタイムデプロイを実現するための高度なTerraformの文法を解説します。さらにTerraformの各種ファイルにスケーラビリティを持たせた状態で管理する方法や、パスワードなどの機密情報をTerraformでうまく管理する方法、テストまでを詳述します。 Terraformの基本から、大規模なトラフィックと多数の開発者チームをサポートするフルスタックの運用までを包括的に学ぶ本書は、開発者、システム管理者必携の一冊です。Terraformバージョン1.0以降対応。
詳解 Terraform 第3版 ―Infrastructure as Codeを実現する  favicon amazon.co.jp
詳解 Terraform 第3版 ―Infrastructure as Codeを実現する

Footnotes

  1. Terraform は 2023 年頃ライセンス変更があり、純粋な OSS ではなくなった。Terraform のライセンス変更に関しての詳細はこちら。 https://www.hashicorp.com/en/blog/hashicorp-adopts-business-source-license