AWS CDK vs Terraform: どちらのIaCツールを選ぶか
AWS CDKは実際のプログラミング言語でAWSインフラを定義しCloudFormationを合成します。Terraformは多数のproviderやクラウドにまたがる宣言的なHCLを使用します。
CDKでは、ループ、抽象化、constructを用いてTypeScript、Python、その他の言語でAWSインフラを記述し、内部でCloudFormationを合成します。深くAWSネイティブです。TerraformはAWS、GCP、Azure、SaaSにまたがる膨大なproviderエコシステムを持つ宣言的なHCLを使い、独自のstateモデルを備えます。CDKは言語ネイティブなAWS記述を、Terraformはマルチクラウドの宣言的な幅広さを重視します。
| AWS CDK | Terraform | |
|---|---|---|
| スタイル | 命令的(実際のコード) | 宣言的(HCL) |
| スコープ | AWS(CloudFormation) | マルチクラウド + SaaS |
| 抽象化 | construct、言語機能 | モジュール |
| state | CloudFormationが管理 | Terraformのstate |
| 最適な用途 | AWS専用、コードファーストなチーム | マルチクラウド、宣言的 |
ユースケースとスコープ
CDKは、実際のプログラミング言語、再利用可能なconstruct、CloudFormationが管理するstateを好むAWS専用チームに適しています。Terraformは、マルチクラウドやSaaSにまたがるインフラ、そして巨大なproviderエコシステムを持つ宣言的なHCLを好むチームに適しています。CDKはAWSに寄り添い、Terraformは多数のproviderにまたがりクラウド非依存です。
CIにおいて
どちらもCIからOIDCによるキーレスなAWS認証を使ってplan/diffとapplyを実行します。applyはレビューでゲートしましょう。いずれもマネージドrunnerで動作し、より高速なrunnerはsynth/planとapplyの各ステップを短縮します。
結論
AWS専用で、実際のプログラミング言語とconstructを好むなら: AWS CDK。マルチクラウド、SaaSにまたがる用途、または宣言的なHCLを好むなら: Terraform。CDKはコードファーストなAWS環境に最適で、Terraformはより幅広くクラウド非依存の選択肢です。