最終更新:

【図解で比較】Terraform vs CloudFormation — IaCツールの違いを徹底解説


Terraform vs CloudFormation 比較 Terraform (HashiCorp) AWS Azure GCP HCL 独自言語 状態: tfstate(自己管理) plan apply VS CloudFormation (AWS公式) AWS のみ対応 JSON YAML 状態: AWS側で自動管理 変更セットで差分確認
Terraform vs CloudFormation の比較イメージ
ひよこ ひよこ
最近「IaC」って言葉をよく聞くんだけど、インフラをコードで管理するってどういうこと?
ペンギン先生 ペンギン先生
たとえば、サーバーネットワークの設定を手作業でポチポチやる代わりに、設定ファイルに「こういう構成にしてね」と書いておくイメージだよ。料理のレシピみたいなもので、一度書けば誰でも同じ環境を再現できるんだ。その代表的なツールがTerraformCloudFormationだね。
ひよこ ひよこ
へえー!じゃあTerraformCloudFormationって何が違うの?
ペンギン先生 ペンギン先生
一番大きな違いは「対応範囲」だよ。CloudFormationAWSが公式に提供しているサービスで、AWSリソースだけを管理するもの。一方、TerraformはHashiCorpという会社が作ったツールで、AWSだけじゃなくAzureGoogle Cloud、さらにはDatadogGitHubなど何百ものサービスに対応しているんだ。
ひよこ ひよこ
じゃあTerraformのほうが便利そうだね!設定ファイルの書き方も違うの?
ペンギン先生 ペンギン先生
CloudFormationJSONYAMLで書くよ。AWSを普段使っている人にはなじみやすい形式だね。TerraformHCLという独自の言語を使うんだ。HCLは人間が読み書きしやすいように設計されていて、変数や繰り返し処理も書きやすいのが特徴だよ。
ひよこ ひよこ
状態管理」っていうのも違うって聞いたけど、それは何のこと?
ペンギン先生 ペンギン先生
IaCツールは「今のインフラがどうなっているか」を記録しておく必要があるんだ。Terraformはtfstateというファイルに状態を保存するよ。チームで使うときはS3などのリモートストレージに置くのが一般的だね。CloudFormationAWS側が状態を自動管理してくれるから、ファイルの管理を気にしなくていいのがメリットだよ。
ひよこ ひよこ
Terraformの「plan」と「apply」っていうのはどういう仕組みなの?
ペンギン先生 ペンギン先生
これはTerraformのすごく便利なワークフローだよ。まず「terraform plan」で「こういう変更をしますよ」という実行計画を表示して、内容を確認してから「terraform apply」で実際に適用するんだ。いきなり変更されないから安心だよね。CloudFormationにも変更セットという似た機能があるけど、Terraformのplanのほうが差分が見やすいと評判だよ。
ひよこ ひよこ
設定を再利用したいときはどうするの?
ペンギン先生 ペンギン先生
Terraformには「モジュール」という仕組みがあって、よく使う構成をパッケージにして再利用できるよ。Terraform Registryという公開リポジトリにコミュニティが作ったモジュールがたくさん公開されているんだ。CloudFormationでは「スタック」や「ネステッドスタック」で構成を分割・再利用するよ。最近はAWS CDKを使えばTypeScriptPythonなどのプログラミング言語CloudFormationテンプレートを生成できるようにもなったね。
ひよこ ひよこ
設定ファイルと実際のインフラがずれちゃうことってないの?
ペンギン先生 ペンギン先生
いい質問だね。手動で設定を変えてしまうと「ドリフト」という状態になるよ。CloudFormationにはドリフト検出機能があって、手動変更を検知できるんだ。Terraformも「terraform plan」を実行すれば差分がわかるよ。どちらも定期的にチェックして、コードと実態を一致させることが大事だね。
ひよこ ひよこ
ところで、Terraformのライセンスが変わったって聞いたんだけど…?
ペンギン先生 ペンギン先生
鋭いね。2023年にHashiCorpがTerraformのライセンスをオープンソースのMPLからBSL(Business Source License)に変更したんだ。これに反発したコミュニティがフォークして「OpenTofu」というプロジェクトを立ち上げたよ。Linux Foundationの傘下で開発されていて、完全にオープンソースのまま使えるんだ。
ひよこ ひよこ
他にも似たツールってあるの?
ペンギン先生 ペンギン先生
Pulumiというツールが注目されているよ。HCLYAMLではなく、TypeScriptPython、Goなどの汎用プログラミング言語でインフラを定義できるのが特徴だね。条件分岐ループを普段のコードと同じ感覚で書けるんだ。AWS CDKも似たアプローチだけど、出力先がCloudFormationに限定されるのに対して、Pulumiマルチクラウド対応だよ。結局、AWSだけならCloudFormationマルチクラウドや柔軟性が必要ならTerraformプログラミング言語で書きたいならPulumiやCDK、という選び方になるね。
ひよこ ひよこ
なるほど!使う場面によって選び方が変わるんだね。まずはどれか触ってみようかな!
ペンギン先生 ペンギン先生
まずはTerraformCloudFormationで小さなリソースを作ってみるのがおすすめだよ。たとえばS3バケットを1つ作るだけでも、IaCの便利さが実感できるはずだよ。コードでインフラを管理できると、環境の複製やレビューがとても楽になるから、ぜひ試してみてね。