AWS CDK vs CloudFormation: コード vs テンプレート
CDK は AWS インフラを、CloudFormation に合成される実言語で記述できます。CloudFormation はその基盤となるテンプレートエンジンそのものです。
CloudFormation は、管理された state と change set を伴い、宣言的な YAML/JSON テンプレートから AWS インフラをプロビジョニングします。AWS CDK は、CloudFormation テンプレートを合成する高レベルの construct を用いて、同じインフラを TypeScript、Python、Java で表現できます - つまり CDK は CloudFormation の上にある開発者レイヤーです。
| AWS CDK | CloudFormation | |
|---|---|---|
| 記述 | 実言語 + construct | YAML / JSON テンプレート |
| 抽象化 | 高い(L2/L3 construct) | 生のリソース |
| 内部 | CFN を合成 | ネイティブ |
| 再利用 | 関数、パッケージ、クラス | nested stack、モジュール |
| 最適な用途 | コード IaC を求める開発者 | シンプル/明示的なテンプレート |
CI で
CDK はボイラープレートを劇的に削減します - 高レベルの construct が妥当なデフォルトを結線します - そして pipeline はこれを、cdk synth を実行してからデプロイする通常の build として扱います。生の CloudFormation はより冗長ですが完全に明示的で、管理すべき synth ステップや言語 toolchain がありません。CDK は CloudFormation にコンパイルされるため、両者を混在させ、必要に応じて生のリソースまで下げることもできます。
高速化する
CDK の言語の依存関係を cache し、synth/deploy を CI で実行します。synth とデプロイは CI runner 上で行われます。より高速な managed runner は build を短縮します。
結論
高レベルの construct とより少ないボイラープレートを備えたコードベースの IaC が欲しい場合: AWS CDK。言語 toolchain のない明示的なテンプレートが欲しい場合: CloudFormation。CDK は CloudFormation の上に構築されるため、選択は記述スタイルの問題です。