AWS Cloud Development Kit
本物のコードで書くインフラ
使い慣れたプログラミング言語(TypeScript、Python、Java、C#、Go)で AWS インフラを定義するフレームワークです。`cdk synth` コマンドでコードを CloudFormation テンプレートに変換し、`cdk deploy` でデプロイします。
- コスト$ 安い
- 難易度●●●●●
- 未使用でも課金?いいえ
- サーバーレス
- 出題試験DVA · SAA
たとえるなら自分の言葉でレシピを書き、それを料理長の言葉(CloudFormation)に翻訳してもらって調理するようなものです。
いつ使う?
✓ 使うべき場面
開発チームがループ、関数、データ型を使い、construct を再利用しながらインフラをコードで書きたいとき。
✗ 避けるべき場面
マルチクラウドのツールが必要、またはチームが純粋な宣言型に慣れている → Terraform / CloudFormation。
よくある使い方
- 数十行のコードで serverless stack(API Gateway + Lambda + DynamoDB)を構築
- 複数チームで共有する社内 construct のパッケージ化
- 同一コードから dev/staging/prod の複数環境のインフラを作成
料金はいくら?
- 課金方式: 無料です。stack が作成した AWS リソースの料金のみを支払います。
`cdk bootstrap` は asset を格納する S3 バケットと ECR リポジトリを作成します。古い asset が溜まり続けるとストレージ料金がかかります。
「TypeScript や Python などのプログラミング言語でインフラを定義」なら CDK、「宣言的な YAML/JSON テンプレート」なら CloudFormation、「簡略構文のサーバーレスアプリ」なら SAM を選びます。CDK は最終的に CloudFormation を生成します。
よくある質問
CDK は CloudFormation と何が違いますか?
CloudFormation は宣言的な YAML/JSON テンプレートを使います。CDK ではプログラミング言語 (TypeScript、Python、Java など) でループ、関数、型を使ってインフラを記述し、それを合成 (synth) して CloudFormation テンプレートを生成しデプロイします。そのため CDK も CloudFormation 上で動作し、スタック、ロールバック、ドリフト検出は通常どおり利用できます。
L1、L2、L3 コンストラクトとは?
L1 は CloudFormation リソースと 1 対 1 に対応し (名前は Cfn で始まります)、すべてのプロパティを自分で指定します。L2 は適切なデフォルト値とヘルパーメソッド (権限付与など) を備えた使いやすい抽象化です。L3 (パターン) は複数のリソースを組み合わせた完成したソリューションで、ロードバランサーの背後で動くサービスなどです。
CDK の主なコマンドと cdk bootstrap の目的は?
cdk synth は CloudFormation テンプレートを生成し、cdk diff はデプロイ済みの内容と比較し、cdk deploy でデプロイします。アカウントと Region で最初にデプロイする前に cdk bootstrap を実行して、アセット用の S3 バケットや必要なロールなどの支援リソースを作成します。