Cloud Service
AWS Cloud Development Kit (CDK)
TypeScriptやPythonなど使い慣れたプログラミング言語でインフラを定義し、CloudFormationテンプレートに合成して構築できるIaCフレームワーク。ループや関数で繰り返しを排し、再利用可能な構成部品を作れる。
- 1.馴染みのある言語でインフラをコード化し、CloudFormationテンプレートへ合成してデプロイする。
- 2.コンストラクトという部品を組み合わせ、ベストプラクティスを内包した構成を再利用できる。
- 3.デプロイ実体はCloudFormationスタックなので、差分プレビューや自動ロールバックの恩恵を受けられる。
AWS CDK は、TypeScript・JavaScript・Python・Java・C#・Go といった一般的なプログラミング言語でクラウドインフラを定義し、それを CloudFormation テンプレートへ「合成(synth)」してデプロイするためのオープンソースの IaC フレームワークです。生の YAML / JSON を手書きする代わりに、変数・ループ・関数・クラスといった言語機能を使ってインフラを表現できる点が特徴です。
解決する課題
YAML / JSON のテンプレートは宣言的で分かりやすい一方、似た定義の繰り返しや条件分岐が増えると冗長になり、補完や型チェックの恩恵も受けにくくなります。CDK はインフラ定義に プログラミング言語の表現力 を持ち込むことでこれらを解決します。
- 同じようなリソース定義を ループや関数で生成 し、コピペによるばらつきを減らせる
- IDE の 型チェックと補完 が効くため、設定ミスを書いた時点で気づける
- 組織のベストプラクティスを コンストラクト(部品) に閉じ込めて配布・再利用できる
- デプロイ実体は CloudFormation なので、IaC の再現性やロールバックはそのまま活かせる
主要概念と用語
- コンストラクト(Construct): CDK の基本単位。1つ以上のリソースをまとめた再利用可能な部品
- L1 コンストラクト(Cfn 系): CloudFormation リソースに1対1で対応する低レベル部品。細かく制御できる
- L2 コンストラクト: 安全な既定値やヘルパーを備えた高レベル部品。日常的にはこれを使う
- L3 コンストラクト / パターン: 複数リソースをまとめた用途特化の構成部品(例: 構成済みの一連の基盤)
- スタック(Stack): デプロイ単位。CloudFormation スタックに対応する
- アプリ(App): スタックを束ねる最上位の入れ物。
cdk synthの対象 - 合成(synth): CDK コードを CloudFormation テンプレートに変換する処理
- アセット(Asset): Lambda コードや Docker イメージなど、デプロイ時に S3 / ECR へ配置される成果物
- ブートストラップ(bootstrap): アセット配置用の S3 バケットや IAM ロールを、対象アカウント・リージョンに事前準備する操作
- Construct Hub: 公開コンストラクトを探せるカタログ
仕様・制限・クォータ
- 対応言語は TypeScript / JavaScript / Python / Java / C# / Go。内部は jsii という仕組みで多言語へ橋渡しされる
- デプロイ対象はあくまで CloudFormation スタック なので、テンプレートサイズやスタックあたりのリソース数など CloudFormation 側のクォータがそのまま効く
- 大規模時は L1 が多くなりテンプレートが肥大化しやすいため、スタック分割を検討する
- アセットを使うには事前の ブートストラップ が必要で、未実施だとデプロイが失敗する
- CDK 自体の利用は無料。課金は合成された実リソースに対して発生する
具体的な上限値は変更されることがあるため、最新のクォータは CloudFormation の公式ドキュメントで確認してください。
内部の仕組み
CDK のコードを実行すると、アプリ内のコンストラクトツリーが組み立てられ、cdk synth によって各スタックが CloudFormation テンプレート に変換されます。生成されたテンプレートとアセット情報は cdk.out というディレクトリにまとめられ、この成果物(クラウドアセンブリ)をもとに cdk deploy が CloudFormation を呼び出してスタックを作成・更新します。
- 合成: コードを実行してツリーを構築し、テンプレートとアセットを
cdk.outに出力する - アセットの配置: Lambda コードやイメージは、ブートストラップで用意した S3 / ECR にアップロードされる
- デプロイ: 生成テンプレートを CloudFormation に渡し、差分計算・作成・更新・自動ロールバックは CloudFormation 側が担う
- diff:
cdk diffでデプロイ済みスタックと合成結果の差分を確認できる
CDK は最終的に CloudFormation テンプレートを生成します。挙動が不安なときは cdk synth で出力テンプレートを読み、どんなリソースが作られるかを直接確かめると理解が早まります。
設計パターン / ベストプラクティス
- 基本は L2 コンストラクト を使い、安全な既定値とヘルパーの恩恵を受ける
- 細かい制御が必要な箇所だけ エスケープハッチ で L1 プロパティを直接上書きする
- 組織共通の構成は 自作コンストラクト にまとめ、命名規約やタグ付けを部品側で強制する
- 環境差分(開発・本番など)は コンテキストや変数 で吸収し、スタックを使い回す
- IAM 権限は grant 系メソッド を活用し、最小権限を宣言的に付与する
- パイプライン(CDK Pipelines)でレビュー・テスト・段階デプロイを自動化する
すべてを L1(Cfn 系)で書くと、結局 YAML を別言語で書き写すのと同じになり、CDK の利点である安全な既定値や省力化を失います。まず L2 を試し、足りない部分だけ L1 で補うのが定石です。
運用・監視
- デプロイの進行や失敗は CloudFormation のイベントとスタックステータス で確認する
- 反映前に
cdk diffで差分を確認し、意図しない置換や削除がないかをチェックする - スタック操作は CloudTrail に記録され、誰がいつ変更したか監査できる
- 構成の検証は assertions ライブラリ によるユニットテストや、合成テンプレートのスナップショットテストで自動化できる
- ポリシー逸脱の検出には、合成テンプレートを CloudFormation Guard などのルールで静的検査する方法がある
コスト
CDK 自体の利用やツールチェーンに料金はかかりません。課金されるのは、合成・デプロイされた 実リソース(Lambda、ECS、RDS など)の利用料 です。
ブートストラップで作られる S3 バケットや ECR にアセットが蓄積 されると、わずかながらストレージ費用が発生します。古いアセットが溜まりやすいため、不要になったものは定期的に整理するとよいでしょう。検証用スタックは cdk destroy で丸ごと削除でき、関連リソースの消し忘れを防げます。
セキュリティ
- ブートストラップで作成される デプロイ用ロールの権限 は強力になりがちなので、信頼範囲と権限を見直す
- リソースへの権限付与は grant 系メソッド で宣言的に行い、手書きの広すぎる IAM ポリシーを避ける
- パスワードや鍵を コードに直書きしない。機密値は Secrets Manager や SSM パラメータストアを参照する
- 合成されたテンプレートやアセットには機密が混入しうるため、
cdk.outを不用意にコミット・共有しない
CDK コードや合成済みテンプレートは Git で共有されます。パスワードやアクセスキーを平文で埋め込むと漏洩源になります。必ず Secrets Manager や SSM の参照を使ってください。
関連サービス・比較
CDK は最終的に CloudFormation テンプレートを生成してデプロイします。両者は競合ではなく、CDK が上位の記述レイヤー、CloudFormation が実行エンジンという関係です。
| 観点 | CDK | CloudFormation |
|---|---|---|
| 記述方法 | 汎用プログラミング言語 | YAML / JSON テンプレート |
| 抽象度 | 高い(部品を再利用) | 低い(リソースを直接記述) |
| 再利用 | コンストラクトで関数化 | ネストスタック等で分割 |
| デプロイ実体 | 合成後の CloudFormation | CloudFormation 本体 |
ハンズオン / CLI例
# 対象アカウント・リージョンを初回のみブートストラップ
cdk bootstrap aws://123456789012/ap-northeast-1
# CDKコードをCloudFormationテンプレートに合成
cdk synth
# デプロイ済みスタックとの差分を確認
cdk diff
# 変更を適用(内部でCloudFormationを呼び出す)
cdk deploy
# 不要になったスタックを丸ごと削除
cdk destroy
AWS Service
AWS Cloud Development Kit (CDK)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
管理・ガバナンス
比較で見る軸
クラウド: AWS / カテゴリ: 管理・ガバナンス / 難易度: intermediate
導入後に効く点
コンストラクトという部品を組み合わせ、ベストプラクティスを内包した構成を再利用できる。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- 管理・ガバナンス
- 難易度
- intermediate
- 関連資格
- DVA-C02 / DOP-C02 / SAA-C03
- 設計柱
- operational / reliability
判断チェックリスト
- 自社の用途が「管理・ガバナンス / operational」に近いか確認する。
- 強みである「馴染みのある言語でインフラをコード化し、CloudFormationテンプレートへ合成してデプロイする。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。