@aws-cdk/aws-events

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

亚马逊事件Bridge 构造库

此软件包已被标记为弃用

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

中文使用文档
文档目录6 节
  1. 规则
  2. 时间安排
  3. 事件目标
  4. 跨账户和跨区域目标
  5. 存档
  6. 授予已存在的事件Bus PutEvents

亚马逊事件Bridge 构造库


End-of-Support

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

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


Amazon EventBridge提供近实时的系统事件流 描述AWS资源的变化. 例如,一个 AWS 代码Pipeline 发送 状态 变动 当管道改变状态时.

  • 活动: 一个事件表示您的 AWS 环境有变化 。 AWS 资源 可以在状态变化时生成事件。 例如,亚马逊EC2 当 EC2 实例状态从待决状态变为 运行中,而 Amazon EC2 自动缩放在启动时生成事件或 终止实例。 AWS CloudTrail 发布事件时会给API打电话. 您可以生成自定义的应用程序关卡事件并将其发布到 事件布莱奇。 您也可以设置在 : a 定期计算。 关于生成事件的服务清单和样本 每个服务的事件,见 事件桥事件实例 支助 服务。 。 。 .
  • 目标: 一个目标进程事件。 目标可包括亚马逊EC2 实例、 AWS Lambda 函数、 Kinesis 流、 Amazon ECS 任务、 Step 函数状态机器 亚马逊 SNS 主题 亚马逊 SQS 队列 亚马逊 Cloud Watch Log Groups 和内置 目标。 一个目标以JSON格式接收事件.
  • 规则: 一条规则,将即将到来的事件匹配,并将它们引导到目标 处理。 一条规则可以通向多个目标,所有目标都是 平行处理。 规则不按特定顺序处理。 这个 使一个组织的不同部分能够寻找和处理事件 这是他们感兴趣的。 规则可以自定义 JSON 发送到 目标,仅通过某些部分或用常数覆盖.
  • 事件说明: 活动总线可以从自定义应用程序接收事件 也可以从AWS SaaS合作伙伴创建的应用程序和服务接收事件. 见 创建事件总线。 。 。 .

规则

这个 Rule 构造定义用于监视 基于一个 事件 模式 并援引 事件目标 当图案匹配到触发时 活动。 事件目标是指执行 IRuleTarget 接口.

通常你会使用其中一种 source.onXxx(name[, target[, options]]) -> Rule 关于事件源的方法,用于定义与 具体的活动。 您可以通过道具瞄准目标, 或者使用 rule.addTarget。 。 。 .

例如,定义一个规则,该规则将在一个 承诺被推到代码承诺存储器的"主"分支:

declare const repo: codecommit.Repository;
declare const project: codebuild.Project;

const onCommitRule = repo.onCommit('OnCommit', {
  target: new targets.CodeBuildProject(project),
  branches: ['master']
});

您可以添加附加目标, 可选 投入 变压器 使用 eventRule.addTarget(target[, input])。例如,我们可以添加一个 SNS 用于格式化可读消息的主题目标.

例如,这增加了一个SNS主题作为目标:

declare const onCommitRule: events.Rule;
declare const topic: sns.Topic;

onCommitRule.addTarget(new targets.SnsTopic(topic, {
  message: events.RuleTargetInput.fromText(
    `A commit was pushed to the repository ${codecommit.ReferenceEvent.repositoryName} on branch ${codecommit.ReferenceEvent.referenceName}`
  )
}));

或使用对象 :

declare const onCommitRule: events.Rule;
declare const topic: sns.Topic;

onCommitRule.addTarget(new targets.SnsTopic(topic, {
  message: events.RuleTargetInput.fromObject(
    {
      DataType: `custom_${events.EventField.fromPath('$.detail-type')}`
    }
  )
}));

时间安排

您可以配置规则以运行在时间表( cron 或 rate) 上 . 收费标准必须在分钟、小时或天内规定.

以下例子每天凌晨4点执行一个任务:

import { Rule, Schedule } from '@aws-cdk/aws-events';
import { EcsTask } from '@aws-cdk/aws-events-targets';
import { Cluster, TaskDefinition } from '@aws-cdk/aws-ecs';
import { Role } from '@aws-cdk/aws-iam';

declare const cluster: Cluster;
declare const taskDefinition: TaskDefinition;
declare const role: Role;

const ecsTaskTarget = new EcsTask({ cluster, taskDefinition, role });

new Rule(this, 'ScheduleRule', {
 schedule: Schedule.cron({ minute: '0', hour: '4' }),
 targets: [ecsTaskTarget],
});

