diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/instance-snapshot-handler/index.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/instance-snapshot-handler/index.ts
new file mode 100644
index 0000000000000..bb1bb140479c8
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/instance-snapshot-handler/index.ts
@@ -0,0 +1,63 @@
+/* eslint-disable no-console */
+///
+import { RDS } from '@aws-sdk/client-rds'; // eslint-disable-line import/no-extraneous-dependencies
+
+export async function onEventHandler(event: AWSCDKAsyncCustomResource.OnEventRequest): Promise {
+ console.log('Event: %j', event);
+
+ const rds = new RDS();
+
+ const physicalResourceId = `${event.ResourceProperties.DBInstanceIdentifier}-${event.ResourceProperties.DBInstanceIdentifier}`;
+
+ if (event.RequestType === 'Create' || event.RequestType === 'Update') {
+ const data = await rds.createDBSnapshot({
+ DBInstanceIdentifier: event.ResourceProperties.DBInstanceIdentifier,
+ DBSnapshotIdentifier: event.ResourceProperties.DBSnapshotIdentifier,
+ });
+ return {
+ PhysicalResourceId: physicalResourceId,
+ Data: {
+ DBSnapshotArn: data.DBSnapshot?.DBSnapshotArn,
+ },
+ };
+ }
+
+ if (event.RequestType === 'Delete') {
+ await rds.deleteDBSnapshot({
+ DBSnapshotIdentifier: event.ResourceProperties.DBSnapshotIdentifier,
+ });
+ }
+
+ return {
+ PhysicalResourceId: `${event.ResourceProperties.DBInstanceIdentifier}-${event.ResourceProperties.DBInstanceIdentifier}`,
+ };
+}
+
+export async function isCompleteHandler(event: AWSCDKAsyncCustomResource.IsCompleteRequest): Promise {
+ console.log('Event: %j', event);
+
+ const snapshotStatus = await tryGetSnapshotStatus(event.ResourceProperties.DBSnapshotIdentifier);
+
+ switch (event.RequestType) {
+ case 'Create':
+ case 'Update':
+ return { IsComplete: snapshotStatus === 'available' };
+ case 'Delete':
+ return { IsComplete: snapshotStatus === undefined };
+ }
+}
+
+async function tryGetSnapshotStatus(identifier: string): Promise {
+ try {
+ const rds = new RDS();
+ const data = await rds.describeDBSnapshots({
+ DBSnapshotIdentifier: identifier,
+ });
+ return data.DBSnapshots?.[0].Status;
+ } catch (err: any) {
+ if (err.name === 'DBSnapshotNotFoundFault') {
+ return undefined;
+ }
+ throw err;
+ }
+}
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/ClusterSnapshotIntegDefaultTestDeployAssert647D4685.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/ClusterSnapshotIntegDefaultTestDeployAssert647D4685.assets.json
index e85d917524827..e2936d5457555 100644
--- a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/ClusterSnapshotIntegDefaultTestDeployAssert647D4685.assets.json
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/ClusterSnapshotIntegDefaultTestDeployAssert647D4685.assets.json
@@ -1,5 +1,5 @@
{
- "version": "41.0.0",
+ "version": "44.0.0",
"files": {
"21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": {
"displayName": "ClusterSnapshotIntegDefaultTestDeployAssert647D4685 Template",
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/cdk-integ-cluster-snapshot.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/cdk-integ-cluster-snapshot.assets.json
index 8252ed93a7ec3..9f88b6c1d87ed 100644
--- a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/cdk-integ-cluster-snapshot.assets.json
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/cdk-integ-cluster-snapshot.assets.json
@@ -1,5 +1,5 @@
{
- "version": "41.0.0",
+ "version": "44.0.0",
"files": {
"7531d12b1fd853bba70fda1369698d729b1ef9986621d19d7cbdbf9648a32ba5": {
"displayName": "Snapshoter/OnEventHandler/Code",
@@ -29,7 +29,7 @@
}
}
},
- "97926b5ce11961d6af984b78aa681b8ff2d77f589d2e567989a7f385c47de925": {
+ "e8dc03c208df5321ffba27fa7ea36e99f244e36af085a0c4f9e77674ca1a2de1": {
"displayName": "cdk-integ-cluster-snapshot Template",
"source": {
"path": "cdk-integ-cluster-snapshot.template.json",
@@ -38,7 +38,7 @@
"destinations": {
"current_account-current_region": {
"bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
- "objectKey": "97926b5ce11961d6af984b78aa681b8ff2d77f589d2e567989a7f385c47de925.json",
+ "objectKey": "e8dc03c208df5321ffba27fa7ea36e99f244e36af085a0c4f9e77674ca1a2de1.json",
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
}
}
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/cdk-integ-cluster-snapshot.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/cdk-integ-cluster-snapshot.template.json
index 08f7c9f5ca007..d125cc27e9c31 100644
--- a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/cdk-integ-cluster-snapshot.template.json
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/cdk-integ-cluster-snapshot.template.json
@@ -548,6 +548,7 @@
"Statement": [
{
"Action": [
+ "rds:AddTagsToResource",
"rds:CreateDBClusterSnapshot",
"rds:DeleteDBClusterSnapshot"
],
@@ -625,7 +626,7 @@
"Arn"
]
},
- "Runtime": "nodejs18.x"
+ "Runtime": "nodejs22.x"
},
"DependsOn": [
"SnapshoterOnEventHandlerServiceRoleDefaultPolicyAF0DFD57",
@@ -744,7 +745,7 @@
"Arn"
]
},
- "Runtime": "nodejs18.x"
+ "Runtime": "nodejs22.x"
},
"DependsOn": [
"SnapshoterIsCompleteHandlerServiceRoleDefaultPolicyA43EB222",
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/cdk.out
index 188478b55560e..b3a26d44a5f73 100644
--- a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/cdk.out
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/cdk.out
@@ -1 +1 @@
-{"version":"41.0.0"}
\ No newline at end of file
+{"version":"44.0.0"}
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/integ.json
index 22e7c1cf6ba01..27b707140ad5a 100644
--- a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/integ.json
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/integ.json
@@ -1,14 +1,19 @@
{
- "version": "41.0.0",
+ "version": "44.0.0",
"testCases": {
"ClusterSnapshotInteg/DefaultTest": {
"stacks": [
"cdk-integ-cluster-snapshot"
],
+ "hooks": {
+ "postDestroy": [
+ "aws rds delete-db-cluster-snapshot --db-cluster-snapshot-identifier cdk-integ-cluster-snapshot"
+ ]
+ },
"diffAssets": true,
"assertionStack": "ClusterSnapshotInteg/DefaultTest/DeployAssert",
"assertionStackName": "ClusterSnapshotIntegDefaultTestDeployAssert647D4685"
}
},
- "minimumCliVersion": "2.1005.0"
+ "minimumCliVersion": "2.1018.0"
}
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/manifest.json
index 93cddb2b1c084..9e00e208bd5c4 100644
--- a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/manifest.json
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/manifest.json
@@ -1,5 +1,5 @@
{
- "version": "43.0.0",
+ "version": "44.0.0",
"artifacts": {
"cdk-integ-cluster-snapshot.assets": {
"type": "cdk:asset-manifest",
@@ -18,7 +18,7 @@
"validateOnSynth": false,
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
"cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
- "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/97926b5ce11961d6af984b78aa681b8ff2d77f589d2e567989a7f385c47de925.json",
+ "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/e8dc03c208df5321ffba27fa7ea36e99f244e36af085a0c4f9e77674ca1a2de1.json",
"requiresBootstrapStackVersion": 6,
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
"additionalDependencies": [
@@ -423,7 +423,8 @@
"data": {
"code": "*",
"runtime": "*",
- "handler": "*"
+ "handler": "*",
+ "initialPolicy": "*"
}
}
],
@@ -527,7 +528,8 @@
"data": {
"code": "*",
"runtime": "*",
- "handler": "*"
+ "handler": "*",
+ "initialPolicy": "*"
}
}
],
@@ -1639,5 +1641,5 @@
}
}
},
- "minimumCliVersion": "2.1015.0"
+ "minimumCliVersion": "2.1018.0"
}
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/tree.json
index 28ccbdb7c2f08..9bbde2928db01 100644
--- a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/tree.json
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.js.snapshot/tree.json
@@ -1 +1 @@
-{"version":"tree-0.1","tree":{"id":"App","path":"","children":{"cdk-integ-cluster-snapshot":{"id":"cdk-integ-cluster-snapshot","path":"cdk-integ-cluster-snapshot","children":{"Vpc":{"id":"Vpc","path":"cdk-integ-cluster-snapshot/Vpc","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Vpc/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::VPC","aws:cdk:cloudformation:props":{"cidrBlock":"10.0.0.0/16","enableDnsHostnames":true,"enableDnsSupport":true,"instanceTenancy":"default","tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPC","version":"0.0.0"}},"PublicSubnet1":{"id":"PublicSubnet1","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1","children":{"Subnet":{"id":"Subnet","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/Subnet","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[0,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.0.0/18","mapPublicIpOnLaunch":true,"tags":[{"key":"aws-cdk:subnet-name","value":"Public"},{"key":"aws-cdk:subnet-type","value":"Public"},{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/RouteTableAssociation","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"VpcPublicSubnet1RouteTable6C95E38E"},"subnetId":{"Ref":"VpcPublicSubnet1Subnet5C2D37C4"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"0.0.0"}},"DefaultRoute":{"id":"DefaultRoute","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/DefaultRoute","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","gatewayId":{"Ref":"VpcIGWD7BA715C"},"routeTableId":{"Ref":"VpcPublicSubnet1RouteTable6C95E38E"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"0.0.0"}},"EIP":{"id":"EIP","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/EIP","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::EIP","aws:cdk:cloudformation:props":{"domain":"vpc","tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnEIP","version":"0.0.0"}},"NATGateway":{"id":"NATGateway","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/NATGateway","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::NatGateway","aws:cdk:cloudformation:props":{"allocationId":{"Fn::GetAtt":["VpcPublicSubnet1EIPD7E02669","AllocationId"]},"subnetId":{"Ref":"VpcPublicSubnet1Subnet5C2D37C4"},"tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnNatGateway","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PublicSubnet","version":"0.0.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{},{"addNatGateway":["*"]}]}},"PublicSubnet2":{"id":"PublicSubnet2","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2","children":{"Subnet":{"id":"Subnet","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2/Subnet","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[1,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.64.0/18","mapPublicIpOnLaunch":true,"tags":[{"key":"aws-cdk:subnet-name","value":"Public"},{"key":"aws-cdk:subnet-type","value":"Public"},{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2/RouteTableAssociation","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"VpcPublicSubnet2RouteTable94F7E489"},"subnetId":{"Ref":"VpcPublicSubnet2Subnet691E08A3"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"0.0.0"}},"DefaultRoute":{"id":"DefaultRoute","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2/DefaultRoute","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","gatewayId":{"Ref":"VpcIGWD7BA715C"},"routeTableId":{"Ref":"VpcPublicSubnet2RouteTable94F7E489"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PublicSubnet","version":"0.0.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]}},"PrivateSubnet1":{"id":"PrivateSubnet1","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1","children":{"Subnet":{"id":"Subnet","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1/Subnet","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[0,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.128.0/18","mapPublicIpOnLaunch":false,"tags":[{"key":"aws-cdk:subnet-name","value":"Private"},{"key":"aws-cdk:subnet-type","value":"Private"},{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1/RouteTableAssociation","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"VpcPrivateSubnet1RouteTableB2C5B500"},"subnetId":{"Ref":"VpcPrivateSubnet1Subnet536B997A"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"0.0.0"}},"DefaultRoute":{"id":"DefaultRoute","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1/DefaultRoute","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","natGatewayId":{"Ref":"VpcPublicSubnet1NATGateway4D7517AA"},"routeTableId":{"Ref":"VpcPrivateSubnet1RouteTableB2C5B500"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PrivateSubnet","version":"0.0.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":false,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":false,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]}},"PrivateSubnet2":{"id":"PrivateSubnet2","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2","children":{"Subnet":{"id":"Subnet","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2/Subnet","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[1,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.192.0/18","mapPublicIpOnLaunch":false,"tags":[{"key":"aws-cdk:subnet-name","value":"Private"},{"key":"aws-cdk:subnet-type","value":"Private"},{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2/RouteTableAssociation","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"VpcPrivateSubnet2RouteTableA678073B"},"subnetId":{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"0.0.0"}},"DefaultRoute":{"id":"DefaultRoute","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2/DefaultRoute","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","natGatewayId":{"Ref":"VpcPublicSubnet1NATGateway4D7517AA"},"routeTableId":{"Ref":"VpcPrivateSubnet2RouteTableA678073B"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PrivateSubnet","version":"0.0.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":false,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":false,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]}},"IGW":{"id":"IGW","path":"cdk-integ-cluster-snapshot/Vpc/IGW","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::InternetGateway","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnInternetGateway","version":"0.0.0"}},"VPCGW":{"id":"VPCGW","path":"cdk-integ-cluster-snapshot/Vpc/VPCGW","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::VPCGatewayAttachment","aws:cdk:cloudformation:props":{"internetGatewayId":{"Ref":"VpcIGWD7BA715C"},"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPCGatewayAttachment","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.Vpc","version":"0.0.0","metadata":[{"maxAzs":"*","natGateways":"*","restrictDefaultSecurityGroup":false}]}},"Cluster":{"id":"Cluster","path":"cdk-integ-cluster-snapshot/Cluster","children":{"Subnets":{"id":"Subnets","path":"cdk-integ-cluster-snapshot/Cluster/Subnets","children":{"Default":{"id":"Default","path":"cdk-integ-cluster-snapshot/Cluster/Subnets/Default","attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBSubnetGroup","aws:cdk:cloudformation:props":{"dbSubnetGroupDescription":"Subnets for Cluster database","subnetIds":[{"Ref":"VpcPrivateSubnet1Subnet536B997A"},{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBSubnetGroup","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.SubnetGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*","vpcSubnets":"*","removalPolicy":"*"}]}},"SecurityGroup":{"id":"SecurityGroup","path":"cdk-integ-cluster-snapshot/Cluster/SecurityGroup","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Cluster/SecurityGroup/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroup","aws:cdk:cloudformation:props":{"groupDescription":"RDS security group","securityGroupEgress":[{"cidrIp":"0.0.0.0/0","description":"Allow all outbound traffic by default","ipProtocol":"-1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroup","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.SecurityGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*"}]}},"AuroraMySqlDatabaseClusterEngineDefaultParameterGroup":{"id":"AuroraMySqlDatabaseClusterEngineDefaultParameterGroup","path":"cdk-integ-cluster-snapshot/Cluster/AuroraMySqlDatabaseClusterEngineDefaultParameterGroup","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"Secret":{"id":"Secret","path":"cdk-integ-cluster-snapshot/Cluster/Secret","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Cluster/Secret/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::Secret","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["Generated by the CDK for stack: ",{"Ref":"AWS::StackName"}]]},"generateSecretString":{"passwordLength":30,"secretStringTemplate":"{\"username\":\"admin\"}","generateStringKey":"password","excludeCharacters":" %+~`#$&*()|[]{}:;<>?!'/@\"\\"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecret","version":"0.0.0"}},"Attachment":{"id":"Attachment","path":"cdk-integ-cluster-snapshot/Cluster/Secret/Attachment","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Cluster/Secret/Attachment/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::SecretTargetAttachment","aws:cdk:cloudformation:props":{"secretId":{"Ref":"ClusterSecret6368BD0F"},"targetId":{"Ref":"ClusterEB0386A7"},"targetType":"AWS::RDS::DBCluster"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecretTargetAttachment","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.SecretTargetAttachment","version":"0.0.0","metadata":[{"secret":"*","target":"*"}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.DatabaseSecret","version":"0.0.0","metadata":[{"encryptionKey":"*","secretName":"*","replicaRegions":"*"},{"username":"*","secretName":"*","encryptionKey":"*","excludeCharacters":"*","replaceOnPasswordCriteriaChanges":"*","replicaRegions":"*"}]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Cluster/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBCluster","aws:cdk:cloudformation:props":{"copyTagsToSnapshot":true,"dbClusterParameterGroupName":"default.aurora-mysql8.0","dbSubnetGroupName":{"Ref":"ClusterSubnetsDCFA5CB7"},"engine":"aurora-mysql","engineVersion":"8.0.mysql_aurora.3.04.0","masterUsername":{"Fn::Join":["",["{{resolve:secretsmanager:",{"Ref":"ClusterSecret6368BD0F"},":SecretString:username::}}"]]},"masterUserPassword":{"Fn::Join":["",["{{resolve:secretsmanager:",{"Ref":"ClusterSecret6368BD0F"},":SecretString:password::}}"]]},"vpcSecurityGroupIds":[{"Fn::GetAtt":["ClusterSecurityGroup0921994B","GroupId"]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBCluster","version":"0.0.0"}},"Instance1Wrapper":{"id":"Instance1Wrapper","path":"cdk-integ-cluster-snapshot/Cluster/Instance1Wrapper","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Instance1":{"id":"Instance1","path":"cdk-integ-cluster-snapshot/Cluster/Instance1","attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBInstance","aws:cdk:cloudformation:props":{"dbClusterIdentifier":{"Ref":"ClusterEB0386A7"},"dbInstanceClass":"db.t3.medium","dbSubnetGroupName":{"Ref":"ClusterSubnetsDCFA5CB7"},"engine":"aurora-mysql"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBInstance","version":"0.0.0"}},"Instance2Wrapper":{"id":"Instance2Wrapper","path":"cdk-integ-cluster-snapshot/Cluster/Instance2Wrapper","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Instance2":{"id":"Instance2","path":"cdk-integ-cluster-snapshot/Cluster/Instance2","attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBInstance","aws:cdk:cloudformation:props":{"dbClusterIdentifier":{"Ref":"ClusterEB0386A7"},"dbInstanceClass":"db.t3.medium","dbSubnetGroupName":{"Ref":"ClusterSubnetsDCFA5CB7"},"engine":"aurora-mysql"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBInstance","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.DatabaseCluster","version":"0.0.0","metadata":[{"engine":{"engineType":"*","singleUserRotationApplication":"*","engineVersion":{"fullVersion":"*","majorVersion":"*"},"parameterGroupFamily":"*","engineFamily":"*","supportedLogTypes":"*","combineImportAndExportRoles":true},"writer":"*","readers":"*","vpc":"*","removalPolicy":"destroy"}]}},"Snapshoter":{"id":"Snapshoter","path":"cdk-integ-cluster-snapshot/Snapshoter","children":{"OnEventHandler":{"id":"OnEventHandler","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/ServiceRole/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":["rds:CreateDBClusterSnapshot","rds:DeleteDBClusterSnapshot"],"Effect":"Allow","Resource":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":cluster-snapshot:cdk-integ-cluster-snapshot"]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":cluster:",{"Ref":"ClusterEB0386A7"}]]}]}],"Version":"2012-10-17"},"policyName":"SnapshoterOnEventHandlerServiceRoleDefaultPolicyAF0DFD57","roles":[{"Ref":"SnapshoterOnEventHandlerServiceRole7F84B26D"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]}},"Code":{"id":"Code","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/Code","children":{"Stage":{"id":"Stage","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"0.0.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"0.0.0"}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"7531d12b1fd853bba70fda1369698d729b1ef9986621d19d7cbdbf9648a32ba5.zip"},"handler":"index.onEventHandler","role":{"Fn::GetAtt":["SnapshoterOnEventHandlerServiceRole7F84B26D","Arn"]},"runtime":"nodejs18.x"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","runtime":"*","handler":"*"}]}},"IsCompleteHandler":{"id":"IsCompleteHandler","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler/ServiceRole/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"rds:DescribeDBClusterSnapshots","Effect":"Allow","Resource":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":cluster-snapshot:cdk-integ-cluster-snapshot"]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":cluster:",{"Ref":"ClusterEB0386A7"}]]}]}],"Version":"2012-10-17"},"policyName":"SnapshoterIsCompleteHandlerServiceRoleDefaultPolicyA43EB222","roles":[{"Ref":"SnapshoterIsCompleteHandlerServiceRole40F5F1A8"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"7531d12b1fd853bba70fda1369698d729b1ef9986621d19d7cbdbf9648a32ba5.zip"},"handler":"index.isCompleteHandler","role":{"Fn::GetAtt":["SnapshoterIsCompleteHandlerServiceRole40F5F1A8","Arn"]},"runtime":"nodejs18.x"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","runtime":"*","handler":"*"}]}},"SnapshotProvider":{"id":"SnapshotProvider","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider","children":{"framework-onEvent":{"id":"framework-onEvent","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]}]},{"Action":"states:StartExecution","Effect":"Allow","Resource":{"Ref":"SnapshoterSnapshotProviderwaiterstatemachineE1F05D1F"}}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkonEventServiceRoleDefaultPolicy21CE9686","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/Code","children":{"Stage":{"id":"Stage","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"0.0.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"0.0.0"}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"},"description":"AWS CDK resource provider framework - onEvent (cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},"WAITER_STATE_MACHINE_ARN":{"Ref":"SnapshoterSnapshotProviderwaiterstatemachineE1F05D1F"}}},"handler":"framework.onEvent","role":{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]}]}},"framework-isComplete":{"id":"framework-isComplete","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]}]}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkisCompleteServiceRoleDefaultPolicyF410E478","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/Code","children":{"Stage":{"id":"Stage","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"0.0.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"0.0.0"}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"},"description":"AWS CDK resource provider framework - isComplete (cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]}}},"handler":"framework.isComplete","role":{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]}]}},"framework-onTimeout":{"id":"framework-onTimeout","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]}]}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkonTimeoutServiceRoleDefaultPolicy05DF1C30","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/Code","children":{"Stage":{"id":"Stage","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"0.0.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"0.0.0"}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"},"description":"AWS CDK resource provider framework - onTimeout (cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]}}},"handler":"framework.onTimeout","role":{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]}]}},"waiter-state-machine":{"id":"waiter-state-machine","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine","children":{"Role":{"id":"Role","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/Role","children":{"ImportRole":{"id":"ImportRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/Role/ImportRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/Role/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"states.amazonaws.com"}}],"Version":"2012-10-17"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/Role/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/Role/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkisComplete803B4F1B","Arn"]},{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonTimeout04342B00","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkisComplete803B4F1B","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonTimeout04342B00","Arn"]},":*"]]}]},{"Action":["logs:CreateLogDelivery","logs:CreateLogStream","logs:DeleteLogDelivery","logs:DescribeLogGroups","logs:DescribeResourcePolicies","logs:GetLogDelivery","logs:ListLogDeliveries","logs:PutLogEvents","logs:PutResourcePolicy","logs:UpdateLogDelivery"],"Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderwaiterstatemachineRoleDefaultPolicyCF7716B2","roles":[{"Ref":"SnapshoterSnapshotProviderwaiterstatemachineRole76E414C5"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"}},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]}]}},"LogGroup":{"id":"LogGroup","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/LogGroup","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/LogGroup/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/vendedlogs/states/waiter-state-machine-",{"Ref":"SnapshoterSnapshotProviderframeworkisComplete803B4F1B"},"-c8913d7ae55807b42206686ba5c74df4ca169c2f9e"]]},"retentionInDays":731}},"constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"0.0.0","metadata":[{"logGroupName":"*"}]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::StepFunctions::StateMachine","aws:cdk:cloudformation:props":{"definitionString":{"Fn::Join":["",["{\"StartAt\":\"framework-isComplete-task\",\"States\":{\"framework-isComplete-task\":{\"End\":true,\"Retry\":[{\"ErrorEquals\":[\"States.ALL\"],\"IntervalSeconds\":5,\"MaxAttempts\":360,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkisComplete803B4F1B","Arn"]},"\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonTimeout04342B00","Arn"]},"\"}}}"]]},"loggingConfiguration":{"destinations":[{"cloudWatchLogsLogGroup":{"logGroupArn":{"Fn::GetAtt":["SnapshoterSnapshotProviderwaiterstatemachineLogGroup5A64CAF9","Arn"]}}}],"includeExecutionData":false,"level":"ERROR"},"roleArn":{"Fn::GetAtt":["SnapshoterSnapshotProviderwaiterstatemachineRole76E414C5","Arn"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_stepfunctions.CfnStateMachine","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.WaiterStateMachine","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.Provider","version":"0.0.0"}},"Snapshot":{"id":"Snapshot","path":"cdk-integ-cluster-snapshot/Snapshoter/Snapshot","children":{"Default":{"id":"Default","path":"cdk-integ-cluster-snapshot/Snapshoter/Snapshot/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*","*","*"]}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"cdk-integ-cluster-snapshot/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"FromSnapshot":{"id":"FromSnapshot","path":"cdk-integ-cluster-snapshot/FromSnapshot","children":{"Subnets":{"id":"Subnets","path":"cdk-integ-cluster-snapshot/FromSnapshot/Subnets","children":{"Default":{"id":"Default","path":"cdk-integ-cluster-snapshot/FromSnapshot/Subnets/Default","attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBSubnetGroup","aws:cdk:cloudformation:props":{"dbSubnetGroupDescription":"Subnets for FromSnapshot database","subnetIds":[{"Ref":"VpcPrivateSubnet1Subnet536B997A"},{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBSubnetGroup","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.SubnetGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*","vpcSubnets":"*","removalPolicy":"*"}]}},"SecurityGroup":{"id":"SecurityGroup","path":"cdk-integ-cluster-snapshot/FromSnapshot/SecurityGroup","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/SecurityGroup/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroup","aws:cdk:cloudformation:props":{"groupDescription":"RDS security group","securityGroupEgress":[{"cidrIp":"0.0.0.0/0","description":"Allow all outbound traffic by default","ipProtocol":"-1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroup","version":"0.0.0"}},"from cdkintegclustersnapshotFromSnapshotRotationSingleUserSecurityGroup8B231219:{IndirectPort}":{"id":"from cdkintegclustersnapshotFromSnapshotRotationSingleUserSecurityGroup8B231219:{IndirectPort}","path":"cdk-integ-cluster-snapshot/FromSnapshot/SecurityGroup/from cdkintegclustersnapshotFromSnapshotRotationSingleUserSecurityGroup8B231219:{IndirectPort}","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroupIngress","aws:cdk:cloudformation:props":{"description":"from cdkintegclustersnapshotFromSnapshotRotationSingleUserSecurityGroup8B231219:{IndirectPort}","fromPort":{"Fn::GetAtt":["FromSnapshotEE0682C5","Endpoint.Port"]},"groupId":{"Fn::GetAtt":["FromSnapshotSecurityGroup72F11E81","GroupId"]},"ipProtocol":"tcp","sourceSecurityGroupId":{"Fn::GetAtt":["FromSnapshotRotationSingleUserSecurityGroupF78A9956","GroupId"]},"toPort":{"Fn::GetAtt":["FromSnapshotEE0682C5","Endpoint.Port"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroupIngress","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.SecurityGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*"},{"addIngressRule":["*",{},"*",false]}]}},"AuroraMySqlDatabaseClusterEngineDefaultParameterGroup":{"id":"AuroraMySqlDatabaseClusterEngineDefaultParameterGroup","path":"cdk-integ-cluster-snapshot/FromSnapshot/AuroraMySqlDatabaseClusterEngineDefaultParameterGroup","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"SnapshotSecret":{"id":"SnapshotSecret","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::Secret","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["Generated by the CDK for stack: ",{"Ref":"AWS::StackName"}]]},"generateSecretString":{"passwordLength":30,"secretStringTemplate":"{\"username\":\"admin\"}","generateStringKey":"password","excludeCharacters":" %+~`#$&*()|[]{}:;<>?!'/@\"\\"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecret","version":"0.0.0"}},"Attachment":{"id":"Attachment","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Attachment","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Attachment/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::SecretTargetAttachment","aws:cdk:cloudformation:props":{"secretId":{"Ref":"cdkintegclustersnapshotFromSnapshotSnapshotSecretD93327943fdaad7efa858a3daf9490cf0a702aeb"},"targetId":{"Ref":"FromSnapshotEE0682C5"},"targetType":"AWS::RDS::DBCluster"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecretTargetAttachment","version":"0.0.0"}},"RotationSchedule":{"id":"RotationSchedule","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Attachment/RotationSchedule","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Attachment/RotationSchedule/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::RotationSchedule","aws:cdk:cloudformation:props":{"rotationLambdaArn":{"Fn::GetAtt":["FromSnapshotRotationSingleUserEBCAA50C","Outputs.RotationLambdaARN"]},"rotationRules":{"scheduleExpression":"rate(30 days)"},"secretId":{"Ref":"FromSnapshotSnapshotSecretAttachmentA3F619B8"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnRotationSchedule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.RotationSchedule","version":"0.0.0","metadata":[{"secret":"*","rotationLambda":"*","automaticallyAfter":"*","rotateImmediatelyOnUpdate":"*"}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.SecretTargetAttachment","version":"0.0.0","metadata":[{"secret":"*","target":"*"},{"addToResourcePolicy":[{}]}]}},"Policy":{"id":"Policy","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Policy","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Policy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::ResourcePolicy","aws:cdk:cloudformation:props":{"resourcePolicy":{"Statement":[{"Action":"secretsmanager:DeleteSecret","Effect":"Deny","Principal":{"AWS":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::",{"Ref":"AWS::AccountId"},":root"]]}},"Resource":"*"}],"Version":"2012-10-17"},"secretId":{"Ref":"cdkintegclustersnapshotFromSnapshotSnapshotSecretD93327943fdaad7efa858a3daf9490cf0a702aeb"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnResourcePolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.ResourcePolicy","version":"0.0.0","metadata":[{"secret":"*"}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.DatabaseSecret","version":"0.0.0","metadata":[{"encryptionKey":"*","secretName":"*","replicaRegions":"*"},{"username":"*","encryptionKey":"*","excludeCharacters":"*","replaceOnPasswordCriteriaChanges":true,"replicaRegions":"*"}]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBCluster","aws:cdk:cloudformation:props":{"copyTagsToSnapshot":true,"dbClusterParameterGroupName":"default.aurora-mysql8.0","dbSubnetGroupName":{"Ref":"FromSnapshotSubnets9ED4B8EE"},"engine":"aurora-mysql","engineVersion":"8.0.mysql_aurora.3.04.0","masterUserPassword":{"Fn::Join":["",["{{resolve:secretsmanager:",{"Ref":"cdkintegclustersnapshotFromSnapshotSnapshotSecretD93327943fdaad7efa858a3daf9490cf0a702aeb"},":SecretString:password::}}"]]},"snapshotIdentifier":{"Fn::GetAtt":["SnapshoterSnapshotAA1755BE","DBClusterSnapshotArn"]},"vpcSecurityGroupIds":[{"Fn::GetAtt":["FromSnapshotSecurityGroup72F11E81","GroupId"]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBCluster","version":"0.0.0"}},"Instance1Wrapper":{"id":"Instance1Wrapper","path":"cdk-integ-cluster-snapshot/FromSnapshot/Instance1Wrapper","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Instance1":{"id":"Instance1","path":"cdk-integ-cluster-snapshot/FromSnapshot/Instance1","attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBInstance","aws:cdk:cloudformation:props":{"dbClusterIdentifier":{"Ref":"FromSnapshotEE0682C5"},"dbInstanceClass":"db.t3.medium","dbSubnetGroupName":{"Ref":"FromSnapshotSubnets9ED4B8EE"},"engine":"aurora-mysql"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBInstance","version":"0.0.0"}},"Instance2Wrapper":{"id":"Instance2Wrapper","path":"cdk-integ-cluster-snapshot/FromSnapshot/Instance2Wrapper","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Instance2":{"id":"Instance2","path":"cdk-integ-cluster-snapshot/FromSnapshot/Instance2","attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBInstance","aws:cdk:cloudformation:props":{"dbClusterIdentifier":{"Ref":"FromSnapshotEE0682C5"},"dbInstanceClass":"db.t3.medium","dbSubnetGroupName":{"Ref":"FromSnapshotSubnets9ED4B8EE"},"engine":"aurora-mysql"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBInstance","version":"0.0.0"}},"RotationSingleUser":{"id":"RotationSingleUser","path":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser","children":{"SecurityGroup":{"id":"SecurityGroup","path":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser/SecurityGroup","children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser/SecurityGroup/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroup","aws:cdk:cloudformation:props":{"groupDescription":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser/SecurityGroup","securityGroupEgress":[{"cidrIp":"0.0.0.0/0","description":"Allow all outbound traffic by default","ipProtocol":"-1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroup","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.SecurityGroup","version":"0.0.0","metadata":[{"vpc":"*"},{"addEgressRule":["*",{},"*",true]}]}},"SARMapping":{"id":"SARMapping","path":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser/SARMapping","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Serverless::Application","aws:cdk:cloudformation:props":{"location":{"applicationId":{"Fn::FindInMap":["FromSnapshotRotationSingleUserSARMapping4464D796",{"Ref":"AWS::Partition"},"applicationId"]},"semanticVersion":{"Fn::FindInMap":["FromSnapshotRotationSingleUserSARMapping4464D796",{"Ref":"AWS::Partition"},"semanticVersion"]}},"parameters":{"endpoint":{"Fn::Join":["",["https://secretsmanager.",{"Ref":"AWS::Region"},".",{"Ref":"AWS::URLSuffix"}]]},"functionName":"cdkintegclustersnapshotFromSnapshotRotationSingleUserAE675488","vpcSubnetIds":{"Fn::Join":["",[{"Ref":"VpcPrivateSubnet1Subnet536B997A"},",",{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}]]},"vpcSecurityGroupIds":{"Fn::GetAtt":["FromSnapshotRotationSingleUserSecurityGroupF78A9956","GroupId"]},"excludeCharacters":" %+~`#$&*()|[]{}:;<>?!'/@\"\\"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_sam.CfnApplication","version":"0.0.0"}},"RotationLambda":{"id":"RotationLambda","path":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser/RotationLambda","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.FunctionBase","version":"0.0.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.SecretRotation","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_rds.DatabaseClusterFromSnapshot","version":"0.0.0","metadata":[{"snapshotIdentifier":"*","snapshotCredentials":"*","engine":{"engineType":"*","singleUserRotationApplication":"*","engineVersion":{"fullVersion":"*","majorVersion":"*"},"parameterGroupFamily":"*","engineFamily":"*","supportedLogTypes":"*","combineImportAndExportRoles":true},"writer":"*","readers":"*","vpc":"*","removalPolicy":"destroy"}]}},"BootstrapVersion":{"id":"BootstrapVersion","path":"cdk-integ-cluster-snapshot/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"cdk-integ-cluster-snapshot/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"}},"ClusterSnapshotInteg":{"id":"ClusterSnapshotInteg","path":"ClusterSnapshotInteg","children":{"DefaultTest":{"id":"DefaultTest","path":"ClusterSnapshotInteg/DefaultTest","children":{"Default":{"id":"Default","path":"ClusterSnapshotInteg/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"ClusterSnapshotInteg/DefaultTest/DeployAssert","children":{"BootstrapVersion":{"id":"BootstrapVersion","path":"ClusterSnapshotInteg/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"ClusterSnapshotInteg/DefaultTest/DeployAssert/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTestCase","version":"0.0.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTest","version":"0.0.0"}},"Tree":{"id":"Tree","path":"Tree","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}},"constructInfo":{"fqn":"aws-cdk-lib.App","version":"0.0.0"}}}
\ No newline at end of file
+{"version":"tree-0.1","tree":{"id":"App","path":"","constructInfo":{"fqn":"aws-cdk-lib.App","version":"0.0.0"},"children":{"cdk-integ-cluster-snapshot":{"id":"cdk-integ-cluster-snapshot","path":"cdk-integ-cluster-snapshot","constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"},"children":{"Vpc":{"id":"Vpc","path":"cdk-integ-cluster-snapshot/Vpc","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.Vpc","version":"0.0.0","metadata":[{"maxAzs":"*","natGateways":"*","restrictDefaultSecurityGroup":false}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Vpc/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPC","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::VPC","aws:cdk:cloudformation:props":{"cidrBlock":"10.0.0.0/16","enableDnsHostnames":true,"enableDnsSupport":true,"instanceTenancy":"default","tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc"}]}}},"PublicSubnet1":{"id":"PublicSubnet1","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PublicSubnet","version":"0.0.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{},{"addNatGateway":["*"]}]},"children":{"Subnet":{"id":"Subnet","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/Subnet","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[0,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.0.0/18","mapPublicIpOnLaunch":true,"tags":[{"key":"aws-cdk:subnet-name","value":"Public"},{"key":"aws-cdk:subnet-type","value":"Public"},{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"Acl":{"id":"Acl","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/RouteTable","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/RouteTableAssociation","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"VpcPublicSubnet1RouteTable6C95E38E"},"subnetId":{"Ref":"VpcPublicSubnet1Subnet5C2D37C4"}}}},"DefaultRoute":{"id":"DefaultRoute","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/DefaultRoute","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","gatewayId":{"Ref":"VpcIGWD7BA715C"},"routeTableId":{"Ref":"VpcPublicSubnet1RouteTable6C95E38E"}}}},"EIP":{"id":"EIP","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/EIP","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnEIP","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::EIP","aws:cdk:cloudformation:props":{"domain":"vpc","tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1"}]}}},"NATGateway":{"id":"NATGateway","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1/NATGateway","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnNatGateway","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::NatGateway","aws:cdk:cloudformation:props":{"allocationId":{"Fn::GetAtt":["VpcPublicSubnet1EIPD7E02669","AllocationId"]},"subnetId":{"Ref":"VpcPublicSubnet1Subnet5C2D37C4"},"tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet1"}]}}}}},"PublicSubnet2":{"id":"PublicSubnet2","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PublicSubnet","version":"0.0.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]},"children":{"Subnet":{"id":"Subnet","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2/Subnet","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[1,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.64.0/18","mapPublicIpOnLaunch":true,"tags":[{"key":"aws-cdk:subnet-name","value":"Public"},{"key":"aws-cdk:subnet-type","value":"Public"},{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"Acl":{"id":"Acl","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2/RouteTable","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2/RouteTableAssociation","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"VpcPublicSubnet2RouteTable94F7E489"},"subnetId":{"Ref":"VpcPublicSubnet2Subnet691E08A3"}}}},"DefaultRoute":{"id":"DefaultRoute","path":"cdk-integ-cluster-snapshot/Vpc/PublicSubnet2/DefaultRoute","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","gatewayId":{"Ref":"VpcIGWD7BA715C"},"routeTableId":{"Ref":"VpcPublicSubnet2RouteTable94F7E489"}}}}}},"PrivateSubnet1":{"id":"PrivateSubnet1","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PrivateSubnet","version":"0.0.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":false,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":false,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]},"children":{"Subnet":{"id":"Subnet","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1/Subnet","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[0,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.128.0/18","mapPublicIpOnLaunch":false,"tags":[{"key":"aws-cdk:subnet-name","value":"Private"},{"key":"aws-cdk:subnet-type","value":"Private"},{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"Acl":{"id":"Acl","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1/RouteTable","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1/RouteTableAssociation","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"VpcPrivateSubnet1RouteTableB2C5B500"},"subnetId":{"Ref":"VpcPrivateSubnet1Subnet536B997A"}}}},"DefaultRoute":{"id":"DefaultRoute","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet1/DefaultRoute","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","natGatewayId":{"Ref":"VpcPublicSubnet1NATGateway4D7517AA"},"routeTableId":{"Ref":"VpcPrivateSubnet1RouteTableB2C5B500"}}}}}},"PrivateSubnet2":{"id":"PrivateSubnet2","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PrivateSubnet","version":"0.0.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":false,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":false,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]},"children":{"Subnet":{"id":"Subnet","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2/Subnet","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[1,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.192.0/18","mapPublicIpOnLaunch":false,"tags":[{"key":"aws-cdk:subnet-name","value":"Private"},{"key":"aws-cdk:subnet-type","value":"Private"},{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"Acl":{"id":"Acl","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2/RouteTable","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2/RouteTableAssociation","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"VpcPrivateSubnet2RouteTableA678073B"},"subnetId":{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}}}},"DefaultRoute":{"id":"DefaultRoute","path":"cdk-integ-cluster-snapshot/Vpc/PrivateSubnet2/DefaultRoute","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","natGatewayId":{"Ref":"VpcPublicSubnet1NATGateway4D7517AA"},"routeTableId":{"Ref":"VpcPrivateSubnet2RouteTableA678073B"}}}}}},"IGW":{"id":"IGW","path":"cdk-integ-cluster-snapshot/Vpc/IGW","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnInternetGateway","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::InternetGateway","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-integ-cluster-snapshot/Vpc"}]}}},"VPCGW":{"id":"VPCGW","path":"cdk-integ-cluster-snapshot/Vpc/VPCGW","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPCGatewayAttachment","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::VPCGatewayAttachment","aws:cdk:cloudformation:props":{"internetGatewayId":{"Ref":"VpcIGWD7BA715C"},"vpcId":{"Ref":"Vpc8378EB38"}}}}}},"Cluster":{"id":"Cluster","path":"cdk-integ-cluster-snapshot/Cluster","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.DatabaseCluster","version":"0.0.0","metadata":[{"engine":{"engineType":"*","singleUserRotationApplication":"*","engineVersion":{"fullVersion":"*","majorVersion":"*"},"parameterGroupFamily":"*","engineFamily":"*","supportedLogTypes":"*","combineImportAndExportRoles":true},"writer":"*","readers":"*","vpc":"*","removalPolicy":"destroy"}]},"children":{"Subnets":{"id":"Subnets","path":"cdk-integ-cluster-snapshot/Cluster/Subnets","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.SubnetGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*","vpcSubnets":"*","removalPolicy":"*"}]},"children":{"Default":{"id":"Default","path":"cdk-integ-cluster-snapshot/Cluster/Subnets/Default","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBSubnetGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBSubnetGroup","aws:cdk:cloudformation:props":{"dbSubnetGroupDescription":"Subnets for Cluster database","subnetIds":[{"Ref":"VpcPrivateSubnet1Subnet536B997A"},{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}]}}}}},"SecurityGroup":{"id":"SecurityGroup","path":"cdk-integ-cluster-snapshot/Cluster/SecurityGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.SecurityGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Cluster/SecurityGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroup","aws:cdk:cloudformation:props":{"groupDescription":"RDS security group","securityGroupEgress":[{"cidrIp":"0.0.0.0/0","description":"Allow all outbound traffic by default","ipProtocol":"-1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}}}},"AuroraMySqlDatabaseClusterEngineDefaultParameterGroup":{"id":"AuroraMySqlDatabaseClusterEngineDefaultParameterGroup","path":"cdk-integ-cluster-snapshot/Cluster/AuroraMySqlDatabaseClusterEngineDefaultParameterGroup","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"Secret":{"id":"Secret","path":"cdk-integ-cluster-snapshot/Cluster/Secret","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.DatabaseSecret","version":"0.0.0","metadata":[{"encryptionKey":"*","secretName":"*","replicaRegions":"*"},{"username":"*","secretName":"*","encryptionKey":"*","excludeCharacters":"*","replaceOnPasswordCriteriaChanges":"*","replicaRegions":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Cluster/Secret/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecret","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::Secret","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["Generated by the CDK for stack: ",{"Ref":"AWS::StackName"}]]},"generateSecretString":{"passwordLength":30,"secretStringTemplate":"{\"username\":\"admin\"}","generateStringKey":"password","excludeCharacters":" %+~`#$&*()|[]{}:;<>?!'/@\"\\"}}}},"Attachment":{"id":"Attachment","path":"cdk-integ-cluster-snapshot/Cluster/Secret/Attachment","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.SecretTargetAttachment","version":"0.0.0","metadata":[{"secret":"*","target":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Cluster/Secret/Attachment/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecretTargetAttachment","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::SecretTargetAttachment","aws:cdk:cloudformation:props":{"secretId":{"Ref":"ClusterSecret6368BD0F"},"targetId":{"Ref":"ClusterEB0386A7"},"targetType":"AWS::RDS::DBCluster"}}}}}}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Cluster/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBCluster","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBCluster","aws:cdk:cloudformation:props":{"copyTagsToSnapshot":true,"dbClusterParameterGroupName":"default.aurora-mysql8.0","dbSubnetGroupName":{"Ref":"ClusterSubnetsDCFA5CB7"},"engine":"aurora-mysql","engineVersion":"8.0.mysql_aurora.3.04.0","masterUsername":{"Fn::Join":["",["{{resolve:secretsmanager:",{"Ref":"ClusterSecret6368BD0F"},":SecretString:username::}}"]]},"masterUserPassword":{"Fn::Join":["",["{{resolve:secretsmanager:",{"Ref":"ClusterSecret6368BD0F"},":SecretString:password::}}"]]},"vpcSecurityGroupIds":[{"Fn::GetAtt":["ClusterSecurityGroup0921994B","GroupId"]}]}}},"Instance1Wrapper":{"id":"Instance1Wrapper","path":"cdk-integ-cluster-snapshot/Cluster/Instance1Wrapper","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Instance1":{"id":"Instance1","path":"cdk-integ-cluster-snapshot/Cluster/Instance1","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBInstance","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBInstance","aws:cdk:cloudformation:props":{"dbClusterIdentifier":{"Ref":"ClusterEB0386A7"},"dbInstanceClass":"db.t3.medium","dbSubnetGroupName":{"Ref":"ClusterSubnetsDCFA5CB7"},"engine":"aurora-mysql"}}},"Instance2Wrapper":{"id":"Instance2Wrapper","path":"cdk-integ-cluster-snapshot/Cluster/Instance2Wrapper","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Instance2":{"id":"Instance2","path":"cdk-integ-cluster-snapshot/Cluster/Instance2","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBInstance","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBInstance","aws:cdk:cloudformation:props":{"dbClusterIdentifier":{"Ref":"ClusterEB0386A7"},"dbInstanceClass":"db.t3.medium","dbSubnetGroupName":{"Ref":"ClusterSubnetsDCFA5CB7"},"engine":"aurora-mysql"}}}}},"Snapshoter":{"id":"Snapshoter","path":"cdk-integ-cluster-snapshot/Snapshoter","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"},"children":{"OnEventHandler":{"id":"OnEventHandler","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","runtime":"*","handler":"*","initialPolicy":"*"}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":["rds:AddTagsToResource","rds:CreateDBClusterSnapshot","rds:DeleteDBClusterSnapshot"],"Effect":"Allow","Resource":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":cluster-snapshot:cdk-integ-cluster-snapshot"]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":cluster:",{"Ref":"ClusterEB0386A7"}]]}]}],"Version":"2012-10-17"},"policyName":"SnapshoterOnEventHandlerServiceRoleDefaultPolicyAF0DFD57","roles":[{"Ref":"SnapshoterOnEventHandlerServiceRole7F84B26D"}]}}}}}}},"Code":{"id":"Code","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"0.0.0"},"children":{"Stage":{"id":"Stage","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"0.0.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/OnEventHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"7531d12b1fd853bba70fda1369698d729b1ef9986621d19d7cbdbf9648a32ba5.zip"},"handler":"index.onEventHandler","role":{"Fn::GetAtt":["SnapshoterOnEventHandlerServiceRole7F84B26D","Arn"]},"runtime":"nodejs22.x"}}}}},"IsCompleteHandler":{"id":"IsCompleteHandler","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","runtime":"*","handler":"*","initialPolicy":"*"}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"rds:DescribeDBClusterSnapshots","Effect":"Allow","Resource":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":cluster-snapshot:cdk-integ-cluster-snapshot"]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":cluster:",{"Ref":"ClusterEB0386A7"}]]}]}],"Version":"2012-10-17"},"policyName":"SnapshoterIsCompleteHandlerServiceRoleDefaultPolicyA43EB222","roles":[{"Ref":"SnapshoterIsCompleteHandlerServiceRole40F5F1A8"}]}}}}}}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/IsCompleteHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"7531d12b1fd853bba70fda1369698d729b1ef9986621d19d7cbdbf9648a32ba5.zip"},"handler":"index.isCompleteHandler","role":{"Fn::GetAtt":["SnapshoterIsCompleteHandlerServiceRole40F5F1A8","Arn"]},"runtime":"nodejs22.x"}}}}},"SnapshotProvider":{"id":"SnapshotProvider","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider","constructInfo":{"fqn":"aws-cdk-lib.custom_resources.Provider","version":"0.0.0"},"children":{"framework-onEvent":{"id":"framework-onEvent","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]}]},{"Action":"states:StartExecution","Effect":"Allow","Resource":{"Ref":"SnapshoterSnapshotProviderwaiterstatemachineE1F05D1F"}}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkonEventServiceRoleDefaultPolicy21CE9686","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76"}]}}}}}}},"Code":{"id":"Code","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"0.0.0"},"children":{"Stage":{"id":"Stage","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"0.0.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onEvent/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"},"description":"AWS CDK resource provider framework - onEvent (cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},"WAITER_STATE_MACHINE_ARN":{"Ref":"SnapshoterSnapshotProviderwaiterstatemachineE1F05D1F"}}},"handler":"framework.onEvent","role":{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}}}}},"framework-isComplete":{"id":"framework-isComplete","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]}]}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkisCompleteServiceRoleDefaultPolicyF410E478","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB"}]}}}}}}},"Code":{"id":"Code","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"0.0.0"},"children":{"Stage":{"id":"Stage","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"0.0.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-isComplete/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"},"description":"AWS CDK resource provider framework - isComplete (cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]}}},"handler":"framework.isComplete","role":{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}}}}},"framework-onTimeout":{"id":"framework-onTimeout","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]}]}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkonTimeoutServiceRoleDefaultPolicy05DF1C30","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD"}]}}}}}}},"Code":{"id":"Code","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"0.0.0"},"children":{"Stage":{"id":"Stage","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"0.0.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/framework-onTimeout/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"},"description":"AWS CDK resource provider framework - onTimeout (cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]}}},"handler":"framework.onTimeout","role":{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}}}}},"waiter-state-machine":{"id":"waiter-state-machine","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine","constructInfo":{"fqn":"aws-cdk-lib.custom_resources.WaiterStateMachine","version":"0.0.0"},"children":{"Role":{"id":"Role","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/Role","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"}},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]}]},"children":{"ImportRole":{"id":"ImportRole","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/Role/ImportRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/Role/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"states.amazonaws.com"}}],"Version":"2012-10-17"}}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/Role/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/Role/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkisComplete803B4F1B","Arn"]},{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonTimeout04342B00","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkisComplete803B4F1B","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonTimeout04342B00","Arn"]},":*"]]}]},{"Action":["logs:CreateLogDelivery","logs:CreateLogStream","logs:DeleteLogDelivery","logs:DescribeLogGroups","logs:DescribeResourcePolicies","logs:GetLogDelivery","logs:ListLogDeliveries","logs:PutLogEvents","logs:PutResourcePolicy","logs:UpdateLogDelivery"],"Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderwaiterstatemachineRoleDefaultPolicyCF7716B2","roles":[{"Ref":"SnapshoterSnapshotProviderwaiterstatemachineRole76E414C5"}]}}}}}}},"LogGroup":{"id":"LogGroup","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"0.0.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/vendedlogs/states/waiter-state-machine-",{"Ref":"SnapshoterSnapshotProviderframeworkisComplete803B4F1B"},"-c8913d7ae55807b42206686ba5c74df4ca169c2f9e"]]},"retentionInDays":731}}}}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/Snapshoter/SnapshotProvider/waiter-state-machine/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_stepfunctions.CfnStateMachine","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::StepFunctions::StateMachine","aws:cdk:cloudformation:props":{"definitionString":{"Fn::Join":["",["{\"StartAt\":\"framework-isComplete-task\",\"States\":{\"framework-isComplete-task\":{\"End\":true,\"Retry\":[{\"ErrorEquals\":[\"States.ALL\"],\"IntervalSeconds\":5,\"MaxAttempts\":360,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkisComplete803B4F1B","Arn"]},"\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonTimeout04342B00","Arn"]},"\"}}}"]]},"loggingConfiguration":{"destinations":[{"cloudWatchLogsLogGroup":{"logGroupArn":{"Fn::GetAtt":["SnapshoterSnapshotProviderwaiterstatemachineLogGroup5A64CAF9","Arn"]}}}],"includeExecutionData":false,"level":"ERROR"},"roleArn":{"Fn::GetAtt":["SnapshoterSnapshotProviderwaiterstatemachineRole76E414C5","Arn"]}}}}}}}},"Snapshot":{"id":"Snapshot","path":"cdk-integ-cluster-snapshot/Snapshoter/Snapshot","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"cdk-integ-cluster-snapshot/Snapshoter/Snapshot/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}}}}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"cdk-integ-cluster-snapshot/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"FromSnapshot":{"id":"FromSnapshot","path":"cdk-integ-cluster-snapshot/FromSnapshot","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.DatabaseClusterFromSnapshot","version":"0.0.0","metadata":[{"snapshotIdentifier":"*","snapshotCredentials":"*","engine":{"engineType":"*","singleUserRotationApplication":"*","engineVersion":{"fullVersion":"*","majorVersion":"*"},"parameterGroupFamily":"*","engineFamily":"*","supportedLogTypes":"*","combineImportAndExportRoles":true},"writer":"*","readers":"*","vpc":"*","removalPolicy":"destroy"}]},"children":{"Subnets":{"id":"Subnets","path":"cdk-integ-cluster-snapshot/FromSnapshot/Subnets","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.SubnetGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*","vpcSubnets":"*","removalPolicy":"*"}]},"children":{"Default":{"id":"Default","path":"cdk-integ-cluster-snapshot/FromSnapshot/Subnets/Default","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBSubnetGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBSubnetGroup","aws:cdk:cloudformation:props":{"dbSubnetGroupDescription":"Subnets for FromSnapshot database","subnetIds":[{"Ref":"VpcPrivateSubnet1Subnet536B997A"},{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}]}}}}},"SecurityGroup":{"id":"SecurityGroup","path":"cdk-integ-cluster-snapshot/FromSnapshot/SecurityGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.SecurityGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*"},{"addIngressRule":["*",{},"*",false]}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/SecurityGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroup","aws:cdk:cloudformation:props":{"groupDescription":"RDS security group","securityGroupEgress":[{"cidrIp":"0.0.0.0/0","description":"Allow all outbound traffic by default","ipProtocol":"-1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"from cdkintegclustersnapshotFromSnapshotRotationSingleUserSecurityGroup8B231219:{IndirectPort}":{"id":"from cdkintegclustersnapshotFromSnapshotRotationSingleUserSecurityGroup8B231219:{IndirectPort}","path":"cdk-integ-cluster-snapshot/FromSnapshot/SecurityGroup/from cdkintegclustersnapshotFromSnapshotRotationSingleUserSecurityGroup8B231219:{IndirectPort}","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroupIngress","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroupIngress","aws:cdk:cloudformation:props":{"description":"from cdkintegclustersnapshotFromSnapshotRotationSingleUserSecurityGroup8B231219:{IndirectPort}","fromPort":{"Fn::GetAtt":["FromSnapshotEE0682C5","Endpoint.Port"]},"groupId":{"Fn::GetAtt":["FromSnapshotSecurityGroup72F11E81","GroupId"]},"ipProtocol":"tcp","sourceSecurityGroupId":{"Fn::GetAtt":["FromSnapshotRotationSingleUserSecurityGroupF78A9956","GroupId"]},"toPort":{"Fn::GetAtt":["FromSnapshotEE0682C5","Endpoint.Port"]}}}}}},"AuroraMySqlDatabaseClusterEngineDefaultParameterGroup":{"id":"AuroraMySqlDatabaseClusterEngineDefaultParameterGroup","path":"cdk-integ-cluster-snapshot/FromSnapshot/AuroraMySqlDatabaseClusterEngineDefaultParameterGroup","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"SnapshotSecret":{"id":"SnapshotSecret","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.DatabaseSecret","version":"0.0.0","metadata":[{"encryptionKey":"*","secretName":"*","replicaRegions":"*"},{"username":"*","encryptionKey":"*","excludeCharacters":"*","replaceOnPasswordCriteriaChanges":true,"replicaRegions":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecret","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::Secret","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["Generated by the CDK for stack: ",{"Ref":"AWS::StackName"}]]},"generateSecretString":{"passwordLength":30,"secretStringTemplate":"{\"username\":\"admin\"}","generateStringKey":"password","excludeCharacters":" %+~`#$&*()|[]{}:;<>?!'/@\"\\"}}}},"Attachment":{"id":"Attachment","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Attachment","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.SecretTargetAttachment","version":"0.0.0","metadata":[{"secret":"*","target":"*"},{"addToResourcePolicy":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Attachment/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecretTargetAttachment","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::SecretTargetAttachment","aws:cdk:cloudformation:props":{"secretId":{"Ref":"cdkintegclustersnapshotFromSnapshotSnapshotSecretD93327943fdaad7efa858a3daf9490cf0a702aeb"},"targetId":{"Ref":"FromSnapshotEE0682C5"},"targetType":"AWS::RDS::DBCluster"}}},"RotationSchedule":{"id":"RotationSchedule","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Attachment/RotationSchedule","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.RotationSchedule","version":"0.0.0","metadata":[{"secret":"*","rotationLambda":"*","automaticallyAfter":"*","rotateImmediatelyOnUpdate":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Attachment/RotationSchedule/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnRotationSchedule","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::RotationSchedule","aws:cdk:cloudformation:props":{"rotationLambdaArn":{"Fn::GetAtt":["FromSnapshotRotationSingleUserEBCAA50C","Outputs.RotationLambdaARN"]},"rotationRules":{"scheduleExpression":"rate(30 days)"},"secretId":{"Ref":"FromSnapshotSnapshotSecretAttachmentA3F619B8"}}}}}}}},"Policy":{"id":"Policy","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Policy","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.ResourcePolicy","version":"0.0.0","metadata":[{"secret":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/SnapshotSecret/Policy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnResourcePolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::ResourcePolicy","aws:cdk:cloudformation:props":{"resourcePolicy":{"Statement":[{"Action":"secretsmanager:DeleteSecret","Effect":"Deny","Principal":{"AWS":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::",{"Ref":"AWS::AccountId"},":root"]]}},"Resource":"*"}],"Version":"2012-10-17"},"secretId":{"Ref":"cdkintegclustersnapshotFromSnapshotSnapshotSecretD93327943fdaad7efa858a3daf9490cf0a702aeb"}}}}}}}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBCluster","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBCluster","aws:cdk:cloudformation:props":{"copyTagsToSnapshot":true,"dbClusterParameterGroupName":"default.aurora-mysql8.0","dbSubnetGroupName":{"Ref":"FromSnapshotSubnets9ED4B8EE"},"engine":"aurora-mysql","engineVersion":"8.0.mysql_aurora.3.04.0","masterUserPassword":{"Fn::Join":["",["{{resolve:secretsmanager:",{"Ref":"cdkintegclustersnapshotFromSnapshotSnapshotSecretD93327943fdaad7efa858a3daf9490cf0a702aeb"},":SecretString:password::}}"]]},"snapshotIdentifier":{"Fn::GetAtt":["SnapshoterSnapshotAA1755BE","DBClusterSnapshotArn"]},"vpcSecurityGroupIds":[{"Fn::GetAtt":["FromSnapshotSecurityGroup72F11E81","GroupId"]}]}}},"Instance1Wrapper":{"id":"Instance1Wrapper","path":"cdk-integ-cluster-snapshot/FromSnapshot/Instance1Wrapper","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Instance1":{"id":"Instance1","path":"cdk-integ-cluster-snapshot/FromSnapshot/Instance1","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBInstance","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBInstance","aws:cdk:cloudformation:props":{"dbClusterIdentifier":{"Ref":"FromSnapshotEE0682C5"},"dbInstanceClass":"db.t3.medium","dbSubnetGroupName":{"Ref":"FromSnapshotSubnets9ED4B8EE"},"engine":"aurora-mysql"}}},"Instance2Wrapper":{"id":"Instance2Wrapper","path":"cdk-integ-cluster-snapshot/FromSnapshot/Instance2Wrapper","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Instance2":{"id":"Instance2","path":"cdk-integ-cluster-snapshot/FromSnapshot/Instance2","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBInstance","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBInstance","aws:cdk:cloudformation:props":{"dbClusterIdentifier":{"Ref":"FromSnapshotEE0682C5"},"dbInstanceClass":"db.t3.medium","dbSubnetGroupName":{"Ref":"FromSnapshotSubnets9ED4B8EE"},"engine":"aurora-mysql"}}},"RotationSingleUser":{"id":"RotationSingleUser","path":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.SecretRotation","version":"0.0.0"},"children":{"SecurityGroup":{"id":"SecurityGroup","path":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser/SecurityGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.SecurityGroup","version":"0.0.0","metadata":[{"vpc":"*"},{"addEgressRule":["*",{},"*",true]}]},"children":{"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser/SecurityGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroup","aws:cdk:cloudformation:props":{"groupDescription":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser/SecurityGroup","securityGroupEgress":[{"cidrIp":"0.0.0.0/0","description":"Allow all outbound traffic by default","ipProtocol":"-1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}}}},"SARMapping":{"id":"SARMapping","path":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser/SARMapping","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"Resource":{"id":"Resource","path":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_sam.CfnApplication","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Serverless::Application","aws:cdk:cloudformation:props":{"location":{"applicationId":{"Fn::FindInMap":["FromSnapshotRotationSingleUserSARMapping4464D796",{"Ref":"AWS::Partition"},"applicationId"]},"semanticVersion":{"Fn::FindInMap":["FromSnapshotRotationSingleUserSARMapping4464D796",{"Ref":"AWS::Partition"},"semanticVersion"]}},"parameters":{"endpoint":{"Fn::Join":["",["https://secretsmanager.",{"Ref":"AWS::Region"},".",{"Ref":"AWS::URLSuffix"}]]},"functionName":"cdkintegclustersnapshotFromSnapshotRotationSingleUserAE675488","vpcSubnetIds":{"Fn::Join":["",[{"Ref":"VpcPrivateSubnet1Subnet536B997A"},",",{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}]]},"vpcSecurityGroupIds":{"Fn::GetAtt":["FromSnapshotRotationSingleUserSecurityGroupF78A9956","GroupId"]},"excludeCharacters":" %+~`#$&*()|[]{}:;<>?!'/@\"\\"}}}},"RotationLambda":{"id":"RotationLambda","path":"cdk-integ-cluster-snapshot/FromSnapshot/RotationSingleUser/RotationLambda","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.FunctionBase","version":"0.0.0","metadata":[]}}}}}},"BootstrapVersion":{"id":"BootstrapVersion","path":"cdk-integ-cluster-snapshot/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"cdk-integ-cluster-snapshot/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}}},"ClusterSnapshotInteg":{"id":"ClusterSnapshotInteg","path":"ClusterSnapshotInteg","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTest","version":"0.0.0"},"children":{"DefaultTest":{"id":"DefaultTest","path":"ClusterSnapshotInteg/DefaultTest","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTestCase","version":"0.0.0"},"children":{"Default":{"id":"Default","path":"ClusterSnapshotInteg/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"ClusterSnapshotInteg/DefaultTest/DeployAssert","constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"},"children":{"BootstrapVersion":{"id":"BootstrapVersion","path":"ClusterSnapshotInteg/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"ClusterSnapshotInteg/DefaultTest/DeployAssert/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}}}}}}},"Tree":{"id":"Tree","path":"Tree","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}}}
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.ts
index 2cb72b88e3a08..3bb8ef2e31e64 100644
--- a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.ts
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.cluster-snapshot.ts
@@ -1,14 +1,10 @@
-import * as path from 'path';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
-import * as iam from 'aws-cdk-lib/aws-iam';
-import * as lambda from 'aws-cdk-lib/aws-lambda';
-import { App, ArnFormat, CustomResource, RemovalPolicy, Stack, StackProps } from 'aws-cdk-lib';
-import * as cr from 'aws-cdk-lib/custom-resources';
+import { App, RemovalPolicy, Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as rds from 'aws-cdk-lib/aws-rds';
import { ClusterInstance } from 'aws-cdk-lib/aws-rds';
import { IntegTest } from '@aws-cdk/integ-tests-alpha';
-import { STANDARD_NODEJS_RUNTIME } from '../../config';
+import { ClusterSnapshoter } from './snapshoter';
class TestStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
@@ -34,7 +30,7 @@ class TestStack extends Stack {
removalPolicy: RemovalPolicy.DESTROY,
});
- const snapshoter = new Snapshoter(this, 'Snapshoter', {
+ const snapshoter = new ClusterSnapshoter(this, 'Snapshoter', {
cluster,
snapshotIdentifier: 'cdk-integ-cluster-snapshot',
});
@@ -58,69 +54,6 @@ class TestStack extends Stack {
}
}
-interface SnapshoterProps {
- readonly cluster: rds.IDatabaseCluster;
- readonly snapshotIdentifier: string;
-}
-
-class Snapshoter extends Construct {
- public readonly snapshotArn: string;
-
- constructor(scope: Construct, id: string, props: SnapshoterProps) {
- super(scope, id);
-
- const clusterArn = Stack.of(this).formatArn({
- service: 'rds',
- resource: 'cluster',
- resourceName: props.cluster.clusterIdentifier,
- arnFormat: ArnFormat.COLON_RESOURCE_NAME,
- });
-
- const snapshotArn = Stack.of(this).formatArn({
- service: 'rds',
- resource: 'cluster-snapshot',
- resourceName: props.snapshotIdentifier,
- arnFormat: ArnFormat.COLON_RESOURCE_NAME,
- });
-
- const code = lambda.Code.fromAsset(path.join(__dirname, 'snapshot-handler'), { exclude: ['*.ts'] });
- const onEventHandler = new lambda.Function(this, 'OnEventHandler', {
- code,
- runtime: STANDARD_NODEJS_RUNTIME,
- handler: 'index.onEventHandler',
- });
- onEventHandler.addToRolePolicy(new iam.PolicyStatement({
- actions: ['rds:CreateDBClusterSnapshot', 'rds:DeleteDBClusterSnapshot'],
- resources: [clusterArn, snapshotArn],
- }));
-
- const isCompleteHandler = new lambda.Function(this, 'IsCompleteHandler', {
- code,
- runtime: STANDARD_NODEJS_RUNTIME,
- handler: 'index.isCompleteHandler',
- });
- isCompleteHandler.addToRolePolicy(new iam.PolicyStatement({
- actions: ['rds:DescribeDBClusterSnapshots'],
- resources: [clusterArn, snapshotArn],
- }));
-
- const provider = new cr.Provider(this, 'SnapshotProvider', {
- onEventHandler,
- isCompleteHandler,
- });
-
- const customResource = new CustomResource(this, 'Snapshot', {
- resourceType: 'Custom::Snapshoter',
- serviceToken: provider.serviceToken,
- properties: {
- DBClusterIdentifier: props.cluster.clusterIdentifier,
- DBClusterSnapshotIdentifier: props.snapshotIdentifier,
- },
- });
- this.snapshotArn = customResource.getAttString('DBClusterSnapshotArn');
- }
-}
-
const app = new App({
postCliContext: {
'@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
@@ -133,4 +66,3 @@ new IntegTest(app, 'ClusterSnapshotInteg', {
testCases: [stack],
diffAssets: true,
});
-app.synth();
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/cfn-response.js b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/cfn-response.js
new file mode 100644
index 0000000000000..5a86242674505
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/cfn-response.js
@@ -0,0 +1,106 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Retry = exports.includeStackTraces = exports.MISSING_PHYSICAL_ID_MARKER = exports.CREATE_FAILED_PHYSICAL_ID_MARKER = void 0;
+exports.submitResponse = submitResponse;
+exports.safeHandler = safeHandler;
+exports.redactDataFromPayload = redactDataFromPayload;
+/* eslint-disable max-len */
+/* eslint-disable no-console */
+const url = require("url");
+const outbound_1 = require("./outbound");
+const util_1 = require("./util");
+exports.CREATE_FAILED_PHYSICAL_ID_MARKER = 'AWSCDK::CustomResourceProviderFramework::CREATE_FAILED';
+exports.MISSING_PHYSICAL_ID_MARKER = 'AWSCDK::CustomResourceProviderFramework::MISSING_PHYSICAL_ID';
+async function submitResponse(status, event, options = {}) {
+ const json = {
+ Status: status,
+ Reason: options.reason || status,
+ StackId: event.StackId,
+ RequestId: event.RequestId,
+ PhysicalResourceId: event.PhysicalResourceId || exports.MISSING_PHYSICAL_ID_MARKER,
+ LogicalResourceId: event.LogicalResourceId,
+ NoEcho: options.noEcho,
+ Data: event.Data,
+ };
+ const responseBody = JSON.stringify(json);
+ const parsedUrl = url.parse(event.ResponseURL);
+ const loggingSafeUrl = `${parsedUrl.protocol}//${parsedUrl.hostname}/${parsedUrl.pathname}?***`;
+ if (options?.noEcho) {
+ (0, util_1.log)('submit redacted response to cloudformation', loggingSafeUrl, redactDataFromPayload(json));
+ }
+ else {
+ (0, util_1.log)('submit response to cloudformation', loggingSafeUrl, json);
+ }
+ const retryOptions = {
+ attempts: 5,
+ sleep: 1000,
+ };
+ await (0, util_1.withRetries)(retryOptions, outbound_1.httpRequest)({
+ hostname: parsedUrl.hostname,
+ path: parsedUrl.path,
+ method: 'PUT',
+ headers: {
+ 'content-type': '',
+ 'content-length': Buffer.byteLength(responseBody, 'utf8'),
+ },
+ }, responseBody);
+}
+exports.includeStackTraces = true; // for unit tests
+function safeHandler(block) {
+ return async (event) => {
+ // ignore DELETE event when the physical resource ID is the marker that
+ // indicates that this DELETE is a subsequent DELETE to a failed CREATE
+ // operation.
+ if (event.RequestType === 'Delete' && event.PhysicalResourceId === exports.CREATE_FAILED_PHYSICAL_ID_MARKER) {
+ (0, util_1.log)('ignoring DELETE event caused by a failed CREATE event');
+ await submitResponse('SUCCESS', event);
+ return;
+ }
+ try {
+ await block(event);
+ }
+ catch (e) {
+ // tell waiter state machine to retry
+ if (e instanceof Retry) {
+ (0, util_1.log)('retry requested by handler');
+ throw e;
+ }
+ if (!event.PhysicalResourceId) {
+ // special case: if CREATE fails, which usually implies, we usually don't
+ // have a physical resource id. in this case, the subsequent DELETE
+ // operation does not have any meaning, and will likely fail as well. to
+ // address this, we use a marker so the provider framework can simply
+ // ignore the subsequent DELETE.
+ if (event.RequestType === 'Create') {
+ (0, util_1.log)('CREATE failed, responding with a marker physical resource id so that the subsequent DELETE will be ignored');
+ event.PhysicalResourceId = exports.CREATE_FAILED_PHYSICAL_ID_MARKER;
+ }
+ else {
+ // otherwise, if PhysicalResourceId is not specified, something is
+ // terribly wrong because all other events should have an ID.
+ (0, util_1.log)(`ERROR: Malformed event. "PhysicalResourceId" is required: ${JSON.stringify({ ...event, ResponseURL: '...' })}`);
+ }
+ }
+ // this is an actual error, fail the activity altogether and exist.
+ await submitResponse('FAILED', event, {
+ reason: exports.includeStackTraces ? e.stack : e.message,
+ });
+ }
+ };
+}
+function redactDataFromPayload(payload) {
+ // Create a deep copy of the payload object
+ const redactedPayload = JSON.parse(JSON.stringify(payload));
+ // Redact the data in the copied payload object
+ if (redactedPayload.Data) {
+ const keys = Object.keys(redactedPayload.Data);
+ for (const key of keys) {
+ redactedPayload.Data[key] = '*****';
+ }
+ }
+ return redactedPayload;
+}
+class Retry extends Error {
+}
+exports.Retry = Retry;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuLXJlc3BvbnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2ZuLXJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdCQSx3Q0FtQ0M7QUFJRCxrQ0EwQ0M7QUFFRCxzREFZQztBQXZIRCw0QkFBNEI7QUFDNUIsK0JBQStCO0FBQy9CLDJCQUEyQjtBQUMzQix5Q0FBeUM7QUFDekMsaUNBQTBDO0FBRzdCLFFBQUEsZ0NBQWdDLEdBQUcsd0RBQXdELENBQUM7QUFDNUYsUUFBQSwwQkFBMEIsR0FBRyw4REFBOEQsQ0FBQztBQWdCbEcsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE0QixFQUFFLEtBQWlDLEVBQUUsVUFBeUMsRUFBRztJQUNoSixNQUFNLElBQUksR0FBbUQ7UUFDM0QsTUFBTSxFQUFFLE1BQU07UUFDZCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxNQUFNO1FBQ2hDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztRQUN0QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixJQUFJLGtDQUEwQjtRQUMxRSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1FBQzFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7S0FDakIsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFMUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0MsTUFBTSxjQUFjLEdBQUcsR0FBRyxTQUFTLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsTUFBTSxDQUFDO0lBQ2hHLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLElBQUEsVUFBRyxFQUFDLDRDQUE0QyxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBQSxVQUFHLEVBQUMsbUNBQW1DLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRztRQUNuQixRQUFRLEVBQUUsQ0FBQztRQUNYLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQztJQUNGLE1BQU0sSUFBQSxrQkFBVyxFQUFDLFlBQVksRUFBRSxzQkFBVyxDQUFDLENBQUM7UUFDM0MsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1FBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztTQUMxRDtLQUNGLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUVVLFFBQUEsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLENBQUMsaUJBQWlCO0FBRXZELFNBQWdCLFdBQVcsQ0FBQyxLQUFvQztJQUM5RCxPQUFPLEtBQUssRUFBRSxLQUFVLEVBQUUsRUFBRTtRQUMxQix1RUFBdUU7UUFDdkUsdUVBQXVFO1FBQ3ZFLGFBQWE7UUFDYixJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyx3Q0FBZ0MsRUFBRSxDQUFDO1lBQ3BHLElBQUEsVUFBRyxFQUFDLHVEQUF1RCxDQUFDLENBQUM7WUFDN0QsTUFBTSxjQUFjLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRSxDQUFDO2dCQUN2QixJQUFBLFVBQUcsRUFBQyw0QkFBNEIsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLENBQUMsQ0FBQztZQUNWLENBQUM7WUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzlCLHlFQUF5RTtnQkFDekUsbUVBQW1FO2dCQUNuRSx3RUFBd0U7Z0JBQ3hFLHFFQUFxRTtnQkFDckUsZ0NBQWdDO2dCQUNoQyxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ25DLElBQUEsVUFBRyxFQUFDLDRHQUE0RyxDQUFDLENBQUM7b0JBQ2xILEtBQUssQ0FBQyxrQkFBa0IsR0FBRyx3Q0FBZ0MsQ0FBQztnQkFDOUQsQ0FBQztxQkFBTSxDQUFDO29CQUNOLGtFQUFrRTtvQkFDbEUsNkRBQTZEO29CQUM3RCxJQUFBLFVBQUcsRUFBQyw2REFBNkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkgsQ0FBQztZQUNILENBQUM7WUFFRCxtRUFBbUU7WUFDbkUsTUFBTSxjQUFjLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRTtnQkFDcEMsTUFBTSxFQUFFLDBCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTzthQUNqRCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLHFCQUFxQixDQUFDLE9BQXdCO0lBQzVELDJDQUEyQztJQUMzQyxNQUFNLGVBQWUsR0FBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFN0UsK0NBQStDO0lBQy9DLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBRUQsTUFBYSxLQUFNLFNBQVEsS0FBSztDQUFJO0FBQXBDLHNCQUFvQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IHsgaHR0cFJlcXVlc3QgfSBmcm9tICcuL291dGJvdW5kJztcbmltcG9ydCB7IGxvZywgd2l0aFJldHJpZXMgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgT25FdmVudFJlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVIgPSAnQVdTQ0RLOjpDdXN0b21SZXNvdXJjZVByb3ZpZGVyRnJhbWV3b3JrOjpDUkVBVEVfRkFJTEVEJztcbmV4cG9ydCBjb25zdCBNSVNTSU5HX1BIWVNJQ0FMX0lEX01BUktFUiA9ICdBV1NDREs6OkN1c3RvbVJlc291cmNlUHJvdmlkZXJGcmFtZXdvcms6Ok1JU1NJTkdfUEhZU0lDQUxfSUQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRm9ybWF0aW9uUmVzcG9uc2VPcHRpb25zIHtcbiAgcmVhZG9ubHkgcmVhc29uPzogc3RyaW5nO1xuICByZWFkb25seSBub0VjaG8/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRm9ybWF0aW9uRXZlbnRDb250ZXh0IHtcbiAgU3RhY2tJZDogc3RyaW5nO1xuICBSZXF1ZXN0SWQ6IHN0cmluZztcbiAgUGh5c2ljYWxSZXNvdXJjZUlkPzogc3RyaW5nO1xuICBMb2dpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICBSZXNwb25zZVVSTDogc3RyaW5nO1xuICBEYXRhPzogYW55O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3VibWl0UmVzcG9uc2Uoc3RhdHVzOiAnU1VDQ0VTUycgfCAnRkFJTEVEJywgZXZlbnQ6IENsb3VkRm9ybWF0aW9uRXZlbnRDb250ZXh0LCBvcHRpb25zOiBDbG91ZEZvcm1hdGlvblJlc3BvbnNlT3B0aW9ucyA9IHsgfSkge1xuICBjb25zdCBqc29uOiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlID0ge1xuICAgIFN0YXR1czogc3RhdHVzLFxuICAgIFJlYXNvbjogb3B0aW9ucy5yZWFzb24gfHwgc3RhdHVzLFxuICAgIFN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gICAgUmVxdWVzdElkOiBldmVudC5SZXF1ZXN0SWQsXG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgfHwgTUlTU0lOR19QSFlTSUNBTF9JRF9NQVJLRVIsXG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIE5vRWNobzogb3B0aW9ucy5ub0VjaG8sXG4gICAgRGF0YTogZXZlbnQuRGF0YSxcbiAgfTtcblxuICBjb25zdCByZXNwb25zZUJvZHkgPSBKU09OLnN0cmluZ2lmeShqc29uKTtcblxuICBjb25zdCBwYXJzZWRVcmwgPSB1cmwucGFyc2UoZXZlbnQuUmVzcG9uc2VVUkwpO1xuICBjb25zdCBsb2dnaW5nU2FmZVVybCA9IGAke3BhcnNlZFVybC5wcm90b2NvbH0vLyR7cGFyc2VkVXJsLmhvc3RuYW1lfS8ke3BhcnNlZFVybC5wYXRobmFtZX0/KioqYDtcbiAgaWYgKG9wdGlvbnM/Lm5vRWNobykge1xuICAgIGxvZygnc3VibWl0IHJlZGFjdGVkIHJlc3BvbnNlIHRvIGNsb3VkZm9ybWF0aW9uJywgbG9nZ2luZ1NhZmVVcmwsIHJlZGFjdERhdGFGcm9tUGF5bG9hZChqc29uKSk7XG4gIH0gZWxzZSB7XG4gICAgbG9nKCdzdWJtaXQgcmVzcG9uc2UgdG8gY2xvdWRmb3JtYXRpb24nLCBsb2dnaW5nU2FmZVVybCwganNvbik7XG4gIH1cblxuICBjb25zdCByZXRyeU9wdGlvbnMgPSB7XG4gICAgYXR0ZW1wdHM6IDUsXG4gICAgc2xlZXA6IDEwMDAsXG4gIH07XG4gIGF3YWl0IHdpdGhSZXRyaWVzKHJldHJ5T3B0aW9ucywgaHR0cFJlcXVlc3QpKHtcbiAgICBob3N0bmFtZTogcGFyc2VkVXJsLmhvc3RuYW1lLFxuICAgIHBhdGg6IHBhcnNlZFVybC5wYXRoLFxuICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICcnLFxuICAgICAgJ2NvbnRlbnQtbGVuZ3RoJzogQnVmZmVyLmJ5dGVMZW5ndGgocmVzcG9uc2VCb2R5LCAndXRmOCcpLFxuICAgIH0sXG4gIH0sIHJlc3BvbnNlQm9keSk7XG59XG5cbmV4cG9ydCBsZXQgaW5jbHVkZVN0YWNrVHJhY2VzID0gdHJ1ZTsgLy8gZm9yIHVuaXQgdGVzdHNcblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVIYW5kbGVyKGJsb2NrOiAoZXZlbnQ6IGFueSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICByZXR1cm4gYXN5bmMgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAvLyBpZ25vcmUgREVMRVRFIGV2ZW50IHdoZW4gdGhlIHBoeXNpY2FsIHJlc291cmNlIElEIGlzIHRoZSBtYXJrZXIgdGhhdFxuICAgIC8vIGluZGljYXRlcyB0aGF0IHRoaXMgREVMRVRFIGlzIGEgc3Vic2VxdWVudCBERUxFVEUgdG8gYSBmYWlsZWQgQ1JFQVRFXG4gICAgLy8gb3BlcmF0aW9uLlxuICAgIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScgJiYgZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkID09PSBDUkVBVEVfRkFJTEVEX1BIWVNJQ0FMX0lEX01BUktFUikge1xuICAgICAgbG9nKCdpZ25vcmluZyBERUxFVEUgZXZlbnQgY2F1c2VkIGJ5IGEgZmFpbGVkIENSRUFURSBldmVudCcpO1xuICAgICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ1NVQ0NFU1MnLCBldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJsb2NrKGV2ZW50KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIHRlbGwgd2FpdGVyIHN0YXRlIG1hY2hpbmUgdG8gcmV0cnlcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgUmV0cnkpIHtcbiAgICAgICAgbG9nKCdyZXRyeSByZXF1ZXN0ZWQgYnkgaGFuZGxlcicpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGlmIENSRUFURSBmYWlscywgd2hpY2ggdXN1YWxseSBpbXBsaWVzLCB3ZSB1c3VhbGx5IGRvbid0XG4gICAgICAgIC8vIGhhdmUgYSBwaHlzaWNhbCByZXNvdXJjZSBpZC4gaW4gdGhpcyBjYXNlLCB0aGUgc3Vic2VxdWVudCBERUxFVEVcbiAgICAgICAgLy8gb3BlcmF0aW9uIGRvZXMgbm90IGhhdmUgYW55IG1lYW5pbmcsIGFuZCB3aWxsIGxpa2VseSBmYWlsIGFzIHdlbGwuIHRvXG4gICAgICAgIC8vIGFkZHJlc3MgdGhpcywgd2UgdXNlIGEgbWFya2VyIHNvIHRoZSBwcm92aWRlciBmcmFtZXdvcmsgY2FuIHNpbXBseVxuICAgICAgICAvLyBpZ25vcmUgdGhlIHN1YnNlcXVlbnQgREVMRVRFLlxuICAgICAgICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdDcmVhdGUnKSB7XG4gICAgICAgICAgbG9nKCdDUkVBVEUgZmFpbGVkLCByZXNwb25kaW5nIHdpdGggYSBtYXJrZXIgcGh5c2ljYWwgcmVzb3VyY2UgaWQgc28gdGhhdCB0aGUgc3Vic2VxdWVudCBERUxFVEUgd2lsbCBiZSBpZ25vcmVkJyk7XG4gICAgICAgICAgZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkID0gQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlLCBpZiBQaHlzaWNhbFJlc291cmNlSWQgaXMgbm90IHNwZWNpZmllZCwgc29tZXRoaW5nIGlzXG4gICAgICAgICAgLy8gdGVycmlibHkgd3JvbmcgYmVjYXVzZSBhbGwgb3RoZXIgZXZlbnRzIHNob3VsZCBoYXZlIGFuIElELlxuICAgICAgICAgIGxvZyhgRVJST1I6IE1hbGZvcm1lZCBldmVudC4gXCJQaHlzaWNhbFJlc291cmNlSWRcIiBpcyByZXF1aXJlZDogJHtKU09OLnN0cmluZ2lmeSh7IC4uLmV2ZW50LCBSZXNwb25zZVVSTDogJy4uLicgfSl9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdGhpcyBpcyBhbiBhY3R1YWwgZXJyb3IsIGZhaWwgdGhlIGFjdGl2aXR5IGFsdG9nZXRoZXIgYW5kIGV4aXN0LlxuICAgICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ0ZBSUxFRCcsIGV2ZW50LCB7XG4gICAgICAgIHJlYXNvbjogaW5jbHVkZVN0YWNrVHJhY2VzID8gZS5zdGFjayA6IGUubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZGFjdERhdGFGcm9tUGF5bG9hZChwYXlsb2FkOiBPbkV2ZW50UmVzcG9uc2UpIHtcbiAgLy8gQ3JlYXRlIGEgZGVlcCBjb3B5IG9mIHRoZSBwYXlsb2FkIG9iamVjdFxuICBjb25zdCByZWRhY3RlZFBheWxvYWQ6IE9uRXZlbnRSZXNwb25zZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xuXG4gIC8vIFJlZGFjdCB0aGUgZGF0YSBpbiB0aGUgY29waWVkIHBheWxvYWQgb2JqZWN0XG4gIGlmIChyZWRhY3RlZFBheWxvYWQuRGF0YSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyZWRhY3RlZFBheWxvYWQuRGF0YSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgcmVkYWN0ZWRQYXlsb2FkLkRhdGFba2V5XSA9ICcqKioqKic7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWRhY3RlZFBheWxvYWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBSZXRyeSBleHRlbmRzIEVycm9yIHsgfVxuIl19
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/consts.js b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/consts.js
new file mode 100644
index 0000000000000..31faa077ae313
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/consts.js
@@ -0,0 +1,10 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.FRAMEWORK_ON_TIMEOUT_HANDLER_NAME = exports.FRAMEWORK_IS_COMPLETE_HANDLER_NAME = exports.FRAMEWORK_ON_EVENT_HANDLER_NAME = exports.WAITER_STATE_MACHINE_ARN_ENV = exports.USER_IS_COMPLETE_FUNCTION_ARN_ENV = exports.USER_ON_EVENT_FUNCTION_ARN_ENV = void 0;
+exports.USER_ON_EVENT_FUNCTION_ARN_ENV = 'USER_ON_EVENT_FUNCTION_ARN';
+exports.USER_IS_COMPLETE_FUNCTION_ARN_ENV = 'USER_IS_COMPLETE_FUNCTION_ARN';
+exports.WAITER_STATE_MACHINE_ARN_ENV = 'WAITER_STATE_MACHINE_ARN';
+exports.FRAMEWORK_ON_EVENT_HANDLER_NAME = 'onEvent';
+exports.FRAMEWORK_IS_COMPLETE_HANDLER_NAME = 'isComplete';
+exports.FRAMEWORK_ON_TIMEOUT_HANDLER_NAME = 'onTimeout';
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsOEJBQThCLEdBQUcsNEJBQTRCLENBQUM7QUFDOUQsUUFBQSxpQ0FBaUMsR0FBRywrQkFBK0IsQ0FBQztBQUNwRSxRQUFBLDRCQUE0QixHQUFHLDBCQUEwQixDQUFDO0FBRTFELFFBQUEsK0JBQStCLEdBQUcsU0FBUyxDQUFDO0FBQzVDLFFBQUEsa0NBQWtDLEdBQUcsWUFBWSxDQUFDO0FBQ2xELFFBQUEsaUNBQWlDLEdBQUcsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFVTRVJfT05fRVZFTlRfRlVOQ1RJT05fQVJOX0VOViA9ICdVU0VSX09OX0VWRU5UX0ZVTkNUSU9OX0FSTic7XG5leHBvcnQgY29uc3QgVVNFUl9JU19DT01QTEVURV9GVU5DVElPTl9BUk5fRU5WID0gJ1VTRVJfSVNfQ09NUExFVEVfRlVOQ1RJT05fQVJOJztcbmV4cG9ydCBjb25zdCBXQUlURVJfU1RBVEVfTUFDSElORV9BUk5fRU5WID0gJ1dBSVRFUl9TVEFURV9NQUNISU5FX0FSTic7XG5cbmV4cG9ydCBjb25zdCBGUkFNRVdPUktfT05fRVZFTlRfSEFORExFUl9OQU1FID0gJ29uRXZlbnQnO1xuZXhwb3J0IGNvbnN0IEZSQU1FV09SS19JU19DT01QTEVURV9IQU5ETEVSX05BTUUgPSAnaXNDb21wbGV0ZSc7XG5leHBvcnQgY29uc3QgRlJBTUVXT1JLX09OX1RJTUVPVVRfSEFORExFUl9OQU1FID0gJ29uVGltZW91dCc7XG4iXX0=
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/framework.js b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/framework.js
new file mode 100644
index 0000000000000..d381e7833f0b7
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/framework.js
@@ -0,0 +1,185 @@
+"use strict";
+/* eslint-disable max-len */
+/* eslint-disable no-console */
+const cfnResponse = require("./cfn-response");
+const consts = require("./consts");
+const outbound_1 = require("./outbound");
+const util_1 = require("./util");
+/**
+ * The main runtime entrypoint of the async custom resource lambda function.
+ *
+ * Any lifecycle event changes to the custom resources will invoke this handler, which will, in turn,
+ * interact with the user-defined `onEvent` and `isComplete` handlers.
+ *
+ * This function will always succeed. If an error occurs, it is logged but an error is not thrown.
+ *
+ * @param cfnRequest The cloudformation custom resource event.
+ */
+async function onEvent(cfnRequest) {
+ const sanitizedRequest = { ...cfnRequest, ResponseURL: '...' };
+ (0, util_1.log)('onEventHandler', sanitizedRequest);
+ cfnRequest.ResourceProperties = cfnRequest.ResourceProperties || {};
+ const onEventResult = await invokeUserFunction(consts.USER_ON_EVENT_FUNCTION_ARN_ENV, sanitizedRequest, cfnRequest.ResponseURL);
+ if (onEventResult?.NoEcho) {
+ (0, util_1.log)('redacted onEvent returned:', cfnResponse.redactDataFromPayload(onEventResult));
+ }
+ else {
+ (0, util_1.log)('onEvent returned:', onEventResult);
+ }
+ // merge the request and the result from onEvent to form the complete resource event
+ // this also performs validation.
+ const resourceEvent = createResponseEvent(cfnRequest, onEventResult);
+ const sanitizedEvent = { ...resourceEvent, ResponseURL: '...' };
+ if (onEventResult?.NoEcho) {
+ (0, util_1.log)('readacted event:', cfnResponse.redactDataFromPayload(sanitizedEvent));
+ }
+ else {
+ (0, util_1.log)('event:', sanitizedEvent);
+ }
+ // determine if this is an async provider based on whether we have an isComplete handler defined.
+ // if it is not defined, then we are basically ready to return a positive response.
+ if (!process.env[consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV]) {
+ return cfnResponse.submitResponse('SUCCESS', resourceEvent, { noEcho: resourceEvent.NoEcho });
+ }
+ // ok, we are not complete, so kick off the waiter workflow
+ const waiter = {
+ stateMachineArn: (0, util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),
+ name: resourceEvent.RequestId,
+ input: JSON.stringify(resourceEvent),
+ };
+ (0, util_1.log)('starting waiter', {
+ stateMachineArn: (0, util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),
+ name: resourceEvent.RequestId,
+ });
+ // kick off waiter state machine
+ await (0, outbound_1.startExecution)(waiter);
+}
+// invoked a few times until `complete` is true or until it times out.
+async function isComplete(event) {
+ const sanitizedRequest = { ...event, ResponseURL: '...' };
+ if (event?.NoEcho) {
+ (0, util_1.log)('redacted isComplete request', cfnResponse.redactDataFromPayload(sanitizedRequest));
+ }
+ else {
+ (0, util_1.log)('isComplete', sanitizedRequest);
+ }
+ const isCompleteResult = await invokeUserFunction(consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV, sanitizedRequest, event.ResponseURL);
+ if (event?.NoEcho) {
+ (0, util_1.log)('redacted user isComplete returned:', cfnResponse.redactDataFromPayload(isCompleteResult));
+ }
+ else {
+ (0, util_1.log)('user isComplete returned:', isCompleteResult);
+ }
+ // if we are not complete, return false, and don't send a response back.
+ if (!isCompleteResult.IsComplete) {
+ if (isCompleteResult.Data && Object.keys(isCompleteResult.Data).length > 0) {
+ throw new Error('"Data" is not allowed if "IsComplete" is "False"');
+ }
+ // This must be the full event, it will be deserialized in `onTimeout` to send the response to CloudFormation
+ throw new cfnResponse.Retry(JSON.stringify(event));
+ }
+ const response = {
+ ...event,
+ ...isCompleteResult,
+ Data: {
+ ...event.Data,
+ ...isCompleteResult.Data,
+ },
+ };
+ await cfnResponse.submitResponse('SUCCESS', response, { noEcho: event.NoEcho });
+}
+// invoked when completion retries are exhaused.
+async function onTimeout(timeoutEvent) {
+ (0, util_1.log)('timeoutHandler', timeoutEvent);
+ const isCompleteRequest = JSON.parse(JSON.parse(timeoutEvent.Cause).errorMessage);
+ await cfnResponse.submitResponse('FAILED', isCompleteRequest, {
+ reason: 'Operation timed out',
+ });
+}
+async function invokeUserFunction(functionArnEnv, sanitizedPayload, responseUrl) {
+ const functionArn = (0, util_1.getEnv)(functionArnEnv);
+ (0, util_1.log)(`executing user function ${functionArn} with payload`, sanitizedPayload);
+ // transient errors such as timeouts, throttling errors (429), and other
+ // errors that aren't caused by a bad request (500 series) are retried
+ // automatically by the JavaScript SDK.
+ const resp = await (0, outbound_1.invokeFunction)({
+ FunctionName: functionArn,
+ // Cannot strip 'ResponseURL' here as this would be a breaking change even though the downstream CR doesn't need it
+ Payload: JSON.stringify({ ...sanitizedPayload, ResponseURL: responseUrl }),
+ });
+ (0, util_1.log)('user function response:', resp, typeof (resp));
+ // ParseJsonPayload is very defensive. It should not be possible for `Payload`
+ // to be anything other than a JSON encoded string (or intarray). Something weird is
+ // going on if that happens. Still, we should do our best to survive it.
+ const jsonPayload = (0, util_1.parseJsonPayload)(resp.Payload);
+ if (resp.FunctionError) {
+ (0, util_1.log)('user function threw an error:', resp.FunctionError);
+ const errorMessage = jsonPayload.errorMessage || 'error';
+ // parse function name from arn
+ // arn:${Partition}:lambda:${Region}:${Account}:function:${FunctionName}
+ const arn = functionArn.split(':');
+ const functionName = arn[arn.length - 1];
+ // append a reference to the log group.
+ const message = [
+ errorMessage,
+ '',
+ `Logs: /aws/lambda/${functionName}`, // cloudwatch log group
+ '',
+ ].join('\n');
+ const e = new Error(message);
+ // the output that goes to CFN is what's in `stack`, not the error message.
+ // if we have a remote trace, construct a nice message with log group information
+ if (jsonPayload.trace) {
+ // skip first trace line because it's the message
+ e.stack = [message, ...jsonPayload.trace.slice(1)].join('\n');
+ }
+ throw e;
+ }
+ return jsonPayload;
+}
+function createResponseEvent(cfnRequest, onEventResult) {
+ //
+ // validate that onEventResult always includes a PhysicalResourceId
+ onEventResult = onEventResult || {};
+ // if physical ID is not returned, we have some defaults for you based
+ // on the request type.
+ const physicalResourceId = onEventResult.PhysicalResourceId || defaultPhysicalResourceId(cfnRequest);
+ // if we are in DELETE and physical ID was changed, it's an error.
+ if (cfnRequest.RequestType === 'Delete' && physicalResourceId !== cfnRequest.PhysicalResourceId) {
+ throw new Error(`DELETE: cannot change the physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}" during deletion`);
+ }
+ // if we are in UPDATE and physical ID was changed, it's a replacement (just log)
+ if (cfnRequest.RequestType === 'Update' && physicalResourceId !== cfnRequest.PhysicalResourceId) {
+ (0, util_1.log)(`UPDATE: changing physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}"`);
+ }
+ // merge request event and result event (result prevails).
+ return {
+ ...cfnRequest,
+ ...onEventResult,
+ PhysicalResourceId: physicalResourceId,
+ };
+}
+/**
+ * Calculates the default physical resource ID based in case user handler did
+ * not return a PhysicalResourceId.
+ *
+ * For "CREATE", it uses the RequestId.
+ * For "UPDATE" and "DELETE" and returns the current PhysicalResourceId (the one provided in `event`).
+ */
+function defaultPhysicalResourceId(req) {
+ switch (req.RequestType) {
+ case 'Create':
+ return req.RequestId;
+ case 'Update':
+ case 'Delete':
+ return req.PhysicalResourceId;
+ default:
+ throw new Error(`Invalid "RequestType" in request "${JSON.stringify(req)}"`);
+ }
+}
+module.exports = {
+ [consts.FRAMEWORK_ON_EVENT_HANDLER_NAME]: cfnResponse.safeHandler(onEvent),
+ [consts.FRAMEWORK_IS_COMPLETE_HANDLER_NAME]: cfnResponse.safeHandler(isComplete),
+ [consts.FRAMEWORK_ON_TIMEOUT_HANDLER_NAME]: onTimeout,
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWV3b3JrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZnJhbWV3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0QkFBNEI7QUFDNUIsK0JBQStCO0FBQy9CLDhDQUE4QztBQUM5QyxtQ0FBbUM7QUFDbkMseUNBQTREO0FBQzVELGlDQUF1RDtBQVV2RDs7Ozs7Ozs7O0dBU0c7QUFDSCxLQUFLLFVBQVUsT0FBTyxDQUFDLFVBQXVEO0lBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFXLENBQUM7SUFDeEUsSUFBQSxVQUFHLEVBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUV4QyxVQUFVLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLGtCQUFrQixJQUFJLEVBQUcsQ0FBQztJQUVyRSxNQUFNLGFBQWEsR0FBRyxNQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFvQixDQUFDO0lBQ25KLElBQUksYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzFCLElBQUEsVUFBRyxFQUFDLDRCQUE0QixFQUFFLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBQSxVQUFHLEVBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELG9GQUFvRjtJQUNwRixpQ0FBaUM7SUFDakMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sY0FBYyxHQUFHLEVBQUUsR0FBRyxhQUFhLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2hFLElBQUksYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzFCLElBQUEsVUFBRyxFQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBQSxVQUFHLEVBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxpR0FBaUc7SUFDakcsbUZBQW1GO0lBQ25GLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLENBQUM7UUFDM0QsT0FBTyxXQUFXLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxNQUFNLE1BQU0sR0FBRztRQUNiLGVBQWUsRUFBRSxJQUFBLGFBQU0sRUFBQyxNQUFNLENBQUMsNEJBQTRCLENBQUM7UUFDNUQsSUFBSSxFQUFFLGFBQWEsQ0FBQyxTQUFTO1FBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztLQUNyQyxDQUFDO0lBRUYsSUFBQSxVQUFHLEVBQUMsaUJBQWlCLEVBQUU7UUFDckIsZUFBZSxFQUFFLElBQUEsYUFBTSxFQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQztRQUM1RCxJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVM7S0FDOUIsQ0FBQyxDQUFDO0lBRUgsZ0NBQWdDO0lBQ2hDLE1BQU0sSUFBQSx5QkFBYyxFQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxzRUFBc0U7QUFDdEUsS0FBSyxVQUFVLFVBQVUsQ0FBQyxLQUFrRDtJQUMxRSxNQUFNLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVyxDQUFDO0lBQ25FLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLElBQUEsVUFBRyxFQUFDLDZCQUE2QixFQUFFLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFBLFVBQUcsRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUF1QixDQUFDO0lBQ3ZKLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLElBQUEsVUFBRyxFQUFDLG9DQUFvQyxFQUFFLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFBLFVBQUcsRUFBQywyQkFBMkIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsNkdBQTZHO1FBQzdHLE1BQU0sSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUc7UUFDZixHQUFHLEtBQUs7UUFDUixHQUFHLGdCQUFnQjtRQUNuQixJQUFJLEVBQUU7WUFDSixHQUFHLEtBQUssQ0FBQyxJQUFJO1lBQ2IsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJO1NBQ3pCO0tBQ0YsQ0FBQztJQUVGLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGLENBQUM7QUFFRCxnREFBZ0Q7QUFDaEQsS0FBSyxVQUFVLFNBQVMsQ0FBQyxZQUFpQjtJQUN4QyxJQUFBLFVBQUcsRUFBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVwQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFnRCxDQUFDO0lBQ2pJLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7UUFDNUQsTUFBTSxFQUFFLHFCQUFxQjtLQUM5QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsS0FBSyxVQUFVLGtCQUFrQixDQUFtQyxjQUFzQixFQUFFLGdCQUFtQixFQUFFLFdBQW1CO0lBQ2xJLE1BQU0sV0FBVyxHQUFHLElBQUEsYUFBTSxFQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNDLElBQUEsVUFBRyxFQUFDLDJCQUEyQixXQUFXLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTdFLHdFQUF3RTtJQUN4RSxzRUFBc0U7SUFDdEUsdUNBQXVDO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSx5QkFBYyxFQUFDO1FBQ2hDLFlBQVksRUFBRSxXQUFXO1FBRXpCLG1IQUFtSDtRQUNuSCxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO0tBQzNFLENBQUMsQ0FBQztJQUVILElBQUEsVUFBRyxFQUFDLHlCQUF5QixFQUFFLElBQUksRUFBRSxPQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVuRCw4RUFBOEU7SUFDOUUsb0ZBQW9GO0lBQ3BGLHdFQUF3RTtJQUN4RSxNQUFNLFdBQVcsR0FBRyxJQUFBLHVCQUFnQixFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixJQUFBLFVBQUcsRUFBQywrQkFBK0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFekQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUM7UUFFekQsK0JBQStCO1FBQy9CLHdFQUF3RTtRQUN4RSxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXpDLHVDQUF1QztRQUN2QyxNQUFNLE9BQU8sR0FBRztZQUNkLFlBQVk7WUFDWixFQUFFO1lBQ0YscUJBQXFCLFlBQVksRUFBRSxFQUFFLHVCQUF1QjtZQUM1RCxFQUFFO1NBQ0gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFYixNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QiwyRUFBMkU7UUFDM0UsaUZBQWlGO1FBQ2pGLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RCLGlEQUFpRDtZQUNqRCxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELE1BQU0sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLFVBQXVELEVBQUUsYUFBOEI7SUFDbEgsRUFBRTtJQUNGLG1FQUFtRTtJQUVuRSxhQUFhLEdBQUcsYUFBYSxJQUFJLEVBQUcsQ0FBQztJQUVyQyxzRUFBc0U7SUFDdEUsdUJBQXVCO0lBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixJQUFJLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXJHLGtFQUFrRTtJQUNsRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLGtCQUFrQixLQUFLLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2hHLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELFVBQVUsQ0FBQyxrQkFBa0IsU0FBUyxhQUFhLENBQUMsa0JBQWtCLG1CQUFtQixDQUFDLENBQUM7SUFDckssQ0FBQztJQUVELGlGQUFpRjtJQUNqRixJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLGtCQUFrQixLQUFLLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2hHLElBQUEsVUFBRyxFQUFDLCtDQUErQyxVQUFVLENBQUMsa0JBQWtCLFNBQVMsYUFBYSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztJQUNoSSxDQUFDO0lBRUQsMERBQTBEO0lBQzFELE9BQU87UUFDTCxHQUFHLFVBQVU7UUFDYixHQUFHLGFBQWE7UUFDaEIsa0JBQWtCLEVBQUUsa0JBQWtCO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxHQUFnRDtJQUNqRixRQUFRLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QixLQUFLLFFBQVE7WUFDWCxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFFdkIsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFFBQVE7WUFDWCxPQUFPLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztRQUVoQztZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7QUFDSCxDQUFDO0FBak5ELGlCQUFTO0lBQ1AsQ0FBQyxNQUFNLENBQUMsK0JBQStCLENBQUMsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUMxRSxDQUFDLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO0lBQ2hGLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLEVBQUUsU0FBUztDQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0ICogYXMgY2ZuUmVzcG9uc2UgZnJvbSAnLi9jZm4tcmVzcG9uc2UnO1xuaW1wb3J0ICogYXMgY29uc3RzIGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IGludm9rZUZ1bmN0aW9uLCBzdGFydEV4ZWN1dGlvbiB9IGZyb20gJy4vb3V0Ym91bmQnO1xuaW1wb3J0IHsgZ2V0RW52LCBsb2csIHBhcnNlSnNvblBheWxvYWQgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgSXNDb21wbGV0ZVJlc3BvbnNlLCBPbkV2ZW50UmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vIHVzZSBjb25zdHMgZm9yIGhhbmRsZXIgbmFtZXMgdG8gY29tcGlsZXItZW5mb3JjZSB0aGUgY291cGxpbmcgd2l0aCBjb25zdHJ1Y3Rpb24gY29kZS5cbmV4cG9ydCA9IHtcbiAgW2NvbnN0cy5GUkFNRVdPUktfT05fRVZFTlRfSEFORExFUl9OQU1FXTogY2ZuUmVzcG9uc2Uuc2FmZUhhbmRsZXIob25FdmVudCksXG4gIFtjb25zdHMuRlJBTUVXT1JLX0lTX0NPTVBMRVRFX0hBTkRMRVJfTkFNRV06IGNmblJlc3BvbnNlLnNhZmVIYW5kbGVyKGlzQ29tcGxldGUpLFxuICBbY29uc3RzLkZSQU1FV09SS19PTl9USU1FT1VUX0hBTkRMRVJfTkFNRV06IG9uVGltZW91dCxcbn07XG5cbi8qKlxuICogVGhlIG1haW4gcnVudGltZSBlbnRyeXBvaW50IG9mIHRoZSBhc3luYyBjdXN0b20gcmVzb3VyY2UgbGFtYmRhIGZ1bmN0aW9uLlxuICpcbiAqIEFueSBsaWZlY3ljbGUgZXZlbnQgY2hhbmdlcyB0byB0aGUgY3VzdG9tIHJlc291cmNlcyB3aWxsIGludm9rZSB0aGlzIGhhbmRsZXIsIHdoaWNoIHdpbGwsIGluIHR1cm4sXG4gKiBpbnRlcmFjdCB3aXRoIHRoZSB1c2VyLWRlZmluZWQgYG9uRXZlbnRgIGFuZCBgaXNDb21wbGV0ZWAgaGFuZGxlcnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsd2F5cyBzdWNjZWVkLiBJZiBhbiBlcnJvciBvY2N1cnMsIGl0IGlzIGxvZ2dlZCBidXQgYW4gZXJyb3IgaXMgbm90IHRocm93bi5cbiAqXG4gKiBAcGFyYW0gY2ZuUmVxdWVzdCBUaGUgY2xvdWRmb3JtYXRpb24gY3VzdG9tIHJlc291cmNlIGV2ZW50LlxuICovXG5hc3luYyBmdW5jdGlvbiBvbkV2ZW50KGNmblJlcXVlc3Q6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQpIHtcbiAgY29uc3Qgc2FuaXRpemVkUmVxdWVzdCA9IHsgLi4uY2ZuUmVxdWVzdCwgUmVzcG9uc2VVUkw6ICcuLi4nIH0gYXMgY29uc3Q7XG4gIGxvZygnb25FdmVudEhhbmRsZXInLCBzYW5pdGl6ZWRSZXF1ZXN0KTtcblxuICBjZm5SZXF1ZXN0LlJlc291cmNlUHJvcGVydGllcyA9IGNmblJlcXVlc3QuUmVzb3VyY2VQcm9wZXJ0aWVzIHx8IHsgfTtcblxuICBjb25zdCBvbkV2ZW50UmVzdWx0ID0gYXdhaXQgaW52b2tlVXNlckZ1bmN0aW9uKGNvbnN0cy5VU0VSX09OX0VWRU5UX0ZVTkNUSU9OX0FSTl9FTlYsIHNhbml0aXplZFJlcXVlc3QsIGNmblJlcXVlc3QuUmVzcG9uc2VVUkwpIGFzIE9uRXZlbnRSZXNwb25zZTtcbiAgaWYgKG9uRXZlbnRSZXN1bHQ/Lk5vRWNobykge1xuICAgIGxvZygncmVkYWN0ZWQgb25FdmVudCByZXR1cm5lZDonLCBjZm5SZXNwb25zZS5yZWRhY3REYXRhRnJvbVBheWxvYWQob25FdmVudFJlc3VsdCkpO1xuICB9IGVsc2Uge1xuICAgIGxvZygnb25FdmVudCByZXR1cm5lZDonLCBvbkV2ZW50UmVzdWx0KTtcbiAgfVxuXG4gIC8vIG1lcmdlIHRoZSByZXF1ZXN0IGFuZCB0aGUgcmVzdWx0IGZyb20gb25FdmVudCB0byBmb3JtIHRoZSBjb21wbGV0ZSByZXNvdXJjZSBldmVudFxuICAvLyB0aGlzIGFsc28gcGVyZm9ybXMgdmFsaWRhdGlvbi5cbiAgY29uc3QgcmVzb3VyY2VFdmVudCA9IGNyZWF0ZVJlc3BvbnNlRXZlbnQoY2ZuUmVxdWVzdCwgb25FdmVudFJlc3VsdCk7XG4gIGNvbnN0IHNhbml0aXplZEV2ZW50ID0geyAuLi5yZXNvdXJjZUV2ZW50LCBSZXNwb25zZVVSTDogJy4uLicgfTtcbiAgaWYgKG9uRXZlbnRSZXN1bHQ/Lk5vRWNobykge1xuICAgIGxvZygncmVhZGFjdGVkIGV2ZW50OicsIGNmblJlc3BvbnNlLnJlZGFjdERhdGFGcm9tUGF5bG9hZChzYW5pdGl6ZWRFdmVudCkpO1xuICB9IGVsc2Uge1xuICAgIGxvZygnZXZlbnQ6Jywgc2FuaXRpemVkRXZlbnQpO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYW4gYXN5bmMgcHJvdmlkZXIgYmFzZWQgb24gd2hldGhlciB3ZSBoYXZlIGFuIGlzQ29tcGxldGUgaGFuZGxlciBkZWZpbmVkLlxuICAvLyBpZiBpdCBpcyBub3QgZGVmaW5lZCwgdGhlbiB3ZSBhcmUgYmFzaWNhbGx5IHJlYWR5IHRvIHJldHVybiBhIHBvc2l0aXZlIHJlc3BvbnNlLlxuICBpZiAoIXByb2Nlc3MuZW52W2NvbnN0cy5VU0VSX0lTX0NPTVBMRVRFX0ZVTkNUSU9OX0FSTl9FTlZdKSB7XG4gICAgcmV0dXJuIGNmblJlc3BvbnNlLnN1Ym1pdFJlc3BvbnNlKCdTVUNDRVNTJywgcmVzb3VyY2VFdmVudCwgeyBub0VjaG86IHJlc291cmNlRXZlbnQuTm9FY2hvIH0pO1xuICB9XG5cbiAgLy8gb2ssIHdlIGFyZSBub3QgY29tcGxldGUsIHNvIGtpY2sgb2ZmIHRoZSB3YWl0ZXIgd29ya2Zsb3dcbiAgY29uc3Qgd2FpdGVyID0ge1xuICAgIHN0YXRlTWFjaGluZUFybjogZ2V0RW52KGNvbnN0cy5XQUlURVJfU1RBVEVfTUFDSElORV9BUk5fRU5WKSxcbiAgICBuYW1lOiByZXNvdXJjZUV2ZW50LlJlcXVlc3RJZCxcbiAgICBpbnB1dDogSlNPTi5zdHJpbmdpZnkocmVzb3VyY2VFdmVudCksXG4gIH07XG5cbiAgbG9nKCdzdGFydGluZyB3YWl0ZXInLCB7XG4gICAgc3RhdGVNYWNoaW5lQXJuOiBnZXRFbnYoY29uc3RzLldBSVRFUl9TVEFURV9NQUNISU5FX0FSTl9FTlYpLFxuICAgIG5hbWU6IHJlc291cmNlRXZlbnQuUmVxdWVzdElkLFxuICB9KTtcblxuICAvLyBraWNrIG9mZiB3YWl0ZXIgc3RhdGUgbWFjaGluZVxuICBhd2FpdCBzdGFydEV4ZWN1dGlvbih3YWl0ZXIpO1xufVxuXG4vLyBpbnZva2VkIGEgZmV3IHRpbWVzIHVudGlsIGBjb21wbGV0ZWAgaXMgdHJ1ZSBvciB1bnRpbCBpdCB0aW1lcyBvdXQuXG5hc3luYyBmdW5jdGlvbiBpc0NvbXBsZXRlKGV2ZW50OiBBV1NDREtBc3luY0N1c3RvbVJlc291cmNlLklzQ29tcGxldGVSZXF1ZXN0KSB7XG4gIGNvbnN0IHNhbml0aXplZFJlcXVlc3QgPSB7IC4uLmV2ZW50LCBSZXNwb25zZVVSTDogJy4uLicgfSBhcyBjb25zdDtcbiAgaWYgKGV2ZW50Py5Ob0VjaG8pIHtcbiAgICBsb2coJ3JlZGFjdGVkIGlzQ29tcGxldGUgcmVxdWVzdCcsIGNmblJlc3BvbnNlLnJlZGFjdERhdGFGcm9tUGF5bG9hZChzYW5pdGl6ZWRSZXF1ZXN0KSk7XG4gIH0gZWxzZSB7XG4gICAgbG9nKCdpc0NvbXBsZXRlJywgc2FuaXRpemVkUmVxdWVzdCk7XG4gIH1cblxuICBjb25zdCBpc0NvbXBsZXRlUmVzdWx0ID0gYXdhaXQgaW52b2tlVXNlckZ1bmN0aW9uKGNvbnN0cy5VU0VSX0lTX0NPTVBMRVRFX0ZVTkNUSU9OX0FSTl9FTlYsIHNhbml0aXplZFJlcXVlc3QsIGV2ZW50LlJlc3BvbnNlVVJMKSBhcyBJc0NvbXBsZXRlUmVzcG9uc2U7XG4gIGlmIChldmVudD8uTm9FY2hvKSB7XG4gICAgbG9nKCdyZWRhY3RlZCB1c2VyIGlzQ29tcGxldGUgcmV0dXJuZWQ6JywgY2ZuUmVzcG9uc2UucmVkYWN0RGF0YUZyb21QYXlsb2FkKGlzQ29tcGxldGVSZXN1bHQpKTtcbiAgfSBlbHNlIHtcbiAgICBsb2coJ3VzZXIgaXNDb21wbGV0ZSByZXR1cm5lZDonLCBpc0NvbXBsZXRlUmVzdWx0KTtcbiAgfVxuXG4gIC8vIGlmIHdlIGFyZSBub3QgY29tcGxldGUsIHJldHVybiBmYWxzZSwgYW5kIGRvbid0IHNlbmQgYSByZXNwb25zZSBiYWNrLlxuICBpZiAoIWlzQ29tcGxldGVSZXN1bHQuSXNDb21wbGV0ZSkge1xuICAgIGlmIChpc0NvbXBsZXRlUmVzdWx0LkRhdGEgJiYgT2JqZWN0LmtleXMoaXNDb21wbGV0ZVJlc3VsdC5EYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiRGF0YVwiIGlzIG5vdCBhbGxvd2VkIGlmIFwiSXNDb21wbGV0ZVwiIGlzIFwiRmFsc2VcIicpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbXVzdCBiZSB0aGUgZnVsbCBldmVudCwgaXQgd2lsbCBiZSBkZXNlcmlhbGl6ZWQgaW4gYG9uVGltZW91dGAgdG8gc2VuZCB0aGUgcmVzcG9uc2UgdG8gQ2xvdWRGb3JtYXRpb25cbiAgICB0aHJvdyBuZXcgY2ZuUmVzcG9uc2UuUmV0cnkoSlNPTi5zdHJpbmdpZnkoZXZlbnQpKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgIC4uLmV2ZW50LFxuICAgIC4uLmlzQ29tcGxldGVSZXN1bHQsXG4gICAgRGF0YToge1xuICAgICAgLi4uZXZlbnQuRGF0YSxcbiAgICAgIC4uLmlzQ29tcGxldGVSZXN1bHQuRGF0YSxcbiAgICB9LFxuICB9O1xuXG4gIGF3YWl0IGNmblJlc3BvbnNlLnN1Ym1pdFJlc3BvbnNlKCdTVUNDRVNTJywgcmVzcG9uc2UsIHsgbm9FY2hvOiBldmVudC5Ob0VjaG8gfSk7XG59XG5cbi8vIGludm9rZWQgd2hlbiBjb21wbGV0aW9uIHJldHJpZXMgYXJlIGV4aGF1c2VkLlxuYXN5bmMgZnVuY3Rpb24gb25UaW1lb3V0KHRpbWVvdXRFdmVudDogYW55KSB7XG4gIGxvZygndGltZW91dEhhbmRsZXInLCB0aW1lb3V0RXZlbnQpO1xuXG4gIGNvbnN0IGlzQ29tcGxldGVSZXF1ZXN0ID0gSlNPTi5wYXJzZShKU09OLnBhcnNlKHRpbWVvdXRFdmVudC5DYXVzZSkuZXJyb3JNZXNzYWdlKSBhcyBBV1NDREtBc3luY0N1c3RvbVJlc291cmNlLklzQ29tcGxldGVSZXF1ZXN0O1xuICBhd2FpdCBjZm5SZXNwb25zZS5zdWJtaXRSZXNwb25zZSgnRkFJTEVEJywgaXNDb21wbGV0ZVJlcXVlc3QsIHtcbiAgICByZWFzb246ICdPcGVyYXRpb24gdGltZWQgb3V0JyxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGludm9rZVVzZXJGdW5jdGlvbjxBIGV4dGVuZHMgeyBSZXNwb25zZVVSTDogJy4uLicgfT4oZnVuY3Rpb25Bcm5FbnY6IHN0cmluZywgc2FuaXRpemVkUGF5bG9hZDogQSwgcmVzcG9uc2VVcmw6IHN0cmluZykge1xuICBjb25zdCBmdW5jdGlvbkFybiA9IGdldEVudihmdW5jdGlvbkFybkVudik7XG4gIGxvZyhgZXhlY3V0aW5nIHVzZXIgZnVuY3Rpb24gJHtmdW5jdGlvbkFybn0gd2l0aCBwYXlsb2FkYCwgc2FuaXRpemVkUGF5bG9hZCk7XG5cbiAgLy8gdHJhbnNpZW50IGVycm9ycyBzdWNoIGFzIHRpbWVvdXRzLCB0aHJvdHRsaW5nIGVycm9ycyAoNDI5KSwgYW5kIG90aGVyXG4gIC8vIGVycm9ycyB0aGF0IGFyZW4ndCBjYXVzZWQgYnkgYSBiYWQgcmVxdWVzdCAoNTAwIHNlcmllcykgYXJlIHJldHJpZWRcbiAgLy8gYXV0b21hdGljYWxseSBieSB0aGUgSmF2YVNjcmlwdCBTREsuXG4gIGNvbnN0IHJlc3AgPSBhd2FpdCBpbnZva2VGdW5jdGlvbih7XG4gICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbkFybixcblxuICAgIC8vIENhbm5vdCBzdHJpcCAnUmVzcG9uc2VVUkwnIGhlcmUgYXMgdGhpcyB3b3VsZCBiZSBhIGJyZWFraW5nIGNoYW5nZSBldmVuIHRob3VnaCB0aGUgZG93bnN0cmVhbSBDUiBkb2Vzbid0IG5lZWQgaXRcbiAgICBQYXlsb2FkOiBKU09OLnN0cmluZ2lmeSh7IC4uLnNhbml0aXplZFBheWxvYWQsIFJlc3BvbnNlVVJMOiByZXNwb25zZVVybCB9KSxcbiAgfSk7XG5cbiAgbG9nKCd1c2VyIGZ1bmN0aW9uIHJlc3BvbnNlOicsIHJlc3AsIHR5cGVvZihyZXNwKSk7XG5cbiAgLy8gUGFyc2VKc29uUGF5bG9hZCBpcyB2ZXJ5IGRlZmVuc2l2ZS4gSXQgc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSBmb3IgYFBheWxvYWRgXG4gIC8vIHRvIGJlIGFueXRoaW5nIG90aGVyIHRoYW4gYSBKU09OIGVuY29kZWQgc3RyaW5nIChvciBpbnRhcnJheSkuIFNvbWV0aGluZyB3ZWlyZCBpc1xuICAvLyBnb2luZyBvbiBpZiB0aGF0IGhhcHBlbnMuIFN0aWxsLCB3ZSBzaG91bGQgZG8gb3VyIGJlc3QgdG8gc3Vydml2ZSBpdC5cbiAgY29uc3QganNvblBheWxvYWQgPSBwYXJzZUpzb25QYXlsb2FkKHJlc3AuUGF5bG9hZCk7XG4gIGlmIChyZXNwLkZ1bmN0aW9uRXJyb3IpIHtcbiAgICBsb2coJ3VzZXIgZnVuY3Rpb24gdGhyZXcgYW4gZXJyb3I6JywgcmVzcC5GdW5jdGlvbkVycm9yKTtcblxuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGpzb25QYXlsb2FkLmVycm9yTWVzc2FnZSB8fCAnZXJyb3InO1xuXG4gICAgLy8gcGFyc2UgZnVuY3Rpb24gbmFtZSBmcm9tIGFyblxuICAgIC8vIGFybjoke1BhcnRpdGlvbn06bGFtYmRhOiR7UmVnaW9ufToke0FjY291bnR9OmZ1bmN0aW9uOiR7RnVuY3Rpb25OYW1lfVxuICAgIGNvbnN0IGFybiA9IGZ1bmN0aW9uQXJuLnNwbGl0KCc6Jyk7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYXJuW2Fybi5sZW5ndGggLSAxXTtcblxuICAgIC8vIGFwcGVuZCBhIHJlZmVyZW5jZSB0byB0aGUgbG9nIGdyb3VwLlxuICAgIGNvbnN0IG1lc3NhZ2UgPSBbXG4gICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAnJyxcbiAgICAgIGBMb2dzOiAvYXdzL2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gLCAvLyBjbG91ZHdhdGNoIGxvZyBncm91cFxuICAgICAgJycsXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG5cbiAgICAvLyB0aGUgb3V0cHV0IHRoYXQgZ29lcyB0byBDRk4gaXMgd2hhdCdzIGluIGBzdGFja2AsIG5vdCB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICAvLyBpZiB3ZSBoYXZlIGEgcmVtb3RlIHRyYWNlLCBjb25zdHJ1Y3QgYSBuaWNlIG1lc3NhZ2Ugd2l0aCBsb2cgZ3JvdXAgaW5mb3JtYXRpb25cbiAgICBpZiAoanNvblBheWxvYWQudHJhY2UpIHtcbiAgICAgIC8vIHNraXAgZmlyc3QgdHJhY2UgbGluZSBiZWNhdXNlIGl0J3MgdGhlIG1lc3NhZ2VcbiAgICAgIGUuc3RhY2sgPSBbbWVzc2FnZSwgLi4uanNvblBheWxvYWQudHJhY2Uuc2xpY2UoMSldLmpvaW4oJ1xcbicpO1xuICAgIH1cblxuICAgIHRocm93IGU7XG4gIH1cblxuICByZXR1cm4ganNvblBheWxvYWQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlRXZlbnQoY2ZuUmVxdWVzdDogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgb25FdmVudFJlc3VsdDogT25FdmVudFJlc3BvbnNlKTogQVdTQ0RLQXN5bmNDdXN0b21SZXNvdXJjZS5Jc0NvbXBsZXRlUmVxdWVzdCB7XG4gIC8vXG4gIC8vIHZhbGlkYXRlIHRoYXQgb25FdmVudFJlc3VsdCBhbHdheXMgaW5jbHVkZXMgYSBQaHlzaWNhbFJlc291cmNlSWRcblxuICBvbkV2ZW50UmVzdWx0ID0gb25FdmVudFJlc3VsdCB8fCB7IH07XG5cbiAgLy8gaWYgcGh5c2ljYWwgSUQgaXMgbm90IHJldHVybmVkLCB3ZSBoYXZlIHNvbWUgZGVmYXVsdHMgZm9yIHlvdSBiYXNlZFxuICAvLyBvbiB0aGUgcmVxdWVzdCB0eXBlLlxuICBjb25zdCBwaHlzaWNhbFJlc291cmNlSWQgPSBvbkV2ZW50UmVzdWx0LlBoeXNpY2FsUmVzb3VyY2VJZCB8fCBkZWZhdWx0UGh5c2ljYWxSZXNvdXJjZUlkKGNmblJlcXVlc3QpO1xuXG4gIC8vIGlmIHdlIGFyZSBpbiBERUxFVEUgYW5kIHBoeXNpY2FsIElEIHdhcyBjaGFuZ2VkLCBpdCdzIGFuIGVycm9yLlxuICBpZiAoY2ZuUmVxdWVzdC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScgJiYgcGh5c2ljYWxSZXNvdXJjZUlkICE9PSBjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgREVMRVRFOiBjYW5ub3QgY2hhbmdlIHRoZSBwaHlzaWNhbCByZXNvdXJjZSBJRCBmcm9tIFwiJHtjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZH1cIiB0byBcIiR7b25FdmVudFJlc3VsdC5QaHlzaWNhbFJlc291cmNlSWR9XCIgZHVyaW5nIGRlbGV0aW9uYCk7XG4gIH1cblxuICAvLyBpZiB3ZSBhcmUgaW4gVVBEQVRFIGFuZCBwaHlzaWNhbCBJRCB3YXMgY2hhbmdlZCwgaXQncyBhIHJlcGxhY2VtZW50IChqdXN0IGxvZylcbiAgaWYgKGNmblJlcXVlc3QuUmVxdWVzdFR5cGUgPT09ICdVcGRhdGUnICYmIHBoeXNpY2FsUmVzb3VyY2VJZCAhPT0gY2ZuUmVxdWVzdC5QaHlzaWNhbFJlc291cmNlSWQpIHtcbiAgICBsb2coYFVQREFURTogY2hhbmdpbmcgcGh5c2ljYWwgcmVzb3VyY2UgSUQgZnJvbSBcIiR7Y2ZuUmVxdWVzdC5QaHlzaWNhbFJlc291cmNlSWR9XCIgdG8gXCIke29uRXZlbnRSZXN1bHQuUGh5c2ljYWxSZXNvdXJjZUlkfVwiYCk7XG4gIH1cblxuICAvLyBtZXJnZSByZXF1ZXN0IGV2ZW50IGFuZCByZXN1bHQgZXZlbnQgKHJlc3VsdCBwcmV2YWlscykuXG4gIHJldHVybiB7XG4gICAgLi4uY2ZuUmVxdWVzdCxcbiAgICAuLi5vbkV2ZW50UmVzdWx0LFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogcGh5c2ljYWxSZXNvdXJjZUlkLFxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGRlZmF1bHQgcGh5c2ljYWwgcmVzb3VyY2UgSUQgYmFzZWQgaW4gY2FzZSB1c2VyIGhhbmRsZXIgZGlkXG4gKiBub3QgcmV0dXJuIGEgUGh5c2ljYWxSZXNvdXJjZUlkLlxuICpcbiAqIEZvciBcIkNSRUFURVwiLCBpdCB1c2VzIHRoZSBSZXF1ZXN0SWQuXG4gKiBGb3IgXCJVUERBVEVcIiBhbmQgXCJERUxFVEVcIiBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBQaHlzaWNhbFJlc291cmNlSWQgKHRoZSBvbmUgcHJvdmlkZWQgaW4gYGV2ZW50YCkuXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRQaHlzaWNhbFJlc291cmNlSWQocmVxOiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50KTogc3RyaW5nIHtcbiAgc3dpdGNoIChyZXEuUmVxdWVzdFR5cGUpIHtcbiAgICBjYXNlICdDcmVhdGUnOlxuICAgICAgcmV0dXJuIHJlcS5SZXF1ZXN0SWQ7XG5cbiAgICBjYXNlICdVcGRhdGUnOlxuICAgIGNhc2UgJ0RlbGV0ZSc6XG4gICAgICByZXR1cm4gcmVxLlBoeXNpY2FsUmVzb3VyY2VJZDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgXCJSZXF1ZXN0VHlwZVwiIGluIHJlcXVlc3QgXCIke0pTT04uc3RyaW5naWZ5KHJlcSl9XCJgKTtcbiAgfVxufVxuIl19
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/outbound.js b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/outbound.js
new file mode 100644
index 0000000000000..110a420ec64c5
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/outbound.js
@@ -0,0 +1,83 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.httpRequest = exports.invokeFunction = exports.startExecution = void 0;
+/* istanbul ignore file */
+const https = require("https");
+// eslint-disable-next-line import/no-extraneous-dependencies
+const client_lambda_1 = require("@aws-sdk/client-lambda");
+// eslint-disable-next-line import/no-extraneous-dependencies
+const client_sfn_1 = require("@aws-sdk/client-sfn");
+// eslint-disable-next-line import/no-extraneous-dependencies
+const FRAMEWORK_HANDLER_TIMEOUT = 900000; // 15 minutes
+// In order to honor the overall maximum timeout set for the target process,
+// the default 2 minutes from AWS SDK has to be overriden:
+// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#httpOptions-property
+const awsSdkConfig = {
+ httpOptions: { timeout: FRAMEWORK_HANDLER_TIMEOUT },
+};
+async function defaultHttpRequest(options, requestBody) {
+ return new Promise((resolve, reject) => {
+ try {
+ const request = https.request(options, (response) => {
+ response.resume(); // Consume the response but don't care about it
+ if (!response.statusCode || response.statusCode >= 400) {
+ reject(new Error(`Unsuccessful HTTP response: ${response.statusCode}`));
+ }
+ else {
+ resolve();
+ }
+ });
+ request.on('error', reject);
+ request.write(requestBody);
+ request.end();
+ }
+ catch (e) {
+ reject(e);
+ }
+ });
+}
+let sfn;
+let lambda;
+async function defaultStartExecution(req) {
+ if (!sfn) {
+ sfn = new client_sfn_1.SFN(awsSdkConfig);
+ }
+ return sfn.startExecution(req);
+}
+async function defaultInvokeFunction(req) {
+ if (!lambda) {
+ lambda = new client_lambda_1.Lambda(awsSdkConfig);
+ }
+ try {
+ /**
+ * Try an initial invoke.
+ *
+ * When you try to invoke a function that is inactive, the invocation fails and Lambda sets
+ * the function to pending state until the function resources are recreated.
+ * If Lambda fails to recreate the resources, the function is set to the inactive state.
+ *
+ * We're using invoke first because `waitFor` doesn't trigger an inactive function to do anything,
+ * it just runs `getFunction` and checks the state.
+ */
+ return await lambda.invoke(req);
+ }
+ catch {
+ /**
+ * The status of the Lambda function is checked every second for up to 300 seconds.
+ * Exits the loop on 'Active' state and throws an error on 'Inactive' or 'Failed'.
+ *
+ * And now we wait.
+ */
+ await (0, client_lambda_1.waitUntilFunctionActiveV2)({
+ client: lambda,
+ maxWaitTime: 300,
+ }, {
+ FunctionName: req.FunctionName,
+ });
+ return lambda.invoke(req);
+ }
+}
+exports.startExecution = defaultStartExecution;
+exports.invokeFunction = defaultInvokeFunction;
+exports.httpRequest = defaultHttpRequest;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvdXRib3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQkFBMEI7QUFDMUIsK0JBQStCO0FBQy9CLDZEQUE2RDtBQUM3RCwwREFBbUg7QUFDbkgsNkRBQTZEO0FBQzdELG9EQUFxRjtBQUNyRiw2REFBNkQ7QUFFN0QsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxhQUFhO0FBRXZELDRFQUE0RTtBQUM1RSwwREFBMEQ7QUFDMUQsMkZBQTJGO0FBQzNGLE1BQU0sWUFBWSxHQUFHO0lBQ25CLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRTtDQUNwRCxDQUFDO0FBRUYsS0FBSyxVQUFVLGtCQUFrQixDQUFDLE9BQTZCLEVBQUUsV0FBbUI7SUFDbEYsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMzQyxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNsRCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQywrQ0FBK0M7Z0JBQ2xFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxVQUFVLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ3ZELE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywrQkFBK0IsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDMUUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELElBQUksR0FBUSxDQUFDO0FBQ2IsSUFBSSxNQUFjLENBQUM7QUFFbkIsS0FBSyxVQUFVLHFCQUFxQixDQUFDLEdBQXdCO0lBQzNELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULEdBQUcsR0FBRyxJQUFJLGdCQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsS0FBSyxVQUFVLHFCQUFxQixDQUFDLEdBQXVCO0lBQzFELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sR0FBRyxJQUFJLHNCQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksQ0FBQztRQUNIOzs7Ozs7Ozs7V0FTRztRQUNILE9BQU8sTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUDs7Ozs7V0FLRztRQUNILE1BQU0sSUFBQSx5Q0FBeUIsRUFBQztZQUM5QixNQUFNLEVBQUUsTUFBTTtZQUNkLFdBQVcsRUFBRSxHQUFHO1NBQ2pCLEVBQUU7WUFDRCxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7U0FDL0IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7QUFDSCxDQUFDO0FBRVUsUUFBQSxjQUFjLEdBQUcscUJBQXFCLENBQUM7QUFDdkMsUUFBQSxjQUFjLEdBQUcscUJBQXFCLENBQUM7QUFDdkMsUUFBQSxXQUFXLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHsgTGFtYmRhLCB3YWl0VW50aWxGdW5jdGlvbkFjdGl2ZVYyLCBJbnZvY2F0aW9uUmVzcG9uc2UsIEludm9rZUNvbW1hbmRJbnB1dCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1sYW1iZGEnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHsgU0ZOLCBTdGFydEV4ZWN1dGlvbklucHV0LCBTdGFydEV4ZWN1dGlvbk91dHB1dCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZm4nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuXG5jb25zdCBGUkFNRVdPUktfSEFORExFUl9USU1FT1VUID0gOTAwMDAwOyAvLyAxNSBtaW51dGVzXG5cbi8vIEluIG9yZGVyIHRvIGhvbm9yIHRoZSBvdmVyYWxsIG1heGltdW0gdGltZW91dCBzZXQgZm9yIHRoZSB0YXJnZXQgcHJvY2Vzcyxcbi8vIHRoZSBkZWZhdWx0IDIgbWludXRlcyBmcm9tIEFXUyBTREsgaGFzIHRvIGJlIG92ZXJyaWRlbjpcbi8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvQ29uZmlnLmh0bWwjaHR0cE9wdGlvbnMtcHJvcGVydHlcbmNvbnN0IGF3c1Nka0NvbmZpZyA9IHtcbiAgaHR0cE9wdGlvbnM6IHsgdGltZW91dDogRlJBTUVXT1JLX0hBTkRMRVJfVElNRU9VVCB9LFxufTtcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEh0dHBSZXF1ZXN0KG9wdGlvbnM6IGh0dHBzLlJlcXVlc3RPcHRpb25zLCByZXF1ZXN0Qm9keTogc3RyaW5nKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICByZXNwb25zZS5yZXN1bWUoKTsgLy8gQ29uc3VtZSB0aGUgcmVzcG9uc2UgYnV0IGRvbid0IGNhcmUgYWJvdXQgaXRcbiAgICAgICAgaWYgKCFyZXNwb25zZS5zdGF0dXNDb2RlIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgVW5zdWNjZXNzZnVsIEhUVFAgcmVzcG9uc2U6ICR7cmVzcG9uc2Uuc3RhdHVzQ29kZX1gKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIHJlcXVlc3Qud3JpdGUocmVxdWVzdEJvZHkpO1xuICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cblxubGV0IHNmbjogU0ZOO1xubGV0IGxhbWJkYTogTGFtYmRhO1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0U3RhcnRFeGVjdXRpb24ocmVxOiBTdGFydEV4ZWN1dGlvbklucHV0KTogUHJvbWlzZTxTdGFydEV4ZWN1dGlvbk91dHB1dD4ge1xuICBpZiAoIXNmbikge1xuICAgIHNmbiA9IG5ldyBTRk4oYXdzU2RrQ29uZmlnKTtcbiAgfVxuXG4gIHJldHVybiBzZm4uc3RhcnRFeGVjdXRpb24ocmVxKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEludm9rZUZ1bmN0aW9uKHJlcTogSW52b2tlQ29tbWFuZElucHV0KTogUHJvbWlzZTxJbnZvY2F0aW9uUmVzcG9uc2U+IHtcbiAgaWYgKCFsYW1iZGEpIHtcbiAgICBsYW1iZGEgPSBuZXcgTGFtYmRhKGF3c1Nka0NvbmZpZyk7XG4gIH1cblxuICB0cnkge1xuICAgIC8qKlxuICAgICAqIFRyeSBhbiBpbml0aWFsIGludm9rZS5cbiAgICAgKlxuICAgICAqIFdoZW4geW91IHRyeSB0byBpbnZva2UgYSBmdW5jdGlvbiB0aGF0IGlzIGluYWN0aXZlLCB0aGUgaW52b2NhdGlvbiBmYWlscyBhbmQgTGFtYmRhIHNldHNcbiAgICAgKiB0aGUgZnVuY3Rpb24gdG8gcGVuZGluZyBzdGF0ZSB1bnRpbCB0aGUgZnVuY3Rpb24gcmVzb3VyY2VzIGFyZSByZWNyZWF0ZWQuXG4gICAgICogSWYgTGFtYmRhIGZhaWxzIHRvIHJlY3JlYXRlIHRoZSByZXNvdXJjZXMsIHRoZSBmdW5jdGlvbiBpcyBzZXQgdG8gdGhlIGluYWN0aXZlIHN0YXRlLlxuICAgICAqXG4gICAgICogV2UncmUgdXNpbmcgaW52b2tlIGZpcnN0IGJlY2F1c2UgYHdhaXRGb3JgIGRvZXNuJ3QgdHJpZ2dlciBhbiBpbmFjdGl2ZSBmdW5jdGlvbiB0byBkbyBhbnl0aGluZyxcbiAgICAgKiBpdCBqdXN0IHJ1bnMgYGdldEZ1bmN0aW9uYCBhbmQgY2hlY2tzIHRoZSBzdGF0ZS5cbiAgICAgKi9cbiAgICByZXR1cm4gYXdhaXQgbGFtYmRhLmludm9rZShyZXEpO1xuICB9IGNhdGNoIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBMYW1iZGEgZnVuY3Rpb24gaXMgY2hlY2tlZCBldmVyeSBzZWNvbmQgZm9yIHVwIHRvIDMwMCBzZWNvbmRzLlxuICAgICAqIEV4aXRzIHRoZSBsb29wIG9uICdBY3RpdmUnIHN0YXRlIGFuZCB0aHJvd3MgYW4gZXJyb3Igb24gJ0luYWN0aXZlJyBvciAnRmFpbGVkJy5cbiAgICAgKlxuICAgICAqIEFuZCBub3cgd2Ugd2FpdC5cbiAgICAgKi9cbiAgICBhd2FpdCB3YWl0VW50aWxGdW5jdGlvbkFjdGl2ZVYyKHtcbiAgICAgIGNsaWVudDogbGFtYmRhLFxuICAgICAgbWF4V2FpdFRpbWU6IDMwMCxcbiAgICB9LCB7XG4gICAgICBGdW5jdGlvbk5hbWU6IHJlcS5GdW5jdGlvbk5hbWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIGxhbWJkYS5pbnZva2UocmVxKTtcbiAgfVxufVxuXG5leHBvcnQgbGV0IHN0YXJ0RXhlY3V0aW9uID0gZGVmYXVsdFN0YXJ0RXhlY3V0aW9uO1xuZXhwb3J0IGxldCBpbnZva2VGdW5jdGlvbiA9IGRlZmF1bHRJbnZva2VGdW5jdGlvbjtcbmV4cG9ydCBsZXQgaHR0cFJlcXVlc3QgPSBkZWZhdWx0SHR0cFJlcXVlc3Q7XG4iXX0=
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/util.js b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/util.js
new file mode 100644
index 0000000000000..5d48e914660a6
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/util.js
@@ -0,0 +1,53 @@
+"use strict";
+/* eslint-disable no-console */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getEnv = getEnv;
+exports.log = log;
+exports.withRetries = withRetries;
+exports.parseJsonPayload = parseJsonPayload;
+function getEnv(name) {
+ const value = process.env[name];
+ if (!value) {
+ throw new Error(`The environment variable "${name}" is not defined`);
+ }
+ return value;
+}
+function log(title, ...args) {
+ console.log('[provider-framework]', title, ...args.map(x => typeof (x) === 'object' ? JSON.stringify(x, undefined, 2) : x));
+}
+function withRetries(options, fn) {
+ return async (...xs) => {
+ let attempts = options.attempts;
+ let ms = options.sleep;
+ while (true) {
+ try {
+ return await fn(...xs);
+ }
+ catch (e) {
+ if (attempts-- <= 0) {
+ throw e;
+ }
+ await sleep(Math.floor(Math.random() * ms));
+ ms *= 2;
+ }
+ }
+ };
+}
+async function sleep(ms) {
+ return new Promise((ok) => setTimeout(ok, ms));
+}
+function parseJsonPayload(payload) {
+ // sdk v3 returns payloads in Uint8Array, either it or a string or Buffer
+ // can be cast into a buffer and then decoded.
+ const text = new TextDecoder().decode(Buffer.from(payload ?? ''));
+ if (!text) {
+ return {};
+ }
+ try {
+ return JSON.parse(text);
+ }
+ catch {
+ throw new Error(`return values from user-handlers must be JSON objects. got: "${text}"`);
+ }
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtCQUErQjs7QUFFL0Isd0JBTUM7QUFFRCxrQkFFQztBQVNELGtDQWdCQztBQU1ELDRDQVVDO0FBbkRELFNBQWdCLE1BQU0sQ0FBQyxJQUFZO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFnQixHQUFHLENBQUMsS0FBVSxFQUFFLEdBQUcsSUFBVztJQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0gsQ0FBQztBQVNELFNBQWdCLFdBQVcsQ0FBMEIsT0FBcUIsRUFBRSxFQUE0QjtJQUN0RyxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUssRUFBRSxFQUFFO1FBQ3hCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN2QixPQUFPLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDO2dCQUNILE9BQU8sTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxJQUFJLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNwQixNQUFNLENBQUMsQ0FBQztnQkFDVixDQUFDO2dCQUNELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDVixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxLQUFLLFVBQVUsS0FBSyxDQUFDLEVBQVU7SUFDN0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxPQUF3RDtJQUN2Rix5RUFBeUU7SUFDekUsOENBQThDO0lBQzlDLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQUMsT0FBTyxFQUFHLENBQUM7SUFBQyxDQUFDO0lBQzFCLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUMzRixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB2YWx1ZSA9IHByb2Nlc3MuZW52W25hbWVdO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgXCIke25hbWV9XCIgaXMgbm90IGRlZmluZWRgKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2codGl0bGU6IGFueSwgLi4uYXJnczogYW55W10pIHtcbiAgY29uc29sZS5sb2coJ1twcm92aWRlci1mcmFtZXdvcmtdJywgdGl0bGUsIC4uLmFyZ3MubWFwKHggPT4gdHlwZW9mKHgpID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHgsIHVuZGVmaW5lZCwgMikgOiB4KSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zIHtcbiAgLyoqIEhvdyBtYW55IHJldHJpZXMgKHdpbGwgYXQgbGVhc3QgdHJ5IG9uY2UpICovXG4gIHJlYWRvbmx5IGF0dGVtcHRzOiBudW1iZXI7XG4gIC8qKiBTbGVlcCBiYXNlLCBpbiBtcyAqL1xuICByZWFkb25seSBzbGVlcDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJldHJpZXM8QSBleHRlbmRzIEFycmF5PGFueT4sIEI+KG9wdGlvbnM6IFJldHJ5T3B0aW9ucywgZm46ICguLi54czogQSkgPT4gUHJvbWlzZTxCPik6ICguLi54czogQSkgPT4gUHJvbWlzZTxCPiB7XG4gIHJldHVybiBhc3luYyAoLi4ueHM6IEEpID0+IHtcbiAgICBsZXQgYXR0ZW1wdHMgPSBvcHRpb25zLmF0dGVtcHRzO1xuICAgIGxldCBtcyA9IG9wdGlvbnMuc2xlZXA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbiguLi54cyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChhdHRlbXB0cy0tIDw9IDApIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1zKSk7XG4gICAgICAgIG1zICo9IDI7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2spID0+IHNldFRpbWVvdXQob2ssIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUpzb25QYXlsb2FkKHBheWxvYWQ6IHN0cmluZyB8IEJ1ZmZlciB8IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQgfCBudWxsKTogYW55IHtcbiAgLy8gc2RrIHYzIHJldHVybnMgcGF5bG9hZHMgaW4gVWludDhBcnJheSwgZWl0aGVyIGl0IG9yIGEgc3RyaW5nIG9yIEJ1ZmZlclxuICAvLyBjYW4gYmUgY2FzdCBpbnRvIGEgYnVmZmVyIGFuZCB0aGVuIGRlY29kZWQuXG4gIGNvbnN0IHRleHQgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoQnVmZmVyLmZyb20ocGF5bG9hZCA/PyAnJykpO1xuICBpZiAoIXRleHQpIHsgcmV0dXJuIHsgfTsgfVxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJldHVybiB2YWx1ZXMgZnJvbSB1c2VyLWhhbmRsZXJzIG11c3QgYmUgSlNPTiBvYmplY3RzLiBnb3Q6IFwiJHt0ZXh0fVwiYCk7XG4gIH1cbn1cbiJdfQ==
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.d614c4499efc5eae7ea93772f683afcb483222fb794cfe7d7566f792956aec2d/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.d614c4499efc5eae7ea93772f683afcb483222fb794cfe7d7566f792956aec2d/index.js
new file mode 100644
index 0000000000000..be13304e6b461
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/asset.d614c4499efc5eae7ea93772f683afcb483222fb794cfe7d7566f792956aec2d/index.js
@@ -0,0 +1,58 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.onEventHandler = onEventHandler;
+exports.isCompleteHandler = isCompleteHandler;
+/* eslint-disable no-console */
+///
+const client_rds_1 = require("@aws-sdk/client-rds"); // eslint-disable-line import/no-extraneous-dependencies
+async function onEventHandler(event) {
+ console.log('Event: %j', event);
+ const rds = new client_rds_1.RDS();
+ const physicalResourceId = `${event.ResourceProperties.DBInstanceIdentifier}-${event.ResourceProperties.DBInstanceIdentifier}`;
+ if (event.RequestType === 'Create' || event.RequestType === 'Update') {
+ const data = await rds.createDBSnapshot({
+ DBInstanceIdentifier: event.ResourceProperties.DBInstanceIdentifier,
+ DBSnapshotIdentifier: event.ResourceProperties.DBSnapshotIdentifier,
+ });
+ return {
+ PhysicalResourceId: physicalResourceId,
+ Data: {
+ DBSnapshotArn: data.DBSnapshot?.DBSnapshotArn,
+ },
+ };
+ }
+ if (event.RequestType === 'Delete') {
+ await rds.deleteDBSnapshot({
+ DBSnapshotIdentifier: event.ResourceProperties.DBSnapshotIdentifier,
+ });
+ }
+ return {
+ PhysicalResourceId: `${event.ResourceProperties.DBInstanceIdentifier}-${event.ResourceProperties.DBInstanceIdentifier}`,
+ };
+}
+async function isCompleteHandler(event) {
+ console.log('Event: %j', event);
+ const snapshotStatus = await tryGetSnapshotStatus(event.ResourceProperties.DBSnapshotIdentifier);
+ switch (event.RequestType) {
+ case 'Create':
+ case 'Update':
+ return { IsComplete: snapshotStatus === 'available' };
+ case 'Delete':
+ return { IsComplete: snapshotStatus === undefined };
+ }
+}
+async function tryGetSnapshotStatus(identifier) {
+ try {
+ const rds = new client_rds_1.RDS();
+ const data = await rds.describeDBSnapshots({
+ DBSnapshotIdentifier: identifier,
+ });
+ return data.DBSnapshots?.[0].Status;
+ }
+ catch (err) {
+ if (err.name === 'DBSnapshotNotFoundFault') {
+ return undefined;
+ }
+ throw err;
+ }
+}
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdk-instance-engine-lifecycle-support.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdk-instance-engine-lifecycle-support.assets.json
new file mode 100644
index 0000000000000..0f9d0489c8919
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdk-instance-engine-lifecycle-support.assets.json
@@ -0,0 +1,48 @@
+{
+ "version": "44.0.0",
+ "files": {
+ "d614c4499efc5eae7ea93772f683afcb483222fb794cfe7d7566f792956aec2d": {
+ "displayName": "Snapshoter/OnEventHandler/Code",
+ "source": {
+ "path": "asset.d614c4499efc5eae7ea93772f683afcb483222fb794cfe7d7566f792956aec2d",
+ "packaging": "zip"
+ },
+ "destinations": {
+ "current_account-current_region": {
+ "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
+ "objectKey": "d614c4499efc5eae7ea93772f683afcb483222fb794cfe7d7566f792956aec2d.zip",
+ "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
+ }
+ }
+ },
+ "39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6": {
+ "displayName": "Snapshoter/SnapshotProvider/framework-onEvent/Code",
+ "source": {
+ "path": "asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6",
+ "packaging": "zip"
+ },
+ "destinations": {
+ "current_account-current_region": {
+ "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
+ "objectKey": "39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip",
+ "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
+ }
+ }
+ },
+ "1cf375a44b61de7f3f6546ece6163df02d1242fae6da50f93a58e255b5b11892": {
+ "displayName": "cdk-instance-engine-lifecycle-support Template",
+ "source": {
+ "path": "cdk-instance-engine-lifecycle-support.template.json",
+ "packaging": "file"
+ },
+ "destinations": {
+ "current_account-current_region": {
+ "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
+ "objectKey": "1cf375a44b61de7f3f6546ece6163df02d1242fae6da50f93a58e255b5b11892.json",
+ "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
+ }
+ }
+ }
+ },
+ "dockerImages": {}
+}
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdk-instance-engine-lifecycle-support.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdk-instance-engine-lifecycle-support.template.json
new file mode 100644
index 0000000000000..07ae9202a02d7
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdk-instance-engine-lifecycle-support.template.json
@@ -0,0 +1,1793 @@
+{
+ "Resources": {
+ "Vpc8378EB38": {
+ "Type": "AWS::EC2::VPC",
+ "Properties": {
+ "CidrBlock": "10.0.0.0/16",
+ "EnableDnsHostnames": true,
+ "EnableDnsSupport": true,
+ "InstanceTenancy": "default",
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "cdk-instance-engine-lifecycle-support/Vpc"
+ }
+ ]
+ }
+ },
+ "VpcPublicSubnet1Subnet5C2D37C4": {
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "AvailabilityZone": {
+ "Fn::Select": [
+ 0,
+ {
+ "Fn::GetAZs": ""
+ }
+ ]
+ },
+ "CidrBlock": "10.0.0.0/18",
+ "MapPublicIpOnLaunch": true,
+ "Tags": [
+ {
+ "Key": "aws-cdk:subnet-name",
+ "Value": "Public"
+ },
+ {
+ "Key": "aws-cdk:subnet-type",
+ "Value": "Public"
+ },
+ {
+ "Key": "Name",
+ "Value": "cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1"
+ }
+ ],
+ "VpcId": {
+ "Ref": "Vpc8378EB38"
+ }
+ }
+ },
+ "VpcPublicSubnet1RouteTable6C95E38E": {
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1"
+ }
+ ],
+ "VpcId": {
+ "Ref": "Vpc8378EB38"
+ }
+ }
+ },
+ "VpcPublicSubnet1RouteTableAssociation97140677": {
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "VpcPublicSubnet1RouteTable6C95E38E"
+ },
+ "SubnetId": {
+ "Ref": "VpcPublicSubnet1Subnet5C2D37C4"
+ }
+ }
+ },
+ "VpcPublicSubnet1DefaultRoute3DA9E72A": {
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "GatewayId": {
+ "Ref": "VpcIGWD7BA715C"
+ },
+ "RouteTableId": {
+ "Ref": "VpcPublicSubnet1RouteTable6C95E38E"
+ }
+ },
+ "DependsOn": [
+ "VpcVPCGWBF912B6E"
+ ]
+ },
+ "VpcPublicSubnet1EIPD7E02669": {
+ "Type": "AWS::EC2::EIP",
+ "Properties": {
+ "Domain": "vpc",
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1"
+ }
+ ]
+ }
+ },
+ "VpcPublicSubnet1NATGateway4D7517AA": {
+ "Type": "AWS::EC2::NatGateway",
+ "Properties": {
+ "AllocationId": {
+ "Fn::GetAtt": [
+ "VpcPublicSubnet1EIPD7E02669",
+ "AllocationId"
+ ]
+ },
+ "SubnetId": {
+ "Ref": "VpcPublicSubnet1Subnet5C2D37C4"
+ },
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1"
+ }
+ ]
+ },
+ "DependsOn": [
+ "VpcPublicSubnet1DefaultRoute3DA9E72A",
+ "VpcPublicSubnet1RouteTableAssociation97140677"
+ ]
+ },
+ "VpcPublicSubnet2Subnet691E08A3": {
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "AvailabilityZone": {
+ "Fn::Select": [
+ 1,
+ {
+ "Fn::GetAZs": ""
+ }
+ ]
+ },
+ "CidrBlock": "10.0.64.0/18",
+ "MapPublicIpOnLaunch": true,
+ "Tags": [
+ {
+ "Key": "aws-cdk:subnet-name",
+ "Value": "Public"
+ },
+ {
+ "Key": "aws-cdk:subnet-type",
+ "Value": "Public"
+ },
+ {
+ "Key": "Name",
+ "Value": "cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2"
+ }
+ ],
+ "VpcId": {
+ "Ref": "Vpc8378EB38"
+ }
+ }
+ },
+ "VpcPublicSubnet2RouteTable94F7E489": {
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2"
+ }
+ ],
+ "VpcId": {
+ "Ref": "Vpc8378EB38"
+ }
+ }
+ },
+ "VpcPublicSubnet2RouteTableAssociationDD5762D8": {
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "VpcPublicSubnet2RouteTable94F7E489"
+ },
+ "SubnetId": {
+ "Ref": "VpcPublicSubnet2Subnet691E08A3"
+ }
+ }
+ },
+ "VpcPublicSubnet2DefaultRoute97F91067": {
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "GatewayId": {
+ "Ref": "VpcIGWD7BA715C"
+ },
+ "RouteTableId": {
+ "Ref": "VpcPublicSubnet2RouteTable94F7E489"
+ }
+ },
+ "DependsOn": [
+ "VpcVPCGWBF912B6E"
+ ]
+ },
+ "VpcPrivateSubnet1Subnet536B997A": {
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "AvailabilityZone": {
+ "Fn::Select": [
+ 0,
+ {
+ "Fn::GetAZs": ""
+ }
+ ]
+ },
+ "CidrBlock": "10.0.128.0/18",
+ "MapPublicIpOnLaunch": false,
+ "Tags": [
+ {
+ "Key": "aws-cdk:subnet-name",
+ "Value": "Private"
+ },
+ {
+ "Key": "aws-cdk:subnet-type",
+ "Value": "Private"
+ },
+ {
+ "Key": "Name",
+ "Value": "cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1"
+ }
+ ],
+ "VpcId": {
+ "Ref": "Vpc8378EB38"
+ }
+ }
+ },
+ "VpcPrivateSubnet1RouteTableB2C5B500": {
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1"
+ }
+ ],
+ "VpcId": {
+ "Ref": "Vpc8378EB38"
+ }
+ }
+ },
+ "VpcPrivateSubnet1RouteTableAssociation70C59FA6": {
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "VpcPrivateSubnet1RouteTableB2C5B500"
+ },
+ "SubnetId": {
+ "Ref": "VpcPrivateSubnet1Subnet536B997A"
+ }
+ }
+ },
+ "VpcPrivateSubnet1DefaultRouteBE02A9ED": {
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "VpcPublicSubnet1NATGateway4D7517AA"
+ },
+ "RouteTableId": {
+ "Ref": "VpcPrivateSubnet1RouteTableB2C5B500"
+ }
+ }
+ },
+ "VpcPrivateSubnet2Subnet3788AAA1": {
+ "Type": "AWS::EC2::Subnet",
+ "Properties": {
+ "AvailabilityZone": {
+ "Fn::Select": [
+ 1,
+ {
+ "Fn::GetAZs": ""
+ }
+ ]
+ },
+ "CidrBlock": "10.0.192.0/18",
+ "MapPublicIpOnLaunch": false,
+ "Tags": [
+ {
+ "Key": "aws-cdk:subnet-name",
+ "Value": "Private"
+ },
+ {
+ "Key": "aws-cdk:subnet-type",
+ "Value": "Private"
+ },
+ {
+ "Key": "Name",
+ "Value": "cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2"
+ }
+ ],
+ "VpcId": {
+ "Ref": "Vpc8378EB38"
+ }
+ }
+ },
+ "VpcPrivateSubnet2RouteTableA678073B": {
+ "Type": "AWS::EC2::RouteTable",
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2"
+ }
+ ],
+ "VpcId": {
+ "Ref": "Vpc8378EB38"
+ }
+ }
+ },
+ "VpcPrivateSubnet2RouteTableAssociationA89CAD56": {
+ "Type": "AWS::EC2::SubnetRouteTableAssociation",
+ "Properties": {
+ "RouteTableId": {
+ "Ref": "VpcPrivateSubnet2RouteTableA678073B"
+ },
+ "SubnetId": {
+ "Ref": "VpcPrivateSubnet2Subnet3788AAA1"
+ }
+ }
+ },
+ "VpcPrivateSubnet2DefaultRoute060D2087": {
+ "Type": "AWS::EC2::Route",
+ "Properties": {
+ "DestinationCidrBlock": "0.0.0.0/0",
+ "NatGatewayId": {
+ "Ref": "VpcPublicSubnet1NATGateway4D7517AA"
+ },
+ "RouteTableId": {
+ "Ref": "VpcPrivateSubnet2RouteTableA678073B"
+ }
+ }
+ },
+ "VpcIGWD7BA715C": {
+ "Type": "AWS::EC2::InternetGateway",
+ "Properties": {
+ "Tags": [
+ {
+ "Key": "Name",
+ "Value": "cdk-instance-engine-lifecycle-support/Vpc"
+ }
+ ]
+ }
+ },
+ "VpcVPCGWBF912B6E": {
+ "Type": "AWS::EC2::VPCGatewayAttachment",
+ "Properties": {
+ "InternetGatewayId": {
+ "Ref": "VpcIGWD7BA715C"
+ },
+ "VpcId": {
+ "Ref": "Vpc8378EB38"
+ }
+ }
+ },
+ "InstanceSubnetGroupF2CBA54F": {
+ "Type": "AWS::RDS::DBSubnetGroup",
+ "Properties": {
+ "DBSubnetGroupDescription": "Subnet group for Instance database",
+ "SubnetIds": [
+ {
+ "Ref": "VpcPrivateSubnet1Subnet536B997A"
+ },
+ {
+ "Ref": "VpcPrivateSubnet2Subnet3788AAA1"
+ }
+ ]
+ }
+ },
+ "InstanceSecurityGroupB4E5FA83": {
+ "Type": "AWS::EC2::SecurityGroup",
+ "Properties": {
+ "GroupDescription": "Security group for Instance database",
+ "SecurityGroupEgress": [
+ {
+ "CidrIp": "0.0.0.0/0",
+ "Description": "Allow all outbound traffic by default",
+ "IpProtocol": "-1"
+ }
+ ],
+ "VpcId": {
+ "Ref": "Vpc8378EB38"
+ }
+ }
+ },
+ "InstanceSecret478E0A47": {
+ "Type": "AWS::SecretsManager::Secret",
+ "Properties": {
+ "Description": {
+ "Fn::Join": [
+ "",
+ [
+ "Generated by the CDK for stack: ",
+ {
+ "Ref": "AWS::StackName"
+ }
+ ]
+ ]
+ },
+ "GenerateSecretString": {
+ "ExcludeCharacters": " %+~`#$&*()|[]{}:;<>?!'/@\"\\",
+ "GenerateStringKey": "password",
+ "PasswordLength": 30,
+ "SecretStringTemplate": "{\"username\":\"admin\"}"
+ }
+ },
+ "UpdateReplacePolicy": "Delete",
+ "DeletionPolicy": "Delete"
+ },
+ "InstanceSecretAttachment83BEE581": {
+ "Type": "AWS::SecretsManager::SecretTargetAttachment",
+ "Properties": {
+ "SecretId": {
+ "Ref": "InstanceSecret478E0A47"
+ },
+ "TargetId": {
+ "Ref": "InstanceC1063A87"
+ },
+ "TargetType": "AWS::RDS::DBInstance"
+ }
+ },
+ "InstanceC1063A87": {
+ "Type": "AWS::RDS::DBInstance",
+ "Properties": {
+ "AllocatedStorage": "100",
+ "CopyTagsToSnapshot": true,
+ "DBInstanceClass": "db.t3.small",
+ "DBSubnetGroupName": {
+ "Ref": "InstanceSubnetGroupF2CBA54F"
+ },
+ "Engine": "mysql",
+ "EngineLifecycleSupport": "open-source-rds-extended-support",
+ "EngineVersion": "8.4.5",
+ "MasterUserPassword": {
+ "Fn::Join": [
+ "",
+ [
+ "{{resolve:secretsmanager:",
+ {
+ "Ref": "InstanceSecret478E0A47"
+ },
+ ":SecretString:password::}}"
+ ]
+ ]
+ },
+ "MasterUsername": {
+ "Fn::Join": [
+ "",
+ [
+ "{{resolve:secretsmanager:",
+ {
+ "Ref": "InstanceSecret478E0A47"
+ },
+ ":SecretString:username::}}"
+ ]
+ ]
+ },
+ "StorageType": "gp2",
+ "VPCSecurityGroups": [
+ {
+ "Fn::GetAtt": [
+ "InstanceSecurityGroupB4E5FA83",
+ "GroupId"
+ ]
+ }
+ ]
+ },
+ "UpdateReplacePolicy": "Delete",
+ "DeletionPolicy": "Delete"
+ },
+ "SnapshoterOnEventHandlerServiceRole7F84B26D": {
+ "Type": "AWS::IAM::Role",
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com"
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "ManagedPolicyArns": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition"
+ },
+ ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
+ ]
+ ]
+ }
+ ]
+ }
+ },
+ "SnapshoterOnEventHandlerServiceRoleDefaultPolicyAF0DFD57": {
+ "Type": "AWS::IAM::Policy",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": [
+ "rds:AddTagsToResource",
+ "rds:CreateDBSnapshot",
+ "rds:DeleteDBSnapshot"
+ ],
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition"
+ },
+ ":rds:",
+ {
+ "Ref": "AWS::Region"
+ },
+ ":",
+ {
+ "Ref": "AWS::AccountId"
+ },
+ ":db:",
+ {
+ "Ref": "InstanceC1063A87"
+ }
+ ]
+ ]
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition"
+ },
+ ":rds:",
+ {
+ "Ref": "AWS::Region"
+ },
+ ":",
+ {
+ "Ref": "AWS::AccountId"
+ },
+ ":snapshot:cdk-instance-engine-lifecycle-support-snapshot"
+ ]
+ ]
+ }
+ ]
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "PolicyName": "SnapshoterOnEventHandlerServiceRoleDefaultPolicyAF0DFD57",
+ "Roles": [
+ {
+ "Ref": "SnapshoterOnEventHandlerServiceRole7F84B26D"
+ }
+ ]
+ }
+ },
+ "SnapshoterOnEventHandlerDF82DF85": {
+ "Type": "AWS::Lambda::Function",
+ "Properties": {
+ "Code": {
+ "S3Bucket": {
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
+ },
+ "S3Key": "d614c4499efc5eae7ea93772f683afcb483222fb794cfe7d7566f792956aec2d.zip"
+ },
+ "Handler": "index.onEventHandler",
+ "Role": {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerServiceRole7F84B26D",
+ "Arn"
+ ]
+ },
+ "Runtime": "nodejs22.x"
+ },
+ "DependsOn": [
+ "SnapshoterOnEventHandlerServiceRoleDefaultPolicyAF0DFD57",
+ "SnapshoterOnEventHandlerServiceRole7F84B26D"
+ ]
+ },
+ "SnapshoterIsCompleteHandlerServiceRole40F5F1A8": {
+ "Type": "AWS::IAM::Role",
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com"
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "ManagedPolicyArns": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition"
+ },
+ ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
+ ]
+ ]
+ }
+ ]
+ }
+ },
+ "SnapshoterIsCompleteHandlerServiceRoleDefaultPolicyA43EB222": {
+ "Type": "AWS::IAM::Policy",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "rds:DescribeDBSnapshots",
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition"
+ },
+ ":rds:",
+ {
+ "Ref": "AWS::Region"
+ },
+ ":",
+ {
+ "Ref": "AWS::AccountId"
+ },
+ ":db:",
+ {
+ "Ref": "InstanceC1063A87"
+ }
+ ]
+ ]
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition"
+ },
+ ":rds:",
+ {
+ "Ref": "AWS::Region"
+ },
+ ":",
+ {
+ "Ref": "AWS::AccountId"
+ },
+ ":snapshot:cdk-instance-engine-lifecycle-support-snapshot"
+ ]
+ ]
+ }
+ ]
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "PolicyName": "SnapshoterIsCompleteHandlerServiceRoleDefaultPolicyA43EB222",
+ "Roles": [
+ {
+ "Ref": "SnapshoterIsCompleteHandlerServiceRole40F5F1A8"
+ }
+ ]
+ }
+ },
+ "SnapshoterIsCompleteHandler93DE2591": {
+ "Type": "AWS::Lambda::Function",
+ "Properties": {
+ "Code": {
+ "S3Bucket": {
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
+ },
+ "S3Key": "d614c4499efc5eae7ea93772f683afcb483222fb794cfe7d7566f792956aec2d.zip"
+ },
+ "Handler": "index.isCompleteHandler",
+ "Role": {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandlerServiceRole40F5F1A8",
+ "Arn"
+ ]
+ },
+ "Runtime": "nodejs22.x"
+ },
+ "DependsOn": [
+ "SnapshoterIsCompleteHandlerServiceRoleDefaultPolicyA43EB222",
+ "SnapshoterIsCompleteHandlerServiceRole40F5F1A8"
+ ]
+ },
+ "SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76": {
+ "Type": "AWS::IAM::Role",
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com"
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "ManagedPolicyArns": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition"
+ },
+ ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
+ ]
+ ]
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderframeworkonEventServiceRoleDefaultPolicy21CE9686": {
+ "Type": "AWS::IAM::Policy",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "lambda:InvokeFunction",
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandler93DE2591",
+ "Arn"
+ ]
+ },
+ {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerDF82DF85",
+ "Arn"
+ ]
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandler93DE2591",
+ "Arn"
+ ]
+ },
+ ":*"
+ ]
+ ]
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerDF82DF85",
+ "Arn"
+ ]
+ },
+ ":*"
+ ]
+ ]
+ }
+ ]
+ },
+ {
+ "Action": "states:StartExecution",
+ "Effect": "Allow",
+ "Resource": {
+ "Ref": "SnapshoterSnapshotProviderwaiterstatemachineE1F05D1F"
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "PolicyName": "SnapshoterSnapshotProviderframeworkonEventServiceRoleDefaultPolicy21CE9686",
+ "Roles": [
+ {
+ "Ref": "SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76"
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderframeworkonEventF0C0D052": {
+ "Type": "AWS::Lambda::Function",
+ "Properties": {
+ "Code": {
+ "S3Bucket": {
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
+ },
+ "S3Key": "39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"
+ },
+ "Description": "AWS CDK resource provider framework - onEvent (cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider)",
+ "Environment": {
+ "Variables": {
+ "USER_ON_EVENT_FUNCTION_ARN": {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerDF82DF85",
+ "Arn"
+ ]
+ },
+ "USER_IS_COMPLETE_FUNCTION_ARN": {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandler93DE2591",
+ "Arn"
+ ]
+ },
+ "WAITER_STATE_MACHINE_ARN": {
+ "Ref": "SnapshoterSnapshotProviderwaiterstatemachineE1F05D1F"
+ }
+ }
+ },
+ "Handler": "framework.onEvent",
+ "Role": {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76",
+ "Arn"
+ ]
+ },
+ "Runtime": {
+ "Fn::FindInMap": [
+ "LatestNodeRuntimeMap",
+ {
+ "Ref": "AWS::Region"
+ },
+ "value"
+ ]
+ },
+ "Timeout": 900
+ },
+ "DependsOn": [
+ "SnapshoterSnapshotProviderframeworkonEventServiceRoleDefaultPolicy21CE9686",
+ "SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76"
+ ]
+ },
+ "SnapshoterSnapshotProviderframeworkonEventinlinePolicyAddedToExecutionRole079D50682": {
+ "Type": "AWS::IAM::Policy",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "lambda:GetFunction",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerDF82DF85",
+ "Arn"
+ ]
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "PolicyName": "SnapshoterSnapshotProviderframeworkonEventinlinePolicyAddedToExecutionRole079D50682",
+ "Roles": [
+ {
+ "Ref": "SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76"
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderframeworkonEventinlinePolicyAddedToExecutionRole178584C7C": {
+ "Type": "AWS::IAM::Policy",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "lambda:GetFunction",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandler93DE2591",
+ "Arn"
+ ]
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "PolicyName": "SnapshoterSnapshotProviderframeworkonEventinlinePolicyAddedToExecutionRole178584C7C",
+ "Roles": [
+ {
+ "Ref": "SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76"
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB": {
+ "Type": "AWS::IAM::Role",
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com"
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "ManagedPolicyArns": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition"
+ },
+ ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
+ ]
+ ]
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderframeworkisCompleteServiceRoleDefaultPolicyF410E478": {
+ "Type": "AWS::IAM::Policy",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "lambda:InvokeFunction",
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandler93DE2591",
+ "Arn"
+ ]
+ },
+ {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerDF82DF85",
+ "Arn"
+ ]
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandler93DE2591",
+ "Arn"
+ ]
+ },
+ ":*"
+ ]
+ ]
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerDF82DF85",
+ "Arn"
+ ]
+ },
+ ":*"
+ ]
+ ]
+ }
+ ]
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "PolicyName": "SnapshoterSnapshotProviderframeworkisCompleteServiceRoleDefaultPolicyF410E478",
+ "Roles": [
+ {
+ "Ref": "SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB"
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderframeworkisComplete803B4F1B": {
+ "Type": "AWS::Lambda::Function",
+ "Properties": {
+ "Code": {
+ "S3Bucket": {
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
+ },
+ "S3Key": "39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"
+ },
+ "Description": "AWS CDK resource provider framework - isComplete (cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider)",
+ "Environment": {
+ "Variables": {
+ "USER_ON_EVENT_FUNCTION_ARN": {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerDF82DF85",
+ "Arn"
+ ]
+ },
+ "USER_IS_COMPLETE_FUNCTION_ARN": {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandler93DE2591",
+ "Arn"
+ ]
+ }
+ }
+ },
+ "Handler": "framework.isComplete",
+ "Role": {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB",
+ "Arn"
+ ]
+ },
+ "Runtime": {
+ "Fn::FindInMap": [
+ "LatestNodeRuntimeMap",
+ {
+ "Ref": "AWS::Region"
+ },
+ "value"
+ ]
+ },
+ "Timeout": 900
+ },
+ "DependsOn": [
+ "SnapshoterSnapshotProviderframeworkisCompleteServiceRoleDefaultPolicyF410E478",
+ "SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB"
+ ]
+ },
+ "SnapshoterSnapshotProviderframeworkisCompleteinlinePolicyAddedToExecutionRole060DC0CFE": {
+ "Type": "AWS::IAM::Policy",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "lambda:GetFunction",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerDF82DF85",
+ "Arn"
+ ]
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "PolicyName": "SnapshoterSnapshotProviderframeworkisCompleteinlinePolicyAddedToExecutionRole060DC0CFE",
+ "Roles": [
+ {
+ "Ref": "SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB"
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderframeworkisCompleteinlinePolicyAddedToExecutionRole1AD853F80": {
+ "Type": "AWS::IAM::Policy",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "lambda:GetFunction",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandler93DE2591",
+ "Arn"
+ ]
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "PolicyName": "SnapshoterSnapshotProviderframeworkisCompleteinlinePolicyAddedToExecutionRole1AD853F80",
+ "Roles": [
+ {
+ "Ref": "SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB"
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD": {
+ "Type": "AWS::IAM::Role",
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "lambda.amazonaws.com"
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "ManagedPolicyArns": [
+ {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition"
+ },
+ ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
+ ]
+ ]
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderframeworkonTimeoutServiceRoleDefaultPolicy05DF1C30": {
+ "Type": "AWS::IAM::Policy",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "lambda:InvokeFunction",
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandler93DE2591",
+ "Arn"
+ ]
+ },
+ {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerDF82DF85",
+ "Arn"
+ ]
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandler93DE2591",
+ "Arn"
+ ]
+ },
+ ":*"
+ ]
+ ]
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerDF82DF85",
+ "Arn"
+ ]
+ },
+ ":*"
+ ]
+ ]
+ }
+ ]
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "PolicyName": "SnapshoterSnapshotProviderframeworkonTimeoutServiceRoleDefaultPolicy05DF1C30",
+ "Roles": [
+ {
+ "Ref": "SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD"
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderframeworkonTimeout04342B00": {
+ "Type": "AWS::Lambda::Function",
+ "Properties": {
+ "Code": {
+ "S3Bucket": {
+ "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"
+ },
+ "S3Key": "39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"
+ },
+ "Description": "AWS CDK resource provider framework - onTimeout (cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider)",
+ "Environment": {
+ "Variables": {
+ "USER_ON_EVENT_FUNCTION_ARN": {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerDF82DF85",
+ "Arn"
+ ]
+ },
+ "USER_IS_COMPLETE_FUNCTION_ARN": {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandler93DE2591",
+ "Arn"
+ ]
+ }
+ }
+ },
+ "Handler": "framework.onTimeout",
+ "Role": {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD",
+ "Arn"
+ ]
+ },
+ "Runtime": {
+ "Fn::FindInMap": [
+ "LatestNodeRuntimeMap",
+ {
+ "Ref": "AWS::Region"
+ },
+ "value"
+ ]
+ },
+ "Timeout": 900
+ },
+ "DependsOn": [
+ "SnapshoterSnapshotProviderframeworkonTimeoutServiceRoleDefaultPolicy05DF1C30",
+ "SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD"
+ ]
+ },
+ "SnapshoterSnapshotProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole0D9321580": {
+ "Type": "AWS::IAM::Policy",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "lambda:GetFunction",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "SnapshoterOnEventHandlerDF82DF85",
+ "Arn"
+ ]
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "PolicyName": "SnapshoterSnapshotProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole0D9321580",
+ "Roles": [
+ {
+ "Ref": "SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD"
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole131B7131D": {
+ "Type": "AWS::IAM::Policy",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "lambda:GetFunction",
+ "Effect": "Allow",
+ "Resource": {
+ "Fn::GetAtt": [
+ "SnapshoterIsCompleteHandler93DE2591",
+ "Arn"
+ ]
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "PolicyName": "SnapshoterSnapshotProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole131B7131D",
+ "Roles": [
+ {
+ "Ref": "SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD"
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderwaiterstatemachineRole76E414C5": {
+ "Type": "AWS::IAM::Role",
+ "Properties": {
+ "AssumeRolePolicyDocument": {
+ "Statement": [
+ {
+ "Action": "sts:AssumeRole",
+ "Effect": "Allow",
+ "Principal": {
+ "Service": "states.amazonaws.com"
+ }
+ }
+ ],
+ "Version": "2012-10-17"
+ }
+ }
+ },
+ "SnapshoterSnapshotProviderwaiterstatemachineRoleDefaultPolicyCF7716B2": {
+ "Type": "AWS::IAM::Policy",
+ "Properties": {
+ "PolicyDocument": {
+ "Statement": [
+ {
+ "Action": "lambda:InvokeFunction",
+ "Effect": "Allow",
+ "Resource": [
+ {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotProviderframeworkisComplete803B4F1B",
+ "Arn"
+ ]
+ },
+ {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotProviderframeworkonTimeout04342B00",
+ "Arn"
+ ]
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotProviderframeworkisComplete803B4F1B",
+ "Arn"
+ ]
+ },
+ ":*"
+ ]
+ ]
+ },
+ {
+ "Fn::Join": [
+ "",
+ [
+ {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotProviderframeworkonTimeout04342B00",
+ "Arn"
+ ]
+ },
+ ":*"
+ ]
+ ]
+ }
+ ]
+ },
+ {
+ "Action": [
+ "logs:CreateLogDelivery",
+ "logs:CreateLogStream",
+ "logs:DeleteLogDelivery",
+ "logs:DescribeLogGroups",
+ "logs:DescribeResourcePolicies",
+ "logs:GetLogDelivery",
+ "logs:ListLogDeliveries",
+ "logs:PutLogEvents",
+ "logs:PutResourcePolicy",
+ "logs:UpdateLogDelivery"
+ ],
+ "Effect": "Allow",
+ "Resource": "*"
+ }
+ ],
+ "Version": "2012-10-17"
+ },
+ "PolicyName": "SnapshoterSnapshotProviderwaiterstatemachineRoleDefaultPolicyCF7716B2",
+ "Roles": [
+ {
+ "Ref": "SnapshoterSnapshotProviderwaiterstatemachineRole76E414C5"
+ }
+ ]
+ }
+ },
+ "SnapshoterSnapshotProviderwaiterstatemachineLogGroup5A64CAF9": {
+ "Type": "AWS::Logs::LogGroup",
+ "Properties": {
+ "LogGroupName": {
+ "Fn::Join": [
+ "",
+ [
+ "/aws/vendedlogs/states/waiter-state-machine-",
+ {
+ "Ref": "SnapshoterSnapshotProviderframeworkisComplete803B4F1B"
+ },
+ "-c8ad22c7c1daa0d93478ad24e3952ba30a920d51af"
+ ]
+ ]
+ },
+ "RetentionInDays": 731
+ },
+ "UpdateReplacePolicy": "Retain",
+ "DeletionPolicy": "Retain"
+ },
+ "SnapshoterSnapshotProviderwaiterstatemachineE1F05D1F": {
+ "Type": "AWS::StepFunctions::StateMachine",
+ "Properties": {
+ "DefinitionString": {
+ "Fn::Join": [
+ "",
+ [
+ "{\"StartAt\":\"framework-isComplete-task\",\"States\":{\"framework-isComplete-task\":{\"End\":true,\"Retry\":[{\"ErrorEquals\":[\"States.ALL\"],\"IntervalSeconds\":5,\"MaxAttempts\":360,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"",
+ {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotProviderframeworkisComplete803B4F1B",
+ "Arn"
+ ]
+ },
+ "\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"",
+ {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotProviderframeworkonTimeout04342B00",
+ "Arn"
+ ]
+ },
+ "\"}}}"
+ ]
+ ]
+ },
+ "LoggingConfiguration": {
+ "Destinations": [
+ {
+ "CloudWatchLogsLogGroup": {
+ "LogGroupArn": {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotProviderwaiterstatemachineLogGroup5A64CAF9",
+ "Arn"
+ ]
+ }
+ }
+ }
+ ],
+ "IncludeExecutionData": false,
+ "Level": "ERROR"
+ },
+ "RoleArn": {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotProviderwaiterstatemachineRole76E414C5",
+ "Arn"
+ ]
+ }
+ },
+ "DependsOn": [
+ "SnapshoterSnapshotProviderwaiterstatemachineRoleDefaultPolicyCF7716B2",
+ "SnapshoterSnapshotProviderwaiterstatemachineRole76E414C5"
+ ]
+ },
+ "SnapshoterSnapshotAA1755BE": {
+ "Type": "Custom::Snapshoter",
+ "Properties": {
+ "ServiceToken": {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotProviderframeworkonEventF0C0D052",
+ "Arn"
+ ]
+ },
+ "DBInstanceIdentifier": {
+ "Ref": "InstanceC1063A87"
+ },
+ "DBSnapshotIdentifier": "cdk-instance-engine-lifecycle-support-snapshot"
+ },
+ "UpdateReplacePolicy": "Delete",
+ "DeletionPolicy": "Delete"
+ },
+ "FromSnapshotSubnetGroupDEC72E9D": {
+ "Type": "AWS::RDS::DBSubnetGroup",
+ "Properties": {
+ "DBSubnetGroupDescription": "Subnet group for FromSnapshot database",
+ "SubnetIds": [
+ {
+ "Ref": "VpcPrivateSubnet1Subnet536B997A"
+ },
+ {
+ "Ref": "VpcPrivateSubnet2Subnet3788AAA1"
+ }
+ ]
+ }
+ },
+ "FromSnapshotSecurityGroup72F11E81": {
+ "Type": "AWS::EC2::SecurityGroup",
+ "Properties": {
+ "GroupDescription": "Security group for FromSnapshot database",
+ "SecurityGroupEgress": [
+ {
+ "CidrIp": "0.0.0.0/0",
+ "Description": "Allow all outbound traffic by default",
+ "IpProtocol": "-1"
+ }
+ ],
+ "VpcId": {
+ "Ref": "Vpc8378EB38"
+ }
+ }
+ },
+ "FromSnapshotEE0682C5": {
+ "Type": "AWS::RDS::DBInstance",
+ "Properties": {
+ "AllocatedStorage": "100",
+ "CopyTagsToSnapshot": true,
+ "DBInstanceClass": "db.t3.small",
+ "DBSnapshotIdentifier": {
+ "Fn::GetAtt": [
+ "SnapshoterSnapshotAA1755BE",
+ "DBSnapshotArn"
+ ]
+ },
+ "DBSubnetGroupName": {
+ "Ref": "FromSnapshotSubnetGroupDEC72E9D"
+ },
+ "Engine": "mysql",
+ "EngineLifecycleSupport": "open-source-rds-extended-support-disabled",
+ "EngineVersion": "8.4.5",
+ "StorageType": "gp2",
+ "VPCSecurityGroups": [
+ {
+ "Fn::GetAtt": [
+ "FromSnapshotSecurityGroup72F11E81",
+ "GroupId"
+ ]
+ }
+ ]
+ },
+ "UpdateReplacePolicy": "Delete",
+ "DeletionPolicy": "Delete"
+ },
+ "ReadReplicaSubnetGroup680C605C": {
+ "Type": "AWS::RDS::DBSubnetGroup",
+ "Properties": {
+ "DBSubnetGroupDescription": "Subnet group for ReadReplica database",
+ "SubnetIds": [
+ {
+ "Ref": "VpcPrivateSubnet1Subnet536B997A"
+ },
+ {
+ "Ref": "VpcPrivateSubnet2Subnet3788AAA1"
+ }
+ ]
+ }
+ },
+ "ReadReplicaSecurityGroupF624C7FA": {
+ "Type": "AWS::EC2::SecurityGroup",
+ "Properties": {
+ "GroupDescription": "Security group for ReadReplica database",
+ "SecurityGroupEgress": [
+ {
+ "CidrIp": "0.0.0.0/0",
+ "Description": "Allow all outbound traffic by default",
+ "IpProtocol": "-1"
+ }
+ ],
+ "VpcId": {
+ "Ref": "Vpc8378EB38"
+ }
+ }
+ },
+ "ReadReplicaDA01B356": {
+ "Type": "AWS::RDS::DBInstance",
+ "Properties": {
+ "CopyTagsToSnapshot": true,
+ "DBInstanceClass": "db.t3.small",
+ "DBSubnetGroupName": {
+ "Ref": "ReadReplicaSubnetGroup680C605C"
+ },
+ "EngineLifecycleSupport": "open-source-rds-extended-support-disabled",
+ "SourceDBInstanceIdentifier": {
+ "Fn::Join": [
+ "",
+ [
+ "arn:",
+ {
+ "Ref": "AWS::Partition"
+ },
+ ":rds:",
+ {
+ "Ref": "AWS::Region"
+ },
+ ":",
+ {
+ "Ref": "AWS::AccountId"
+ },
+ ":db:",
+ {
+ "Ref": "FromSnapshotEE0682C5"
+ }
+ ]
+ ]
+ },
+ "StorageType": "gp2",
+ "VPCSecurityGroups": [
+ {
+ "Fn::GetAtt": [
+ "ReadReplicaSecurityGroupF624C7FA",
+ "GroupId"
+ ]
+ }
+ ]
+ },
+ "UpdateReplacePolicy": "Delete",
+ "DeletionPolicy": "Delete"
+ }
+ },
+ "Mappings": {
+ "LatestNodeRuntimeMap": {
+ "af-south-1": {
+ "value": "nodejs22.x"
+ },
+ "ap-east-1": {
+ "value": "nodejs22.x"
+ },
+ "ap-east-2": {
+ "value": "nodejs22.x"
+ },
+ "ap-northeast-1": {
+ "value": "nodejs22.x"
+ },
+ "ap-northeast-2": {
+ "value": "nodejs22.x"
+ },
+ "ap-northeast-3": {
+ "value": "nodejs22.x"
+ },
+ "ap-south-1": {
+ "value": "nodejs22.x"
+ },
+ "ap-south-2": {
+ "value": "nodejs22.x"
+ },
+ "ap-southeast-1": {
+ "value": "nodejs22.x"
+ },
+ "ap-southeast-2": {
+ "value": "nodejs22.x"
+ },
+ "ap-southeast-3": {
+ "value": "nodejs22.x"
+ },
+ "ap-southeast-4": {
+ "value": "nodejs22.x"
+ },
+ "ap-southeast-5": {
+ "value": "nodejs22.x"
+ },
+ "ap-southeast-7": {
+ "value": "nodejs22.x"
+ },
+ "ca-central-1": {
+ "value": "nodejs22.x"
+ },
+ "ca-west-1": {
+ "value": "nodejs22.x"
+ },
+ "cn-north-1": {
+ "value": "nodejs22.x"
+ },
+ "cn-northwest-1": {
+ "value": "nodejs22.x"
+ },
+ "eu-central-1": {
+ "value": "nodejs22.x"
+ },
+ "eu-central-2": {
+ "value": "nodejs22.x"
+ },
+ "eu-isoe-west-1": {
+ "value": "nodejs18.x"
+ },
+ "eu-north-1": {
+ "value": "nodejs22.x"
+ },
+ "eu-south-1": {
+ "value": "nodejs22.x"
+ },
+ "eu-south-2": {
+ "value": "nodejs22.x"
+ },
+ "eu-west-1": {
+ "value": "nodejs22.x"
+ },
+ "eu-west-2": {
+ "value": "nodejs22.x"
+ },
+ "eu-west-3": {
+ "value": "nodejs22.x"
+ },
+ "il-central-1": {
+ "value": "nodejs22.x"
+ },
+ "me-central-1": {
+ "value": "nodejs22.x"
+ },
+ "me-south-1": {
+ "value": "nodejs22.x"
+ },
+ "mx-central-1": {
+ "value": "nodejs22.x"
+ },
+ "sa-east-1": {
+ "value": "nodejs22.x"
+ },
+ "us-east-1": {
+ "value": "nodejs22.x"
+ },
+ "us-east-2": {
+ "value": "nodejs22.x"
+ },
+ "us-gov-east-1": {
+ "value": "nodejs22.x"
+ },
+ "us-gov-west-1": {
+ "value": "nodejs22.x"
+ },
+ "us-iso-east-1": {
+ "value": "nodejs18.x"
+ },
+ "us-iso-west-1": {
+ "value": "nodejs18.x"
+ },
+ "us-isob-east-1": {
+ "value": "nodejs18.x"
+ },
+ "us-isob-west-1": {
+ "value": "nodejs18.x"
+ },
+ "us-west-1": {
+ "value": "nodejs22.x"
+ },
+ "us-west-2": {
+ "value": "nodejs22.x"
+ }
+ }
+ },
+ "Parameters": {
+ "BootstrapVersion": {
+ "Type": "AWS::SSM::Parameter::Value",
+ "Default": "/cdk-bootstrap/hnb659fds/version",
+ "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"
+ }
+ },
+ "Rules": {
+ "CheckBootstrapVersion": {
+ "Assertions": [
+ {
+ "Assert": {
+ "Fn::Not": [
+ {
+ "Fn::Contains": [
+ [
+ "1",
+ "2",
+ "3",
+ "4",
+ "5"
+ ],
+ {
+ "Ref": "BootstrapVersion"
+ }
+ ]
+ }
+ ]
+ },
+ "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdk.out
new file mode 100644
index 0000000000000..b3a26d44a5f73
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdk.out
@@ -0,0 +1 @@
+{"version":"44.0.0"}
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC.assets.json
new file mode 100644
index 0000000000000..b15c20c7a558d
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC.assets.json
@@ -0,0 +1,20 @@
+{
+ "version": "44.0.0",
+ "files": {
+ "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": {
+ "displayName": "cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC Template",
+ "source": {
+ "path": "cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC.template.json",
+ "packaging": "file"
+ },
+ "destinations": {
+ "current_account-current_region": {
+ "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
+ "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json",
+ "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
+ }
+ }
+ }
+ },
+ "dockerImages": {}
+}
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC.template.json
new file mode 100644
index 0000000000000..ad9d0fb73d1dd
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC.template.json
@@ -0,0 +1,36 @@
+{
+ "Parameters": {
+ "BootstrapVersion": {
+ "Type": "AWS::SSM::Parameter::Value",
+ "Default": "/cdk-bootstrap/hnb659fds/version",
+ "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"
+ }
+ },
+ "Rules": {
+ "CheckBootstrapVersion": {
+ "Assertions": [
+ {
+ "Assert": {
+ "Fn::Not": [
+ {
+ "Fn::Contains": [
+ [
+ "1",
+ "2",
+ "3",
+ "4",
+ "5"
+ ],
+ {
+ "Ref": "BootstrapVersion"
+ }
+ ]
+ }
+ ]
+ },
+ "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/integ.json
new file mode 100644
index 0000000000000..1247c21e7c568
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/integ.json
@@ -0,0 +1,13 @@
+{
+ "version": "44.0.0",
+ "testCases": {
+ "cdk-instance-engine-lifecycle-support-test/DefaultTest": {
+ "stacks": [
+ "cdk-instance-engine-lifecycle-support"
+ ],
+ "assertionStack": "cdk-instance-engine-lifecycle-support-test/DefaultTest/DeployAssert",
+ "assertionStackName": "cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC"
+ }
+ },
+ "minimumCliVersion": "2.1018.0"
+}
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/manifest.json
new file mode 100644
index 0000000000000..ab6923ac15678
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/manifest.json
@@ -0,0 +1,1735 @@
+{
+ "version": "44.0.0",
+ "artifacts": {
+ "cdk-instance-engine-lifecycle-support.assets": {
+ "type": "cdk:asset-manifest",
+ "properties": {
+ "file": "cdk-instance-engine-lifecycle-support.assets.json",
+ "requiresBootstrapStackVersion": 6,
+ "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
+ }
+ },
+ "cdk-instance-engine-lifecycle-support": {
+ "type": "aws:cloudformation:stack",
+ "environment": "aws://unknown-account/unknown-region",
+ "properties": {
+ "templateFile": "cdk-instance-engine-lifecycle-support.template.json",
+ "terminationProtection": false,
+ "validateOnSynth": false,
+ "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
+ "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
+ "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/1cf375a44b61de7f3f6546ece6163df02d1242fae6da50f93a58e255b5b11892.json",
+ "requiresBootstrapStackVersion": 6,
+ "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
+ "additionalDependencies": [
+ "cdk-instance-engine-lifecycle-support.assets"
+ ],
+ "lookupRole": {
+ "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}",
+ "requiresBootstrapStackVersion": 8,
+ "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
+ }
+ },
+ "dependencies": [
+ "cdk-instance-engine-lifecycle-support.assets"
+ ],
+ "metadata": {
+ "/cdk-instance-engine-lifecycle-support/Vpc": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "maxAzs": "*",
+ "natGateways": "*",
+ "restrictDefaultSecurityGroup": false
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "Vpc8378EB38"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "availabilityZone": "*",
+ "vpcId": "*",
+ "cidrBlock": "*",
+ "mapPublicIpOnLaunch": true,
+ "ipv6CidrBlock": "*",
+ "assignIpv6AddressOnCreation": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "availabilityZone": "*",
+ "vpcId": "*",
+ "cidrBlock": "*",
+ "mapPublicIpOnLaunch": true,
+ "ipv6CidrBlock": "*",
+ "assignIpv6AddressOnCreation": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {}
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addNatGateway": [
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/Subnet": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPublicSubnet1Subnet5C2D37C4"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/RouteTable": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPublicSubnet1RouteTable6C95E38E"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/RouteTableAssociation": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPublicSubnet1RouteTableAssociation97140677"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/DefaultRoute": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPublicSubnet1DefaultRoute3DA9E72A"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/EIP": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPublicSubnet1EIPD7E02669"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/NATGateway": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPublicSubnet1NATGateway4D7517AA"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "availabilityZone": "*",
+ "vpcId": "*",
+ "cidrBlock": "*",
+ "mapPublicIpOnLaunch": true,
+ "ipv6CidrBlock": "*",
+ "assignIpv6AddressOnCreation": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "availabilityZone": "*",
+ "vpcId": "*",
+ "cidrBlock": "*",
+ "mapPublicIpOnLaunch": true,
+ "ipv6CidrBlock": "*",
+ "assignIpv6AddressOnCreation": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {}
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2/Subnet": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPublicSubnet2Subnet691E08A3"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2/RouteTable": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPublicSubnet2RouteTable94F7E489"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2/RouteTableAssociation": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPublicSubnet2RouteTableAssociationDD5762D8"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2/DefaultRoute": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPublicSubnet2DefaultRoute97F91067"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "availabilityZone": "*",
+ "vpcId": "*",
+ "cidrBlock": "*",
+ "mapPublicIpOnLaunch": false,
+ "ipv6CidrBlock": "*",
+ "assignIpv6AddressOnCreation": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "availabilityZone": "*",
+ "vpcId": "*",
+ "cidrBlock": "*",
+ "mapPublicIpOnLaunch": false,
+ "ipv6CidrBlock": "*",
+ "assignIpv6AddressOnCreation": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {}
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1/Subnet": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPrivateSubnet1Subnet536B997A"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1/RouteTable": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPrivateSubnet1RouteTableB2C5B500"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1/RouteTableAssociation": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPrivateSubnet1RouteTableAssociation70C59FA6"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1/DefaultRoute": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPrivateSubnet1DefaultRouteBE02A9ED"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "availabilityZone": "*",
+ "vpcId": "*",
+ "cidrBlock": "*",
+ "mapPublicIpOnLaunch": false,
+ "ipv6CidrBlock": "*",
+ "assignIpv6AddressOnCreation": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "availabilityZone": "*",
+ "vpcId": "*",
+ "cidrBlock": "*",
+ "mapPublicIpOnLaunch": false,
+ "ipv6CidrBlock": "*",
+ "assignIpv6AddressOnCreation": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {}
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2/Subnet": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPrivateSubnet2Subnet3788AAA1"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2/RouteTable": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPrivateSubnet2RouteTableA678073B"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2/RouteTableAssociation": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPrivateSubnet2RouteTableAssociationA89CAD56"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2/DefaultRoute": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcPrivateSubnet2DefaultRoute060D2087"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/IGW": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcIGWD7BA715C"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Vpc/VPCGW": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "VpcVPCGWBF912B6E"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Instance": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "engine": {
+ "engineType": "*",
+ "singleUserRotationApplication": "*",
+ "engineVersion": {
+ "fullVersion": "*",
+ "majorVersion": "*"
+ },
+ "parameterGroupFamily": "*",
+ "engineFamily": "*",
+ "supportsReadReplicaBackups": true
+ },
+ "instanceType": "*",
+ "vpc": "*",
+ "removalPolicy": "destroy"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Instance/SubnetGroup": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "description": "*",
+ "vpc": "*",
+ "vpcSubnets": "*",
+ "removalPolicy": "*"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Instance/SubnetGroup/Default": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "InstanceSubnetGroupF2CBA54F"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Instance/SecurityGroup": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "description": "*",
+ "vpc": "*"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Instance/SecurityGroup/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "InstanceSecurityGroupB4E5FA83"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Instance/Secret": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "encryptionKey": "*",
+ "secretName": "*",
+ "replicaRegions": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "username": "*",
+ "secretName": "*",
+ "encryptionKey": "*",
+ "excludeCharacters": "*",
+ "replaceOnPasswordCriteriaChanges": "*",
+ "replicaRegions": "*"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Instance/Secret/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "InstanceSecret478E0A47"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Instance/Secret/Attachment": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "secret": "*",
+ "target": "*"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Instance/Secret/Attachment/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "InstanceSecretAttachment83BEE581"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Instance/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "InstanceC1063A87"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "code": "*",
+ "runtime": "*",
+ "handler": "*",
+ "initialPolicy": "*"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/ServiceRole": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "assumedBy": {
+ "principalAccount": "*",
+ "assumeRoleAction": "*"
+ },
+ "managedPolicies": [
+ {
+ "managedPolicyArn": "*"
+ }
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addToPrincipalPolicy": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/ServiceRole/ImportServiceRole": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/ServiceRole/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterOnEventHandlerServiceRole7F84B26D"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/ServiceRole/DefaultPolicy": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/ServiceRole/DefaultPolicy/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterOnEventHandlerServiceRoleDefaultPolicyAF0DFD57"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterOnEventHandlerDF82DF85"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "code": "*",
+ "runtime": "*",
+ "handler": "*",
+ "initialPolicy": "*"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler/ServiceRole": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "assumedBy": {
+ "principalAccount": "*",
+ "assumeRoleAction": "*"
+ },
+ "managedPolicies": [
+ {
+ "managedPolicyArn": "*"
+ }
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addToPrincipalPolicy": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler/ServiceRole/ImportServiceRole": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler/ServiceRole/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterIsCompleteHandlerServiceRole40F5F1A8"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler/ServiceRole/DefaultPolicy": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler/ServiceRole/DefaultPolicy/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterIsCompleteHandlerServiceRoleDefaultPolicyA43EB222"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterIsCompleteHandler93DE2591"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "code": "*",
+ "description": "*",
+ "runtime": "*",
+ "handler": "*",
+ "timeout": "*",
+ "logGroup": "*",
+ "vpc": "*",
+ "vpcSubnets": "*",
+ "securityGroups": "*",
+ "role": "*",
+ "functionName": "*",
+ "environmentEncryption": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addEnvironment": [
+ "*",
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addEnvironment": [
+ "*",
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addEnvironment": [
+ "*",
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "assumedBy": {
+ "principalAccount": "*",
+ "assumeRoleAction": "*"
+ },
+ "managedPolicies": [
+ {
+ "managedPolicyArn": "*"
+ }
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addToPrincipalPolicy": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addToPrincipalPolicy": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addToPrincipalPolicy": [
+ {}
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/ImportServiceRole": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/DefaultPolicy": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkonEventServiceRoleDefaultPolicy21CE9686"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkonEventF0C0D052"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/inlinePolicyAddedToExecutionRole-0": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "statements": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/inlinePolicyAddedToExecutionRole-0/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkonEventinlinePolicyAddedToExecutionRole079D50682"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/inlinePolicyAddedToExecutionRole-1": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "statements": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/inlinePolicyAddedToExecutionRole-1/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkonEventinlinePolicyAddedToExecutionRole178584C7C"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "code": "*",
+ "description": "*",
+ "runtime": "*",
+ "handler": "*",
+ "timeout": "*",
+ "logGroup": "*",
+ "vpc": "*",
+ "vpcSubnets": "*",
+ "securityGroups": "*",
+ "role": "*",
+ "functionName": "*",
+ "environmentEncryption": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addEnvironment": [
+ "*",
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addEnvironment": [
+ "*",
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "assumedBy": {
+ "principalAccount": "*",
+ "assumeRoleAction": "*"
+ },
+ "managedPolicies": [
+ {
+ "managedPolicyArn": "*"
+ }
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addToPrincipalPolicy": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addToPrincipalPolicy": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/ImportServiceRole": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/DefaultPolicy": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/DefaultPolicy/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkisCompleteServiceRoleDefaultPolicyF410E478"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkisComplete803B4F1B"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/inlinePolicyAddedToExecutionRole-0": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "statements": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/inlinePolicyAddedToExecutionRole-0/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkisCompleteinlinePolicyAddedToExecutionRole060DC0CFE"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/inlinePolicyAddedToExecutionRole-1": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "statements": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/inlinePolicyAddedToExecutionRole-1/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkisCompleteinlinePolicyAddedToExecutionRole1AD853F80"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "code": "*",
+ "description": "*",
+ "runtime": "*",
+ "handler": "*",
+ "timeout": "*",
+ "logGroup": "*",
+ "vpc": "*",
+ "vpcSubnets": "*",
+ "securityGroups": "*",
+ "role": "*",
+ "functionName": "*",
+ "environmentEncryption": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addEnvironment": [
+ "*",
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addEnvironment": [
+ "*",
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "assumedBy": {
+ "principalAccount": "*",
+ "assumeRoleAction": "*"
+ },
+ "managedPolicies": [
+ {
+ "managedPolicyArn": "*"
+ }
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addToPrincipalPolicy": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addToPrincipalPolicy": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/ImportServiceRole": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/DefaultPolicy": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/DefaultPolicy/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkonTimeoutServiceRoleDefaultPolicy05DF1C30"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkonTimeout04342B00"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/inlinePolicyAddedToExecutionRole-0": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "statements": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/inlinePolicyAddedToExecutionRole-0/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole0D9321580"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/inlinePolicyAddedToExecutionRole-1": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "statements": "*"
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/inlinePolicyAddedToExecutionRole-1/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole131B7131D"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/Role": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "assumedBy": {
+ "principalAccount": "*",
+ "assumeRoleAction": "*"
+ }
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addToPrincipalPolicy": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachInlinePolicy": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addToPrincipalPolicy": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addToPrincipalPolicy": [
+ {}
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/Role/ImportRole": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/Role/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderwaiterstatemachineRole76E414C5"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/Role/DefaultPolicy": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "attachToRole": [
+ "*"
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": {
+ "addStatements": [
+ {}
+ ]
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/Role/DefaultPolicy/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderwaiterstatemachineRoleDefaultPolicyCF7716B2"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/LogGroup": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "logGroupName": "*"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/LogGroup/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderwaiterstatemachineLogGroup5A64CAF9"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotProviderwaiterstatemachineE1F05D1F"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/Snapshot": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": "*"
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": "*"
+ },
+ {
+ "type": "aws:cdk:analytics:method",
+ "data": "*"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/Snapshoter/Snapshot/Default": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "SnapshoterSnapshotAA1755BE"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/LatestNodeRuntimeMap": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "LatestNodeRuntimeMap"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/FromSnapshot": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "snapshotIdentifier": "*",
+ "engine": {
+ "engineType": "*",
+ "singleUserRotationApplication": "*",
+ "engineVersion": {
+ "fullVersion": "*",
+ "majorVersion": "*"
+ },
+ "parameterGroupFamily": "*",
+ "engineFamily": "*",
+ "supportsReadReplicaBackups": true
+ },
+ "instanceType": "*",
+ "vpc": "*",
+ "removalPolicy": "destroy"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/FromSnapshot/SubnetGroup": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "description": "*",
+ "vpc": "*",
+ "vpcSubnets": "*",
+ "removalPolicy": "*"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/FromSnapshot/SubnetGroup/Default": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "FromSnapshotSubnetGroupDEC72E9D"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/FromSnapshot/SecurityGroup": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "description": "*",
+ "vpc": "*"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/FromSnapshot/SecurityGroup/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "FromSnapshotSecurityGroup72F11E81"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/FromSnapshot/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "FromSnapshotEE0682C5"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/ReadReplica": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "sourceDatabaseInstance": "*",
+ "instanceType": "*",
+ "vpc": "*",
+ "removalPolicy": "destroy"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/ReadReplica/SubnetGroup": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "description": "*",
+ "vpc": "*",
+ "vpcSubnets": "*",
+ "removalPolicy": "*"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/ReadReplica/SubnetGroup/Default": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "ReadReplicaSubnetGroup680C605C"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/ReadReplica/SecurityGroup": [
+ {
+ "type": "aws:cdk:analytics:construct",
+ "data": {
+ "description": "*",
+ "vpc": "*"
+ }
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/ReadReplica/SecurityGroup/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "ReadReplicaSecurityGroupF624C7FA"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/ReadReplica/Resource": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "ReadReplicaDA01B356"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/BootstrapVersion": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "BootstrapVersion"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support/CheckBootstrapVersion": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "CheckBootstrapVersion"
+ }
+ ]
+ },
+ "displayName": "cdk-instance-engine-lifecycle-support"
+ },
+ "cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC.assets": {
+ "type": "cdk:asset-manifest",
+ "properties": {
+ "file": "cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC.assets.json",
+ "requiresBootstrapStackVersion": 6,
+ "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
+ }
+ },
+ "cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC": {
+ "type": "aws:cloudformation:stack",
+ "environment": "aws://unknown-account/unknown-region",
+ "properties": {
+ "templateFile": "cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC.template.json",
+ "terminationProtection": false,
+ "validateOnSynth": false,
+ "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
+ "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
+ "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json",
+ "requiresBootstrapStackVersion": 6,
+ "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
+ "additionalDependencies": [
+ "cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC.assets"
+ ],
+ "lookupRole": {
+ "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}",
+ "requiresBootstrapStackVersion": 8,
+ "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version"
+ }
+ },
+ "dependencies": [
+ "cdkinstanceenginelifecyclesupporttestDefaultTestDeployAssert3026BBCC.assets"
+ ],
+ "metadata": {
+ "/cdk-instance-engine-lifecycle-support-test/DefaultTest/DeployAssert/BootstrapVersion": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "BootstrapVersion"
+ }
+ ],
+ "/cdk-instance-engine-lifecycle-support-test/DefaultTest/DeployAssert/CheckBootstrapVersion": [
+ {
+ "type": "aws:cdk:logicalId",
+ "data": "CheckBootstrapVersion"
+ }
+ ]
+ },
+ "displayName": "cdk-instance-engine-lifecycle-support-test/DefaultTest/DeployAssert"
+ },
+ "Tree": {
+ "type": "cdk:tree",
+ "properties": {
+ "file": "tree.json"
+ }
+ }
+ },
+ "minimumCliVersion": "2.1018.0"
+}
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/tree.json
new file mode 100644
index 0000000000000..b549b3c711d0c
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.js.snapshot/tree.json
@@ -0,0 +1 @@
+{"version":"tree-0.1","tree":{"id":"App","path":"","constructInfo":{"fqn":"aws-cdk-lib.App","version":"0.0.0"},"children":{"cdk-instance-engine-lifecycle-support":{"id":"cdk-instance-engine-lifecycle-support","path":"cdk-instance-engine-lifecycle-support","constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"},"children":{"Vpc":{"id":"Vpc","path":"cdk-instance-engine-lifecycle-support/Vpc","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.Vpc","version":"0.0.0","metadata":[{"maxAzs":"*","natGateways":"*","restrictDefaultSecurityGroup":false}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Vpc/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPC","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::VPC","aws:cdk:cloudformation:props":{"cidrBlock":"10.0.0.0/16","enableDnsHostnames":true,"enableDnsSupport":true,"instanceTenancy":"default","tags":[{"key":"Name","value":"cdk-instance-engine-lifecycle-support/Vpc"}]}}},"PublicSubnet1":{"id":"PublicSubnet1","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PublicSubnet","version":"0.0.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{},{"addNatGateway":["*"]}]},"children":{"Subnet":{"id":"Subnet","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/Subnet","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[0,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.0.0/18","mapPublicIpOnLaunch":true,"tags":[{"key":"aws-cdk:subnet-name","value":"Public"},{"key":"aws-cdk:subnet-type","value":"Public"},{"key":"Name","value":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"Acl":{"id":"Acl","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/RouteTable","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/RouteTableAssociation","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"VpcPublicSubnet1RouteTable6C95E38E"},"subnetId":{"Ref":"VpcPublicSubnet1Subnet5C2D37C4"}}}},"DefaultRoute":{"id":"DefaultRoute","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/DefaultRoute","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","gatewayId":{"Ref":"VpcIGWD7BA715C"},"routeTableId":{"Ref":"VpcPublicSubnet1RouteTable6C95E38E"}}}},"EIP":{"id":"EIP","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/EIP","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnEIP","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::EIP","aws:cdk:cloudformation:props":{"domain":"vpc","tags":[{"key":"Name","value":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1"}]}}},"NATGateway":{"id":"NATGateway","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1/NATGateway","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnNatGateway","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::NatGateway","aws:cdk:cloudformation:props":{"allocationId":{"Fn::GetAtt":["VpcPublicSubnet1EIPD7E02669","AllocationId"]},"subnetId":{"Ref":"VpcPublicSubnet1Subnet5C2D37C4"},"tags":[{"key":"Name","value":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet1"}]}}}}},"PublicSubnet2":{"id":"PublicSubnet2","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PublicSubnet","version":"0.0.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]},"children":{"Subnet":{"id":"Subnet","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2/Subnet","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[1,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.64.0/18","mapPublicIpOnLaunch":true,"tags":[{"key":"aws-cdk:subnet-name","value":"Public"},{"key":"aws-cdk:subnet-type","value":"Public"},{"key":"Name","value":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"Acl":{"id":"Acl","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2/RouteTable","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2/RouteTableAssociation","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"VpcPublicSubnet2RouteTable94F7E489"},"subnetId":{"Ref":"VpcPublicSubnet2Subnet691E08A3"}}}},"DefaultRoute":{"id":"DefaultRoute","path":"cdk-instance-engine-lifecycle-support/Vpc/PublicSubnet2/DefaultRoute","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","gatewayId":{"Ref":"VpcIGWD7BA715C"},"routeTableId":{"Ref":"VpcPublicSubnet2RouteTable94F7E489"}}}}}},"PrivateSubnet1":{"id":"PrivateSubnet1","path":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PrivateSubnet","version":"0.0.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":false,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":false,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]},"children":{"Subnet":{"id":"Subnet","path":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1/Subnet","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[0,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.128.0/18","mapPublicIpOnLaunch":false,"tags":[{"key":"aws-cdk:subnet-name","value":"Private"},{"key":"aws-cdk:subnet-type","value":"Private"},{"key":"Name","value":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"Acl":{"id":"Acl","path":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1/RouteTable","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1/RouteTableAssociation","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"VpcPrivateSubnet1RouteTableB2C5B500"},"subnetId":{"Ref":"VpcPrivateSubnet1Subnet536B997A"}}}},"DefaultRoute":{"id":"DefaultRoute","path":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet1/DefaultRoute","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","natGatewayId":{"Ref":"VpcPublicSubnet1NATGateway4D7517AA"},"routeTableId":{"Ref":"VpcPrivateSubnet1RouteTableB2C5B500"}}}}}},"PrivateSubnet2":{"id":"PrivateSubnet2","path":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PrivateSubnet","version":"0.0.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":false,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":false,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]},"children":{"Subnet":{"id":"Subnet","path":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2/Subnet","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[1,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.192.0/18","mapPublicIpOnLaunch":false,"tags":[{"key":"aws-cdk:subnet-name","value":"Private"},{"key":"aws-cdk:subnet-type","value":"Private"},{"key":"Name","value":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"Acl":{"id":"Acl","path":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2/RouteTable","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2/RouteTableAssociation","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"VpcPrivateSubnet2RouteTableA678073B"},"subnetId":{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}}}},"DefaultRoute":{"id":"DefaultRoute","path":"cdk-instance-engine-lifecycle-support/Vpc/PrivateSubnet2/DefaultRoute","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","natGatewayId":{"Ref":"VpcPublicSubnet1NATGateway4D7517AA"},"routeTableId":{"Ref":"VpcPrivateSubnet2RouteTableA678073B"}}}}}},"IGW":{"id":"IGW","path":"cdk-instance-engine-lifecycle-support/Vpc/IGW","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnInternetGateway","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::InternetGateway","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"cdk-instance-engine-lifecycle-support/Vpc"}]}}},"VPCGW":{"id":"VPCGW","path":"cdk-instance-engine-lifecycle-support/Vpc/VPCGW","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPCGatewayAttachment","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::VPCGatewayAttachment","aws:cdk:cloudformation:props":{"internetGatewayId":{"Ref":"VpcIGWD7BA715C"},"vpcId":{"Ref":"Vpc8378EB38"}}}}}},"Instance":{"id":"Instance","path":"cdk-instance-engine-lifecycle-support/Instance","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.DatabaseInstance","version":"0.0.0","metadata":[{"engine":{"engineType":"*","singleUserRotationApplication":"*","engineVersion":{"fullVersion":"*","majorVersion":"*"},"parameterGroupFamily":"*","engineFamily":"*","supportsReadReplicaBackups":true},"instanceType":"*","vpc":"*","removalPolicy":"destroy"}]},"children":{"SubnetGroup":{"id":"SubnetGroup","path":"cdk-instance-engine-lifecycle-support/Instance/SubnetGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.SubnetGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*","vpcSubnets":"*","removalPolicy":"*"}]},"children":{"Default":{"id":"Default","path":"cdk-instance-engine-lifecycle-support/Instance/SubnetGroup/Default","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBSubnetGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBSubnetGroup","aws:cdk:cloudformation:props":{"dbSubnetGroupDescription":"Subnet group for Instance database","subnetIds":[{"Ref":"VpcPrivateSubnet1Subnet536B997A"},{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}]}}}}},"SecurityGroup":{"id":"SecurityGroup","path":"cdk-instance-engine-lifecycle-support/Instance/SecurityGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.SecurityGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Instance/SecurityGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroup","aws:cdk:cloudformation:props":{"groupDescription":"Security group for Instance database","securityGroupEgress":[{"cidrIp":"0.0.0.0/0","description":"Allow all outbound traffic by default","ipProtocol":"-1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}}}},"Secret":{"id":"Secret","path":"cdk-instance-engine-lifecycle-support/Instance/Secret","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.DatabaseSecret","version":"0.0.0","metadata":[{"encryptionKey":"*","secretName":"*","replicaRegions":"*"},{"username":"*","secretName":"*","encryptionKey":"*","excludeCharacters":"*","replaceOnPasswordCriteriaChanges":"*","replicaRegions":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Instance/Secret/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecret","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::Secret","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["Generated by the CDK for stack: ",{"Ref":"AWS::StackName"}]]},"generateSecretString":{"passwordLength":30,"secretStringTemplate":"{\"username\":\"admin\"}","generateStringKey":"password","excludeCharacters":" %+~`#$&*()|[]{}:;<>?!'/@\"\\"}}}},"Attachment":{"id":"Attachment","path":"cdk-instance-engine-lifecycle-support/Instance/Secret/Attachment","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.SecretTargetAttachment","version":"0.0.0","metadata":[{"secret":"*","target":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Instance/Secret/Attachment/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecretTargetAttachment","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::SecretTargetAttachment","aws:cdk:cloudformation:props":{"secretId":{"Ref":"InstanceSecret478E0A47"},"targetId":{"Ref":"InstanceC1063A87"},"targetType":"AWS::RDS::DBInstance"}}}}}}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Instance/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBInstance","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBInstance","aws:cdk:cloudformation:props":{"allocatedStorage":"100","copyTagsToSnapshot":true,"dbInstanceClass":"db.t3.small","dbSubnetGroupName":{"Ref":"InstanceSubnetGroupF2CBA54F"},"engine":"mysql","engineLifecycleSupport":"open-source-rds-extended-support","engineVersion":"8.4.5","masterUsername":{"Fn::Join":["",["{{resolve:secretsmanager:",{"Ref":"InstanceSecret478E0A47"},":SecretString:username::}}"]]},"masterUserPassword":{"Fn::Join":["",["{{resolve:secretsmanager:",{"Ref":"InstanceSecret478E0A47"},":SecretString:password::}}"]]},"storageType":"gp2","vpcSecurityGroups":[{"Fn::GetAtt":["InstanceSecurityGroupB4E5FA83","GroupId"]}]}}}}},"Snapshoter":{"id":"Snapshoter","path":"cdk-instance-engine-lifecycle-support/Snapshoter","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"},"children":{"OnEventHandler":{"id":"OnEventHandler","path":"cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","runtime":"*","handler":"*","initialPolicy":"*"}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":["rds:AddTagsToResource","rds:CreateDBSnapshot","rds:DeleteDBSnapshot"],"Effect":"Allow","Resource":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":db:",{"Ref":"InstanceC1063A87"}]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":snapshot:cdk-instance-engine-lifecycle-support-snapshot"]]}]}],"Version":"2012-10-17"},"policyName":"SnapshoterOnEventHandlerServiceRoleDefaultPolicyAF0DFD57","roles":[{"Ref":"SnapshoterOnEventHandlerServiceRole7F84B26D"}]}}}}}}},"Code":{"id":"Code","path":"cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"0.0.0"},"children":{"Stage":{"id":"Stage","path":"cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"0.0.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/OnEventHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"d614c4499efc5eae7ea93772f683afcb483222fb794cfe7d7566f792956aec2d.zip"},"handler":"index.onEventHandler","role":{"Fn::GetAtt":["SnapshoterOnEventHandlerServiceRole7F84B26D","Arn"]},"runtime":"nodejs22.x"}}}}},"IsCompleteHandler":{"id":"IsCompleteHandler","path":"cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","runtime":"*","handler":"*","initialPolicy":"*"}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"rds:DescribeDBSnapshots","Effect":"Allow","Resource":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":db:",{"Ref":"InstanceC1063A87"}]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":snapshot:cdk-instance-engine-lifecycle-support-snapshot"]]}]}],"Version":"2012-10-17"},"policyName":"SnapshoterIsCompleteHandlerServiceRoleDefaultPolicyA43EB222","roles":[{"Ref":"SnapshoterIsCompleteHandlerServiceRole40F5F1A8"}]}}}}}}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/IsCompleteHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"d614c4499efc5eae7ea93772f683afcb483222fb794cfe7d7566f792956aec2d.zip"},"handler":"index.isCompleteHandler","role":{"Fn::GetAtt":["SnapshoterIsCompleteHandlerServiceRole40F5F1A8","Arn"]},"runtime":"nodejs22.x"}}}}},"SnapshotProvider":{"id":"SnapshotProvider","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider","constructInfo":{"fqn":"aws-cdk-lib.custom_resources.Provider","version":"0.0.0"},"children":{"framework-onEvent":{"id":"framework-onEvent","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},":*"]]}]},{"Action":"states:StartExecution","Effect":"Allow","Resource":{"Ref":"SnapshoterSnapshotProviderwaiterstatemachineE1F05D1F"}}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkonEventServiceRoleDefaultPolicy21CE9686","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76"}]}}}}}}},"Code":{"id":"Code","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"0.0.0"},"children":{"Stage":{"id":"Stage","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"0.0.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"},"description":"AWS CDK resource provider framework - onEvent (cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},"WAITER_STATE_MACHINE_ARN":{"Ref":"SnapshoterSnapshotProviderwaiterstatemachineE1F05D1F"}}},"handler":"framework.onEvent","role":{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/inlinePolicyAddedToExecutionRole-0","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/inlinePolicyAddedToExecutionRole-0/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]}}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkonEventinlinePolicyAddedToExecutionRole079D50682","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76"}]}}}}},"inlinePolicyAddedToExecutionRole-1":{"id":"inlinePolicyAddedToExecutionRole-1","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/inlinePolicyAddedToExecutionRole-1","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onEvent/inlinePolicyAddedToExecutionRole-1/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]}}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkonEventinlinePolicyAddedToExecutionRole178584C7C","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkonEventServiceRole29C21F76"}]}}}}}}},"framework-isComplete":{"id":"framework-isComplete","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},":*"]]}]}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkisCompleteServiceRoleDefaultPolicyF410E478","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB"}]}}}}}}},"Code":{"id":"Code","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"0.0.0"},"children":{"Stage":{"id":"Stage","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"0.0.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"},"description":"AWS CDK resource provider framework - isComplete (cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]}}},"handler":"framework.isComplete","role":{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/inlinePolicyAddedToExecutionRole-0","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/inlinePolicyAddedToExecutionRole-0/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]}}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkisCompleteinlinePolicyAddedToExecutionRole060DC0CFE","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB"}]}}}}},"inlinePolicyAddedToExecutionRole-1":{"id":"inlinePolicyAddedToExecutionRole-1","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/inlinePolicyAddedToExecutionRole-1","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-isComplete/inlinePolicyAddedToExecutionRole-1/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]}}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkisCompleteinlinePolicyAddedToExecutionRole1AD853F80","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkisCompleteServiceRoleFAA9C6CB"}]}}}}}}},"framework-onTimeout":{"id":"framework-onTimeout","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},":*"]]}]}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkonTimeoutServiceRoleDefaultPolicy05DF1C30","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD"}]}}}}}}},"Code":{"id":"Code","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"0.0.0"},"children":{"Stage":{"id":"Stage","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"0.0.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"},"description":"AWS CDK resource provider framework - onTimeout (cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]}}},"handler":"framework.onTimeout","role":{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/inlinePolicyAddedToExecutionRole-0","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/inlinePolicyAddedToExecutionRole-0/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["SnapshoterOnEventHandlerDF82DF85","Arn"]}}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole0D9321580","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD"}]}}}}},"inlinePolicyAddedToExecutionRole-1":{"id":"inlinePolicyAddedToExecutionRole-1","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/inlinePolicyAddedToExecutionRole-1","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/framework-onTimeout/inlinePolicyAddedToExecutionRole-1/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["SnapshoterIsCompleteHandler93DE2591","Arn"]}}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole131B7131D","roles":[{"Ref":"SnapshoterSnapshotProviderframeworkonTimeoutServiceRole0B00A1BD"}]}}}}}}},"waiter-state-machine":{"id":"waiter-state-machine","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine","constructInfo":{"fqn":"aws-cdk-lib.custom_resources.WaiterStateMachine","version":"0.0.0"},"children":{"Role":{"id":"Role","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/Role","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"}},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]}]},"children":{"ImportRole":{"id":"ImportRole","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/Role/ImportRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/Role/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"states.amazonaws.com"}}],"Version":"2012-10-17"}}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/Role/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"0.0.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/Role/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkisComplete803B4F1B","Arn"]},{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonTimeout04342B00","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkisComplete803B4F1B","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonTimeout04342B00","Arn"]},":*"]]}]},{"Action":["logs:CreateLogDelivery","logs:CreateLogStream","logs:DeleteLogDelivery","logs:DescribeLogGroups","logs:DescribeResourcePolicies","logs:GetLogDelivery","logs:ListLogDeliveries","logs:PutLogEvents","logs:PutResourcePolicy","logs:UpdateLogDelivery"],"Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"SnapshoterSnapshotProviderwaiterstatemachineRoleDefaultPolicyCF7716B2","roles":[{"Ref":"SnapshoterSnapshotProviderwaiterstatemachineRole76E414C5"}]}}}}}}},"LogGroup":{"id":"LogGroup","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"0.0.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/vendedlogs/states/waiter-state-machine-",{"Ref":"SnapshoterSnapshotProviderframeworkisComplete803B4F1B"},"-c8ad22c7c1daa0d93478ad24e3952ba30a920d51af"]]},"retentionInDays":731}}}}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/Snapshoter/SnapshotProvider/waiter-state-machine/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_stepfunctions.CfnStateMachine","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::StepFunctions::StateMachine","aws:cdk:cloudformation:props":{"definitionString":{"Fn::Join":["",["{\"StartAt\":\"framework-isComplete-task\",\"States\":{\"framework-isComplete-task\":{\"End\":true,\"Retry\":[{\"ErrorEquals\":[\"States.ALL\"],\"IntervalSeconds\":5,\"MaxAttempts\":360,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkisComplete803B4F1B","Arn"]},"\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["SnapshoterSnapshotProviderframeworkonTimeout04342B00","Arn"]},"\"}}}"]]},"loggingConfiguration":{"destinations":[{"cloudWatchLogsLogGroup":{"logGroupArn":{"Fn::GetAtt":["SnapshoterSnapshotProviderwaiterstatemachineLogGroup5A64CAF9","Arn"]}}}],"includeExecutionData":false,"level":"ERROR"},"roleArn":{"Fn::GetAtt":["SnapshoterSnapshotProviderwaiterstatemachineRole76E414C5","Arn"]}}}}}}}},"Snapshot":{"id":"Snapshot","path":"cdk-instance-engine-lifecycle-support/Snapshoter/Snapshot","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"cdk-instance-engine-lifecycle-support/Snapshoter/Snapshot/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}}}}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"cdk-instance-engine-lifecycle-support/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"FromSnapshot":{"id":"FromSnapshot","path":"cdk-instance-engine-lifecycle-support/FromSnapshot","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.DatabaseInstanceFromSnapshot","version":"0.0.0","metadata":[{"snapshotIdentifier":"*","engine":{"engineType":"*","singleUserRotationApplication":"*","engineVersion":{"fullVersion":"*","majorVersion":"*"},"parameterGroupFamily":"*","engineFamily":"*","supportsReadReplicaBackups":true},"instanceType":"*","vpc":"*","removalPolicy":"destroy"}]},"children":{"SubnetGroup":{"id":"SubnetGroup","path":"cdk-instance-engine-lifecycle-support/FromSnapshot/SubnetGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.SubnetGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*","vpcSubnets":"*","removalPolicy":"*"}]},"children":{"Default":{"id":"Default","path":"cdk-instance-engine-lifecycle-support/FromSnapshot/SubnetGroup/Default","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBSubnetGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBSubnetGroup","aws:cdk:cloudformation:props":{"dbSubnetGroupDescription":"Subnet group for FromSnapshot database","subnetIds":[{"Ref":"VpcPrivateSubnet1Subnet536B997A"},{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}]}}}}},"SecurityGroup":{"id":"SecurityGroup","path":"cdk-instance-engine-lifecycle-support/FromSnapshot/SecurityGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.SecurityGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/FromSnapshot/SecurityGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroup","aws:cdk:cloudformation:props":{"groupDescription":"Security group for FromSnapshot database","securityGroupEgress":[{"cidrIp":"0.0.0.0/0","description":"Allow all outbound traffic by default","ipProtocol":"-1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}}}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/FromSnapshot/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBInstance","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBInstance","aws:cdk:cloudformation:props":{"allocatedStorage":"100","copyTagsToSnapshot":true,"dbInstanceClass":"db.t3.small","dbSnapshotIdentifier":{"Fn::GetAtt":["SnapshoterSnapshotAA1755BE","DBSnapshotArn"]},"dbSubnetGroupName":{"Ref":"FromSnapshotSubnetGroupDEC72E9D"},"engine":"mysql","engineLifecycleSupport":"open-source-rds-extended-support-disabled","engineVersion":"8.4.5","storageType":"gp2","vpcSecurityGroups":[{"Fn::GetAtt":["FromSnapshotSecurityGroup72F11E81","GroupId"]}]}}}}},"ReadReplica":{"id":"ReadReplica","path":"cdk-instance-engine-lifecycle-support/ReadReplica","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.DatabaseInstanceReadReplica","version":"0.0.0","metadata":[{"sourceDatabaseInstance":"*","instanceType":"*","vpc":"*","removalPolicy":"destroy"}]},"children":{"SubnetGroup":{"id":"SubnetGroup","path":"cdk-instance-engine-lifecycle-support/ReadReplica/SubnetGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.SubnetGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*","vpcSubnets":"*","removalPolicy":"*"}]},"children":{"Default":{"id":"Default","path":"cdk-instance-engine-lifecycle-support/ReadReplica/SubnetGroup/Default","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBSubnetGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBSubnetGroup","aws:cdk:cloudformation:props":{"dbSubnetGroupDescription":"Subnet group for ReadReplica database","subnetIds":[{"Ref":"VpcPrivateSubnet1Subnet536B997A"},{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}]}}}}},"SecurityGroup":{"id":"SecurityGroup","path":"cdk-instance-engine-lifecycle-support/ReadReplica/SecurityGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.SecurityGroup","version":"0.0.0","metadata":[{"description":"*","vpc":"*"}]},"children":{"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/ReadReplica/SecurityGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroup","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroup","aws:cdk:cloudformation:props":{"groupDescription":"Security group for ReadReplica database","securityGroupEgress":[{"cidrIp":"0.0.0.0/0","description":"Allow all outbound traffic by default","ipProtocol":"-1"}],"vpcId":{"Ref":"Vpc8378EB38"}}}}}},"Resource":{"id":"Resource","path":"cdk-instance-engine-lifecycle-support/ReadReplica/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_rds.CfnDBInstance","version":"0.0.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::RDS::DBInstance","aws:cdk:cloudformation:props":{"copyTagsToSnapshot":true,"dbInstanceClass":"db.t3.small","dbSubnetGroupName":{"Ref":"ReadReplicaSubnetGroup680C605C"},"engineLifecycleSupport":"open-source-rds-extended-support-disabled","sourceDbInstanceIdentifier":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":rds:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":db:",{"Ref":"FromSnapshotEE0682C5"}]]},"storageType":"gp2","vpcSecurityGroups":[{"Fn::GetAtt":["ReadReplicaSecurityGroupF624C7FA","GroupId"]}]}}}}},"BootstrapVersion":{"id":"BootstrapVersion","path":"cdk-instance-engine-lifecycle-support/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"cdk-instance-engine-lifecycle-support/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}}},"cdk-instance-engine-lifecycle-support-test":{"id":"cdk-instance-engine-lifecycle-support-test","path":"cdk-instance-engine-lifecycle-support-test","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTest","version":"0.0.0"},"children":{"DefaultTest":{"id":"DefaultTest","path":"cdk-instance-engine-lifecycle-support-test/DefaultTest","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTestCase","version":"0.0.0"},"children":{"Default":{"id":"Default","path":"cdk-instance-engine-lifecycle-support-test/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"cdk-instance-engine-lifecycle-support-test/DefaultTest/DeployAssert","constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"},"children":{"BootstrapVersion":{"id":"BootstrapVersion","path":"cdk-instance-engine-lifecycle-support-test/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"cdk-instance-engine-lifecycle-support-test/DefaultTest/DeployAssert/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}}}}}}},"Tree":{"id":"Tree","path":"Tree","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}}}
\ No newline at end of file
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.ts
new file mode 100644
index 0000000000000..aa81795020bb3
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/integ.instance-engine-lifecycle-support.ts
@@ -0,0 +1,53 @@
+import * as ec2 from 'aws-cdk-lib/aws-ec2';
+import { App, RemovalPolicy, Stack } from 'aws-cdk-lib';
+import * as rds from 'aws-cdk-lib/aws-rds';
+import { IntegTest } from '@aws-cdk/integ-tests-alpha';
+import { InstanceSnapshoter } from './snapshoter';
+
+const app = new App({
+ postCliContext: {
+ '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': true,
+ '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
+ },
+});
+
+const stack = new Stack(app, 'cdk-instance-engine-lifecycle-support');
+
+const vpc = new ec2.Vpc(stack, 'Vpc', { maxAzs: 2, natGateways: 1, restrictDefaultSecurityGroup: false });
+
+const engine = rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_4_5 });
+const instanceType = ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE3, ec2.InstanceSize.SMALL);
+
+const sourceInstance = new rds.DatabaseInstance(stack, 'Instance', {
+ engine,
+ instanceType,
+ vpc,
+ removalPolicy: RemovalPolicy.DESTROY,
+ engineLifecycleSupport: rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT,
+});
+
+const snapshoter = new InstanceSnapshoter(stack, 'Snapshoter', {
+ instance: sourceInstance,
+ snapshotIdentifier: 'cdk-instance-engine-lifecycle-support-snapshot',
+});
+
+const restoredInstance = new rds.DatabaseInstanceFromSnapshot(stack, 'FromSnapshot', {
+ snapshotIdentifier: snapshoter.snapshotArn,
+ engine,
+ instanceType,
+ vpc,
+ removalPolicy: RemovalPolicy.DESTROY,
+ engineLifecycleSupport: rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED,
+});
+
+new rds.DatabaseInstanceReadReplica(stack, 'ReadReplica', {
+ sourceDatabaseInstance: restoredInstance,
+ instanceType,
+ vpc,
+ removalPolicy: RemovalPolicy.DESTROY,
+ engineLifecycleSupport: rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED,
+});
+
+new IntegTest(app, 'cdk-instance-engine-lifecycle-support-test', {
+ testCases: [stack],
+});
diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/snapshoter.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/snapshoter.ts
new file mode 100644
index 0000000000000..1f2a9b5b3f02b
--- /dev/null
+++ b/packages/@aws-cdk-testing/framework-integ/test/aws-rds/test/snapshoter.ts
@@ -0,0 +1,141 @@
+import * as path from 'path';
+import * as lambda from 'aws-cdk-lib/aws-lambda';
+import * as iam from 'aws-cdk-lib/aws-iam';
+import { ArnFormat, CustomResource, Stack } from 'aws-cdk-lib';
+import * as cr from 'aws-cdk-lib/custom-resources';
+import { Construct } from 'constructs';
+import * as rds from 'aws-cdk-lib/aws-rds';
+
+interface ClusterSnapshoterProps {
+ readonly cluster: rds.IDatabaseCluster;
+ readonly snapshotIdentifier: string;
+}
+
+export class ClusterSnapshoter extends Construct {
+ public readonly snapshotArn: string;
+
+ constructor(scope: Construct, id: string, props: ClusterSnapshoterProps) {
+ super(scope, id);
+
+ const clusterArn = Stack.of(this).formatArn({
+ service: 'rds',
+ resource: 'cluster',
+ resourceName: props.cluster.clusterIdentifier,
+ arnFormat: ArnFormat.COLON_RESOURCE_NAME,
+ });
+
+ const snapshotArn = Stack.of(this).formatArn({
+ service: 'rds',
+ resource: 'cluster-snapshot',
+ resourceName: props.snapshotIdentifier,
+ arnFormat: ArnFormat.COLON_RESOURCE_NAME,
+ });
+
+ const code = lambda.Code.fromAsset(path.join(__dirname, 'snapshot-handler'), { exclude: ['*.ts'] });
+ const onEventHandler = new lambda.Function(this, 'OnEventHandler', {
+ code,
+ runtime: lambda.Runtime.NODEJS_22_X,
+ handler: 'index.onEventHandler',
+ initialPolicy: [
+ new iam.PolicyStatement({
+ actions: ['rds:CreateDBClusterSnapshot', 'rds:AddTagsToResource', 'rds:DeleteDBClusterSnapshot'],
+ resources: [clusterArn, snapshotArn],
+ }),
+ ],
+ });
+
+ const isCompleteHandler = new lambda.Function(this, 'IsCompleteHandler', {
+ code,
+ runtime: lambda.Runtime.NODEJS_22_X,
+ handler: 'index.isCompleteHandler',
+ initialPolicy: [
+ new iam.PolicyStatement({
+ actions: ['rds:DescribeDBClusterSnapshots'],
+ resources: [clusterArn, snapshotArn],
+ }),
+ ],
+ });
+
+ const provider = new cr.Provider(this, 'SnapshotProvider', {
+ onEventHandler,
+ isCompleteHandler,
+ });
+
+ const customResource = new CustomResource(this, 'Snapshot', {
+ resourceType: 'Custom::Snapshoter',
+ serviceToken: provider.serviceToken,
+ properties: {
+ DBClusterIdentifier: props.cluster.clusterIdentifier,
+ DBClusterSnapshotIdentifier: props.snapshotIdentifier,
+ },
+ });
+ this.snapshotArn = customResource.getAttString('DBClusterSnapshotArn');
+ }
+}
+
+interface InstanceSnapshoterProps {
+ readonly instance: rds.IDatabaseInstance;
+ readonly snapshotIdentifier: string;
+}
+
+export class InstanceSnapshoter extends Construct {
+ public readonly snapshotArn: string;
+
+ constructor(scope: Construct, id: string, props: InstanceSnapshoterProps) {
+ super(scope, id);
+
+ const instanceArn = Stack.of(this).formatArn({
+ service: 'rds',
+ resource: 'db',
+ resourceName: props.instance.instanceIdentifier,
+ arnFormat: ArnFormat.COLON_RESOURCE_NAME,
+ });
+
+ const snapshotArn = Stack.of(this).formatArn({
+ service: 'rds',
+ resource: 'snapshot',
+ resourceName: props.snapshotIdentifier,
+ arnFormat: ArnFormat.COLON_RESOURCE_NAME,
+ });
+
+ const code = lambda.Code.fromAsset(path.join(__dirname, 'instance-snapshot-handler'), { exclude: ['*.ts'] });
+ const onEventHandler = new lambda.Function(this, 'OnEventHandler', {
+ code,
+ runtime: lambda.Runtime.NODEJS_22_X,
+ handler: 'index.onEventHandler',
+ initialPolicy: [
+ new iam.PolicyStatement({
+ actions: ['rds:CreateDBSnapshot', 'rds:AddTagsToResource', 'rds:DeleteDBSnapshot'],
+ resources: [instanceArn, snapshotArn],
+ }),
+ ],
+ });
+
+ const isCompleteHandler = new lambda.Function(this, 'IsCompleteHandler', {
+ code,
+ runtime: lambda.Runtime.NODEJS_22_X,
+ handler: 'index.isCompleteHandler',
+ initialPolicy: [
+ new iam.PolicyStatement({
+ actions: ['rds:DescribeDBSnapshots'],
+ resources: [instanceArn, snapshotArn],
+ }),
+ ],
+ });
+
+ const provider = new cr.Provider(this, 'SnapshotProvider', {
+ onEventHandler,
+ isCompleteHandler,
+ });
+
+ const customResource = new CustomResource(this, 'Snapshot', {
+ resourceType: 'Custom::Snapshoter',
+ serviceToken: provider.serviceToken,
+ properties: {
+ DBInstanceIdentifier: props.instance.instanceIdentifier,
+ DBSnapshotIdentifier: props.snapshotIdentifier,
+ },
+ });
+ this.snapshotArn = customResource.getAttString('DBSnapshotArn');
+ }
+}
diff --git a/packages/aws-cdk-lib/aws-rds/README.md b/packages/aws-cdk-lib/aws-rds/README.md
index 371be5f51b26e..f12158f4bc273 100644
--- a/packages/aws-cdk-lib/aws-rds/README.md
+++ b/packages/aws-cdk-lib/aws-rds/README.md
@@ -147,19 +147,6 @@ new rds.DatabaseCluster(this, 'DatabaseCluster', {
});
```
-To configure [the life cycle type of the cluster](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html), use the `engineLifecycleSupport` property:
-
-```ts
-declare const vpc: ec2.IVpc;
-
-new rds.DatabaseCluster(this, 'DatabaseCluster', {
- engine: rds.DatabaseClusterEngine.auroraMysql({ version: rds.AuroraMysqlEngineVersion.VER_3_07_0 }),
- writer: rds.ClusterInstance.serverlessV2('writerInstance'),
- vpc,
- engineLifecycleSupport: rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT,
-});
-```
-
### Updating the database instances in a cluster
Database cluster instances may be updated in bulk or on a rolling basis.
@@ -1576,6 +1563,29 @@ new rds.DatabaseCluster(this, 'Cluster', {
});
```
+## Extended Support
+
+With Amazon RDS Extended Support, you can continue running your database on a major engine version past the RDS end of
+standard support date for an additional cost. To configure the life cycle type, use the `engineLifecycleSupport` property:
+
+```ts
+declare const vpc: ec2.IVpc;
+
+new rds.DatabaseCluster(this, 'DatabaseCluster', {
+ engine: rds.DatabaseClusterEngine.auroraMysql({ version: rds.AuroraMysqlEngineVersion.VER_3_07_0 }),
+ writer: rds.ClusterInstance.serverlessV2('writerInstance'),
+ vpc,
+ engineLifecycleSupport: rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT,
+});
+
+new rds.DatabaseInstance(this, 'DatabaseInstance', {
+ engine: rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_0_39 }),
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.R7G, ec2.InstanceSize.LARGE),
+ vpc,
+ engineLifecycleSupport: rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED,
+});
+```
+
## Importing existing DatabaseInstance
### Lookup DatabaseInstance by instanceIdentifier
diff --git a/packages/aws-cdk-lib/aws-rds/lib/cluster.ts b/packages/aws-cdk-lib/aws-rds/lib/cluster.ts
index 3c0c417b759cd..9d565522027ed 100644
--- a/packages/aws-cdk-lib/aws-rds/lib/cluster.ts
+++ b/packages/aws-cdk-lib/aws-rds/lib/cluster.ts
@@ -7,7 +7,7 @@ import { NetworkType } from './instance';
import { IParameterGroup, ParameterGroup } from './parameter-group';
import { DATA_API_ACTIONS } from './perms';
import { applyDefaultRotationOptions, defaultDeletionProtection, renderCredentials, setupS3ImportExport, helperRemovalPolicy, renderUnless, renderSnapshotCredentials } from './private/util';
-import { BackupProps, Credentials, InstanceProps, PerformanceInsightRetention, RotationSingleUserOptions, RotationMultiUserOptions, SnapshotCredentials } from './props';
+import { BackupProps, Credentials, InstanceProps, PerformanceInsightRetention, RotationSingleUserOptions, RotationMultiUserOptions, SnapshotCredentials, EngineLifecycleSupport } from './props';
import { DatabaseProxy, DatabaseProxyOptions, ProxyTarget } from './proxy';
import { CfnDBCluster, CfnDBClusterProps, CfnDBInstance } from './rds.generated';
import { ISubnetGroup, SubnetGroup } from './subnet-group';
@@ -500,21 +500,6 @@ interface DatabaseClusterBaseProps {
readonly engineLifecycleSupport?: EngineLifecycleSupport;
}
-/**
- * Engine lifecycle support for Amazon RDS and Amazon Aurora
- */
-export enum EngineLifecycleSupport {
- /**
- * Using Amazon RDS extended support
- */
- OPEN_SOURCE_RDS_EXTENDED_SUPPORT = 'open-source-rds-extended-support',
-
- /**
- * Not using Amazon RDS extended support
- */
- OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED = 'open-source-rds-extended-support-disabled',
-}
-
/**
* The storage type to be associated with the DB cluster.
*/
diff --git a/packages/aws-cdk-lib/aws-rds/lib/instance.ts b/packages/aws-cdk-lib/aws-rds/lib/instance.ts
index 4e9860302ecc5..a2c5c95e3a070 100644
--- a/packages/aws-cdk-lib/aws-rds/lib/instance.ts
+++ b/packages/aws-cdk-lib/aws-rds/lib/instance.ts
@@ -6,7 +6,7 @@ import { IInstanceEngine } from './instance-engine';
import { IOptionGroup } from './option-group';
import { IParameterGroup, ParameterGroup } from './parameter-group';
import { applyDefaultRotationOptions, defaultDeletionProtection, engineDescription, renderCredentials, setupS3ImportExport, helperRemovalPolicy, renderUnless } from './private/util';
-import { Credentials, PerformanceInsightRetention, RotationMultiUserOptions, RotationSingleUserOptions, SnapshotCredentials } from './props';
+import { Credentials, EngineLifecycleSupport, PerformanceInsightRetention, RotationMultiUserOptions, RotationSingleUserOptions, SnapshotCredentials } from './props';
import { DatabaseProxy, DatabaseProxyOptions, ProxyTarget } from './proxy';
import { CfnDBInstance, CfnDBInstanceProps } from './rds.generated';
import { ISubnetGroup, SubnetGroup } from './subnet-group';
@@ -809,6 +809,16 @@ export interface DatabaseInstanceNewProps {
* @default - Changes will be applied immediately
*/
readonly applyImmediately?: boolean;
+
+ /**
+ * The life cycle type for this DB instance.
+ * This setting applies only to RDS for MySQL and RDS for PostgreSQL.
+ *
+ * @see https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html
+ *
+ * @default undefined - AWS RDS default setting is `EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT`
+ */
+ readonly engineLifecycleSupport?: EngineLifecycleSupport;
}
/**
@@ -975,6 +985,7 @@ abstract class DatabaseInstanceNew extends DatabaseInstanceBase implements IData
networkType: props.networkType,
caCertificateIdentifier: props.caCertificate ? props.caCertificate.toString() : undefined,
applyImmediately: props.applyImmediately,
+ engineLifecycleSupport: props.engineLifecycleSupport,
};
}
@@ -1079,6 +1090,11 @@ abstract class DatabaseInstanceSource extends DatabaseInstanceNew implements IDa
this.engine = props.engine;
const engineType = props.engine.engineType;
+
+ if (props.engineLifecycleSupport && !['mysql', 'postgres'].includes(engineType)) {
+ throw new ValidationError(`'engineLifecycleSupport' can only be specified for RDS for MySQL and RDS for PostgreSQL, got: '${engineType}'`, this);
+ }
+
// only Oracle and SQL Server require the import and export Roles to be the same
const combineRoles = engineType.startsWith('oracle-') || engineType.startsWith('sqlserver-');
let { s3ImportRole, s3ExportRole } = setupS3ImportExport(this, props, combineRoles);
@@ -1492,6 +1508,11 @@ export class DatabaseInstanceReadReplica extends DatabaseInstanceNew implements
throw new ValidationError(`Cannot set 'backupRetention', as engine '${engineDescription(props.sourceDatabaseInstance.engine)}' does not support automatic backups for read replicas`, this);
}
+ const engineType = props.sourceDatabaseInstance.engine?.engineType;
+ if (engineType && props.engineLifecycleSupport && !['mysql', 'postgres'].includes(engineType)) {
+ throw new ValidationError(`'engineLifecycleSupport' can only be specified for RDS for MySQL and RDS for PostgreSQL, got: '${engineType}'`, this);
+ }
+
// The read replica instance always uses the same engine as the source instance
// but some CF validations require the engine to be explicitly passed when some
// properties are specified.
@@ -1503,7 +1524,7 @@ export class DatabaseInstanceReadReplica extends DatabaseInstanceNew implements
sourceDbInstanceIdentifier: props.sourceDatabaseInstance.instanceArn,
kmsKeyId: props.storageEncryptionKey?.keyArn,
storageEncrypted: props.storageEncryptionKey ? true : props.storageEncrypted,
- engine: shouldPassEngine ? props.sourceDatabaseInstance.engine?.engineType : undefined,
+ engine: shouldPassEngine ? engineType : undefined,
allocatedStorage: props.allocatedStorage?.toString(),
});
diff --git a/packages/aws-cdk-lib/aws-rds/lib/props.ts b/packages/aws-cdk-lib/aws-rds/lib/props.ts
index 7b2e43b3a938f..54376a077a96f 100644
--- a/packages/aws-cdk-lib/aws-rds/lib/props.ts
+++ b/packages/aws-cdk-lib/aws-rds/lib/props.ts
@@ -591,3 +591,18 @@ export enum PerformanceInsightRetention {
*/
LONG_TERM = 731,
}
+
+/**
+ * Engine lifecycle support for Amazon RDS and Amazon Aurora
+ */
+export enum EngineLifecycleSupport {
+ /**
+ * Using Amazon RDS extended support
+ */
+ OPEN_SOURCE_RDS_EXTENDED_SUPPORT = 'open-source-rds-extended-support',
+
+ /**
+ * Not using Amazon RDS extended support
+ */
+ OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED = 'open-source-rds-extended-support-disabled',
+}
diff --git a/packages/aws-cdk-lib/aws-rds/test/instance.test.ts b/packages/aws-cdk-lib/aws-rds/test/instance.test.ts
index b4d4543089d82..50c367d6b01ac 100644
--- a/packages/aws-cdk-lib/aws-rds/test/instance.test.ts
+++ b/packages/aws-cdk-lib/aws-rds/test/instance.test.ts
@@ -2254,6 +2254,198 @@ describe('instance', () => {
storageThroughput: 2500,
})).toThrow(/maximum ratio of storage throughput to IOPS is 0.25/);
});
+
+ test.each([
+ rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT,
+ rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED,
+ ])('DatabaseInstance can specify engine lifecycle support %s', (engineLifecycleSupport) => {
+ // WHEN
+ new rds.DatabaseInstance(stack, 'Database', {
+ engine: rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_4_5 }),
+ vpc,
+ engineLifecycleSupport,
+ });
+
+ // THEN
+ Template.fromStack(stack).hasResourceProperties('AWS::RDS::DBInstance', {
+ EngineLifecycleSupport: engineLifecycleSupport,
+ });
+ });
+
+ test.each([
+ rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT,
+ rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED,
+ ])('DatabaseInstanceFromSnapshot can specify engine lifecycle support %s', (engineLifecycleSupport) => {
+ // WHEN
+ new rds.DatabaseInstanceFromSnapshot(stack, 'Database', {
+ snapshotIdentifier: 'my-snapshot',
+ engine: rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_4_5 }),
+ vpc,
+ engineLifecycleSupport,
+ });
+
+ // THEN
+ Template.fromStack(stack).hasResourceProperties('AWS::RDS::DBInstance', {
+ EngineLifecycleSupport: engineLifecycleSupport,
+ });
+ });
+
+ test.each([
+ rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT,
+ rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED,
+ ])('DatabaseInstanceReadReplica can specify engine lifecycle support %s', (engineLifecycleSupport) => {
+ // GIVEN
+ const sourceInstance = new rds.DatabaseInstance(stack, 'Database', {
+ engine: rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_4_5 }),
+ vpc,
+ });
+
+ // WHEN
+ new rds.DatabaseInstanceReadReplica(stack, 'ReadReplica', {
+ sourceDatabaseInstance: sourceInstance,
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.LARGE),
+ vpc,
+ engineLifecycleSupport,
+ });
+
+ // THEN
+ Template.fromStack(stack).hasResourceProperties('AWS::RDS::DBInstance', {
+ SourceDBInstanceIdentifier: {
+ 'Fn::Join': ['', [
+ 'arn:',
+ { Ref: 'AWS::Partition' },
+ ':rds:',
+ { Ref: 'AWS::Region' },
+ ':',
+ { Ref: 'AWS::AccountId' },
+ ':db:',
+ { Ref: 'DatabaseB269D8BB' },
+ ]],
+ },
+ EngineLifecycleSupport: engineLifecycleSupport,
+ });
+ });
+
+ test.each([
+ rds.DatabaseInstanceEngine.oracleEe({ version: rds.OracleEngineVersion.VER_19 }),
+ rds.DatabaseInstanceEngine.mariaDb({ version: rds.MariaDbEngineVersion.VER_10_6 }),
+ rds.DatabaseInstanceEngine.sqlServerEe({ version: rds.SqlServerEngineVersion.VER_16_00_4185_3_V1 }),
+ ])('DatabaseInstance cannot specify engine lifecycle support for engine %s', (engine) => {
+ expect(() => new rds.DatabaseInstance(stack, 'Database', {
+ engine,
+ vpc,
+ engineLifecycleSupport: rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED,
+ })).toThrow(/'engineLifecycleSupport' can only be specified for RDS for MySQL and RDS for PostgreSQL/);
+ });
+
+ test.each([
+ rds.DatabaseInstanceEngine.oracleEe({ version: rds.OracleEngineVersion.VER_19 }),
+ rds.DatabaseInstanceEngine.mariaDb({ version: rds.MariaDbEngineVersion.VER_10_6 }),
+ rds.DatabaseInstanceEngine.sqlServerEe({ version: rds.SqlServerEngineVersion.VER_16_00_4185_3_V1 }),
+ ])('DatabaseInstanceFromSnapshot cannot specify engine lifecycle support for engine %s', (engine) => {
+ expect(() => new rds.DatabaseInstanceFromSnapshot(stack, 'Database', {
+ snapshotIdentifier: 'my-snapshot',
+ engine,
+ vpc,
+ engineLifecycleSupport: rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED,
+ })).toThrow(/'engineLifecycleSupport' can only be specified for RDS for MySQL and RDS for PostgreSQL/);
+ });
+
+ test.each([
+ rds.DatabaseInstanceEngine.oracleEe({ version: rds.OracleEngineVersion.VER_19 }),
+ rds.DatabaseInstanceEngine.mariaDb({ version: rds.MariaDbEngineVersion.VER_10_6 }),
+ rds.DatabaseInstanceEngine.sqlServerEe({ version: rds.SqlServerEngineVersion.VER_16_00_4185_3_V1 }),
+ ])('DatabaseInstanceReadReplica cannot specify engine lifecycle support for engine %s', (engine) => {
+ // GIVEN
+ const sourceInstance = new rds.DatabaseInstance(stack, 'Database', {
+ engine,
+ vpc,
+ });
+
+ expect(() => new rds.DatabaseInstanceReadReplica(stack, 'ReadReplica', {
+ sourceDatabaseInstance: sourceInstance,
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.LARGE),
+ vpc,
+ engineLifecycleSupport: rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED,
+ })).toThrow(/'engineLifecycleSupport' can only be specified for RDS for MySQL and RDS for PostgreSQL/);
+ });
+
+ test.each([
+ rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_4_5 }),
+ rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_5_7 }),
+ rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_16_3 }),
+ rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_15 }),
+ ])('DatabaseInstance can specify engine lifecycle support for engine %s', (engine) => {
+ // WHEN
+ new rds.DatabaseInstance(stack, 'Database', {
+ engine,
+ vpc,
+ engineLifecycleSupport: rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED,
+ });
+
+ // THEN
+ Template.fromStack(stack).hasResourceProperties('AWS::RDS::DBInstance', {
+ EngineLifecycleSupport: 'open-source-rds-extended-support-disabled',
+ });
+ });
+
+ test.each([
+ rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_4_5 }),
+ rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_5_7 }),
+ rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_16_3 }),
+ rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_15 }),
+ ])('DatabaseInstanceFromSnapshot can specify engine lifecycle support for engine %s', (engine) => {
+ // WHEN
+ new rds.DatabaseInstanceFromSnapshot(stack, 'Database', {
+ snapshotIdentifier: 'my-snapshot',
+ engine: rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_4_5 }),
+ vpc,
+ engineLifecycleSupport: rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED,
+ });
+
+ // THEN
+ Template.fromStack(stack).hasResourceProperties('AWS::RDS::DBInstance', {
+ EngineLifecycleSupport: 'open-source-rds-extended-support-disabled',
+ });
+ });
+
+ test.each([
+ rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_4_5 }),
+ rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_5_7 }),
+ rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_16_3 }),
+ rds.DatabaseInstanceEngine.postgres({ version: rds.PostgresEngineVersion.VER_15 }),
+ ])('DatabaseInstanceReadReplica can specify engine lifecycle support for engine %s', (engine) => {
+ // GIVEN
+ const sourceInstance = new rds.DatabaseInstance(stack, 'Database', {
+ engine,
+ vpc,
+ });
+
+ // WHEN
+ new rds.DatabaseInstanceReadReplica(stack, 'ReadReplica', {
+ sourceDatabaseInstance: sourceInstance,
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.LARGE),
+ vpc,
+ engineLifecycleSupport: rds.EngineLifecycleSupport.OPEN_SOURCE_RDS_EXTENDED_SUPPORT_DISABLED,
+ });
+
+ // THEN
+ Template.fromStack(stack).hasResourceProperties('AWS::RDS::DBInstance', {
+ SourceDBInstanceIdentifier: {
+ 'Fn::Join': ['', [
+ 'arn:',
+ { Ref: 'AWS::Partition' },
+ ':rds:',
+ { Ref: 'AWS::Region' },
+ ':',
+ { Ref: 'AWS::AccountId' },
+ ':db:',
+ { Ref: 'DatabaseB269D8BB' },
+ ]],
+ },
+ EngineLifecycleSupport: 'open-source-rds-extended-support-disabled',
+ });
+ });
});
test.each([