@aws-cdk/aws-lambda-event-sources

中文文档
1.204.0发布于 2023/06/20Apache-2.0TypeScriptCommonJS近 30 天下载 1.9万

AWS Lambda 事件来源

此软件包已被标记为弃用

AWS CDK v1 has reached End-of-Support on 2023-06-01. This package is no longer being updated, and users should migrate to AWS CDK v2. For more information on how to migrate, see https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html

中文使用文档
文档目录7 节
  1. 质量
  2. 第3条
  3. 简讯
  4. 迪纳摩DB流
  5. 键盘
  6. 卡夫卡语Name
  7. 路线图

AWS Lambda 事件源


End-of-Support

AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.

关于如何移徙的更多信息,请参见: 移动到 AWS CDK v2 指南。 。 。 .


一个事件源映射是一个AWS Lambda资源,它从事件源读取并引用了Lambda函数. 您可以使用事件源映射来处理不引用 Lambda 服务中的流或队列中的项目 直接函数。 Lambda为以下服务提供事件源映射. 有关羊肉的更多信息 事件源 这里。 。 。 .

此模块包括允许将各种 AWS 服务用作事件的类 aWS Lambda通过高级别 lambda.addEventSource(source) API (英语).

注:在多数情况下,也可以使用资源API来援引一项规则 AWS Lambda 函数 。 这个库为所有 Lambda 事件提供统一的 API 来源,不论它们使用何种基本机制.

以下代码设置了带有 SQS 队列事件源的 lambda 函数 -

import { SqsEventSource } from '@aws-cdk/aws-lambda-event-sources';

declare const fn: lambda.Function;
const queue = new sqs.Queue(this, 'MyQueue');
const eventSource = new SqsEventSource(queue);
fn.addEventSource(eventSource);

const eventSourceId = eventSource.eventSourceMappingId;

这个 eventSourceId 属性包含事件源代码。 这将是一个 符号 最终价值的确定 部署.

质量

Amazon 简单队列服务( Amazon SQS) 允许您构建同步 工作流程。 有关亚马逊 SQS 的更多信息,请参见 Amazon 简单队列 服务。 您可以配置 AWS Lambda 来投票这些消息的到来 然后将事件传递给 Lambda 函数引用 。 要查看一个样本事件, 见 亚马逊 SQS 事件。 。 。 .

要建立 Amazon 简单队列服务 作为 AWS Lambda 的事件源, 您 首先创建或更新 Amazon SQS 队列,并选择自定义值 队列参数。 以下参数将影响亚马逊SQS的投票 行为 :

  • 可见度 超时: 可能影响复试之间的间隔期.
  • 接收Message等时间: 将决定 长 民意调查 持续时间。 默认值为20秒.
  • 批量大小: 确定在引用您 lambda 函数前要缓冲多少记录 .
  • 最大切入窗口:在引用"羊肉"之前收集记录的最长时间. 这增加了以延误处理为代价进行整批处理的可能性.
  • 启用: 如果启用 SQS 事件源映射 。 默认是真实的.
import { SqsEventSource } from '@aws-cdk/aws-lambda-event-sources';

const queue = new sqs.Queue(this, 'MyQueue', {
  visibilityTimeout: Duration.seconds(30),      // default,
  receiveMessageWaitTime: Duration.seconds(20), // default
});
declare const fn: lambda.Function;

fn.addEventSource(new SqsEventSource(queue, {
  batchSize: 10, // default
  maxBatchingWindow: Duration.minutes(5),
  reportBatchItemFailures: true, // default to false
}));

第3条

您可以写出 Lambda 函数来处理 S3 桶事件, 如 对象创建或对象删除的事件。 例如,当用户上传一个 照片到一桶,你可能想要亚马逊 S3 引用您的 Lambda 函数,所以 它读取图像,为照片创建缩略图.

您可以使用 Amazon S3 中的桶通知配置功能 配置事件源映射, 识别您想要的桶事件 Amazon S3要发布,而Lambda的功能就是引用.

