亚马逊事件Bridge的事件目标
AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.
关于如何移徙的更多信息,请参见: 移动到 AWS CDK v2 指南。 。 。 .
此库包含将 Amazon EventBridge 发送给任意
支持的AWS服务数量。 这些班级的案例应当通过
页:1 rule.addTarget() 方法.
目前得到支持的有:
- 启动代码构建
- 启动编码管道
- 执行ECS任务
- 启动 Lambda 函数
- 启动 API 网关 REST API
- 向 SNS 专题发布信件
- 发送消息到 SQS 队列
- 启动 StepFuns 状态机器
- 执行批次任务
- 调用 AWS API
- 将记录放入 Kinesis 流
- 将事件登录到日志组
- 记录到 Kinesis 数据 Firehose 流
- 把一个事件放在事件桥总线上
- 发送事件到事件Bridge API 目标
参见 @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`,
),
));