Skip to content
Latchkey

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 CDKCloudFormation
記述実言語 + constructYAML / 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 の上に構築されるため、選択は記述スタイルの問題です。

関連ガイド