AWS Lambda (TypeScript) - 批处理工具
用于 AWS Lambda (TypeScript) 的 Powertools 是用于执行无服务器的开发者工具包 最佳做法和增加开发者的速度。 。 。 .
您可以在 TypeScript 和 JavaScript 代码库中使用库.
介绍
批量处理工具在从Amazon SQS,Amazon Kinesis Data Streams和Amazon DynamoDB Streams处理批次时处理部分故障.
使用量
要启动, 请通过运行安装库 :
npm i @aws-lambda-powertools/batch
批处理器
当使用 SQS, Kinesis Data Streams, 或 DynamoDB Streams 作为 Lambda 事件源时, 您的 Lambda 函数会用一批消息被触发.
如果您的函数无法处理批次中的任何消息,则整个批次返回您的队列或流. 同样的批次再试,直到其中任一条件发生: (a) 国家 您的 Lambda 函数返回一个成功的响应, (b) 国家 记录达到最大重试尝试,或 (c) 国家 当记录过期.
使用此工具, 批量记录会单独处理 – 只有未处理的信件返回到队列或流中进行进一步的重试 .
SQS 处理器
当使用 SQS 作为 Lambda 事件源时, 您可以指定 EventType.SQS 处理记录。 反应是: SQSBatchResponse 其中包含未处理的项目清单.
import {
BatchProcessorSync,
EventType,
processPartialResponseSync,
} from '@aws-lambda-powertools/batch';
import { Logger } from '@aws-lambda-powertools/logger';
import type { SQSHandler, SQSRecord } from 'aws-lambda';
const processor = new BatchProcessorSync(EventType.SQS);
const logger = new Logger();
const recordHandler = (record: SQSRecord): void => {
const payload = record.body;
if (payload) {
const item = JSON.parse(payload);
logger.info('Processed item', { item });
}
};
export const handler: SQSHandler = async (event, context) =>
processPartialResponseSync(event, recordHandler, processor, {
context,
});
Kinesis 处理器
当使用 Kinesis 数据流作为 Lambda 事件源时, 您可以指定 EventType.KinesisDataStreams 处理记录。 反应是: KinesisStreamBatchResponse 其中包含未处理的项目清单.
import {
BatchProcessorSync,
EventType,
processPartialResponseSync,
} from '@aws-lambda-powertools/batch';
import { Logger } from '@aws-lambda-powertools/logger';
import type { KinesisStreamHandler, KinesisStreamRecord } from 'aws-lambda';
const processor = new BatchProcessorSync(EventType.KinesisDataStreams);
const logger = new Logger();
const recordHandler = (record: KinesisStreamRecord): void => {
logger.info('Processing record', { record: record.kinesis.data });
const payload = JSON.parse(record.kinesis.data);
logger.info('Processed item', { item: payload });
};
export const handler: KinesisStreamHandler = async (event, context) =>
processPartialResponseSync(event, recordHandler, processor, {
context,
});
DynamoDB 流处理器
当使用 DynamoDB Streams 作为 Lambda 事件源时, 您可以使用 BatchProcessorSync 与 EventType.DynamoDBStreams 处理记录。 反应是: DynamoDBBatchResponse 其中包含未处理的项目清单.
import {
BatchProcessor,
EventType,
processPartialResponseSync,
} from '@aws-lambda-powertools/batch';
import { Logger } from '@aws-lambda-powertools/logger';
import type { DynamoDBRecord, DynamoDBStreamHandler } from 'aws-lambda';
const processor = new BatchProcessor(EventType.DynamoDBStreams); // (1)!
const logger = new Logger();
const recordHandler = (record: DynamoDBRecord): void => {
if (record.dynamodb && record.dynamodb.NewImage) {
logger.info('Processing record', { record: record.dynamodb.NewImage });
const message = record.dynamodb.NewImage.Message.S;
if (message) {
const payload = JSON.parse(message);
logger.info('Processed item', { item: payload });
}
}
};
export const handler: DynamoDBStreamHandler = async (event, context) =>
processPartialResponseSync(event, recordHandler, processor, {
context,
});
自动同步处理
如果您的用法大小写允许您同时处理多个记录而不相冲突,您可以使用 BatchProcessor 以同步处理记录。 这将产生一系列承诺,一旦处理完所有记录,这些承诺将得到解决.
import {
BatchProcessor,
EventType,
processPartialResponse,
} from '@aws-lambda-powertools/batch';
import type { SQSHandler, SQSRecord } from 'aws-lambda';
const processor = new BatchProcessor(EventType.SQS);
const recordHandler = async (record: SQSRecord): Promise<number> => {
const res = await fetch('https://httpbin.org/anything', {
body: JSON.stringify({ message: record.body }),
});
return res.status;
};
export const handler: SQSHandler = async (event, context) =>
await processPartialResponse(event, recordHandler, processor, {
context,
});
检查 文档 需要更多的实例.
贡献
如果你有兴趣为这个项目捐款,请参见我们 贡献准则。 。 。 .
路线图
AWS Lambda(英语:TypeScript)的"Powertools"行进图受顾客需求所驱动.
帮助我们确定未来功能或公用事业的优先次序 更新现有 RFC 和功能请求,或 创建新的,在此 GitHub 仓库中.
连接
- 关于 GitHub 讨论的 AWS Lambda 工具数字 : 加入对话
- 电子邮件数字 : aws-lambda-powertools- [email protected] 互联网档案馆的存檔,存档日期2014-12-21
如何支持 AWS Lambda (TypeScript) 的 Powertools ?
成为参考客户
了解哪些公司正在使用这个图书馆对于帮助在内部确定项目的优先次序很重要。 如果您的公司正在使用 Powertools 为 AWS Lambda (TypeScript) , 您可以要求您在 README 文件中添加您的姓名和标志 AWS Lambda( TypeScript) 的辅助电源工具(成为参考) 问题.
除其他外,下列公司使用Powertools:
- Alma 媒体
- 应用自己
- 贝利·纳尔逊
- Banx 软件
- 凯伦特
- 可认证
- 代码
- EF 教育第一
- 埃尔瓦
- 飞行重量
- 欺诈
- 全球数据网
- 关节
- 半径
- 内向
- 本地软件包
- 我们的隐私
- 完美邮递
- 传感器
- 铁丝网股份有限公司
- 绊脚石10
- 学校
分享你的工作
分享您为 AWS Lambda (TypeScript) 所做的 Powertools 。 看看社区有什么 已经共享 关于AWS Lambda的Powertools (TypeScript).
使用 Lambda 层
这帮助我们了解谁用Powertools为AWS Lambda(英语:TypeScript (TypeScript))以非侵入性的方式使用Powertools,并帮助我们获得未来对其他AWS Lambda语言的Powertool的投资. 何时 使用图层,您可以添加Powertools作为dev的依赖性,以不影响开发过程.
许可证
这个图书馆根据MIT-0许可证获得许可. 见LICENSE文件.