Infrastructure as Code
AWS CDK (Cloud Development Kit)
Cloud Development Kit, IaC với TypeScript/Python, Constructs (L1, L2, L3)
Tổng quan
AWS CDK là framework cho phép bạn định nghĩa AWS infrastructure bằng programming languages (TypeScript, Python, Java, C#, Go) thay vì JSON/YAML.
CDK vs CloudFormation vs Terraform
Tóm lại: CDK = Viết code → Generate CloudFormation template → Deploy
Tại sao dùng CDK?
| Vấn đề với YAML/JSON | CDK giải quyết |
|---|---|
| ❌ Không có IDE support (autocomplete) | ✅ Full IDE support, type checking |
| ❌ Copy-paste nhiều | ✅ Dùng loops, functions, classes |
| ❌ Khó test | ✅ Unit testing với Jest/pytest |
| ❌ Không có abstraction | ✅ High-level constructs (L2, L3) |
| ❌ Syntax lạ (!Ref, !Sub) | ✅ Native programming language |
Các khái niệm cốt lõi
App, Stack, Construct
Construct Levels (L1, L2, L3)
| Level | Ví dụ | Khi nào dùng |
|---|---|---|
| L1 | CfnBucket | Cần access CloudFormation property chưa có ở L2 |
| L2 | Bucket | Recommended - đủ cho hầu hết use cases |
| L3 | ApplicationLoadBalancedFargateService | Common patterns, muốn nhanh |
Getting Started
Cài đặt
Tạo project mới
Cấu trúc project (TypeScript)
Ví dụ Code
Ví dụ 1: S3 Bucket
CloudFormation (YAML):
CDK (TypeScript):
Ví dụ 2: VPC với Subnets
CDK (TypeScript):
So sánh: CloudFormation cần ~100 dòng YAML, CDK chỉ cần 5 dòng!
Ví dụ 3: Lambda + API Gateway
Ví dụ 4: Permissions với grant* methods
CDK Commands
| Command | Mô tả |
|---|---|
cdk init | Tạo project mới |
cdk synth | Generate CloudFormation template (không deploy) |
cdk diff | So sánh local vs deployed |
cdk deploy | Deploy stack |
cdk destroy | Xóa stack |
cdk bootstrap | Tạo CDK toolkit stack (chạy 1 lần per account/region) |
cdk ls | List stacks trong app |
cdk watch | Auto-deploy khi code thay đổi (dev mode) |
Workflow thường dùng
Cross-Stack References
🧪 Testing CDK
CDK vs CloudFormation vs Terraform
| Feature | CloudFormation | Terraform | CDK |
|---|---|---|---|
| Language | YAML/JSON | HCL | TypeScript, Python, Java... |
| IDE Support | Limited | Plugin | Full (autocomplete, types) |
| Abstraction | Low | Low | High (L2, L3 constructs) |
| Testing | Hard | Hard | Easy (Jest, pytest) |
| Learning Curve | Medium | Medium | Low (nếu biết code) |
| Multi-cloud | ❌ AWS only | ✅ Yes | ❌ AWS only (có CDK for Terraform) |
| Loops/Conditions | !If, !ForEach (limited) | for_each, count | Native loops, if/else |
| Output | Direct | Direct | → CloudFormation templates |