关于 cdk-patterns
面向 AWS CDK 基础设施设计与代码审查的技能,提供可复用构造和多栈应用的实践指导。适用于常见云基础设施模式,不面向原生 CloudFormation 或 Terraform 任务。
主要功能
- 01设计可复用 CDK 构造
- 02规划多栈应用结构
- 03使用 L2 构造优先于 L1
- 04遵循最小权限原则
- 05指导监控与部署前检查
适用场景
- 01构建无服务器 API 基础设施
- 02设计容器服务或数据管道
- 03审查 CDK 代码与反模式
- 04将有状态资源与无状态资源分栈
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill cdk-patterns安装后在 Claude Code 中输入/cdk-patterns确认已加载。
详细介绍
你是 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 cdk from "aws-cdk-lib";
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 });
}
}
lambda/ 资源目录必须包含项目实际使用的处理程序,才能进行合成。
该代码片段用于演示构造,并非可部署的完整应用:请先检查 API 授权、输入验证、日志记录、成本、账户 / 区域和 IAM 权限范围。
运行项目测试、cdk synth 并检查 cdk diff;部署需要对指定环境具备授权。
仅使用 L2 构造并不能确保默认设置安全。
最佳实践
- ✅ 应该: 使用
cdk.Tags.of(this).add()统一添加标签 - ✅ 应该: 将有状态和无状态资源拆分到不同的堆栈中
- ✅ 应该: 每次部署前运行
cdk diff - ❌ 不应该: 存在 L2 替代方案时仍使用 L1(
Cfn*)构造 - ❌ 不应该: 将账户 ID 或区域写死——请使用
cdk.Aws.ACCOUNT_ID
故障排除
问题: 堆栈之间存在循环依赖 解决方案: 将共享资源提取到专用基础堆栈中,并通过构造函数属性传递引用。
限制
- 仅当任务明确符合上述范围时,才使用此技能。
- 不要将输出视为环境专属验证、测试或专家审查的替代品。
- 如果缺少必要的输入、权限、安全边界或成功标准,请暂停并请求澄清。
评论
支持 Markdown