mcpField
C
cdk-patterns

cdk-patterns

github.com/sickn33云与 DevOps48.7k77 次安装今天更新
代码仓库

关于 cdk-patterns

面向 AWS CDK 基础设施设计与代码审查的技能,提供可复用构造和多栈应用的实践指导。适用于常见云基础设施模式,不面向原生 CloudFormation 或 Terraform 任务。

主要功能

  1. 01设计可复用 CDK 构造
  2. 02规划多栈应用结构
  3. 03使用 L2 构造优先于 L1
  4. 04遵循最小权限原则
  5. 05指导监控与部署前检查

适用场景

  1. 01构建无服务器 API 基础设施
  2. 02设计容器服务或数据管道
  3. 03审查 CDK 代码与反模式
  4. 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 资源创建已足够

说明

  1. 确定所需的基础设施模式(例如,无服务器 API、容器服务、数据管道)。
  2. 尽可能使用 L2 构造,而不是 L1(Cfn*)构造,以获得更安全的默认设置。
  3. 对所有 IAM 角色和策略应用最小权限原则。
  4. 适当使用 RemovalPolicy 和 Tags,以满足生产环境要求。
  5. 将有状态资源(数据库、存储桶)与无状态资源(计算、API)分开,以实现堆栈结构的可复用性。
  6. 默认启用监控(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