📘
IaCツールの比較
比較するツール
- Cloudformation
- Terraform
- CDK for Cloudformation
- CDK for Terraform
注意:現時点での比較です(2022/11/29)!
どれも新しく開発がかなり活発なので、あくまで現時点での情報です
- Cloudformation: 2011年リリース
- Terraform: v1がGA(一般提供)になったのは2021年
- CDK for Cloudformation: v1がGAになったのは2019(goサポートは2022/6にGA)
- CDK for Terraform: 2022/8リリース
CDK登場以前
Terraform | Cloudformation | |
---|---|---|
言語 | HCL | yaml (awsのif用の構文あり) |
柔軟性、拡張性 | △ | × |
aws以外のパブリッククラウドへの対応(GCP,azureなど) | ○ | × |
ステート管理の有無 | 有 | 無 |
学習コスト | 中 | 低 |
-
ステートとは
作成済のリソースが記述されているファイル
言語ごとの特徴
-
HCL
-
シンプルはloopやifは書ける
-
複雑なロジックの記述は難しい
resource "aws_s3_bucket" "sample" { bucket = "sample-bucket" versioning { enabled = true } }
-
-
yaml
-
loopなし(ifはawsが組み込みで提供してくれている)
Resources: SampleBucket: Type: AWS::S3::Bucket Properties: BucketName: SampleBucket
-
CDK for Cloudformation登場以後
Terraform | Cloudformation | CDK for Cloudformation | |
---|---|---|---|
言語 | HCL | yaml | typescript,go,javascript,python,java,C# |
マルチプラットフォーム対応(aws,gcp,azureなど) | ○ | × | × |
柔軟性、拡張性 | △ | × | ○ |
ステート管理 | 有 | 無 | 無 |
学習コスト | 中 | 低 | 言語の学習コスト:低〜中、Cloudformationの学習コスト:低 |
情報量 | 多 | 多 | 少 |
CDK(go)とcoudformation,terraformの関係
- CDK for Cloudformation ⇒ Cloudformationにコンパイルされる
- CDK for Terraform ⇒Terraformにコンパイルされる
- コードだけ見ると別物に見えるが、実行される言語は同じ
CDK for Terraform登場以後
背景
- 開発元
- cloudformation,cdk(for Cloudformation)はaws製
- terraformはHashicorp社製
- Hashicorp社とawsが共同開発したのがCDK for Terraform
Terraform | Cloudformation | CDK for Cloudformation | CDK for Terraform | |
---|---|---|---|---|
言語 | HCL | yaml | typescript,go,javascript,python,java,C# | typescript,go,python,java,C# |
マルチプラットフォーム対応(aws,gcp,azureなど) | ○ | × | × | ○ |
柔軟性、拡張性 | △ | × | ○ | ○ |
ステート管理 | 有 | 無 | 無 | 有 |
学習コスト | 中 | 低 | 言語の学習コスト:低〜高、Cloudformationの学習コスト:低 | Terraformの学習コスト:低 |
情報量 | 多 | 多 | 少 | 少 |
どのツールを採用するのが良さそうか
すでにIaCツールを触っている人
Terraform,Cloudformationを半年ずつ触ってきた私の場合...(もちろんケースバイケースですが…)
- CDKに挑戦していきたい
- 情報量が少ないため、採用前に特殊な要件がないか確認
- 参考になる情報、記事が十分にあるか下調べが必要
- Terraformを選んでおくのが無難そう
- 競合になるCloudformation単体だと、yaml(Cloudformation)は表現力が足りなすぎると感じてしまう
- 情報量が多い
- 拡張性も基本的には困らない
初めに触るツールを選ぶ人
個人的にはTerraform推しです
難易度順
- Cloudformation
- Terraform
- CDK for Cloudformation
- CDK for Terraform
判断基準
- インフラをコード化するメリット > 各ツールの差 → Cloudformation
- Terraformはいきなり入って困るほど難しくはないし、拡張性も高い
- 下2つは現状ドキュメントなどが上の2つに依存するので、最初に使うツールとしては難しそう…
Discussion