我正在尝试设置一个规则,以便使用CDK将事件从一个事件总线发送到同一个帐户中的另一个事件总线。
我遇到的问题是,Rule()只接受实现IRuleTarget的东西。
创建一个新的事件总线将返回实现EventBus的IRuleTarget类。但是查找一个EventBus返回不实现IRuleTarget的IEventBus。
有什么方法可以查找我的事件总线并将它作为目标应用到规则中吗?
// Define EventBus1
const eventBus1 = new EventBus(this, 'eventBus1', {
eventBusName: 'eventBus1Name',
});
// Look up my Event Bus in the other account, this method returns an IEventBus
const iEventBus2 = EventBus.fromEventBusArn(this, 'eventBus2', 'eventBus2Arn');
// My bad attempt to convert it, this didn't seem to work
const eventBus2 = EventBus.bind(iEventBus2);
// Create Rule to send event from eventBus1 to eventBus2
const eventBus1ToEventBus2Rule = new Rule(this, 'eventBus1ToEventBus2Rule', {
eventBus: eventBus1,
eventPattern: {
'detailType': ['eventDetailType'],
},
});
// Fails with in error I'll copy in below
eventBus1ToEventBus2Rule.addTarget(eventBus2);错误:解析错误:为"CfnRuleProps“目标提供的属性不正确:元素0:为"TargetProperty”arn提供的属性不正确,但缺少。
这是使用1.115.0版本的aws。一切都是通过EventBridge构建的。
发布于 2021-07-27 16:50:51
fromEventBusArn在EventBus类中。EventBus扩展(继承) BaseEventBus,它实现了IEventBus,因此可以在需要IEventBus的任何地方使用。因此,我认为您可以简单地将fromEventBusArn的返回值转换为EventBus。
而不是这样:
const iEventBus2 = EventBus.fromEventBusArn(this, 'eventBus2', 'eventBus2Arn');
const eventBus2 = EventBus.bind(iEventBus2);这样做:
const eventBus = EventBus.fromEventBusArn(this, 'eventBus2', 'eventBus2Arn') as EventBus;但是,所产生的变量eventBus不能像您所做的那样传递给eventBus1ToEventBus2Rule.addTarget(),因为它在下面的错误中失败了,我不太确定它最初是如何工作的.
Argument of type 'EventBus' is not assignable to parameter of type 'IRuleTarget'.
Property 'bind' is missing in type 'EventBus' but required in type 'IRuleTarget'.https://stackoverflow.com/questions/68547901
复制相似问题