【计算机工具类-CI和CD工具Skills】aws-serverless 技能
在AWS上构建生产就绪的无服务器应用程序的专门技能。涵盖Lambda函数、API Gateway、DynamoDB、SQS/SNS事件驱动模式、SAM/CDK部署和冷启动优化。技能概述aws-serverless 技能提供了在AWS上构建生产就绪的无服务器应用程序的专家模式和最佳实践。它涵盖了Lambda函数、API Gateway、DynamoDB、SQS/SNS事件驱动模式、SAM/CDK部署和冷启动优化等关键领域,帮助开发者构建高性能、可靠的无服务器架构。下载地址:agentic-awesome-skills/skills/aws-serverless at main · sickn33/agentic-awesome-skills · GitHub主要功能Lambda函数模式: 提供Node.js和Python的Lambda处理程序模式,包含错误处理和最佳实践API Gateway集成: REST API和HTTP API与Lambda的集成模式DynamoDB操作: 高效的DynamoDB数据访问模式和最佳实践事件驱动模式: SQS/SNS事件驱动架构模式SAM/CDK部署: 使用SAM和CDK进行基础设施即代码部署冷启动优化: 减少冷启动时间和优化性能的策略核心原则正确调整内存和超时大小(在优化之前测量)为延迟敏感的工作负载最小化冷启动为Java/.NET函数使用SnapStart对于简单用例,优先使用HTTP API而不是REST API为失败设计,使用DLQ和重试保持部署包小使用环境变量进行配置使用关联ID实现结构化日志记录Lambda处理程序模式Node.js Lambda处理程序// Initialize outside handler (reused across invocations)const { DynamoDBClient } require(aws-sdk/client-dynamodb);const { DynamoDBDocumentClient, GetCommand } require(aws-sdk/lib-dynamodb);const client new DynamoDBClient({});const docClient DynamoDBDocumentClient.from(client);// Handler functionexports.handler async (event, context) {context.callbackWaitsForEmptyEventLoop false;try {const body typeof event.body string ? JSON.parse(event.body) : event.body;const result await processRequest(body);return {statusCode: 200,headers: {Content-Type: application/json,Access-Control-Allow-Origin: *},body: JSON.stringify(result)};} catch (error) {console.error(Error:, JSON.stringify({error: error.message,stack: error.stack,requestId: context.awsRequestId}));return {statusCode: error.statusCode || 500,headers: {Content-Type: application/json},body: JSON.stringify({error: error.message || Internal server error})};}};Python Lambda处理程序import jsonimport osimport loggingimport boto3from botocore.exceptions import ClientErrorlogger logging.getLogger()logger.setLevel(logging.INFO)dynamodb boto3.resource(dynamodb)table dynamodb.Table(os.environ[TABLE_NAME])def handler(event, context):try:body json.loads(event.get(body, {})) if isinstance(event.get(body), str) else event.get(body, {})result process_request(body)return {statusCode: 200,headers: {Content-Type: application/json,Access-Control-Allow-Origin: *},body: json.dumps(result)}except ClientError as e:logger.error(fDynamoDB error: {e.response[Error][Message]})return error_response(500, Database error)except json.JSONDecodeError:return error_response(400, Invalid JSON)except Exception as e:logger.error(fUnexpected error: {str(e)}, exc_infoTrue)return error_response(500, Internal server error)最佳实践在处理程序外部初始化客户端(在温暖调用之间重用)始终返回正确的API Gateway响应格式使用结构化JSON进行日志记录,以便CloudWatch Insights在错误日志中包含请求ID以便跟踪API Gateway集成模式REST API和HTTP API与Lambda的集成,适用于构建由Lambda支持的REST API,需要HTTP端点的函数。SAM模板示例AWSTemplateFormatVersion: 2010-09-09Transform: AWS::Serverless-2016-10-31Globals:Function:Runtime: nodejs20.xTimeout: 30MemorySize: 256Environment:Variables:TABLE_NAME: !Ref ItemsTableResources:HttpApi:Type: AWS::Serverless::HttpApiProperties:StageName: prodCorsConfiguration:AllowOrigins:- *AllowMethods:- GET- POST- DELETEAllowHeaders:- *注意事项仅在任务明确匹配上述范围时使用此技能不要将输出作为环境特定验证、测试或专家审查的替代品如果缺少所需的输入、权限、安全边界或成功标准,请停止并请求澄清