From bfbe756a3397c243d4dd2ae77018db7ef614023f Mon Sep 17 00:00:00 2001 From: "k.goto" <24818752+go-to-k@users.noreply.github.com> Date: Sat, 11 Nov 2023 07:37:59 +0900 Subject: [PATCH] fix(events): imported event rule ignores environment from arn (#27907) This PR fixes the bug that `fromEventRuleArn` does not extract region and account from the arn. - Behavior until now ```ts const stack = new Stack(); // <- region: us-east-1, account: 123456789012 const imported = Rule.fromEventRuleArn(stack, 'Imported', 'arn:aws:events:us-west-2:999999999999:rule/example'); // imported.env.region : us-east-1("Ref": "AWS::Region"). But it should be us-west-2. // imported.env.account : 123456789012("Ref": "AWS::AccountId"). But it should be 999999999999. ``` ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/aws-cdk-lib/aws-events/lib/rule.ts | 4 +++- packages/aws-cdk-lib/aws-events/test/rule.test.ts | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/aws-cdk-lib/aws-events/lib/rule.ts b/packages/aws-cdk-lib/aws-events/lib/rule.ts index 7b3f512e692e8..faa7ea7c488f6 100644 --- a/packages/aws-cdk-lib/aws-events/lib/rule.ts +++ b/packages/aws-cdk-lib/aws-events/lib/rule.ts @@ -75,7 +75,9 @@ export class Rule extends Resource implements IRule { public ruleArn = eventRuleArn; public ruleName = parts.resourceName || ''; } - return new Import(scope, id); + return new Import(scope, id, { + environmentFromArn: eventRuleArn, + }); } public readonly ruleArn: string; diff --git a/packages/aws-cdk-lib/aws-events/test/rule.test.ts b/packages/aws-cdk-lib/aws-events/test/rule.test.ts index 6cca0b11ba804..80f3c5cbe53d6 100644 --- a/packages/aws-cdk-lib/aws-events/test/rule.test.ts +++ b/packages/aws-cdk-lib/aws-events/test/rule.test.ts @@ -578,6 +578,20 @@ describe('rule', () => { expect(importedRule.ruleName).toEqual('example'); }); + test('sets account for imported rule env by fromEventRuleArn', () => { + const stack = new cdk.Stack(); + const importedRule = Rule.fromEventRuleArn(stack, 'Imported', 'arn:aws:events:us-west-2:999999999999:rule/example'); + + expect(importedRule.env.account).toEqual('999999999999'); + }); + + test('sets region for imported rule env by fromEventRuleArn', () => { + const stack = new cdk.Stack(); + const importedRule = Rule.fromEventRuleArn(stack, 'Imported', 'arn:aws:events:us-west-2:999999999999:rule/example'); + + expect(importedRule.env.region).toEqual('us-west-2'); + }); + test('rule can be disabled', () => { // GIVEN const stack = new cdk.Stack();