import * as s3 from '@aws-cdk/aws-s3';
import { S3EventSource } from '@aws-cdk/aws-lambda-event-sources';

const bucket = new s3.Bucket(this, 'mybucket');
declare const fn: lambda.Function;

fn.addEventSource(new S3EventSource(bucket, {
  events: [ s3.EventType.OBJECT_CREATED, s3.EventType.OBJECT_REMOVED ],
  filters: [ { prefix: 'subdir/' } ], // optional
}));

简讯

您可以写入 Lambda 函数处理 Amazon 简单通知服务 通知书。 当向亚马逊 SNS 专题发布消息时, 服务 可以通过传递消息有效载荷作为参数来引用你的Lambda函数. 您的 Lambda 函数代码可以处理事件, 例如发布 消息给其他亚马逊 SNS 主题,或者将消息发送给其他 AWS 服务.

这也使您能够针对亚马逊启动 Lambda 函数 Cloud Watch警报器和其他使用亚马逊SNS的AWS服务.

举例来说,见 附录:信息和JSON 格式 财务报告和审定财务报表 亚马逊 SNS 样本 活动。 。 。 . 例如,请见 使用 AWS Lambda 与 Amazon SNS 来自不同的 账户。 。 。 .

import * as sns from '@aws-cdk/aws-sns';
import { SnsEventSource } from '@aws-cdk/aws-lambda-event-sources';

declare const topic: sns.Topic;
const deadLetterQueue = new sqs.Queue(this, 'deadLetterQueue');

declare const fn: lambda.Function;
fn.addEventSource(new SnsEventSource(topic, {
  filterPolicy: { },
  deadLetterQueue: deadLetterQueue,
}));

当一个用户以您的 Lambda 函数为主题给 SNS 发布 API 打电话时 amazon SNS将调用Lambda来引用您的功能 一个同步。 Lambda将返回交付状态。 如果有错误 amazon SNS将重取Lambda的功能 时间。 三次尝试后,如果亚马逊 SNS 仍然无法成功引用 Lambda 函数,然后 Amazon SNS 将发送发送状态失败消息到 云观.

迪纳摩DB流

您可以从 DynamoDB 表格中写入 Lambda 函数来处理更改事件 。 当写入( 插入、 删除、 更新) 时, 事件会释放到 DynamoDB 流( 如果配置) 操作按表格进行。 见 使用 AWS Lambda 与 Amazon DynataDB 以获取更多关于 Lambda 函数事件源与 DynamoDB 配置的信息.

要处理 Lambda 函数的事件,首先创建或更新 DynamotB 表格,并启用 stream 规格。 然后,创建一个 DynamoEventSource 并添加到您的 Lambda 函数中。 以下参数会影响亚马逊DynamoDB的投票行为: 亚马逊DynamoDB:

  • 批量大小: 确定在引用您 lambda 函数之前缓冲了多少记录 - 可能影响您函数的内存用量( 如果太高) 以及跟随来的数据速度( 如果太低) 的能力 .
  • 二节节选取错误:如果一批件遇到出错,这会导致批件被一分为二并进行再试,使出错的记录能够被隔离.
  • 报告批次项目失败:允许函数返回一批记录的部分成功响应.
  • 最大切入窗口:在引用"羊肉"之前收集记录的最长时间. 这增加了以延误处理为代价进行整批处理的可能性.
  • 最大记录年龄: 将发送给函数处理的记录的最大年龄 。 超过最大年龄的记录将被视为失败.
  • 失败: 如果记录在所有重试后失败, 或记录年龄已超过配置值, 则记录将被发送到此处指定的 SQS 队列或 SNS 主题
  • 并行因素:每个硬度上同时处理的批次数.
  • 重试尝试:如果失败,记录的最大次数应当重审.
  • 启动选项: 将确定消费地点, 要么在最近('LATEST')的记录中, 要么是在最古老的记录中('TRIM HORIZON'). “ TRIM Horizon” 将确保您处理所有可用的数据, 而“ LATEST” 将忽略在附加事件源之前到达的所有记录 .
  • 翻转窗口: 使用流时处理窗口的持续时间, 以秒为单位.
  • 启用: 如果启用 DynamoDB Streams 事件源映射 。 默认是真实的.