如果您想要指定 Fargate 平台版本, 请设定 platformVersion 在 EcsTask 的道具中,例如:

declare const cluster: ecs.Cluster;
declare const taskDefinition: ecs.TaskDefinition;
declare const role: iam.Role;

const platformVersion = ecs.FargatePlatformVersion.VERSION1_4;
const ecsTaskTarget = new targets.EcsTask({ cluster, taskDefinition, role, platformVersion });

事件目标

这个 @aws-cdk/aws-events-targets 模块包括执行 IRuleTarget 用于各种 AWS 服务的接口.

支持下列目标:

  • targets.CodeBuildProject: 启动 AWS 代码构建
  • targets.CodePipeline: 启动 AWS 代码管道执行
  • targets.EcsTask: 在 Amazon ECS 集群上启动任务
  • targets.LambdaFunction: 启动 AWS Lambda 函数
  • targets.SnsTopic: 发布到 SNS 主题
  • targets.SqsQueue: 向 Amazon SQS 队列发送消息
  • targets.SfnStateMachine: 触发 AWS 步骤函数状态机
  • targets.BatchJob: 队列 AWS 批次任务
  • targets.AwsApi: 给 AWS API 打电话
  • targets.ApiGateway: 启动 AWS API 网关
  • targets.ApiDestination: 给外部目的地打电话

跨账户和跨区域目标

可以将事件源头和一个目标分别放在单独的AWS账户和区域内:

import { App, Stack } from '@aws-cdk/core';
import * as codebuild from '@aws-cdk/aws-codebuild';
import * as codecommit from '@aws-cdk/aws-codecommit';
import * as targets from '@aws-cdk/aws-events-targets';

const app = new App();

const account1 = '11111111111';
const account2 = '22222222222';

const stack1 = new Stack(app, 'Stack1', { env: { account: account1, region: 'us-west-1' } });
const repo = new codecommit.Repository(stack1, 'Repository', {
  repositoryName: 'myrepository',
});

const stack2 = new Stack(app, 'Stack2', { env: { account: account2, region: 'us-east-1' } });
const project = new codebuild.Project(stack2, 'Project', {
  // ...
});

repo.onCommit('OnCommit', {
  target: new targets.CodeBuildProject(project),
});

在这种情况下,丹麦中央银行将把两个帐户合并起来:

  • 它会在源堆栈中生成一条规则, 将目标账户的事件总线作为目标
  • 它将在目标堆栈中生成一个规则, 并附带提供的目标
  • 它会生成一个单独的堆栈, 允许源账户发布事件 到指定区域目标账户的事件总线, 并确保在源文件堆栈之前部署

更多信息,请参见 AWS 关于交叉账户事件的文件。 。 。 .

存档

可以将发送到活动总线的全部或部分事件存档. 然后有可能 重放这些事件。 。 。 .

const bus = new events.EventBus(this, 'bus', {
  eventBusName: 'MyCustomEventBus'
});

bus.archive('MyArchive', {
  archiveName: 'MyCustomEventBusArchive',
  description: 'MyCustomerEventBus Archive',
  eventPattern: {
    account: [Stack.of(this).account],
  },
  retention: Duration.days(365),
});

授予已存在的事件Bus PutEvents

要将已有的事件Bus导入您的 CDK 应用程序, 请使用 EventBus.fromEventBusArn, (中文(简体) ), EventBus.fromEventBusAttributes 或者说 EventBus.fromEventBusName 工厂方法.

那么,你可以使用这个 grantPutEventsTo 发放方法 event:PutEvents 到活动Bus.

declare const lambdaFunction: lambda.Function;

const eventBus = events.EventBus.fromEventBusArn(this, 'ImportedEventBus', 'arn:aws:events:us-east-1:111111111:event-bus/my-event-bus');

// now you can just call methods on the eventbus
eventBus.grantPutEventsTo(lambdaFunction);

版本与发布记录

@aws-cdk/aws-events 共发布 288 个版本,首次发布于 2018/07/31;过去 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-events 的常见问题

@aws-cdk/aws-events 是什么?

亚马逊事件Bridge 构造库注意:该包已被作者标记为弃用——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-events?

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

@aws-cdk/aws-events 支持 TypeScript 吗?

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

@aws-cdk/aws-events 支持 ESM 还是 CommonJS?

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

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

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

@aws-cdk/aws-events 可以商用吗?

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

@aws-cdk/aws-events 的下载量有多少?

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

@aws-cdk/aws-events 还在维护吗?

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