Terraform、OpenTofu、CloudFormationの違い

目次

Terraform、OpenTofu、CloudFormationの違い

観点 Terraform OpenTofu CloudFormation
開発元 HashiCorp(IBM傘下) LinuxFoundation AWS
ライセンス BSL(Terraform由来の制限あり) MPLv2(完全OSS) AWS純正・無料
対応クラウド マルチクラウド マルチクラウド AWS専用
記述言語 HCL(JSONも可) HCL(JSONも可) YAML/JSON
State管理 自前(S3等+ロック設計) 自前(State暗号化対応) AWSがマネージド管理
エコシステム 最も成熟(モジュール・プロバイダー豊富) Terraform由来で互換性高い AWSサービスに密結合
独自機能 商用サポート、周辺ツール連携 クライアントサイドState暗号化、早期変数評価 StackSets、ドリフト検知、変更セット
商用サポート あり(HashiCorp) コミュニティ中心 AWSサポート

3つとも、サーバー・ネットワーク・IAM・S3などをコードで作成・変更するIaC(InfrastructureasCode)の仕組みです。

Terraform:AWS以外もまとめて管理できる、事実上の標準的なIaCツール
OpenTofu:Terraformから分岐した、オープンソース版に近いツール
CloudFormation:AWSが提供するAWS専用のIaCサービス

Terraformとは

Terraformは、HashiCorp(現在はIBM傘下)が開発したIaC(InfrastructureasCode)ツールです。サーバー、ネットワーク、データベースといったインフラを、GUIで手作業で設定するのではなく、コード(設定ファイル)として定義し、自動で構築・変更・管理できるようにします。

基本的な考え方

インフラのあるべき状態をHCL(HashiCorp Configuration Language)というコードで宣言的に記述します。こういうサーバーを2台、こういうネットワークに置くと書くと、Terraformが現状と比較し、その状態にするために必要な操作(作成・変更・削除)を自動で割り出して実行します。手順を逐一書くのではなく、最終的な状態だけを書くのが特徴です。

 

主な特徴

マルチクラウド対応が強みです。プロバイダーという仕組みで、AWS・Azure・GCP・Kubernetes・各種SaaSなど幅広い対象を、同じツール・同じ記法で扱えます。

State(状態管理)という仕組みで、Terraformが管理しているインフラの現状をstateファイルに記録します。これにより差分を検知し、変更が必要な部分だけを更新できます。

実行計画(plan)が事前に確認できます。terraform planを実行すると、実際に適用する前に何が作成・変更・削除されるかをプレビューでき、意図しない変更を防げます。

 

なぜ使うのか

手作業の設定と違い、コードなのでGitでバージョン管理・レビュー・履歴追跡ができ、同じ構成を何度でも再現できます。チームでの共同作業や、開発・本番環境を同じ構成で揃えたい場合に特に効果を発揮します。

OpenTofuとは

OpenTofuは、Terraformのオープンソースなフォーク(派生版)です。基本的な機能・概念・使い方はTerraformとほぼ同じで、IaC(InfrastructureasCode)ツールとしてインフラをコードで構築・管理できます。

 

生まれた背景

2023年8月、HashiCorpがTerraformのライセンスを、それまでのMPL(完全なオープンソース)からBSL(BusinessSourceLicense)に変更しました。BSLでは競合製品での利用などに制限がかかるため、Terraformを基盤に事業を行っていた企業やコミュニティが反発しました。

これを受けて、Terraform1.6時点のコードベースからフォークして作られたのがOpenTofuです。当初はOpenTFという名前でしたが、後にOpenTofuへと改称されました。

現在はLinuxFoundationの配下でガバナンスが行われ、特定の一社に依存しない中立的な運営がなされています。ライセンスはMPLv2(完全なオープンソース)を維持しています。

フォーク直後はほぼ同一でしたが、現在は独自機能が分岐しています。OpenTofu側に早期から入った代表的な機能として、クライアントサイドでのState暗号化、for_eachなどでの早期変数評価、.tofu拡張子サポートなどがあります。

 

選ぶ理由

完全なオープンソースであることを重視する場合や、HashiCorpのライセンス変更によるベンダーロックインを避けたい場合に選ばれます。一方で、商用サポートやHashiCorp周辺ツール(TerraformCloud等)との連携を重視するならTerraformという整理になります。

なお、新しいTerraform向けのプロバイダーやモジュールには、ライセンスや互換性の面で注意が必要な場合があります。導入を検討する際は、利用したいプロバイダー・モジュールの対応状況も含めて、公式ドキュメント(opentofu.org)で最新情報を確認することをおすすめします。

CloudFormationとは

CloudFormationは、AWS(AmazonWebServices)が提供する純正のIaC(InfrastructureasCode)サービスです。AWS上のリソース(サーバー、ネットワーク、データベース、ストレージなど)を、コード(テンプレート)として定義し、自動で構築・更新・削除できます。

 

基本的な考え方

テンプレートと呼ばれるYAMLまたはJSON形式のファイルに、どんなAWSリソースを、どう構成するかを宣言的に記述します。このテンプレートをCloudFormationに渡すと、内容に沿ってリソースをまとめて自動構築します。手順を逐一書くのではなく、最終的な構成だけを書くのが特徴です。

 

主な特徴

AWS純正・追加料金なしが大きな利点です。AWSアカウントがあれば、CloudFormation自体の利用料はかからず、作成したリソースの料金のみ発生します。

状態をAWSがマネージドで管理します。TerraformやOpenTofuのようにstateファイルを自前で保管・ロック管理する必要がなく、スタックの状態はAWS側が保持します。これは運用上の大きな差で、state管理の手間やトラブルを避けられます。

AWSサービスとの密な統合も強みです。新しいAWSサービスや機能にいち早く対応しやすく、IAMによる権限管理やAWSサポートとの連携もスムーズです。

 

制約

最大の制約はAWS専用であることです。AzureやGCPなど他クラウドは基本的に扱えません(カスタムリソースで無理やり拡張は可能ですが現実的ではありません)。マルチクラウド環境を前提とするなら、TerraformやOpenTofuが適しています。

 

選ぶ理由

利用環境がAWSのみで完結し、stateの自前管理を避けたい場合や、AWSサービスとの統合・サポートを重視する場合に向いています。逆に、複数クラウドをまたいで同じツールで管理したい場合はTerraform/OpenTofuが選択肢になります。

関連の記事

AWS CloudformationでS3のバケットを作成する(hello world)
AWS CloudformationでS3のバケットをパラメータで作成

△上に戻る