@aws-cdk/aws-events-targets

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

亚马逊事件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

中文使用文档
文档目录10 节
  1. 事件重试策略并使用死字母队列
  2. 启动 Lambda 函数
  3. 将事件登录到日志组
  4. 启动代码构建
  5. 启动编码管道
  6. 启动 StepFuns 状态机器
  7. 执行批次任务
  8. 启动 API 网关 REST API
  9. 启动 API 目标
  10. 把一个事件放在事件桥总线上

亚马逊事件Bridge的事件目标


End-of-Support

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

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


此库包含将 Amazon EventBridge 发送给任意 支持的AWS服务数量。 这些班级的案例应当通过 页:1 rule.addTarget() 方法.

目前得到支持的有:

参见 @aws-cdk/aws-events 用于获取更多信息的库 事件布莱奇.

事件重试策略并使用死字母队列

代码构建、代码Pipeline、Lambda、步骤功能、日志组和SQS等目标支持 死信队列和设置重试策略见 羊肉的例子。 。 。 . 使用 逃生舱 用于其他目标类型.

启动 Lambda 函数

使用 LambdaFunction 目标以引用 lambda 函数.

下面的代码片段创建了以 Lambda 函数作为目标的事件规则 触发的每起事件 aws.ec2 来源. 您可以选择附加 死信队列。 。 。 .

import * as lambda from '@aws-cdk/aws-lambda';

const fn = new lambda.Function(this, 'MyFunc', {
  runtime: lambda.Runtime.NODEJS_14_X,
  handler: 'index.handler',
  code: lambda.Code.fromInline(`exports.handler = handler.toString()`),
});

const rule = new events.Rule(this, 'rule', {
  eventPattern: {
    source: ["aws.ec2"],
  },
});

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

rule.addTarget(new targets.LambdaFunction(fn, {
  deadLetterQueue: queue, // Optional: add a dead letter queue
  maxEventAge: cdk.Duration.hours(2), // Optional: set the maxEventAge retry policy
  retryAttempts: 2, // Optional: set the max number of retry attempts
}));

将事件登录到日志组

使用 LogGroup 目标可以在云表日志组中记录您的事件.

例如,以下代码片段创建了以Cloud Watch LogGroup为目标的事件规则. 每一起事件 aws.ec2 源将发送到云表日志组 .

import * as logs from '@aws-cdk/aws-logs';

const logGroup = new logs.LogGroup(this, 'MyLogGroup', {
  logGroupName: 'MyLogGroup',
});

const rule = new events.Rule(this, 'rule', {
  eventPattern: {
    source: ["aws.ec2"],
  },
});

rule.addTarget(new targets.CloudWatchLogGroup(logGroup));

启动代码构建

使用 CodeBuildProject 目标可触发代码构建项目.

下面的代码片段创建一个代码承诺寄存器, 触发一个代码构建项目 承诺在主分支。 您可以选择附加 死信队列。 。 。 .

import * as codebuild from '@aws-cdk/aws-codebuild';
import * as codecommit from '@aws-cdk/aws-codecommit';

const repo = new codecommit.Repository(this, 'MyRepo', {
  repositoryName: 'aws-cdk-codebuild-events',
});

const project = new codebuild.Project(this, 'MyProject', {
  source: codebuild.Source.codeCommit({ repository: repo }),
});

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

// trigger a build when a commit is pushed to the repo
const onCommitRule = repo.onCommit('OnCommit', {
  target: new targets.CodeBuildProject(project, {
    deadLetterQueue: deadLetterQueue,
  }),
  branches: ['master'],
});

启动编码管道

使用 CodePipeline 目标触发CodePipeline管道.

下面的代码片段创建了每时每刻被触发的代码管道

import * as codepipeline from '@aws-cdk/aws-codepipeline';

const pipeline = new codepipeline.Pipeline(this, 'Pipeline');

const rule = new events.Rule(this, 'Rule', {
  schedule: events.Schedule.expression('rate(1 hour)'),
});

rule.addTarget(new targets.CodePipeline(pipeline));

启动 StepFuns 状态机器

使用 SfnStateMachine 目标触发国家机器.

下面的代码片段创建了简单状态机器,每分钟用一个 假物体作为输入 . 您可以选择附加 死信队列 到目标.

import * as iam from '@aws-cdk/aws-iam';
import * as sfn from '@aws-cdk/aws-stepfunctions';

const rule = new events.Rule(this, 'Rule', {
  schedule: events.Schedule.rate(cdk.Duration.minutes(1)),
});

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

const role = new iam.Role(this, 'Role', {
  assumedBy: new iam.ServicePrincipal('events.amazonaws.com'),
});
const stateMachine = new sfn.StateMachine(this, 'SM', {
  definition: new sfn.Wait(this, 'Hello', { time: sfn.WaitTime.duration(cdk.Duration.seconds(10)) })
});

