[P4] Hướng Dẫn Chi Tiết: Deploy và Destroy Stack Đầu Tiên Với AWS CDK
AWS CDK (Cloud Development Kit) là công cụ Infrastructure as Code cho phép bạn định nghĩa cloud resources bằng các ngôn ngữ lập trình quen thuộc. Bài viết này sẽ hướng dẫn chi tiết cách deploy stack đầu tiên và cách xóa (destroy) stack khi không cần thiết.
Preparation Phase
Synthesis Phase
Deployment Phase
my-first-cdk-app/
├── app.py # Entry point
├── cdk.json # CDK config
├── requirements.txt # Python dependencies
└── my_first_cdk_app/
├── __init__.py
└── my_first_cdk_app_stack.py # Stack definition
from aws_cdk import (
Stack,
aws_sqs as sqs,
aws_sns as sns,
aws_sns_subscriptions as sns_subscriptions,
CfnOutput,
Duration
)
from constructs import Construct
class MyFirstCdkAppStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# Tạo Dead Letter Queue (DLQ)
dlq = sqs.Queue(
self, "MyFirstCdkAppDLQ",
queue_name="my-first-cdk-app-dlq",
retention_period=Duration.days(14)
)
# Tạo Main Queue với DLQ
queue = sqs.Queue(
self, "MyFirstCdkAppQueue",
queue_name="my-first-cdk-app-queue",
visibility_timeout=Duration.seconds(300),
dead_letter_queue=sqs.DeadLetterQueue(
max_receive_count=3,
queue=dlq
)
)
# Tạo SNS Topic với encryption
topic = sns.Topic(
self, "MyFirstCdkAppTopic",
topic_name="my-first-cdk-app-topic",
display_name="My First CDK App Topic",
encryption=sns.TopicEncryption.KMS_MANAGED
)
# Kết nối Queue với Topic
topic.add_subscription(
sns_subscriptions.SqsSubscription(queue)
)
# Tạo và kích hoạt virtual environment
python -m venv .venv
source .venv/bin/activate # Linux/MacOS
.venv\Scripts\activate # Windows
# Cài đặt dependencies
pip install -r requirements.txt
# Config AWS credentials
aws configure
# Deploy cơ bản
cdk deploy
# Deploy với options
cdk deploy --require-approval never # Bỏ qua confirm
cdk deploy --parameters uploadBucketName=my-bucket # Với parameters
cdk deploy --tags environment=dev # Với tags
cdk deploy --progress events # Xem events realtime
Qua CloudFormation Console
Sử dụng CDK CLI (Recommended)
# Xóa stack hiện tại
cdk destroy
# Xóa nhiều stack
cdk destroy stack1 stack2
⚠️ Lưu ý quan trọng: KHÔNG xóa stack “CDKToolkit” vì đây là bootstrapping stack cần thiết cho các deployment sau này.
CDK Destroy không chỉ đơn thuần là wrapper của CloudFormation delete-stack, mà còn cung cấp nhiều tính năng nâng cao:
auto_delete_objects
để tự động xử lý việc nàySecurity
Monitoring
# Thêm CloudWatch Alarm
queue.metric_approximate_number_of_messages_visible().create_alarm(
self, "QueueDepthAlarm",
threshold=100,
evaluation_periods=3,
alarm_name="Queue depth > 100 messages"
)
Resource Tagging
Tags.of(self).add("Environment", "Development")
Tags.of(self).add("Project", "MyFirstCdkApp")
Permission Errors
Resource Limits
Dependency Issues
AWS CDK mang lại nhiều lợi thế so với việc sử dụng CloudFormation trực tiếp:
Developer Experience tốt hơn
Productivity cao hơn
Dễ bảo trì