Skip to content

Commit 57e5404

Browse files
authored
fix(events): imported EventBus does not correctly register source account (#13481)
Parses the event bus arn to give the account and region to the underlying Resource. fixes #13469 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
1 parent e09250b commit 57e5404

File tree

2 files changed

+65
-2
lines changed

2 files changed

+65
-2
lines changed

packages/@aws-cdk/aws-events/lib/event-bus.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,11 @@ class ImportedEventBus extends EventBusBase {
282282
public readonly eventBusPolicy: string;
283283
public readonly eventSourceName?: string;
284284
constructor(scope: Construct, id: string, attrs: EventBusAttributes) {
285-
super(scope, id);
285+
const arnParts = Stack.of(scope).parseArn(attrs.eventBusArn);
286+
super(scope, id, {
287+
account: arnParts.account,
288+
region: arnParts.region,
289+
});
286290

287291
this.eventBusArn = attrs.eventBusArn;
288292
this.eventBusName = attrs.eventBusName;

packages/@aws-cdk/aws-events/test/test.event-bus.ts

+60-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { expect, haveResource } from '@aws-cdk/assert';
22
import * as iam from '@aws-cdk/aws-iam';
3-
import { Aws, CfnResource, Stack } from '@aws-cdk/core';
3+
import { Aws, CfnResource, Stack, Arn } from '@aws-cdk/core';
44
import { Test } from 'nodeunit';
55
import { EventBus } from '../lib';
66

@@ -55,6 +55,65 @@ export = {
5555
test.done();
5656
},
5757

58+
'imported event bus'(test: Test) {
59+
const stack = new Stack();
60+
61+
const eventBus = new EventBus(stack, 'Bus');
62+
63+
const importEB = EventBus.fromEventBusArn(stack, 'ImportBus', eventBus.eventBusArn);
64+
65+
// WHEN
66+
new CfnResource(stack, 'Res', {
67+
type: 'Test::Resource',
68+
properties: {
69+
EventBusArn1: eventBus.eventBusArn,
70+
EventBusArn2: importEB.eventBusArn,
71+
},
72+
});
73+
74+
expect(stack).to(haveResource('Test::Resource', {
75+
EventBusArn1: { 'Fn::GetAtt': ['BusEA82B648', 'Arn'] },
76+
EventBusArn2: { 'Fn::GetAtt': ['BusEA82B648', 'Arn'] },
77+
}));
78+
79+
test.done();
80+
},
81+
82+
'same account imported event bus has right resource env'(test: Test) {
83+
const stack = new Stack();
84+
85+
const eventBus = new EventBus(stack, 'Bus');
86+
87+
const importEB = EventBus.fromEventBusArn(stack, 'ImportBus', eventBus.eventBusArn);
88+
89+
// WHEN
90+
test.deepEqual(stack.resolve(importEB.env.account), { 'Fn::Select': [4, { 'Fn::Split': [':', { 'Fn::GetAtt': ['BusEA82B648', 'Arn'] }] }] });
91+
test.deepEqual(stack.resolve(importEB.env.region), { 'Fn::Select': [3, { 'Fn::Split': [':', { 'Fn::GetAtt': ['BusEA82B648', 'Arn'] }] }] });
92+
93+
test.done();
94+
},
95+
96+
'cross account imported event bus has right resource env'(test: Test) {
97+
const stack = new Stack();
98+
99+
const arnParts = {
100+
resource: 'bus',
101+
service: 'events',
102+
account: 'myAccount',
103+
region: 'us-west-1',
104+
};
105+
106+
const arn = Arn.format(arnParts, stack);
107+
108+
const importEB = EventBus.fromEventBusArn(stack, 'ImportBus', arn);
109+
110+
// WHEN
111+
test.deepEqual(importEB.env.account, arnParts.account);
112+
test.deepEqual(importEB.env.region, arnParts.region);
113+
114+
test.done();
115+
},
116+
58117
'can get bus name'(test: Test) {
59118
// GIVEN
60119
const stack = new Stack();

0 commit comments

Comments
 (0)