关于 aws-development
面向 AWS 应用开发者的最佳实践技能,重点涵盖无服务器架构、基础设施即代码和安全。内容还涉及可观测性、测试及 CI/CD。
主要功能
- 01Lambda 配置与错误处理建议
- 02使用 Terraform、CDK 和 SAM 管理基础设施
- 03IAM 最小权限与密钥管理
- 04DynamoDB 数据建模模式
- 05日志、指标与分布式追踪
- 06AWS 测试和 CI/CD 指引
适用场景
- 01规划无服务器应用与 Lambda 函数
- 02使用 CDK 或 SAM 定义云基础设施
- 03检查 IAM 权限与密钥处理方式
- 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)
- 使用参数覆盖项配置特定环境的设置
应避免的常见问题
- 将 AWS 凭证或密钥硬编码
- 未设置合适的 Lambda 超时时间
- 忽略冷启动优化
- 过度配置资源
- 未实现适当的错误处理
- 缺少 CloudWatch 警报
- IAM 策略不充分(权限过于宽松)
- 在合规要求下未使用 VPC
评论
支持 Markdown