AWS Lambda (TypeScript) - JMESPath Uttility 的动力工具
用于 AWS Lambda (TypeScript) 的 Powertools 是用于执行无服务器的开发者工具包 最佳做法和增加开发者的速度。 。 。 .
您可以在 TypeScript 和 JavaScript 代码基础中使用软件包.
介绍
JMESPath工具是一个高级函数,用来使用JMESPath表达式来解析和提取JSON对象的数据.
使用量
要启动, 请通过运行安装库 :
npm i @aws-lambda-powertools/jmespath
基本用途
在其核心中,库提供了使用JMESPath表达式从JSON对象中提取数据的功能.
import { search } from '@aws-lambda-powertools/jmespath';
import { Logger } from '@aws-lambda-powertools/logger';
const logger = new Logger();
type MyEvent = {
foo: {
bar: string;
};
}
export const handler = async (event: MyEvent): Promise<void> => {
const result = search(event, 'foo.bar');
logger.info(result); // "baz"
};
从信封中提取数据
在某些情况下,您可能想要从信封中提取数据 。 库提供一种工具功能来帮助您操作信封并从中提取数据.
import { extractDataFromEnvelope } from '@aws-lambda-powertools/jmespath/envelopes';
type MyEvent = {
body: string; // "{\"customerId\":\"dd4649e6-2484-4993-acb8-0f9123103394\"}"
deeplyNested: Array<{ someData: number[] }>;
};
type MessageBody = {
customerId: string;
};
export const handler = async (event: MyEvent): Promise<unknown> => {
const payload = extractDataFromEnvelope<MessageBody>(
event,
'powertools_json(body)'
);
const { customerId } = payload; // now deserialized
// also works for fetching and flattening deeply nested data
const someData = extractDataFromEnvelope<number[]>(
event,
'deeplyNested[*].someData[]'
);
return {
customerId,
message: 'success',
context: someData,
statusCode: 200,
};
};
图书馆提供 一套内置信封 帮助您从S3、SQS、SNS等常见事件源提取数据.
import {
extractDataFromEnvelope,
SQS,
} from '@aws-lambda-powertools/jmespath/envelopes';
import { Logger } from '@aws-lambda-powertools/logger';
import type { SQSEvent } from 'aws-lambda';
const logger = new Logger();
type MessageBody = {
customerId: string;
};
export const handler = async (event: SQSEvent): Promise<void> => {
const records = extractDataFromEnvelope<Array<MessageBody>>(event, SQS);
for (const record of records) {
// records is now a list containing the deserialized body of each message
const { customerId } = record;
logger.appendKeys({ customerId });
}
};
JMESPath 自定义函数
除了所有的东西 jMESPath 内建函数,该库提供自定义功能来帮助您使用复杂的数据结构。 例如,你可以使用 powertools_json 函数分析 JSON 字符串,或 powertools_base64 函数以解码一个基数64-编码字符串:
import { extractDataFromEnvelope } from '@aws-lambda-powertools/jmespath/envelopes';
import { Logger } from '@aws-lambda-powertools/logger';
const logger = new Logger();
export const handler = async (event: { payload: string }): Promise<void> => {
const data = extractDataFromEnvelope<string>(
event,
'powertools_json(powertools_base64(payload))'
);
logger.info('Decoded payload', { data });
};
最后,您也可以通过自己的自定义功能来扩展库. 下面是一个如何创建自定义函数来解码Brotli压缩字符串的例子.
import { fromBase64 } from '@aws-lambda-powertools/commons/utils/base64';
import { extractDataFromEnvelope } from '@aws-lambda-powertools/jmespath/envelopes';
import { PowertoolsFunctions } from '@aws-lambda-powertools/jmespath/functions';
import { Logger } from '@aws-lambda-powertools/logger';
import { brotliDecompressSync } from 'node:zlib';
const logger = new Logger();
class CustomFunctions extends PowertoolsFunctions {
@PowertoolsFunctions.signature({
argumentsSpecs: [['string']],
variadic: false,
})
public funcDecodeBrotliCompression(value: string): string {
const encoded = fromBase64(value, 'base64');
const uncompressed = brotliDecompressSync(encoded);
return uncompressed.toString();
}
}
export const handler = async (event: { payload: string }): Promise<void> => {
const message = extractDataFromEnvelope<string>(
event,
'Records[*].decode_brotli_compression(notification) | [*].powertools_json(@).message',
{ customFunctions: new CustomFunctions() }
);
logger.info('Decoded message', { message });
};
贡献
如果你有兴趣为这个项目捐款,请参见我们 贡献准则。 。 。 .
路线图
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文件.