AWS CDK 开发
AWS CDK 开发
本技能为使用 Cloud Development Kit (CDK) 开发 AWS 基础设施提供全面指导,并集成 MCP 服务器以获取最新的 AWS 知识和 CDK 工具。
AWS 文档要求
在回答之前,请务必使用 MCP 工具 (mcp__aws-mcp__* 或 mcp__*awsdocs*__*) 验证 AWS 相关事实。aws-mcp-setup 依赖项会自动加载 —— 如果 MCP 工具不可用,请引导用户完成该技能的设置流程。
CDK 特定 MCP 指南
AWS Labs 已将专用的 CDK MCP 服务器 (awslabs.cdk-mcp-server) 替换为更广泛的 awslabs.aws-iac-mcp-server,后者除 CDK 外还涵盖了 CloudFormation 和其他 AWS 基础设施即代码工作流。
如需查询 CDK 构件、最佳实践建议和模式指南,请安装 awslabs.aws-iac-mcp-server。它包含在 awslabs/agent-plugins 的 deploy-on-aws 插件中,也可以通过 claude mcp add aws-iac uvx awslabs.aws-iac-mcp-server@latest 直接注册。
适用场景:
- CDK 构件推荐和 API 查询
- CDK 和 CloudFormation 最佳实践模式
- 验证合成 (synthesized) 的模板
- 跨资源配置指南
何时使用此技能
在以下场景中使用此技能:
- 创建新的 CDK 堆栈或构件
- 重构现有的 CDK 基础设施
- 在 CDK 中实现 Lambda 函数
- 遵循 AWS CDK 最佳实践
- 在部署前验证 CDK 堆栈配置
- 验证 AWS 服务功能和区域可用性
CDK 核心原则
资源命名
至关重要:当 CDK 构件中的资源名称为可选时,不要显式指定资源名称。
原因:CDK 生成的名称可实现:
- 可复用模式:多次部署相同的构件/模式而不会产生冲突
- 并行部署:在同一区域可同时部署多个堆栈
- 更简洁的共享逻辑:模式和共享代码可以多次初始化而不会发生名称碰撞
- 堆栈隔离:每个堆栈自动获得唯一标识的资源
模式:让 CDK 通过 CloudFormation 的命名机制自动生成唯一名称。
// ❌ 错误 - 显式命名会阻碍可复用性和并行部署
new lambda.Function(this, 'MyFunction', {
functionName: 'my-lambda', // 避免这样做
// ...
});
// ✅ 正确 - 让 CDK 生成唯一名称
new lambda.Function(this, 'MyFunction', {
// 不指定 functionName - CDK 将生成:StackName-MyFunctionXXXXXX
// ...
});
安全提示:对于不同环境(开发、测试、生产),请遵循 AWS 安全支柱最佳实践,使用独立的 AWS 账户,而非依赖于单个账户内的资源命名。账户级隔离可提供更强的安全边界。
Lambda 函数开发
使用合适的 Lambda
根据运行时选择构建方式:
TypeScript/JavaScript:使用 @aws-cdk/aws-lambda-nodejs
import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
new NodejsFunction(this, 'MyFunction', {
entry: 'lambda/handler.ts',
handler: 'handler',
// 自动处理打包、依赖和转译
});
Python:使用 @aws-cdk/aws-lambda-python
import { PythonFunction } from '@aws-cdk/aws-lambda-python-alpha';
new PythonFunction(this, 'MyFunction', {
entry: 'lambda',
index: 'handler.py',
handler: 'handler',
// 自动处理依赖和打包
});
优势:
- 自动打包和依赖管理
- 自动处理转译
- 无需手动打包
- 部署模式一致
部署前验证
采用多层验证策略以进行全面的 CDK 质量检查:
#### 第一层:实时 IDE 反馈(推荐)
针对 TypeScript/JavaScript 项目:
安装 cdk-nag 以在合成(synthesis)时进行验证:
npm install --save-dev cdk-nag添加到您的 CDK 应用中:
import { Aspects } from 'aws-cdk-lib';
import { AwsSolutionsChecks } from 'cdk-nag';
const app = new App();
Aspects.of(app).add(new AwsSolutionsChecks());
可选 - VS Code 用户:安装 CDK NAG Validator 扩展,在保存文件时获得更快速的反馈。
针对 Python/Java/C#/Go 项目:cdk-nag 支持所有 CDK 语言,并提供相同的合成时验证。
#### 第二层:合成时验证(必须)
1. 使用 cdk-nag 进行合成:通过全面规则验证堆栈
cdk synth # cdk-nag 通过 Aspects 自动运行2. 抑制合理的异常并记录原因:
import { NagSuppressions } from 'cdk-nag';
// 记录为什么需要此异常
NagSuppressions.addResourceSuppressions(resource, [
{
id: 'AwsSolutions-L1',
reason: 'Lambda@Edge 需要特定的运行时以兼容 CloudFront'
}
]);
#### 第三层:提交前安全网
1. 构建:确保编译成功
npm run build # 或特定语言的构建命令2. 测试:运行单元测试和集成测试
npm test # 或 pytest, mvn test 等3. 验证脚本:元级检查
./scripts/validate-stack.sh验证脚本目前的重点在于:
- 语言检测
- 模板大小和资源数量分析
- 合成成功验证
- (注:详细的反模式检查由 cdk-nag 处理)
工作流指南
开发工作流
1. 设计:规划基础设施资源及其关系
2. 验证 AWS 服务:使用 AWS Documentation MCP 确认服务的可用性和功能
- 检查所有所需服务的区域可用性
- 验证服务限制和配额
- 确认最新的 API 规范
3. 实现:遵循最佳实践编写 CDK 构建 (constructs)
- 使用 CDK MCP 服务器获取构建建议
- 通过 MCP 工具参考 CDK 最佳实践
4. 验证:运行部署前检查(见上文)
5. 合成:生成 CloudFormation 模板
6. 评审:检查合成模板的正确性
7. 部署:部署到目标环境
8. 验证:
确认资源已正确创建
堆栈组织 (Stack Organization)
- 对于复杂应用,请使用嵌套堆栈 (nested stacks)
- 将关注点分离到逻辑构建边界 (construct boundaries) 中
- 导出其他堆栈可能需要的数值
- 使用 CDK 上下文 (context) 进行环境特定配置
测试策略
- 对单个构建 (construct) 进行单元测试
- 对堆栈合成 (stack synthesis) 进行集成测试
- 对 CloudFormation 模板进行快照测试
- 验证资源属性及其关系
高效使用 MCP 服务器
何时使用 AWS Documentation MCP
在实施前务必验证:
- 新的 AWS 服务功能或配置
- 目标区域的服务可用性
- API 参数规范
- 服务限制与配额
- AWS 服务的安全最佳实践
示例场景:
- “检查 Lambda 是否支持 Python 3.13 运行时”
- “验证 DynamoDB 是否在 eu-south-2 区域可用”
- “当前的 Lambda 超时限制是多少?”
- “获取最新的 S3 加密选项”
何时使用 CDK MCP 服务器
利用其获取 CDK 特定指导:
- CDK 构建 (construct) 的选择与使用
- CDK API 参数选项
- CDK 最佳实践模式
- 构建属性配置
- CDK 特定优化
示例场景:
- “API Gateway REST API 推荐使用哪个 CDK 构建?”
- “如何配置 NodejsFunction 的打包 (bundling) 选项?”
- “CDK 堆栈组织的最佳实践”
- “支持自动扩容的 DynamoDB CDK 构建”
MCP 使用最佳实践
1. 先验证:在实施新功能前,始终先检查 AWS Documentation MCP
2. 区域验证:检查服务在目标部署区域的可用性
3. CDK 指导:使用 CDK MCP 获取特定构建的建议
4. 保持最新:MCP 服务器提供超出知识截止日期的最新信息
5. 结合资源:结合技能模式和 MCP 服务器以获得全面的指导
CDK 模式参考
有关详细的 CDK 模式、反模式和架构指导,请参考综合参考文档:
文件:references/cdk-patterns.md
该参考文档包括:
- 常见的 CDK 模式及其使用场景
- 应避免的反模式
- 安全最佳实践
- 成本优化策略
- 性能考量
附加资源
- 验证脚本:
scripts/validate-stack.sh- 部署前验证
- CDK 模式:
references/cdk-patterns.md- 详细模式库
- AWS Documentation MCP:集成以获取最新 AWS 信息
- CDK MCP 服务器:集成以获取 CDK 特定指导
GitHub Actions 集成
当仓库中存在 GitHub Actions 工作流文件时,请确保在提交前通过 .github/workflows/ 中定义的所有检查。这可以防止 CI/CD 失败并维持代码质量标准。
局限性
- 仅在任务与上游来源及本地项目上下文明确匹配时使用此技能。
- 在应用更改前,请验证命令、生成的代码、依赖项、凭据以及外部服务的行为。
- 不要将示例视为环境特定测试、安全审查或破坏性/高成本操作用户审批的替代方案。