rule.addTarget(new targets.SfnStateMachine(stateMachine, {
  input: events.RuleTargetInput.fromObject({ SomeParam: 'SomeValue' }),
  deadLetterQueue: dlq,
  role: role
}));

执行批次任务

使用 BatchJob 目标要排入批量任务.

下面的代码片段会创建一个简单的工作队列,该队列每小时以一个 假物体作为输入 . 您可以选择附加 死信队列 到目标.

import * as batch from '@aws-cdk/aws-batch';
import { ContainerImage } from '@aws-cdk/aws-ecs';

const jobQueue = new batch.JobQueue(this, 'MyQueue', {
  computeEnvironments: [
    {
      computeEnvironment: new batch.ComputeEnvironment(this, 'ComputeEnvironment', {
        managed: false,
      }),
      order: 1,
    },
  ],
});

const jobDefinition = new batch.JobDefinition(this, 'MyJob', {
  container: {
    image: ContainerImage.fromRegistry('test-repo'),
  },
});

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

const rule = new events.Rule(this, 'Rule', {
  schedule: events.Schedule.rate(cdk.Duration.hours(1)),
});

rule.addTarget(new targets.BatchJob(
  jobQueue.jobQueueArn,
  jobQueue,
  jobDefinition.jobDefinitionArn,
  jobDefinition, {
    deadLetterQueue: queue,
    event: events.RuleTargetInput.fromObject({ SomeParam: 'SomeValue' }),
    retryAttempts: 2,
    maxEventAge: cdk.Duration.hours(2),
  },
));

启动 API 网关 REST API

使用 ApiGateway 目标触发 REST API.

下面的代码片段创建了一个 Api Gateway REST API,每个小时都会被引用.

import * as api from '@aws-cdk/aws-apigateway';
import * as lambda from '@aws-cdk/aws-lambda';

const rule = new events.Rule(this, 'Rule', {
  schedule: events.Schedule.rate(cdk.Duration.minutes(1)),
});

const fn = new lambda.Function( this, 'MyFunc', {
  handler: 'index.handler',
  runtime: lambda.Runtime.NODEJS_14_X,
  code: lambda.Code.fromInline( 'exports.handler = e => {}' ),
} );

const restApi = new api.LambdaRestApi( this, 'MyRestAPI', { handler: fn } );

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

rule.addTarget(
  new targets.ApiGateway( restApi, {
    path: '/*/test',
    method: 'GET',
    stage:  'prod',
    pathParameterValues: ['path-value'],
    headerParameters: {
      Header1: 'header1',
    },
    queryStringParameters: {
      QueryParam1: 'query-param-1',
    },
    deadLetterQueue: dlq
  } ),
)

启动 API 目标

使用 targets.ApiDestination 目标可触发外部 API。 你必须要 创建一个 events.Connection 财务报告和审定财务报表 events.ApiDestination 还有.

下面的代码片段创建一个每小时被引用的外部目的地.

const connection = new events.Connection(this, 'Connection', {
  authorization: events.Authorization.apiKey('x-api-key', SecretValue.secretsManager('ApiSecretName')),
  description: 'Connection with API Key x-api-key',
});

const destination = new events.ApiDestination(this, 'Destination', {
  connection,
  endpoint: 'https://example.com',
  description: 'Calling example.com with API key x-api-key',
});

const rule = new events.Rule(this, 'Rule', {
  schedule: events.Schedule.rate(cdk.Duration.minutes(1)),
  targets: [new targets.ApiDestination(destination)],
});

把一个事件放在事件桥总线上

使用 EventBus 目标,以路径事件到不同的事件Bus.

下面的代码片段创建了预定事件规则,即将事件路由到导入的事件总线.

const rule = new events.Rule(this, 'Rule', {
  schedule: events.Schedule.expression('rate(1 minute)'),
});

rule.addTarget(new targets.EventBus(
  events.EventBus.fromEventBusArn(
    this,
    'External',
    `arn:aws:events:eu-west-1:999999999999:event-bus/test-bus`,
  ),
));

版本与发布记录

@aws-cdk/aws-events-targets 共发布 256 个版本,首次发布于 2019/04/23;过去 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-targets 的常见问题

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

亚马逊事件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-targets?

在项目目录运行 npm install @aws-cdk/aws-events-targets,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@aws-cdk/aws-apigateway(1.204.0)、@aws-cdk/aws-autoscaling(1.204.0)、@aws-cdk/aws-codebuild(1.204.0)、@aws-cdk/aws-codepipeline(1.204.0)、@aws-cdk/aws-ec2(1.204.0)、@aws-cdk/aws-ecs(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-kinesisfirehose(1.204.0)、@aws-cdk/aws-kms(1.204.0)、@aws-cdk/aws-lambda(1.204.0)、@aws-cdk/aws-logs(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/aws-stepfunctions(1.204.0)、@aws-cdk/core(1.204.0)、@aws-cdk/custom-resources(1.204.0)、constructs(^3.3.69)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

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

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

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

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

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

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

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

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

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

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

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

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