【図解で比較】Terraform vs CloudFormation — IaCツールの違いを徹底解説
最近「IaC」って言葉をよく聞くんだけど、インフラをコードで管理するってどういうこと?
たとえば、サーバーやネットワークの設定を手作業でポチポチやる代わりに、設定ファイルに「こういう構成にしてね」と書いておくイメージだよ。料理のレシピみたいなもので、一度書けば誰でも同じ環境を再現できるんだ。その代表的なツールがTerraformとCloudFormationだね。
へえー!じゃあTerraformとCloudFormationって何が違うの?
一番大きな違いは「対応範囲」だよ。CloudFormationはAWSが公式に提供しているサービスで、AWSのリソースだけを管理するもの。一方、TerraformはHashiCorpという会社が作ったツールで、AWSだけじゃなくAzure、Google Cloud、さらにはDatadogやGitHubなど何百ものサービスに対応しているんだ。
じゃあTerraformのほうが便利そうだね!設定ファイルの書き方も違うの?
「状態管理」っていうのも違うって聞いたけど、それは何のこと?
IaCツールは「今のインフラがどうなっているか」を記録しておく必要があるんだ。Terraformはtfstateというファイルに状態を保存するよ。チームで使うときはS3などのリモートストレージに置くのが一般的だね。CloudFormationはAWS側が状態を自動管理してくれるから、ファイルの管理を気にしなくていいのがメリットだよ。
Terraformの「plan」と「apply」っていうのはどういう仕組みなの?
これはTerraformのすごく便利なワークフローだよ。まず「terraform plan」で「こういう変更をしますよ」という実行計画を表示して、内容を確認してから「terraform apply」で実際に適用するんだ。いきなり変更されないから安心だよね。CloudFormationにも変更セットという似た機能があるけど、Terraformのplanのほうが差分が見やすいと評判だよ。
設定を再利用したいときはどうするの?
Terraformには「モジュール」という仕組みがあって、よく使う構成をパッケージにして再利用できるよ。Terraform Registryという公開リポジトリにコミュニティが作ったモジュールがたくさん公開されているんだ。CloudFormationでは「スタック」や「ネステッドスタック」で構成を分割・再利用するよ。最近はAWS CDKを使えばTypeScriptやPythonなどのプログラミング言語でCloudFormationテンプレートを生成できるようにもなったね。
設定ファイルと実際のインフラがずれちゃうことってないの?
いい質問だね。手動で設定を変えてしまうと「ドリフト」という状態になるよ。CloudFormationにはドリフト検出機能があって、手動変更を検知できるんだ。Terraformも「terraform plan」を実行すれば差分がわかるよ。どちらも定期的にチェックして、コードと実態を一致させることが大事だね。
ところで、Terraformのライセンスが変わったって聞いたんだけど…?
他にも似たツールってあるの?
なるほど!使う場面によって選び方が変わるんだね。まずはどれか触ってみようかな!
まずはTerraformかCloudFormationで小さなリソースを作ってみるのがおすすめだよ。たとえばS3バケットを1つ作るだけでも、IaCの便利さが実感できるはずだよ。コードでインフラを管理できると、環境の複製やレビューがとても楽になるから、ぜひ試してみてね。