import * as dynamodb from '@aws-cdk/aws-dynamodb';
import { DynamoEventSource, SqsDlq } from '@aws-cdk/aws-lambda-event-sources';

declare const table: dynamodb.Table;

const deadLetterQueue = new sqs.Queue(this, 'deadLetterQueue');

declare const fn: lambda.Function;
fn.addEventSource(new DynamoEventSource(table, {
  startingPosition: lambda.StartingPosition.TRIM_HORIZON,
  batchSize: 5,
  bisectBatchOnError: true,
  onFailure: new SqsDlq(deadLetterQueue),
  retryAttempts: 10,
}));

键盘

您可以写入 Lambda 函数, 处理 Amazon Kinesis Streams 中的流数据 。 关于Amazon Kinesis的更多信息,请参见: 亚马逊 Kinesis 服务。为了更多地了解 Lambda 函数事件源与动能的配置,并查看一个样本事件, 见 亚马逊Kinesis事件。 。 。 .

Amazon Kinesis作为AWS Lambda的事件源,你 首先创建或更新 Amazon Kinesis 流并选择自定义值 事件源参数。 以下参数将影响亚马逊的投票 行为 :

  • 批量大小: 确定在引用您 lambda 函数之前缓冲了多少记录 - 可能影响您函数的内存用量( 如果太高) 以及跟随来的数据速度( 如果太低) 的能力 .
  • 二节节选取错误:如果一批件遇到出错,这会导致批件被一分为二并进行再试,使出错的记录能够被隔离.
  • 报告批次项目失败:允许函数返回一批记录的部分成功响应.
  • 最大切入窗口:在引用"羊肉"之前收集记录的最长时间. 这增加了整批货物处理的可能性,而代价可能是延误处理.
  • 最大记录年龄: 将发送给函数处理的记录的最大年龄 。 超过最大年龄的记录将被视为失败.
  • 失败: 如果记录失败并耗入所有重试, 记录将被发送到此处指定的 SQS 队列或 SNS 主题
  • 并行因素:每个硬度上同时处理的批次数.
  • 重试尝试:如果失败,记录的最大次数应当重审.
  • 启动选项: 将确定消费地点, 要么在最近('LATEST')的记录中, 要么是在最古老的记录中('TRIM HORIZON'). “ TRIM Horizon” 将确保您处理所有可用的数据, 而“ LATEST” 将忽略在附加事件源之前到达的所有记录 .
  • 翻转窗口: 使用流时处理窗口的持续时间, 以秒为单位.
  • 启用: 如果启用 DynamoDB Streams 事件源映射 。 默认是真实的.
import * as kinesis from '@aws-cdk/aws-kinesis';
import { KinesisEventSource } from '@aws-cdk/aws-lambda-event-sources';

const stream = new kinesis.Stream(this, 'MyStream');

declare const myFunction: lambda.Function;
myFunction.addEventSource(new KinesisEventSource(stream, {
  batchSize: 100, // default
  startingPosition: lambda.StartingPosition.TRIM_HORIZON,
}));

卡夫卡语Name

您可以写入 Lambda 函数来处理来自 亚马逊 MSK 或一个 自我管理 Kafka 分组.

以下代码设置了Amazon MSK,作为Lambda函数的事件源. 需要配置全权证书才能进入 MSK 集群,如 用户名/ 名词认证。 。 。 .

import { Secret } from '@aws-cdk/aws-secretsmanager';
import { ManagedKafkaEventSource } from '@aws-cdk/aws-lambda-event-sources';

// Your MSK cluster arn
const clusterArn = 'arn:aws:kafka:us-east-1:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4';

// The Kafka topic you want to subscribe to
const topic = 'some-cool-topic';

// The secret that allows access to your MSK cluster
// You still have to make sure that it is associated with your cluster as described in the documentation
const secret = new Secret(this, 'Secret', { secretName: 'AmazonMSK_KafkaSecret' });

