Skip to content

Commit 9e2ac91

Browse files
authored
fix(rds): setting timezone on DatabaseInstance causes internal failure (#6534)
* fix(rds): setting timezone on DatabaseInstance causes internal failure Per documentation[1], 'Timezone' property is only supported on Microsoft SQL Server. Setting this property on a DatabaseInstance with a different database engine causes deployment to fail (1) with a validation error for a new instance of `AWS::RDS::DBInstance` and (2) internal failure when modifying an existing instance of `AWS::RDS::DBInstance`. [1]:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-timezone fixes #6439 * PR feedback
1 parent cfea360 commit 9e2ac91

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

packages/@aws-cdk/aws-rds/lib/instance.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,7 @@ export interface DatabaseInstanceSourceProps extends DatabaseInstanceNewProps {
616616
readonly allowMajorVersionUpgrade?: boolean;
617617

618618
/**
619-
* The time zone of the instance.
619+
* The time zone of the instance. This is currently supported only by Microsoft Sql Server.
620620
*
621621
* @default - RDS default timezone
622622
*/
@@ -678,6 +678,12 @@ abstract class DatabaseInstanceSource extends DatabaseInstanceNew implements IDa
678678
this.singleUserRotationApplication = props.engine.singleUserRotationApplication;
679679
this.multiUserRotationApplication = props.engine.multiUserRotationApplication;
680680

681+
const timezoneSupport = [ DatabaseInstanceEngine.SQL_SERVER_EE, DatabaseInstanceEngine.SQL_SERVER_EX,
682+
DatabaseInstanceEngine.SQL_SERVER_SE, DatabaseInstanceEngine.SQL_SERVER_WEB ];
683+
if (props.timezone && !timezoneSupport.includes(props.engine)) {
684+
throw new Error(`timezone property can be configured only for Microsoft SQL Server, not ${props.engine.name}`);
685+
}
686+
681687
this.sourceCfnProps = {
682688
...this.newCfnProps,
683689
allocatedStorage: props.allocatedStorage ? props.allocatedStorage.toString() : '100',

packages/@aws-cdk/aws-rds/test/test.instance.ts

+33
Original file line numberDiff line numberDiff line change
@@ -685,4 +685,37 @@ export = {
685685

686686
test.done();
687687
},
688+
689+
'throws when timezone is set for non-sqlserver database engine'(test: Test) {
690+
// GIVEN
691+
const stack = new cdk.Stack();
692+
const vpc = new ec2.Vpc(stack, 'vpc');
693+
const tzSupportedEngines = [ rds.DatabaseInstanceEngine.SQL_SERVER_EE, rds.DatabaseInstanceEngine.SQL_SERVER_EX,
694+
rds.DatabaseInstanceEngine.SQL_SERVER_SE, rds.DatabaseInstanceEngine.SQL_SERVER_WEB ];
695+
const tzUnsupportedEngines = [ rds.DatabaseInstanceEngine.MYSQL, rds.DatabaseInstanceEngine.POSTGRES,
696+
rds.DatabaseInstanceEngine.ORACLE_EE, rds.DatabaseInstanceEngine.MARIADB ];
697+
698+
// THEN
699+
tzSupportedEngines.forEach((engine) => {
700+
test.ok(new rds.DatabaseInstance(stack, `${engine.name}-db`, {
701+
engine,
702+
instanceClass: ec2.InstanceType.of(ec2.InstanceClass.C5, ec2.InstanceSize.SMALL),
703+
masterUsername: 'master',
704+
timezone: 'Europe/Zurich',
705+
vpc,
706+
}));
707+
});
708+
709+
tzUnsupportedEngines.forEach((engine) => {
710+
test.throws(() => new rds.DatabaseInstance(stack, `${engine.name}-db`, {
711+
engine,
712+
instanceClass: ec2.InstanceType.of(ec2.InstanceClass.C5, ec2.InstanceSize.SMALL),
713+
masterUsername: 'master',
714+
timezone: 'Europe/Zurich',
715+
vpc,
716+
}), /timezone property can be configured only for Microsoft SQL Server/);
717+
});
718+
719+
test.done();
720+
}
688721
};

0 commit comments

Comments
 (0)