AWS CDK でプログラミング言語による IaC - コンストラクトとスタックの設計
CDK による TypeScript/Python でのインフラ定義、L1/L2/L3 コンストラクトの使い分け、テスト手法を解説します。
CDK の概要
この記事は約 3 分で読めます。 CDK は TypeScript や Python などのプログラミング言語で AWS インフラを定義する IaC フレームワークです。CloudFormation の YAML/JSON テンプレートを手書きする代わりに、プログラミング言語のクラスとメソッドでリソースを定義します。CDK が CloudFormation テンプレートを自動生成し、デプロイを実行します。
この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
コンストラクトとテスト
L1 コンストラクトは CloudFormation リソースの 1 対 1 マッピングで、全プロパティを明示的に指定します。L2 コンストラクトはベストプラクティスのデフォルト値が適用され、例えば S3 バケットは暗号化とバージョニングがデフォルトで有効です。L3 コンストラクト (パターン) は複数のリソースを組み合わせた高レベルの抽象化で、LambdaRestApi は API Gateway と Lambda を一括で構築します。Assertions モジュールで hasResourceProperties を使用し、生成されたテンプレートに期待するリソースとプロパティが含まれることをテストします。
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。
まとめ
CDK はプログラミング言語の機能を活用した IaC フレームワークです。L2 コンストラクトでベストプラクティスを自動適用し、Assertions でインフラのテストを実現します。
AWS の優位点
- TypeScript、Python、Java、C#、Go でインフラを定義し、プログラミング言語の機能 (ループ、条件分岐、型安全性) を活用できる
- L2 コンストラクトで AWS のベストプラクティスがデフォルト適用され、最小限のコードでリソースを定義できる
- cdk synth で CloudFormation テンプレートを生成し、cdk deploy でデプロイする 2 段階のワークフロー
- Assertions モジュールで生成されたテンプレートのユニットテストを記述し、インフラの正当性を検証できる
- cdk diff でデプロイ前に変更差分をプレビューし、意図しない変更を防止できる