declare const myFunction: lambda.Function;
myFunction.addEventSource(new ManagedKafkaEventSource({
  clusterArn,
  topic: topic,
  secret: secret,
  batchSize: 100, // default
  startingPosition: lambda.StartingPosition.TRIM_HORIZON,
}));

以下代码设置自控的Kafka集群作为事件源. 基于用户名和密码的认证 将需按 管理访问和许可。 。 。 .

import { Secret } from '@aws-cdk/aws-secretsmanager';
import { SelfManagedKafkaEventSource } from '@aws-cdk/aws-lambda-event-sources';

// The list of Kafka brokers
const bootstrapServers = ['kafka-broker:9092'];

// The Kafka topic you want to subscribe to
const topic = 'some-cool-topic';

// The secret that allows access to your self hosted Kafka cluster
declare const secret: Secret;

declare const myFunction: lambda.Function;
myFunction.addEventSource(new SelfManagedKafkaEventSource({
  bootstrapServers: bootstrapServers,
  topic: topic,
  secret: secret,
  batchSize: 100, // default
  startingPosition: lambda.StartingPosition.TRIM_HORIZON,
}));

如果您自己管理的 Kafka 集群只能通过 VPC 实现, 也可以配置 vpc vpcSubnets 财务报告和审定财务报表 securityGroup。 。 。 .

路线图

最终,本模块将支持下面描述的所有事件源 支持的活动 来源 在 AWS Lambda 开发者指南中.

版本与发布记录

@aws-cdk/aws-lambda-event-sources 共发布 277 个版本,首次发布于 2018/11/01;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.204.0latest2023/06/203 年前
1.203.02023/06/013 年前
1.202.02023/05/223 年前
1.201.02023/05/113 年前
1.200.02023/04/273 年前
1.199.02023/04/213 年前

关于 @aws-cdk/aws-lambda-event-sources 的常见问题

@aws-cdk/aws-lambda-event-sources 是什么?

AWS Lambda 事件来源注意:该包已被作者标记为弃用——AWS CDK v1 has reached End-of-Support on 2023-06-01. This package is no longer being updated, and users should migrate to AWS CDK v2. For more information on how to migrate, see https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html

如何安装 @aws-cdk/aws-lambda-event-sources?

在项目目录运行 npm install @aws-cdk/aws-lambda-event-sources,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@aws-cdk/aws-apigateway(1.204.0)、@aws-cdk/aws-dynamodb(1.204.0)、@aws-cdk/aws-ec2(1.204.0)、@aws-cdk/aws-events(1.204.0)、@aws-cdk/aws-iam(1.204.0)、@aws-cdk/aws-kinesis(1.204.0)、@aws-cdk/aws-lambda(1.204.0)、@aws-cdk/aws-s3(1.204.0)、@aws-cdk/aws-s3-notifications(1.204.0)、@aws-cdk/aws-secretsmanager(1.204.0)、@aws-cdk/aws-sns(1.204.0)、@aws-cdk/aws-sns-subscriptions(1.204.0)、@aws-cdk/aws-sqs(1.204.0)、@aws-cdk/core(1.204.0)、constructs(^3.3.69)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@aws-cdk/aws-lambda-event-sources 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aws-cdk/aws-lambda-event-sources 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@aws-cdk/aws-lambda-event-sources 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 14.15.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@aws-cdk/aws-lambda-event-sources 可以商用吗?

@aws-cdk/aws-lambda-event-sources 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@aws-cdk/aws-lambda-event-sources 的下载量有多少?

根据 npm 官方下载统计,@aws-cdk/aws-lambda-event-sources 在 2026/10/08 – 2026/11/06 这 30 天内被下载 19,277 次,日均约 643 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aws-cdk/aws-lambda-event-sources 还在维护吗?

最新版本 1.204.0 发布于 2023/06/20(3 年前);至今共发布 277 个版本,其中过去 12 个月发布了 0 个;首次发布于 2018/11/01。作者已将其标记为弃用,新项目建议寻找替代方案。