mcpField
A
aws-development

aws-development

github.com/mindrally云与 DevOps287705 次安装3 周前更新
代码仓库

关于 aws-development

面向 AWS 应用开发者的最佳实践技能,重点涵盖无服务器架构、基础设施即代码和安全。内容还涉及可观测性、测试及 CI/CD。

主要功能

  1. 01Lambda 配置与错误处理建议
  2. 02使用 Terraform、CDK 和 SAM 管理基础设施
  3. 03IAM 最小权限与密钥管理
  4. 04DynamoDB 数据建模模式
  5. 05日志、指标与分布式追踪
  6. 06AWS 测试和 CI/CD 指引

适用场景

  1. 01规划无服务器应用与 Lambda 函数
  2. 02使用 CDK 或 SAM 定义云基础设施
  3. 03检查 IAM 权限与密钥处理方式
  4. 04为 AWS 服务配置监控和测试

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mindrally/skills --skill aws-development

安装后在 Claude Code 中输入/aws-development确认已加载。

详细介绍

AWS 开发最佳实践

概述

本技能提供了在 Amazon Web Services (AWS) 上开发应用程序的全面指南,重点关注无服务器架构、基础设施即代码和安全最佳实践。

核心原则

  • 编写简洁、结构清晰的代码,并提供准确的 AWS SDK 示例
  • 对所有基础设施使用基础设施即代码(Terraform、CDK、SAM)
  • 所有 IAM 策略均遵循最小权限原则
  • 实施全面的日志记录、指标和跟踪,以实现可观测性

AWS Lambda 指南

配置标准
  • 使用 TypeScript 并采用 ARM64 架构,以获得更好的性能和成本效益
  • 根据工作负载需求设置适当的内存和超时值
  • 使用环境变量进行配置,切勿将值硬编码
  • 实施适当的错误处理和重试逻辑
Lambda 最佳实践
// Use ES modules and typed handlers
import { APIGatewayProxyHandler } from 'aws-lambda';

export const handler: APIGatewayProxyHandler = async (event) => {
  try {
    // Validate input at function start
    if (!event.body) {
      return { statusCode: 400, body: JSON.stringify({ error: 'Missing body' }) };
    }

    // Business logic here

    return { statusCode: 200, body: JSON.stringify({ success: true }) };
  } catch (error) {
    console.error('Lambda error:', error);
    return { statusCode: 500, body: JSON.stringify({ error: 'Internal error' }) };
  }
};

AWS CDK 指南

实施标准
  • 使用 aws-cdk-lib,并显式添加 aws_* 前缀
  • 为可复用模式实现自定义构造
  • 将不同关注点拆分到独立的 CloudFormation 堆栈中
  • 按功能组组织资源:存储、计算、身份验证、API、访问
项目结构
aws/
├── constructs/     # CDK custom constructs
├── stacks/         # CloudFormation stack definitions
├── functions/      # Lambda function implementations
└── tests/          # Infrastructure tests
CDK 最佳实践
import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws_lambda';
import * as dynamodb from 'aws-cdk-lib/aws_dynamodb';

// Use custom constructs for reusable patterns
export class ApiConstruct extends Construct {
  constructor(scope: Construct, id: string, props: ApiProps) {
    super(scope, id);
    // Implementation
  }
}

DynamoDB 模式

表设计
  • 根据访问模式而非实体关系设计表
  • 适当时采用单表设计
  • 使用 GSI 支持其他访问模式
  • 对工作负载变化较大的情况使用按需容量,对可预测的工作负载使用预置容量
最佳实践
  • 始终使用强类型的项目定义
  • 使用版本属性实施乐观锁定
  • 对多个项目使用批量操作
  • 为生产表启用时间点恢复

IAM 安全最佳实践

原则
  • 遵循最小权限原则:仅授予所需权限
  • 使用 IAM 角色而非访问密钥来访问 AWS 服务
  • 适当时实施基于资源的策略
  • 定期审计并轮换凭证
策略示例
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query"
      ],
      "Resource": "arn:aws:dynamodb:*:*:table/MyTable"
    }
  ]
}

SAM 模板配置

模板结构
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Globals:
  Function:
    Timeout: 30
    Runtime: nodejs20.x
    Architectures:
      - arm64
    Tracing: Active

Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src/
      Handler: index.handler
      Events:
        Api:
          Type: Api
          Properties:
            Path: /items
            Method: GET

API Gateway 配置

最佳实践
  • 使用 Cognito 或 IAM 进行身份验证
  • 实施请求验证
  • 仅在必要时启用 CORS
  • 使用使用计划和 API 密钥进行速率限制

使用 Step Functions 编排

  • 使用 Step Functions 处理复杂工作流
  • 使用 Catch 和 Retry 实施错误处理
  • 对高容量、短时长工作流使用 Express 工作流
  • 对长时间运行的流程使用 Standard 工作流

安全标准

加密
  • 为所有存储服务启用静态加密
  • 使用 AWS KMS 管理密钥
  • 启用传输中加密(TLS)
  • 对敏感数据使用自定义 KMS 密钥
密钥管理
  • 将密钥存储在 AWS Secrets Manager 或 Parameter Store 中
  • 切勿将密钥提交到版本控制系统
  • 自动轮换密钥
  • 使用 IAM 角色访问密钥

可观测性

日志记录
  • 使用结构化 JSON 日志
  • 在各服务之间包含关联 ID
  • 在适当的级别记录日志(INFO、WARN、ERROR)
  • 启用 CloudWatch Logs Insights 以便查询
监控
  • 为关键指标创建 CloudWatch 警报
  • 使用 X-Ray 进行分布式跟踪
  • 为业务 KPI 实施自定义指标
  • 设置仪表板以便查看运维状况

测试

单元测试
  • 在单元测试中模拟 AWS SDK 调用
  • 使用 localstack 或 SAM local 进行集成测试
  • 使用策略模拟器测试 IAM 策略
  • 使用 cfn-lint 验证 CloudFormation/CDK
集成测试
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { mockClient } from 'aws-sdk-client-mock';

const ddbMock = mockClient(DynamoDBClient);

beforeEach(() => {
  ddbMock.reset();
});

test('handler returns items', async () => {
  ddbMock.on(QueryCommand).resolves({ Items: [] });
  const result = await handler(event);
  expect(result.statusCode).toBe(200);
});

CI/CD 集成

  • 使用 AWS CodePipeline 或 GitHub Actions 实施 CI/CD
  • 部署前运行 cdk diff 或 sam validate
  • 实施暂存环境(dev、staging、prod)
  • 使用参数覆盖项配置特定环境的设置

应避免的常见问题

  1. 将 AWS 凭证或密钥硬编码
  2. 未设置合适的 Lambda 超时时间
  3. 忽略冷启动优化
  4. 过度配置资源
  5. 未实现适当的错误处理
  6. 缺少 CloudWatch 警报
  7. IAM 策略不充分(权限过于宽松)
  8. 在合规要求下未使用 VPC

评论

支持 Markdown