如何解决如何使用 AWS CDK 为带有别名的 Lambda 设置 EventBridge 规则目标
在我的 Lambda CDK 堆栈中,我想设置一个事件规则,每 10 分钟向我的 Lambda 发送一个事件。
这有效并以 lambda 作为目标部署规则
// ... setup lambdaFunction construct...
// -- EVENTBRIDGE RULES --
const meetingSyncEvent = {
path: "/v1/meeting/sync",httpMethod: "GET"
};
const eventTarget = new awsEventTarget.LambdaFunction(lambdaFunction,{
event: awsEvents.RuleTargetInput.fromObject(meetingSyncEvent)
});
/**
TODO how do I add target to ARN with alias/version
* */
const eventRule = new awsEvents.Rule(this,generateConstructName("event-rule"),{
enabled: true,description: "event to invoke GET /meeting/sync",ruleName: "meeting-sync-rule",targets : [
eventTarget
],schedule: awsEvents.Schedule.rate(EVENT_MEETING_SYNC_RATE)
});
// -- end EVENTBRIDGE RULES --
问题是这仅针对没有别名或版本的基本 ARN(实际上始终指向 $Latest)。 AWS 控制台中有此选项可为目标设置别名或版本(如下图),我如何在 CDK 中执行此操作?
aws console UI allows alias and version for target target arn has alias when configured through UI
解决方法
我找到了:事件规则采用 IFunction
类型,并且由于 IAlias
和 IVersion
都扩展了 IFunction
,所以我们可以采用我们为函数创建的别名,并提供别名作为函数参数(AWS 区分函数、别名函数和版本函数)
const lambdaAlias = lambdaFunction.latestVersion
.addAlias(ENVIRONMENT_UPPERCASE)
const eventTarget = new awsEventsTargets.LambdaFunction(lambdaAlias,{
event: awsEvents.RuleTargetInput.fromObject(meetingSyncEvent)
});
const eventRule = new awsEvents.Rule(this,"event-rule",{
enabled: true,description: `event to invoke GET /meeting/sync for ${FUNCTION_NAME}`,ruleName: `${FUNCTION_NAME}-invoke-meetingsync`,targets: [
eventTarget
],schedule: awsEvents.Schedule.rate(EVENT_MEETING_SYNC_RATE)
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。