Skip to content
Latchkey

Terraform vs CloudFormation: マルチクラウド vs AWS ネイティブな IaC

Terraform は HCL と巨大な provider エコシステムを持つマルチクラウドな IaC です。CloudFormation は AWS ネイティブで、深く統合され、state は AWS が管理します。

Terraform は HCL と広大な provider registry を使って多くのクラウドやサービスにわたってインフラをプロビジョニングし、state は自分で管理します。CloudFormation は AWS のネイティブな IaC サービスで - テンプレートは YAML/JSON、state と drift は AWS が処理し、change set や stack policy などの AWS 機能と密に統合されています。

TerraformCloudFormation
範囲マルチクラウド + 多くの providerAWS のみ
言語HCLYAML / JSON
state自己管理の backendAWS が管理
エコシステム巨大(registry、モジュール)AWS ネイティブ、上に CDK
最適な用途マルチクラウド、幅広い toolingAWS に全振りした組織

CI で

Terraform は、複数のクラウドにまたがる場合やリッチなモジュールエコシステムが欲しい場合のデフォルトですが、state backend と locking は自分で担います。CloudFormation は AWS のみの組織にとって魅力的です - 管理すべき state がなく、ネイティブな change set があり、最新の AWS 機能はしばしばそこに最初に登場します。どちらも CI で plan と apply がクリーンに動きます。Terraform では state locking に、CloudFormation では stack の drift に注意しましょう。

高速化する

provider プラグイン(Terraform)を cache し、locking を伴う plan/apply を CI で実行します。provider のダウンロードと plan の実行は CI runner 上で行われます。より高速な managed runner はコールドセットアップを短縮します。

結論

マルチクラウド、または幅広いエコシステムとモジュールが欲しい場合: Terraform。AWS に全振りし、ネイティブ統合による管理された state が欲しい場合: CloudFormation。クラウドの範囲と、state 管理をどこまで自分で担いたいかで選びましょう。

関連ガイド