diff --git a/packages/@aws-cdk/aws-cognito/lib/user-pool.ts b/packages/@aws-cdk/aws-cognito/lib/user-pool.ts index 1db90ae1c2119..a4157d629307d 100644 --- a/packages/@aws-cdk/aws-cognito/lib/user-pool.ts +++ b/packages/@aws-cdk/aws-cognito/lib/user-pool.ts @@ -522,6 +522,14 @@ export interface UserPoolProps { */ readonly smsRoleExternalId?: string; + /** + * The region to integrate with SNS to send SMS messages + * + * This property will do nothing if SMS configuration is not configured + * @default - The same region as the user pool, with a few exceptions - https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html#user-pool-sms-settings-first-time + */ + readonly snsRegion?: string; + /** * Setting this would explicitly enable or disable SMS role creation. * When left unspecified, CDK will determine based on other properties if a role is needed or not. @@ -1032,6 +1040,7 @@ export class UserPool extends UserPoolBase { return { snsCallerArn: props.smsRole.roleArn, externalId: props.smsRoleExternalId, + snsRegion: props.snsRegion, }; } @@ -1072,6 +1081,7 @@ export class UserPool extends UserPoolBase { return { externalId: smsRoleExternalId, snsCallerArn: smsRole.roleArn, + snsRegion: props.snsRegion, }; } diff --git a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.expected.json b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.expected.json index 50da9815a769b..0811dc3173db4 100644 --- a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.expected.json +++ b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.expected.json @@ -833,6 +833,9 @@ "myuserpoolsmsRole0E16FDD9", "Arn" ] + }, + "SnsRegion": { + "Ref": "AWS::Region" } }, "SmsVerificationMessage": "verification sms message from the integ test. Code is {####}.", @@ -850,7 +853,7 @@ "myuserpoolmyuserpooldomainEE1E11AF": { "Type": "AWS::Cognito::UserPoolDomain", "Properties": { - "Domain": "myawesomeapp", + "Domain": "cdkintegrationtestuserpoolexplicitprops", "UserPoolId": { "Ref": "myuserpool01998219" } diff --git a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.ts b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.ts index 1bc35003fa472..8c26481628971 100644 --- a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.ts +++ b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.ts @@ -69,11 +69,12 @@ const userpool = new UserPool(stack, 'myuserpool', { userMigration: dummyTrigger('userMigration'), verifyAuthChallengeResponse: dummyTrigger('verifyAuthChallengeResponse'), }, + snsRegion: Stack.of(stack).region, }); const cognitoDomain = userpool.addDomain('myuserpooldomain', { cognitoDomain: { - domainPrefix: 'myawesomeapp', + domainPrefix: 'cdkintegrationtestuserpoolexplicitprops', }, }); diff --git a/packages/@aws-cdk/aws-cognito/test/user-pool.test.ts b/packages/@aws-cdk/aws-cognito/test/user-pool.test.ts index 1efa42aeda79b..b482d244ea6fa 100644 --- a/packages/@aws-cdk/aws-cognito/test/user-pool.test.ts +++ b/packages/@aws-cdk/aws-cognito/test/user-pool.test.ts @@ -235,6 +235,28 @@ describe('User Pool', () => { }); }); + test('snsRegion property is recognized', () => { + // GIVEN + const stack = new Stack(); + const role = Role.fromRoleArn(stack, 'smsRole', 'arn:aws:iam::664773442901:role/sms-role'); + + // WHEN + new UserPool(stack, 'Pool', { + smsRole: role, + smsRoleExternalId: 'test-external-id', + snsRegion: 'test-region-1', + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::Cognito::UserPool', { + SmsConfiguration: { + ExternalId: 'test-external-id', + SnsCallerArn: role.roleArn, + SnsRegion: 'test-region-1', + }, + }); + }); + test('import using id', () => { // GIVEN const stack = new Stack(undefined, undefined, {