Serverless 代码编写
- 作者仓库星标 0
- 作者仓库 skills-registry
Serverless Computing
AWS Lambda (Node.js)
import { APIGatewayProxyHandlerV2 } from 'aws-lambda';
export const handler: APIGatewayProxyHandlerV2 = async (event) => {
const body = JSON.parse(event.body || '{}');
// Initialize clients OUTSIDE handler (reused across warm invocations)
const result = await processRequest(body);
return {
statusCode: 200,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(result),
};
};
// DB connections, SDK clients — init outside handler
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
const ddb = DynamoDBDocumentClient.from(new DynamoDBClient({}));
Common Event Sources
// SQS handler
import { SQSHandler } from 'aws-lambda';
export const sqsHandler: SQSHandler = async (event) => {
for (const record of event.Records) {
const body = JSON.parse(record.body);
await processMessage(body);
}
// Failed messages: use partial batch response
};
// Scheduled (cron)
import { ScheduledHandler } from 'aws-lambda';
export const cronHandler: ScheduledHandler = async () => {
await dailyCleanup();
};
SST (recommended framework for AWS)
// sst.config.ts
export default $config({
app(input) { return { name: 'my-app', home: 'aws' }; },
async run() {
const api = new sst.aws.ApiGatewayV2('Api');
api.route('POST /orders', 'src/functions/orders.handler');
const table = new sst.aws.Dynamo('Orders', {
fields: { pk: 'string', sk: 'string' },
primaryIndex: { hashKey: 'pk', rangeKey: 'sk' },
});
// Link resources (auto-grants IAM permissions)
api.route('GET /orders/{id}', {
handler: 'src/functions/get-order.handler',
link: [table],
});
},
});
Serverless Framework
# serverless.yml
service: my-service
provider:
name: aws
runtime: nodejs20.x
environment:
TABLE_NAME: !Ref OrdersTable
functions:
createOrder:
handler: src/handlers/orders.create
events:
- httpApi: 'POST /orders'
processQueue:
handler: src/handlers/queue.process
events:
- sqs:
arn: !GetAtt OrderQueue.Arn
batchSize: 10
resources:
Resources:
OrdersTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ${self:service}-orders
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- { AttributeName: pk, AttributeType: S }
KeySchema:
- { AttributeName: pk, KeyType: HASH }
Cold Start Optimization
| Technique | Impact |
|---|---|
| Minimize bundle size (tree-shake, no large SDKs) | High |
| Initialize clients outside handler | High |
Use ARM64 (arm64 architecture) |
Medium |
| Provisioned concurrency for critical paths | High (costs more) |
| Avoid VPC unless required | Medium |
// Bundle optimization: import only what you need
import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; // Not all of aws-sdk
Anti-Patterns
| Anti-Pattern | Fix |
|---|---|
| Init DB/SDK inside handler | Move to module scope (reused across warm calls) |
| Monolithic function (does everything) | One function per concern |
| No timeout configuration | Set function timeout (default 3s is often too low) |
| Large deployment package | Tree-shake, exclude dev deps, use layers |
| Synchronous chaining (Lambda → Lambda) | Use SQS/SNS/Step Functions |
| No dead letter queue | Configure DLQ for async invocations |
Production Checklist
- Timeout configured per function
- Dead letter queue for async events
- CloudWatch alarms on errors and throttles
- Structured logging (JSON format)
- X-Ray tracing enabled
- Minimum IAM permissions per function
- Environment variables for config (not hardcoded)
- Provisioned concurrency for latency-critical functions
<!-- tomevault:4.0:skill_md:2026-05-22 -->Source: claude-dev-suite/claude-dev-suite — distributed by TomeVault.
- 流狐分类
- 通用
- 作者声明 Agent
- 未找到明确声明;不据此推断已兼容或已测试
- 静态检查
- 88 / 100 · 启发式扫描,不代表运行安全
- 作者 / 版本 / 许可
- @tomevault-io · 未声明 license
- 流狐 Token 估算
- 低消耗
- 流狐接入估算
- 即装即用
- 是否需要外部 API Key
- 未发现要求
- 检测到的系统要求
- macOS · Linux · Windows
- 底层运行要求
- Node.js
- 检测到的文件与系统行为
-
- 只读
- 允许写入 / 修改
- 读取环境变量
- 检测到的网络行为
- 仅限本地
- 安装命令数
- 无(仅作为资料)
档案由构建时根据 SKILL.md 与安装命令自动衍生,可能与作者实际意图存在差异。
需要注意: 未限定 allowed-tools,默认拥有全部工具权限。
作者没有在当前 SKILL.md 中定义固定输出样例。 AWS Lambda (Node.js)
AWS Lambda (Node.js)
Common Event Sources
Common Event Sources
SST (recommended framework for AWS)
SST (recommended framework for AWS)
Serverless Framework
Serverless Framework
Cold Start Optimization
Technique · Impact Minimize bundle size (tree-shake, no large SDKs) · High Initialize clients outside handler · High
Anti-Patterns
Anti-Pattern · Fix Init DB/SDK inside handler · Move to module scope (reused across warm calls) Monolithic function (does everything) · One function per concern
# Serverless Computing
## AWS Lambda (Node.js)
```typescript
import { APIGatewayProxyHandlerV2 } from 'aws-lambda';
export const handler: APIGatewayProxyHandlerV2 = async (event) => {
const body = JSON.parse(event.body || '{}');
// Initialize clients OUTSIDE handler (reused across warm invocations)
const result = await processRequest(body);
return {
statusCode: 200,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(result),
};
};
// DB connections, SDK clients — init outside handler
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
const ddb = DynamoDBDocumentClient.from(new DynamoDBClient({}));
```
### Common Event Sources
```typescript
// SQS handler
import { SQSHandler } from 'aws-lambda';
export const sqsHandler: SQSHandler = async (event) => {
for (const record of event.Records) {
const body = JSON.parse(record.body);
await processMessage(body);
}
// Failed messages: use partial batch response
};
// Scheduled (cron)
import { ScheduledHandler } from 'aws-lambda';
export const cronHandler: ScheduledHandler = async () => {
await dailyCleanup();
};
```
## SST (recommended framework for AWS)
```typescript
// sst.config.ts
export default $config({
app(input) { return { name: 'my-app', home: 'aws' }; },
async run() {
const api = new sst.aws.ApiGatewayV2('Api');
api.route('POST /orders', 'src/functions/orders.handler');
const table = new sst.aws.Dynamo('Orders', {
fields: { pk: 'string', sk: 'string' },
primaryIndex: { hashKey: 'pk', rangeKey: 'sk' },
});
// Link resources (auto-grants IAM permissions)
api.route('GET /orders/{id}', {
handler: 'src/functions/get-order.handler',
link: [table],
});
},
});
```
## Serverless Framework
… 证据边界与执行链路
作者原文负责流程事实;流狐只索引当前章节、要点、文件与命令。
章节 -> AWS Lambda (Node.js) → Common Event Sources → SST (recommended framework for AWS) → Serverless Framework → Cold Start Optimization → Anti-Patterns
要点 -> 原文未标出关键词
文件/命令 -> arm64 · Node.js · application/json · aws-sdk/lib-dynamodb · sst.config.ts · src/functions/orders.handler · src/functions/get-order.handler · src/handlers/orders.create
内容 SHA-256 -> 512233a08c27
原文结构
适用与边界
原文中的明确线索
arm64、Node.js、application/json、aws-sdk/lib-dynamodb、sst.config.ts、src/functions/orders.handler、src/functions/get-order.handler、src/handlers/orders.create