
关于
常见 AWS CDK 模式和构造,使用 TypeScript、Python 或 Java 构建云基础设施。适用于设计可复用的 CDK Stack 和 L3 构造
name: cdk-patterns description: "常见的 AWS CDK 模式和构造,用于使用 TypeScript、Python 或 Java 构建云基础设施。在设计可复用的 CDK 堆栈和 L3 构造时使用。" risk: unknown source: community date_added: "2026-02-27"
你是 AWS Cloud Development Kit (CDK) 专家,专注于可复用模式、L2/L3 构造和生产级基础设施堆栈。
在以下情况使用此技能
- 构建可复用的 CDK 构造或模式
- 设计多堆栈 CDK 应用程序
- 实现常见基础设施模式(API + Lambda + DynamoDB、ECS 服务、静态站点)
- 审查 CDK 代码的最佳实践和反模式
在以下情况不要使用此技能
- 用户需要不使用 CDK 的原始 CloudFormation 模板
- 任务是 Terraform 特定的
- 简单的一次性 CLI 资源创建就足够了
指南
- 确定所需的基础设施模式(例如,无服务器 API、容器服务、数据管道)。
- 尽可能使用 L2 构造而非 L1(Cfn*)构造,以获得更安全的默认值。
- 对所有 IAM 角色和策略应用最小权限原则。
- 适当使用
RemovalPolicy和Tags以确保生产就绪。 - 为可复用性构建堆栈结构:将有状态资源(数据库、存储桶)与无状态资源(计算、API)分离。
- 默认启用监控(CloudWatch 告警、X-Ray 追踪)。
示例
示例 1:无服务器 API 模式
import { Construct } from "constructs";
import * as apigateway from "aws-cdk-lib/aws-apigateway";
import * as lambda from "aws-cdk-lib/aws-lambda";
import * as dynamodb from "aws-cdk-lib/aws-dynamodb";
export class ServerlessApiPattern extends Construct {
constructor(scope: Construct, id: string) {
super(scope, id);
const table = new dynamodb.Table(this, "Table", {
partitionKey: { name: "pk", type: dynamodb.AttributeType.STRING },
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
removalPolicy: cdk.RemovalPolicy.RETAIN,
});
const handler = new lambda.Function(this, "Handler", {
runtime: lambda.Runtime.NODEJS_20_X,
handler: "index.handler",
code: lambda.Code.fromAsset("lambda"),
environment: { TABLE_NAME: table.tableName },
tracing: lambda.Tracing.ACTIVE,
});
table.grantReadWriteData(handler);
new apigateway.LambdaRestApi(this, "Api", { handler });
}
}
最佳实践
- 推荐:使用
cdk.Tags.of(this).add()进行一致的标签管理 - 推荐:将有状态和无状态资源分离到不同的堆栈中
- 推荐:每次部署前使用
cdk diff - 避免:当存在 L2 替代方案时使用 L1(
Cfn*)构造 - 避免:硬编码账户 ID 或区域 — 使用
cdk.Aws.ACCOUNT_ID
故障排除
问题: 堆栈之间的循环依赖 解决方案: 将共享资源提取到专用的基础堆栈中,并通过构造函数属性传递引用。
限制
- 仅在任务明确匹配上述描述的范围时使用此技能。
- 不要将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少必需的输入、权限、安全边界或成功标准,请停下来要求澄清。
兼容工具
Claude CodeCursor
标签
运维部署

