AWS CDK 开发

aws-cdk-development
分类编程
作者Agentic Awesome Skills 社区
许可MIT
评分4.20/5
使用8.8K

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-pluginsdeploy-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 的命名机制自动生成唯一名称。

typescript
// ❌ 错误 - 显式命名会阻碍可复用性和并行部署
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

typescript
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

typescript
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)时进行验证:

bash
npm install --save-dev cdk-nag

添加到您的 CDK 应用中:

typescript
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 进行合成:通过全面规则验证堆栈

bash
cdk synth  # cdk-nag 通过 Aspects 自动运行

2. 抑制合理的异常并记录原因:

typescript
import { NagSuppressions } from 'cdk-nag';

// 记录为什么需要此异常
NagSuppressions.addResourceSuppressions(resource, [
{
id: 'AwsSolutions-L1',
reason: 'Lambda@Edge 需要特定的运行时以兼容 CloudFront'
}
]);

#### 第三层:提交前安全网

1. 构建:确保编译成功

bash
npm run build  # 或特定语言的构建命令

2. 测试:运行单元测试和集成测试

bash
npm test  # 或 pytest, mvn test 等

3. 验证脚本:元级检查

bash
./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 失败并维持代码质量标准。

局限性

  • 仅在任务与上游来源及本地项目上下文明确匹配时使用此技能。
  • 在应用更改前,请验证命令、生成的代码、依赖项、凭据以及外部服务的行为。
  • 不要将示例视为环境特定测试、安全审查或破坏性/高成本操作用户审批的替代方案。