From e5f71db53ce985172e565eb9da5692d77ab7b268 Mon Sep 17 00:00:00 2001 From: Clay Rosenthal Date: Thu, 27 Mar 2025 18:34:10 -0700 Subject: [PATCH 01/10] feat(ec2): adding `placementGroup` to `LaunchTemplateProps` and `LaunchTemplate` (#33726) ### Issue # (if applicable) Closes #33721 ### Reason for this change To allow for passing `PlacementGroup`s to `LaunchTemplate`s ### Description of changes Adding `placementGroup` to `LaunchTemplateProps`. I chose to only implement this part of the `placement` field in LaunchTemplates, not doing anything with dedicated hosts or the like, as those don't have any CDK constructs. This change enables creating a `PlacementGroup` and passing it to a `LaunchTemplate` ### Describe any new or updated permissions being added None ### Description of how you validated changes Added a unit test, ran the existing tests as well. ### Checklist - [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- ...efaultTestDeployAssert1AF2B360.assets.json | 2 +- .../aws-cdk-ec2-lt-metadata-1.assets.json | 6 +- .../aws-cdk-ec2-lt-metadata-1.template.json | 52 ++++++ .../integ.launch-template.js.snapshot/cdk.out | 2 +- .../integ.json | 2 +- .../manifest.json | 97 ++++++++++- .../tree.json | 155 +++++++++++++++++- .../aws-ec2/test/integ.launch-template.ts | 8 + packages/aws-cdk-lib/aws-ec2/README.md | 18 ++ .../aws-ec2/lib/launch-template.ts | 14 +- .../aws-ec2/test/launch-template.test.ts | 47 ++++++ 11 files changed, 385 insertions(+), 18 deletions(-) diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/LambdaTestDefaultTestDeployAssert1AF2B360.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/LambdaTestDefaultTestDeployAssert1AF2B360.assets.json index da02972c99802..443c4560fd4f9 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/LambdaTestDefaultTestDeployAssert1AF2B360.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/LambdaTestDefaultTestDeployAssert1AF2B360.assets.json @@ -1,5 +1,5 @@ { - "version": "38.0.1", + "version": "40.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/aws-cdk-ec2-lt-metadata-1.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/aws-cdk-ec2-lt-metadata-1.assets.json index 6b3d5be27269b..ca6e6f6ccbc09 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/aws-cdk-ec2-lt-metadata-1.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/aws-cdk-ec2-lt-metadata-1.assets.json @@ -1,5 +1,5 @@ { - "version": "38.0.1", + "version": "40.0.0", "files": { "a1acfc2b5f4f6b183fd2bb9863f486bc5edef6a357b355a070d9a0e502df418c": { "source": { @@ -14,7 +14,7 @@ } } }, - "22cbe4c6fd1d83e0a76755280f317549625f1f65135987531e7683966c486fae": { + "75e496a3b614d1a833da7e560828366dca5f40857a30ef0e08f4787ec017ddda": { "source": { "path": "aws-cdk-ec2-lt-metadata-1.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "22cbe4c6fd1d83e0a76755280f317549625f1f65135987531e7683966c486fae.json", + "objectKey": "75e496a3b614d1a833da7e560828366dca5f40857a30ef0e08f4787ec017ddda.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-ec2/test/integ.launch-template.js.snapshot/aws-cdk-ec2-lt-metadata-1.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/aws-cdk-ec2-lt-metadata-1.template.json index 33d23dff5c403..de2949dd6b0f5 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/aws-cdk-ec2-lt-metadata-1.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/aws-cdk-ec2-lt-metadata-1.template.json @@ -284,6 +284,58 @@ } ] } + }, + "pg749EE6ED": { + "Type": "AWS::EC2::PlacementGroup", + "Properties": { + "Strategy": "spread" + } + }, + "LTWithPlacementGroup4B40027C": { + "Type": "AWS::EC2::LaunchTemplate", + "Properties": { + "LaunchTemplateData": { + "Placement": { + "GroupName": { + "Fn::GetAtt": [ + "pg749EE6ED", + "GroupName" + ] + } + }, + "TagSpecifications": [ + { + "ResourceType": "instance", + "Tags": [ + { + "Key": "Name", + "Value": "aws-cdk-ec2-lt-metadata-1/LTWithPlacementGroup" + } + ] + }, + { + "ResourceType": "volume", + "Tags": [ + { + "Key": "Name", + "Value": "aws-cdk-ec2-lt-metadata-1/LTWithPlacementGroup" + } + ] + } + ] + }, + "TagSpecifications": [ + { + "ResourceType": "launch-template", + "Tags": [ + { + "Key": "Name", + "Value": "aws-cdk-ec2-lt-metadata-1/LTWithPlacementGroup" + } + ] + } + ] + } } }, "Mappings": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/cdk.out index c6e612584e352..1e02a2deb191b 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"38.0.1"} \ No newline at end of file +{"version":"40.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/integ.json index 27df3f8765492..0a1bd54c90bf0 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "38.0.1", + "version": "40.0.0", "testCases": { "LambdaTest/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/manifest.json index 4fd9a1cd2d5c0..aaa9c65d0d727 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "38.0.1", + "version": "40.0.0", "artifacts": { "aws-cdk-ec2-lt-metadata-1.assets": { "type": "cdk:asset-manifest", @@ -16,10 +16,9 @@ "templateFile": "aws-cdk-ec2-lt-metadata-1.template.json", "terminationProtection": false, "validateOnSynth": false, - "notificationArns": [], "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}/22cbe4c6fd1d83e0a76755280f317549625f1f65135987531e7683966c486fae.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/75e496a3b614d1a833da7e560828366dca5f40857a30ef0e08f4787ec017ddda.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -35,12 +34,27 @@ "aws-cdk-ec2-lt-metadata-1.assets" ], "metadata": { + "/aws-cdk-ec2-lt-metadata-1/MyVpc": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "vpcName": "*", + "subnetConfiguration": [] + } + } + ], "/aws-cdk-ec2-lt-metadata-1/MyVpc/Resource": [ { "type": "aws:cdk:logicalId", "data": "MyVpcF9F0CA6F" } ], + "/aws-cdk-ec2-lt-metadata-1/MyVpc/RestrictDefaultSecurityGroupCustomResource": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], "/aws-cdk-ec2-lt-metadata-1/MyVpc/RestrictDefaultSecurityGroupCustomResource/Default": [ { "type": "aws:cdk:logicalId", @@ -71,24 +85,76 @@ "data": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E" } ], + "/aws-cdk-ec2-lt-metadata-1/sg1": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "vpc": "*" + } + } + ], "/aws-cdk-ec2-lt-metadata-1/sg1/Resource": [ { "type": "aws:cdk:logicalId", "data": "sg15CEFF4E3" } ], + "/aws-cdk-ec2-lt-metadata-1/LT": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "versionDescription": "*", + "httpEndpoint": true, + "httpProtocolIpv6": true, + "httpPutResponseHopLimit": "*", + "httpTokens": "required", + "instanceMetadataTags": true, + "securityGroup": "*", + "blockDevices": [ + { + "deviceName": "*", + "volume": "*" + } + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addSecurityGroup": [ + "*" + ] + } + } + ], "/aws-cdk-ec2-lt-metadata-1/LT/Resource": [ { "type": "aws:cdk:logicalId", "data": "LTC4631592" } ], + "/aws-cdk-ec2-lt-metadata-1/sg2": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "vpc": "*" + } + } + ], "/aws-cdk-ec2-lt-metadata-1/sg2/Resource": [ { "type": "aws:cdk:logicalId", "data": "sg2860DD91F" } ], + "/aws-cdk-ec2-lt-metadata-1/LTWithMachineImage": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "machineImage": "*" + } + } + ], "/aws-cdk-ec2-lt-metadata-1/LTWithMachineImage/Resource": [ { "type": "aws:cdk:logicalId", @@ -101,6 +167,30 @@ "data": "SsmParameterValueawsserviceamiamazonlinuxlatestamzn2amihvmx8664gp2C96584B6F00A464EAD1953AFF4B05118Parameter" } ], + "/aws-cdk-ec2-lt-metadata-1/pg": [ + { + "type": "aws:cdk:analytics:construct", + "data": {} + } + ], + "/aws-cdk-ec2-lt-metadata-1/pg/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "pg749EE6ED" + } + ], + "/aws-cdk-ec2-lt-metadata-1/LTWithPlacementGroup": [ + { + "type": "aws:cdk:analytics:construct", + "data": {} + } + ], + "/aws-cdk-ec2-lt-metadata-1/LTWithPlacementGroup/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LTWithPlacementGroup4B40027C" + } + ], "/aws-cdk-ec2-lt-metadata-1/BootstrapVersion": [ { "type": "aws:cdk:logicalId", @@ -131,7 +221,6 @@ "templateFile": "LambdaTestDefaultTestDeployAssert1AF2B360.template.json", "terminationProtection": false, "validateOnSynth": false, - "notificationArns": [], "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", diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/tree.json index 8b44f66bf8dc8..1df88ba0c3785 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.js.snapshot/tree.json @@ -50,13 +50,22 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0" + "version": "0.0.0", + "metadata": [ + "*" + ] } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_ec2.Vpc", - "version": "0.0.0" + "version": "0.0.0", + "metadata": [ + { + "vpcName": "*", + "subnetConfiguration": [] + } + ] } }, "LatestNodeRuntimeMap": { @@ -132,7 +141,12 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_ec2.SecurityGroup", - "version": "0.0.0" + "version": "0.0.0", + "metadata": [ + { + "vpc": "*" + } + ] } }, "LT": { @@ -220,7 +234,29 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_ec2.LaunchTemplate", - "version": "0.0.0" + "version": "0.0.0", + "metadata": [ + { + "versionDescription": "*", + "httpEndpoint": true, + "httpProtocolIpv6": true, + "httpPutResponseHopLimit": "*", + "httpTokens": "required", + "instanceMetadataTags": true, + "securityGroup": "*", + "blockDevices": [ + { + "deviceName": "*", + "volume": "*" + } + ] + }, + { + "addSecurityGroup": [ + "*" + ] + } + ] } }, "sg2": { @@ -254,7 +290,12 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_ec2.SecurityGroup", - "version": "0.0.0" + "version": "0.0.0", + "metadata": [ + { + "vpc": "*" + } + ] } }, "LTWithMachineImage": { @@ -316,7 +357,12 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_ec2.LaunchTemplate", - "version": "0.0.0" + "version": "0.0.0", + "metadata": [ + { + "machineImage": "*" + } + ] } }, "SsmParameterValue:--aws--service--ami-amazon-linux-latest--amzn2-ami-hvm-x86_64-gp2:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter": { @@ -332,7 +378,102 @@ "path": "aws-cdk-ec2-lt-metadata-1/SsmParameterValue:--aws--service--ami-amazon-linux-latest--amzn2-ami-hvm-x86_64-gp2:C96584B6-F00A-464E-AD19-53AFF4B05118", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0" + "version": "0.0.0", + "metadata": [] + } + }, + "pg": { + "id": "pg", + "path": "aws-cdk-ec2-lt-metadata-1/pg", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-ec2-lt-metadata-1/pg/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::PlacementGroup", + "aws:cdk:cloudformation:props": { + "strategy": "spread" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnPlacementGroup", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PlacementGroup", + "version": "0.0.0", + "metadata": [ + {} + ] + } + }, + "LTWithPlacementGroup": { + "id": "LTWithPlacementGroup", + "path": "aws-cdk-ec2-lt-metadata-1/LTWithPlacementGroup", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-ec2-lt-metadata-1/LTWithPlacementGroup/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::LaunchTemplate", + "aws:cdk:cloudformation:props": { + "launchTemplateData": { + "tagSpecifications": [ + { + "resourceType": "instance", + "tags": [ + { + "key": "Name", + "value": "aws-cdk-ec2-lt-metadata-1/LTWithPlacementGroup" + } + ] + }, + { + "resourceType": "volume", + "tags": [ + { + "key": "Name", + "value": "aws-cdk-ec2-lt-metadata-1/LTWithPlacementGroup" + } + ] + } + ], + "placement": { + "groupName": { + "Fn::GetAtt": [ + "pg749EE6ED", + "GroupName" + ] + } + } + }, + "tagSpecifications": [ + { + "resourceType": "launch-template", + "tags": [ + { + "key": "Name", + "value": "aws-cdk-ec2-lt-metadata-1/LTWithPlacementGroup" + } + ] + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnLaunchTemplate", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.LaunchTemplate", + "version": "0.0.0", + "metadata": [ + {} + ] } }, "BootstrapVersion": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.ts index 99d3922ec790b..0a42c7d9f6ed5 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.launch-template.ts @@ -44,6 +44,14 @@ new ec2.LaunchTemplate(stack, 'LTWithMachineImage', { }), }); +const pg = new ec2.PlacementGroup(stack, 'pg', { + strategy: ec2.PlacementGroupStrategy.SPREAD, +}); + +new ec2.LaunchTemplate(stack, 'LTWithPlacementGroup', { + placementGroup: pg, +}); + new integ.IntegTest(app, 'LambdaTest', { testCases: [stack], diffAssets: true, diff --git a/packages/aws-cdk-lib/aws-ec2/README.md b/packages/aws-cdk-lib/aws-ec2/README.md index 5a874a0b7dd49..fda7f1a992f42 100644 --- a/packages/aws-cdk-lib/aws-ec2/README.md +++ b/packages/aws-cdk-lib/aws-ec2/README.md @@ -2442,6 +2442,24 @@ const launchTemplate = new ec2.LaunchTemplate(this, 'LaunchTemplate', { }); ``` +### Placement Group + +Specify `placementGroup` to enable the placement group support: + +```ts fixture=with-vpc +declare const instanceType: ec2.InstanceType; + +const pg = new ec2.PlacementGroup(this, 'test-pg', { + strategy: ec2.PlacementGroupStrategy.SPREAD, +}); + +new ec2.LaunchTemplate(this, 'LaunchTemplate', { + instanceType, + machineImage: ec2.MachineImage.latestAmazonLinux2023(), + placementGroup: pg, +}); +``` + Please note this feature does not support Launch Configurations. ## Detailed Monitoring diff --git a/packages/aws-cdk-lib/aws-ec2/lib/launch-template.ts b/packages/aws-cdk-lib/aws-ec2/lib/launch-template.ts index 756cda646ce35..f7d0a76029d53 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/launch-template.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/launch-template.ts @@ -4,6 +4,7 @@ import { CfnLaunchTemplate } from './ec2.generated'; import { InstanceType } from './instance-types'; import { IKeyPair } from './key-pair'; import { IMachineImage, MachineImageConfig, OperatingSystemType } from './machine-image'; +import { IPlacementGroup } from './placement-group'; import { launchTemplateBlockDeviceMappings } from './private/ebs-util'; import { ISecurityGroup } from './security-group'; import { UserData } from './user-data'; @@ -441,6 +442,13 @@ export interface LaunchTemplateProps { * @default - No instance profile */ readonly instanceProfile?: iam.IInstanceProfile; + + /** + * The placement group that you want to launch the instance into. + * + * @default - no placement group will be used for this launch template. + */ + readonly placementGroup?: IPlacementGroup; } /** @@ -783,6 +791,9 @@ export class LaunchTemplate extends Resource implements ILaunchTemplate, iam.IGr userData: userDataToken, metadataOptions: this.renderMetadataOptions(props), networkInterfaces, + placement: props.placementGroup ? { + groupName: props.placementGroup.placementGroupName, + } : undefined, // Fields not yet implemented: // ========================== @@ -811,7 +822,8 @@ export class LaunchTemplate extends Resource implements ILaunchTemplate, iam.IGr // Should be implemented via the Tagging aspect in CDK core. Complication will be that this tagging interface is very unique to LaunchTemplates. // tagSpecification: undefined - // CDK has no abstraction for Placement yet. + // CDK only has placement groups, not placement. + // Specifiying options other than placementGroup is not supported yet. // placement: undefined, }, diff --git a/packages/aws-cdk-lib/aws-ec2/test/launch-template.test.ts b/packages/aws-cdk-lib/aws-ec2/test/launch-template.test.ts index d277cdaaf1bbc..5807388493a7b 100644 --- a/packages/aws-cdk-lib/aws-ec2/test/launch-template.test.ts +++ b/packages/aws-cdk-lib/aws-ec2/test/launch-template.test.ts @@ -28,6 +28,8 @@ import { LaunchTemplate, LaunchTemplateHttpTokens, OperatingSystemType, + PlacementGroup, + PlacementGroupStrategy, SecurityGroup, SpotInstanceInterruption, SpotRequestType, @@ -889,6 +891,51 @@ describe('LaunchTemplate', () => { }, }); }); + + test('Given placementGroup', () => { + // GIVEN + const pg = new PlacementGroup(stack, 'PlacementGroup', { + strategy: PlacementGroupStrategy.CLUSTER, + }); + + // WHEN + new LaunchTemplate(stack, 'Template', { + placementGroup: pg, + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::EC2::LaunchTemplate', { + LaunchTemplateData: { + Placement: { + GroupName: { + 'Fn::GetAtt': [ + 'PlacementGroup68E91A0F', + 'GroupName', + ], + }, + }, + }, + }); + }); + + test('Given imported placementGroup', () => { + // GIVEN + const importedPg = PlacementGroup.fromPlacementGroupName(stack, 'ImportedPlacementGroup', 'my-placement-group'); + + // WHEN + new LaunchTemplate(stack, 'Template', { + placementGroup: importedPg, + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::EC2::LaunchTemplate', { + LaunchTemplateData: { + Placement: { + GroupName: 'my-placement-group', + }, + }, + }); + }); }); describe('LaunchTemplate marketOptions', () => { From 22dc717f8884f18c8afbc5367f40f0e733ce7a6e Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Fri, 28 Mar 2025 16:22:04 +0000 Subject: [PATCH 02/10] feat(cx-api): declare support for CDK_TOOLKIT_VERSION env var (#33963) ### Reason for this change CDK apps have access to an informative env variable, containing the version of the CLI running the app. With the release of the CDK Toolkit Library, this value does not always represent what it should. As a future replacement, we are introducing a new env variable that will contain the version and package name of the package ### Description of changes Add a new env var name to `cx-api` to support a generic toolkit version. This value will contain the package name and version: "@x.y.z", e.g "aws-cdk@2.1006.0" or "@aws-cdk/toolkit-lib@1.0.0" ### Describe any new or updated permissions being added n/a ### Description of how you validated changes n/a ### Checklist - [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/aws-cdk-lib/cx-api/lib/cxapi.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/aws-cdk-lib/cx-api/lib/cxapi.ts b/packages/aws-cdk-lib/cx-api/lib/cxapi.ts index b9f7ef34699e5..c1204c7ce5300 100644 --- a/packages/aws-cdk-lib/cx-api/lib/cxapi.ts +++ b/packages/aws-cdk-lib/cx-api/lib/cxapi.ts @@ -20,7 +20,9 @@ export const DEFAULT_ACCOUNT_ENV = 'CDK_DEFAULT_ACCOUNT'; export const DEFAULT_REGION_ENV = 'CDK_DEFAULT_REGION'; /** - * Version of Cloud Assembly expected by CDK CLI. + * Version of Cloud Assembly expected by CDK Toolkit. + * + * Despite it's name, this value applies to all version of the CDK Toolkit, not just the CLI. * * CLI started emitting this at 1.10.1 */ @@ -30,9 +32,17 @@ export const CLI_ASM_VERSION_ENV = 'CDK_CLI_ASM_VERSION'; * Version of the CLI currently running. * * CLI started emitting this at 1.10.1 + * Will not be present if the CDK app is run by any Toolkit variation other than the CLI. */ export const CLI_VERSION_ENV = 'CDK_CLI_VERSION'; +/** + * Package & version of the CDK Toolkit running the app. + * + * In the format "@x.y.z", e.g "aws-cdk@2.1006.0" or "@aws-cdk/toolkit-lib@1.0.0" + */ +export const TOOLKIT_VERSION_ENV = 'CDK_TOOLKIT_VERSION'; + /** * If a context value is an object with this key, it indicates an error */ From 0c77cb627e1e7e729205624a9603331f5442af8e Mon Sep 17 00:00:00 2001 From: Samson Keung Date: Fri, 28 Mar 2025 11:00:00 -0700 Subject: [PATCH 03/10] feat(ec2): support the new `SupportedRegions` property for `AWS::EC2::VPCEndpointService` (#33959) ### Issue # (if applicable) N/A ### Reason for this change Supporting the new L1 property in the L2 construct ### Description of changes Added a new L2 prop - `allowedRegions` - which is of type `string[]`. It gets passed to the L1 `SupportedRegions` property. ### Describe any new or updated permissions being added none ### Description of how you validated changes Unit tests and integ test ### Checklist - [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../TestStackLoadBalancer.assets.json | 8 +- .../TestStackLoadBalancer.template.json | 3 + ...efaultTestDeployAssert1FF764BE.assets.json | 3 +- .../cdk.out | 2 +- .../integ.json | 2 +- .../manifest.json | 12 ++- .../tree.json | 2 +- .../test/integ.vpc-endpoint-service.ts | 3 +- packages/aws-cdk-lib/aws-ec2/README.md | 12 +++ .../aws-ec2/lib/vpc-endpoint-service.ts | 13 +++ .../aws-ec2/test/vpc-endpoint-service.test.ts | 96 +++++++++++++++++++ 11 files changed, 144 insertions(+), 12 deletions(-) diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/TestStackLoadBalancer.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/TestStackLoadBalancer.assets.json index 74ce476be3f17..4211c2e2343d5 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/TestStackLoadBalancer.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/TestStackLoadBalancer.assets.json @@ -1,7 +1,8 @@ { - "version": "40.0.0", + "version": "41.0.0", "files": { "a1acfc2b5f4f6b183fd2bb9863f486bc5edef6a357b355a070d9a0e502df418c": { + "displayName": "TestStackLoadBalancer/Custom::VpcRestrictDefaultSGCustomResourceProvider Code", "source": { "path": "asset.a1acfc2b5f4f6b183fd2bb9863f486bc5edef6a357b355a070d9a0e502df418c", "packaging": "zip" @@ -14,7 +15,8 @@ } } }, - "7d05d5d0741fd1e8bbb02fa8e103eff75a3d89b43c86c4478d03aa82a9cc12b8": { + "0730babc31e937bb756275553b65882c3054d2e23ab1f7142e70361a7de3818b": { + "displayName": "TestStackLoadBalancer Template", "source": { "path": "TestStackLoadBalancer.template.json", "packaging": "file" @@ -22,7 +24,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "7d05d5d0741fd1e8bbb02fa8e103eff75a3d89b43c86c4478d03aa82a9cc12b8.json", + "objectKey": "0730babc31e937bb756275553b65882c3054d2e23ab1f7142e70361a7de3818b.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-ec2/test/integ.vpc-endpoint-service.js.snapshot/TestStackLoadBalancer.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/TestStackLoadBalancer.template.json index c5eb62db54a94..cc99cb308181a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/TestStackLoadBalancer.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/TestStackLoadBalancer.template.json @@ -512,6 +512,9 @@ ], "SupportedIpAddressTypes": [ "ipv4" + ], + "SupportedRegions": [ + "us-east-2" ] } } diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/VpcEndpointserviceDefaultTestDeployAssert1FF764BE.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/VpcEndpointserviceDefaultTestDeployAssert1FF764BE.assets.json index fb3bdf466b1cf..1073e50263164 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/VpcEndpointserviceDefaultTestDeployAssert1FF764BE.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/VpcEndpointserviceDefaultTestDeployAssert1FF764BE.assets.json @@ -1,7 +1,8 @@ { - "version": "40.0.0", + "version": "41.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "displayName": "VpcEndpointserviceDefaultTestDeployAssert1FF764BE Template", "source": { "path": "VpcEndpointserviceDefaultTestDeployAssert1FF764BE.template.json", "packaging": "file" diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/cdk.out index 1e02a2deb191b..188478b55560e 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"40.0.0"} \ No newline at end of file +{"version":"41.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/integ.json index d2283ee7105b5..70c58602bd8f5 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "40.0.0", + "version": "41.0.0", "testCases": { "VpcEndpointservice/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/manifest.json index a2a9663625da2..6f7413565ec44 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "40.0.0", + "version": "42.0.0", "artifacts": { "TestStackLoadBalancer.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}/7d05d5d0741fd1e8bbb02fa8e103eff75a3d89b43c86c4478d03aa82a9cc12b8.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/0730babc31e937bb756275553b65882c3054d2e23ab1f7142e70361a7de3818b.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -345,7 +345,10 @@ "*" ], "acceptanceRequired": true, - "contributorInsights": true + "contributorInsights": true, + "supportedIpAddressTypes": [ + "ipv4" + ] } } ], @@ -424,5 +427,6 @@ "file": "tree.json" } } - } + }, + "minimumCliVersion": "2.1006.0" } \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/tree.json index 04a317f2b62bb..0b6aecfe2d08a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.js.snapshot/tree.json @@ -1 +1 @@ -{"version":"tree-0.1","tree":{"id":"App","path":"","children":{"TestStackLoadBalancer":{"id":"TestStackLoadBalancer","path":"TestStackLoadBalancer","children":{"Vpc":{"id":"Vpc","path":"TestStackLoadBalancer/Vpc","children":{"Resource":{"id":"Resource","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPC","version":"0.0.0"}},"PublicSubnet1":{"id":"PublicSubnet1","path":"TestStackLoadBalancer/Vpc/PublicSubnet1","children":{"Subnet":{"id":"Subnet","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PublicSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"TestStackLoadBalancer/Vpc/PublicSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"TestStackLoadBalancer/Vpc/PublicSubnet1/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"TestStackLoadBalancer/Vpc/PublicSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PublicSubnet1/EIP","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::EIP","aws:cdk:cloudformation:props":{"domain":"vpc","tags":[{"key":"Name","value":"TestStackLoadBalancer/Vpc/PublicSubnet1"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnEIP","version":"0.0.0"}},"NATGateway":{"id":"NATGateway","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PublicSubnet2","children":{"Subnet":{"id":"Subnet","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PublicSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"TestStackLoadBalancer/Vpc/PublicSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"TestStackLoadBalancer/Vpc/PublicSubnet2/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"TestStackLoadBalancer/Vpc/PublicSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PrivateSubnet1","children":{"Subnet":{"id":"Subnet","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PrivateSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"TestStackLoadBalancer/Vpc/PrivateSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"TestStackLoadBalancer/Vpc/PrivateSubnet1/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"TestStackLoadBalancer/Vpc/PrivateSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PrivateSubnet2","children":{"Subnet":{"id":"Subnet","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PrivateSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"TestStackLoadBalancer/Vpc/PrivateSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"TestStackLoadBalancer/Vpc/PrivateSubnet2/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"TestStackLoadBalancer/Vpc/PrivateSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/IGW","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::InternetGateway","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"TestStackLoadBalancer/Vpc"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnInternetGateway","version":"0.0.0"}},"VPCGW":{"id":"VPCGW","path":"TestStackLoadBalancer/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"}},"RestrictDefaultSecurityGroupCustomResource":{"id":"RestrictDefaultSecurityGroupCustomResource","path":"TestStackLoadBalancer/Vpc/RestrictDefaultSecurityGroupCustomResource","children":{"Default":{"id":"Default","path":"TestStackLoadBalancer/Vpc/RestrictDefaultSecurityGroupCustomResource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.Vpc","version":"0.0.0","metadata":[{"maxAzs":"*","natGateways":"*"}]}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"TestStackLoadBalancer/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"Custom::VpcRestrictDefaultSGCustomResourceProvider":{"id":"Custom::VpcRestrictDefaultSGCustomResourceProvider","path":"TestStackLoadBalancer/Custom::VpcRestrictDefaultSGCustomResourceProvider","children":{"Staging":{"id":"Staging","path":"TestStackLoadBalancer/Custom::VpcRestrictDefaultSGCustomResourceProvider/Staging","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"Role":{"id":"Role","path":"TestStackLoadBalancer/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}},"Handler":{"id":"Handler","path":"TestStackLoadBalancer/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResourceProviderBase","version":"0.0.0"}},"NLB":{"id":"NLB","path":"TestStackLoadBalancer/NLB","children":{"Resource":{"id":"Resource","path":"TestStackLoadBalancer/NLB/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::ElasticLoadBalancingV2::LoadBalancer","aws:cdk:cloudformation:props":{"loadBalancerAttributes":[{"key":"deletion_protection.enabled","value":"false"}],"scheme":"internal","subnets":[{"Ref":"VpcPrivateSubnet1Subnet536B997A"},{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}],"type":"network"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_elasticloadbalancingv2.CfnLoadBalancer","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_elasticloadbalancingv2.NetworkLoadBalancer","version":"0.0.0","metadata":["*"]}},"vpcEndpointService":{"id":"vpcEndpointService","path":"TestStackLoadBalancer/vpcEndpointService","children":{"vpcEndpointService":{"id":"vpcEndpointService","path":"TestStackLoadBalancer/vpcEndpointService/vpcEndpointService","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::VPCEndpointService","aws:cdk:cloudformation:props":{"acceptanceRequired":true,"contributorInsightsEnabled":true,"networkLoadBalancerArns":[{"Ref":"NLB55158F82"}],"supportedIpAddressTypes":["ipv4"]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPCEndpointService","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.VpcEndpointService","version":"0.0.0","metadata":[{"vpcEndpointServiceLoadBalancers":["*"],"acceptanceRequired":true,"contributorInsights":true}]}},"BootstrapVersion":{"id":"BootstrapVersion","path":"TestStackLoadBalancer/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"TestStackLoadBalancer/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"}},"VpcEndpointservice":{"id":"VpcEndpointservice","path":"VpcEndpointservice","children":{"DefaultTest":{"id":"DefaultTest","path":"VpcEndpointservice/DefaultTest","children":{"Default":{"id":"Default","path":"VpcEndpointservice/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"VpcEndpointservice/DefaultTest/DeployAssert","children":{"BootstrapVersion":{"id":"BootstrapVersion","path":"VpcEndpointservice/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"VpcEndpointservice/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":"","children":{"TestStackLoadBalancer":{"id":"TestStackLoadBalancer","path":"TestStackLoadBalancer","children":{"Vpc":{"id":"Vpc","path":"TestStackLoadBalancer/Vpc","children":{"Resource":{"id":"Resource","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPC","version":"0.0.0"}},"PublicSubnet1":{"id":"PublicSubnet1","path":"TestStackLoadBalancer/Vpc/PublicSubnet1","children":{"Subnet":{"id":"Subnet","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PublicSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"TestStackLoadBalancer/Vpc/PublicSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"TestStackLoadBalancer/Vpc/PublicSubnet1/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"TestStackLoadBalancer/Vpc/PublicSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PublicSubnet1/EIP","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::EIP","aws:cdk:cloudformation:props":{"domain":"vpc","tags":[{"key":"Name","value":"TestStackLoadBalancer/Vpc/PublicSubnet1"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnEIP","version":"0.0.0"}},"NATGateway":{"id":"NATGateway","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PublicSubnet2","children":{"Subnet":{"id":"Subnet","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PublicSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"TestStackLoadBalancer/Vpc/PublicSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"TestStackLoadBalancer/Vpc/PublicSubnet2/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"TestStackLoadBalancer/Vpc/PublicSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PrivateSubnet1","children":{"Subnet":{"id":"Subnet","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PrivateSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"TestStackLoadBalancer/Vpc/PrivateSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"TestStackLoadBalancer/Vpc/PrivateSubnet1/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"TestStackLoadBalancer/Vpc/PrivateSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PrivateSubnet2","children":{"Subnet":{"id":"Subnet","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/PrivateSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"TestStackLoadBalancer/Vpc/PrivateSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"TestStackLoadBalancer/Vpc/PrivateSubnet2/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"TestStackLoadBalancer/Vpc/PrivateSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"TestStackLoadBalancer/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":"TestStackLoadBalancer/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":"TestStackLoadBalancer/Vpc/IGW","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::InternetGateway","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"TestStackLoadBalancer/Vpc"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnInternetGateway","version":"0.0.0"}},"VPCGW":{"id":"VPCGW","path":"TestStackLoadBalancer/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"}},"RestrictDefaultSecurityGroupCustomResource":{"id":"RestrictDefaultSecurityGroupCustomResource","path":"TestStackLoadBalancer/Vpc/RestrictDefaultSecurityGroupCustomResource","children":{"Default":{"id":"Default","path":"TestStackLoadBalancer/Vpc/RestrictDefaultSecurityGroupCustomResource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.Vpc","version":"0.0.0","metadata":[{"maxAzs":"*","natGateways":"*"}]}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"TestStackLoadBalancer/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"Custom::VpcRestrictDefaultSGCustomResourceProvider":{"id":"Custom::VpcRestrictDefaultSGCustomResourceProvider","path":"TestStackLoadBalancer/Custom::VpcRestrictDefaultSGCustomResourceProvider","children":{"Staging":{"id":"Staging","path":"TestStackLoadBalancer/Custom::VpcRestrictDefaultSGCustomResourceProvider/Staging","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"Role":{"id":"Role","path":"TestStackLoadBalancer/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}},"Handler":{"id":"Handler","path":"TestStackLoadBalancer/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResourceProviderBase","version":"0.0.0"}},"NLB":{"id":"NLB","path":"TestStackLoadBalancer/NLB","children":{"Resource":{"id":"Resource","path":"TestStackLoadBalancer/NLB/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::ElasticLoadBalancingV2::LoadBalancer","aws:cdk:cloudformation:props":{"loadBalancerAttributes":[{"key":"deletion_protection.enabled","value":"false"}],"scheme":"internal","subnets":[{"Ref":"VpcPrivateSubnet1Subnet536B997A"},{"Ref":"VpcPrivateSubnet2Subnet3788AAA1"}],"type":"network"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_elasticloadbalancingv2.CfnLoadBalancer","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_elasticloadbalancingv2.NetworkLoadBalancer","version":"0.0.0","metadata":["*"]}},"vpcEndpointService":{"id":"vpcEndpointService","path":"TestStackLoadBalancer/vpcEndpointService","children":{"vpcEndpointService":{"id":"vpcEndpointService","path":"TestStackLoadBalancer/vpcEndpointService/vpcEndpointService","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::VPCEndpointService","aws:cdk:cloudformation:props":{"acceptanceRequired":true,"contributorInsightsEnabled":true,"networkLoadBalancerArns":[{"Ref":"NLB55158F82"}],"supportedIpAddressTypes":["ipv4"],"supportedRegions":["us-east-2"]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPCEndpointService","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.VpcEndpointService","version":"0.0.0","metadata":[{"vpcEndpointServiceLoadBalancers":["*"],"acceptanceRequired":true,"contributorInsights":true,"supportedIpAddressTypes":["ipv4"]}]}},"BootstrapVersion":{"id":"BootstrapVersion","path":"TestStackLoadBalancer/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"TestStackLoadBalancer/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"}},"VpcEndpointservice":{"id":"VpcEndpointservice","path":"VpcEndpointservice","children":{"DefaultTest":{"id":"DefaultTest","path":"VpcEndpointservice/DefaultTest","children":{"Default":{"id":"Default","path":"VpcEndpointservice/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"VpcEndpointservice/DefaultTest/DeployAssert","children":{"BootstrapVersion":{"id":"BootstrapVersion","path":"VpcEndpointservice/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"VpcEndpointservice/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 diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.ts index e73d5be19b94d..745d0a528f649 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-ec2/test/integ.vpc-endpoint-service.ts @@ -17,7 +17,8 @@ class TestStack extends cdk.Stack { vpcEndpointServiceLoadBalancers: [loadBalancer], acceptanceRequired: true, contributorInsights: true, - supportedIpAddressTypes: [ec2.IpAddressType.IPV4], // change to ipv4 and re-run + supportedIpAddressTypes: [ec2.IpAddressType.IPV4], + allowedRegions: ['us-east-2'], }); } } diff --git a/packages/aws-cdk-lib/aws-ec2/README.md b/packages/aws-cdk-lib/aws-ec2/README.md index fda7f1a992f42..7852283050d3c 100644 --- a/packages/aws-cdk-lib/aws-ec2/README.md +++ b/packages/aws-cdk-lib/aws-ec2/README.md @@ -1134,6 +1134,18 @@ new ec2.VpcEndpointService(this, 'EndpointService', { }); ``` +You can restrict access to your endpoint service to specific AWS regions: + +```ts +declare const networkLoadBalancer: elbv2.NetworkLoadBalancer; + +new ec2.VpcEndpointService(this, 'EndpointService', { + vpcEndpointServiceLoadBalancers: [networkLoadBalancer], + // Allow service consumers from these regions only + allowedRegions: ['us-east-1', 'eu-west-1'], +}); +``` + Endpoint services support private DNS, which makes it easier for clients to connect to your service by automatically setting up DNS in their VPC. You can enable private DNS on an endpoint service like so: diff --git a/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint-service.ts b/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint-service.ts index 14a15494947e5..4f2480a4715c9 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint-service.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint-service.ts @@ -103,6 +103,11 @@ export class VpcEndpointService extends Resource implements IVpcEndpointService */ private readonly supportedIpAddressTypes?: IpAddressType[]; + /** + * The Regions from which service consumers can access the service. + */ + private readonly allowedRegions?: string[]; + /** * The id of the VPC Endpoint Service, like vpce-svc-xxxxxxxxxxxxxxxx. * @attribute @@ -132,6 +137,7 @@ export class VpcEndpointService extends Resource implements IVpcEndpointService this.acceptanceRequired = props.acceptanceRequired ?? true; this.contributorInsightsEnabled = props.contributorInsights; this.supportedIpAddressTypes = props.supportedIpAddressTypes; + this.allowedRegions = props.allowedRegions; if (props.allowedPrincipals && props.whitelistedPrincipals) { throw new Error('`whitelistedPrincipals` is deprecated; please use `allowedPrincipals` instead'); @@ -144,6 +150,7 @@ export class VpcEndpointService extends Resource implements IVpcEndpointService acceptanceRequired: this.acceptanceRequired, contributorInsightsEnabled: this.contributorInsightsEnabled, supportedIpAddressTypes: this.supportedIpAddressTypes?.map(type => type.toString()), + supportedRegions: this.allowedRegions, }); this.vpcEndpointServiceId = this.endpointService.ref; @@ -220,4 +227,10 @@ export interface VpcEndpointServiceProps { * @default - No specific IP address types configured */ readonly supportedIpAddressTypes?: IpAddressType[]; + + /** + * The Regions from which service consumers can access the service. + * @default - No Region restrictions + */ + readonly allowedRegions?: string[]; } diff --git a/packages/aws-cdk-lib/aws-ec2/test/vpc-endpoint-service.test.ts b/packages/aws-cdk-lib/aws-ec2/test/vpc-endpoint-service.test.ts index c7102c692e37f..40e95bb5a406e 100644 --- a/packages/aws-cdk-lib/aws-ec2/test/vpc-endpoint-service.test.ts +++ b/packages/aws-cdk-lib/aws-ec2/test/vpc-endpoint-service.test.ts @@ -229,5 +229,101 @@ describe('vpc endpoint service', () => { SupportedIpAddressTypes: ['ipv4', 'ipv6'], }); }); + + test('without specifying allowed regions', () => { + // GIVEN + const stack = new Stack(); + + // WHEN + const lb = new DummyEndpointLoadBalacer('arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/Test/9bn6qkf4e9jrw77a'); + new VpcEndpointService(stack, 'EndpointService', { + vpcEndpointServiceLoadBalancers: [lb], + acceptanceRequired: false, + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::EC2::VPCEndpointService', { + NetworkLoadBalancerArns: ['arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/Test/9bn6qkf4e9jrw77a'], + AcceptanceRequired: false, + }); + + // Verify SupportedRegions is not present when not specified + const template = Template.fromStack(stack); + const resources = template.findResources('AWS::EC2::VPCEndpointService'); + const resourceKey = Object.keys(resources)[0]; + expect(resources[resourceKey].Properties.SupportedRegions).toBeUndefined(); + }); + + test('with a single allowed region', () => { + // GIVEN + const stack = new Stack(); + + // WHEN + const lb = new DummyEndpointLoadBalacer('arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/Test/9bn6qkf4e9jrw77a'); + new VpcEndpointService(stack, 'EndpointService', { + vpcEndpointServiceLoadBalancers: [lb], + acceptanceRequired: false, + allowedRegions: ['us-east-1'], + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::EC2::VPCEndpointService', { + NetworkLoadBalancerArns: ['arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/Test/9bn6qkf4e9jrw77a'], + AcceptanceRequired: false, + SupportedRegions: ['us-east-1'], + }); + }); + + test('with multiple allowed regions', () => { + // GIVEN + const stack = new Stack(); + + // WHEN + const lb = new DummyEndpointLoadBalacer('arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/Test/9bn6qkf4e9jrw77a'); + new VpcEndpointService(stack, 'EndpointService', { + vpcEndpointServiceLoadBalancers: [lb], + acceptanceRequired: false, + allowedRegions: ['us-east-1', 'us-west-1', 'eu-west-1'], + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::EC2::VPCEndpointService', { + NetworkLoadBalancerArns: ['arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/Test/9bn6qkf4e9jrw77a'], + AcceptanceRequired: false, + SupportedRegions: ['us-east-1', 'us-west-1', 'eu-west-1'], + }); + }); + + test('with combined options including allowed regions', () => { + // GIVEN + const stack = new Stack(); + + // WHEN + const lb = new DummyEndpointLoadBalacer('arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/Test/9bn6qkf4e9jrw77a'); + new VpcEndpointService(stack, 'EndpointService', { + vpcEndpointServiceLoadBalancers: [lb], + acceptanceRequired: true, + allowedRegions: ['us-east-1', 'us-west-2'], + supportedIpAddressTypes: [IpAddressType.IPV4], + contributorInsights: true, + allowedPrincipals: [new ArnPrincipal('arn:aws:iam::123456789012:root')], + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::EC2::VPCEndpointService', { + NetworkLoadBalancerArns: ['arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/Test/9bn6qkf4e9jrw77a'], + AcceptanceRequired: true, + SupportedRegions: ['us-east-1', 'us-west-2'], + SupportedIpAddressTypes: ['ipv4'], + ContributorInsightsEnabled: true, + }); + + Template.fromStack(stack).hasResourceProperties('AWS::EC2::VPCEndpointServicePermissions', { + ServiceId: { + Ref: 'EndpointServiceED36BE1F', + }, + AllowedPrincipals: ['arn:aws:iam::123456789012:root'], + }); + }); }); }); From 21d0a5ce687e88250a08492e7c5f43cc30da50cf Mon Sep 17 00:00:00 2001 From: GZ Date: Fri, 28 Mar 2025 14:51:48 -0700 Subject: [PATCH 04/10] fix(dynamodb): table v1 retain replica table if table is retain (#33953) ### Issue # (if applicable) Closes #33952 ### Reason for this change Allow users to retain table replica ### Description of changes By default, we will retain table replica if table is retain. Otherwise, replica will be deleted by default. Users can optionally use the new field to set replica to destroy even if table is retain. ### Describe any new or updated permissions being added N/A ### Description of how you validated changes New integ tests and unit tests ### Checklist - [ ] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../index.js | 1 - .../index.js | 1 + ...db-global-replicas-provisioned.assets.json | 20 +- ...-global-replicas-provisioned.template.json | 8 +- ...plicaProviderEA32CB30.nested.template.json | 4 +- ...efaultTestDeployAssertE7F91F54.assets.json | 3 +- .../cdk.out | 2 +- .../integ.json | 2 +- .../manifest.json | 7 +- .../tree.json | 2563 +-------------- .../index.js | 1 - .../index.js | 1 + .../cdk-dynamodb-global-20191121.assets.json | 20 +- ...cdk-dynamodb-global-20191121.template.json | 8 +- .../test/integ.global.js.snapshot/cdk.out | 2 +- ...plicaProviderB281C954.nested.template.json | 4 +- ...efaultTestDeployAssert469C3611.assets.json | 3 +- .../test/integ.global.js.snapshot/integ.json | 2 +- .../integ.global.js.snapshot/manifest.json | 7 +- .../test/integ.global.js.snapshot/tree.json | 2402 +------------- .../cfn-response.js | 106 + .../consts.js | 10 + .../framework.js | 185 ++ .../outbound.js | 83 + .../util.js | 53 + .../index.js | 1 + ...dynamodb-skip-replica-deletion.assets.json | 62 + ...namodb-skip-replica-deletion.template.json | 239 ++ .../cdk.out | 1 + ...plicaProvider76996739.nested.template.json | 1136 +++++++ ...efaultTestDeployAssert2E817006.assets.json | 20 + ...aultTestDeployAssert2E817006.template.json | 36 + .../integ.json | 12 + .../manifest.json | 1446 ++++++++ .../tree.json | 1 + .../test/integ.table-skip-replica-deletion.ts | 36 + .../MyStack.assets.json | 20 +- .../MyStack.template.json | 9 +- ...plicaProvider4F7C92F8.nested.template.json | 4 +- .../index.js | 1 - .../index.js | 1 + .../cdk.out | 2 +- .../integ.json | 2 +- ...efaultTestDeployAssertF01B3E2D.assets.json | 3 +- .../manifest.json | 8 +- .../tree.json | 2910 +---------------- ...tom-resource-config-lambda-node-runtime.ts | 1 + .../lib/aws-dynamodb/replica-handler/index.ts | 29 +- .../aws-cdk-lib/aws-dynamodb/lib/table.ts | 25 +- .../aws-dynamodb/test/dynamodb.test.ts | 71 + 50 files changed, 3629 insertions(+), 7945 deletions(-) delete mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4/index.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8/index.js delete mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4/index.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8/index.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/cfn-response.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/consts.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/framework.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/outbound.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/util.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8/index.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdk-dynamodb-skip-replica-deletion.assets.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdk-dynamodb-skip-replica-deletion.template.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdk.out create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProvider76996739.nested.template.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.assets.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.template.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/integ.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/manifest.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/tree.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.ts delete mode 100644 packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4/index.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/asset.b6529896e4495e2737f2221f4a6080bd2c5159352f9e2ed375a5715475f12d7c/index.js diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4/index.js deleted file mode 100644 index d991c8c6a6e37..0000000000000 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4/index.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";var n=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var m=(e,s)=>{for(var t in s)n(e,t,{get:s[t],enumerable:!0})},b=(e,s,t,o)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of d(s))!u.call(e,a)&&a!==t&&n(e,a,{get:()=>s[a],enumerable:!(o=R(s,a))||o.enumerable});return e};var T=e=>b(n({},"__esModule",{value:!0}),e);var y={};m(y,{isCompleteHandler:()=>g,onEventHandler:()=>C});module.exports=T(y);var c=require("@aws-sdk/client-dynamodb");async function C(e){console.log("Event: %j",{...e,ResponseURL:"..."});let s=new c.DynamoDB({}),t=e.ResourceProperties.TableName,o=e.ResourceProperties.Region,a;if(e.RequestType==="Create"||e.RequestType==="Delete")a=e.RequestType;else{let l=await s.describeTable({TableName:t});console.log("Describe table: %j",l),a=l.Table?.Replicas?.some(i=>i.RegionName===o)?void 0:"Create"}if(a){let l=await s.updateTable({TableName:t,ReplicaUpdates:[{[a]:{RegionName:o}}]});console.log("Update table: %j",l)}else console.log("Skipping updating Table, as a replica in '%s' already exists",o);return e.RequestType==="Create"||e.RequestType==="Update"?{PhysicalResourceId:`${t}-${o}`}:{}}async function g(e){console.log("Event: %j",{...e,ResponseURL:"..."});let t=await new c.DynamoDB({}).describeTable({TableName:e.ResourceProperties.TableName});console.log("Describe table: %j",t);let o=t.Table?.TableStatus==="ACTIVE",l=(t.Table?.Replicas??[]).find(r=>r.RegionName===e.ResourceProperties.Region),p=l?.ReplicaStatus==="ACTIVE",i=e.ResourceProperties.SkipReplicationCompletedWait==="true";switch(e.RequestType){case"Create":case"Update":return{IsComplete:o&&(p||i)};case"Delete":return{IsComplete:o&&l===void 0}}}0&&(module.exports={isCompleteHandler,onEventHandler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8/index.js new file mode 100644 index 0000000000000..f33b9fbaea5e1 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8/index.js @@ -0,0 +1 @@ +"use strict";var p=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var b=(e,s)=>{for(var t in s)p(e,t,{get:s[t],enumerable:!0})},m=(e,s,t,o)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of u(s))!d.call(e,a)&&a!==t&&p(e,a,{get:()=>s[a],enumerable:!(o=R(s,a))||o.enumerable});return e};var T=e=>m(p({},"__esModule",{value:!0}),e);var y={};b(y,{isCompleteHandler:()=>C,onEventHandler:()=>g});module.exports=T(y);var c=require("@aws-sdk/client-dynamodb");async function g(e){console.log("Event: %j",{...e,ResponseURL:"..."});let s=new c.DynamoDB({}),t=e.ResourceProperties.TableName,o=e.ResourceProperties.Region,a=e.ResourceProperties.SkipReplicaDeletion,i;if(e.RequestType==="Create"||e.RequestType==="Delete")i=e.RequestType;else{let l=await s.describeTable({TableName:t});console.log("Describe table: %j",l),i=l.Table?.Replicas?.some(n=>n.RegionName===o)?void 0:"Create"}if(i)if(i==="Delete"&&a)console.log("Skipping deleting replica table as replica table is set to retain.");else{let l=await s.updateTable({TableName:t,ReplicaUpdates:[{[i]:{RegionName:o}}]});console.log("Update table: %j",l)}else console.log("Skipping updating Table, as a replica in '%s' already exists",o);return e.RequestType==="Create"||e.RequestType==="Update"?{PhysicalResourceId:`${t}-${o}`}:{}}async function C(e){console.log("Event: %j",{...e,ResponseURL:"..."});let t=await new c.DynamoDB({}).describeTable({TableName:e.ResourceProperties.TableName});console.log("Describe table: %j",t);let o=t.Table?.TableStatus==="ACTIVE",i=(t.Table?.Replicas??[]).find(n=>n.RegionName===e.ResourceProperties.Region),l=i?.ReplicaStatus==="ACTIVE",r=e.ResourceProperties.SkipReplicationCompletedWait==="true";switch(e.RequestType){case"Create":case"Update":return{IsComplete:o&&(l||r)};case"Delete":return e.ResourceProperties.SkipReplicaDeletion===!0?(console.log("Skipping replica deletion check since replica is set to retain."),{IsComplete:!0}):{IsComplete:o&&i===void 0}}}0&&(module.exports={isCompleteHandler,onEventHandler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.assets.json index f61ad5ed76cb4..07cb530a77ec7 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.assets.json @@ -1,20 +1,22 @@ { - "version": "39.0.0", + "version": "41.0.0", "files": { - "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4": { + "beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8": { + "displayName": "@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code", "source": { - "path": "asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4", + "path": "asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip", + "objectKey": "beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, "39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6": { + "displayName": "@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code", "source": { "path": "asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6", "packaging": "zip" @@ -27,7 +29,8 @@ } } }, - "1b09badc4e19e59ec158617bd51789ee6ed15cfe942f7a98932d5b6a3a0a0e56": { + "db84cdae632e6cba2f8e4a431d3f3a350218ac90c39e5eb62fff4a6737994230": { + "displayName": "${Token[TOKEN.1182]} Template", "source": { "path": "awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderEA32CB30.nested.template.json", "packaging": "file" @@ -35,12 +38,13 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "1b09badc4e19e59ec158617bd51789ee6ed15cfe942f7a98932d5b6a3a0a0e56.json", + "objectKey": "db84cdae632e6cba2f8e4a431d3f3a350218ac90c39e5eb62fff4a6737994230.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "46105056e4cb756717bc9a253a6e903a5523992bcaad1c8fd99e882adea2b2d9": { + "cfc11c7527b6f90290938776ea39cb193c7daa9b2ea93c71dee7825b89eef119": { + "displayName": "aws-cdk-dynamodb-global-replicas-provisioned Template", "source": { "path": "aws-cdk-dynamodb-global-replicas-provisioned.template.json", "packaging": "file" @@ -48,7 +52,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "46105056e4cb756717bc9a253a6e903a5523992bcaad1c8fd99e882adea2b2d9.json", + "objectKey": "cfc11c7527b6f90290938776ea39cb193c7daa9b2ea93c71dee7825b89eef119.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-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.template.json index 628a775ca5f8c..1cdacb69bd472 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.template.json @@ -166,7 +166,8 @@ "TableName": { "Ref": "TableCD117FA1" }, - "Region": "us-east-2" + "Region": "us-east-2", + "SkipReplicaDeletion": false }, "DependsOn": [ "TableSourceTableAttachedManagedPolicyawscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A5DC546D2", @@ -190,7 +191,8 @@ "TableName": { "Ref": "TableCD117FA1" }, - "Region": "eu-west-3" + "Region": "eu-west-3", + "SkipReplicaDeletion": false }, "DependsOn": [ "TableSourceTableAttachedManagedPolicyawscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A5DC546D2", @@ -291,7 +293,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/1b09badc4e19e59ec158617bd51789ee6ed15cfe942f7a98932d5b6a3a0a0e56.json" + "/db84cdae632e6cba2f8e4a431d3f3a350218ac90c39e5eb62fff4a6737994230.json" ] ] } diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderEA32CB30.nested.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderEA32CB30.nested.template.json index 5b93212f573df..899239670d3c5 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderEA32CB30.nested.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderEA32CB30.nested.template.json @@ -250,7 +250,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip" + "S3Key": "beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip" }, "Handler": "index.onEventHandler", "Role": { @@ -313,7 +313,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip" + "S3Key": "beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip" }, "Handler": "index.isCompleteHandler", "Role": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/awscdkdynamodbglobalreplicasprovisionedtestDefaultTestDeployAssertE7F91F54.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/awscdkdynamodbglobalreplicasprovisionedtestDefaultTestDeployAssertE7F91F54.assets.json index d75bff6b8eff5..d2a6d3b2095d0 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/awscdkdynamodbglobalreplicasprovisionedtestDefaultTestDeployAssertE7F91F54.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/awscdkdynamodbglobalreplicasprovisionedtestDefaultTestDeployAssertE7F91F54.assets.json @@ -1,7 +1,8 @@ { - "version": "39.0.0", + "version": "41.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "displayName": "awscdkdynamodbglobalreplicasprovisionedtestDefaultTestDeployAssertE7F91F54 Template", "source": { "path": "awscdkdynamodbglobalreplicasprovisionedtestDefaultTestDeployAssertE7F91F54.template.json", "packaging": "file" diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/cdk.out index 91e1a8b9901d5..188478b55560e 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"39.0.0"} \ No newline at end of file +{"version":"41.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/integ.json index f69b81ed7a5b6..4882bfbf381a3 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "39.0.0", + "version": "41.0.0", "testCases": { "aws-cdk-dynamodb-global-replicas-provisioned-test/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/manifest.json index 39622582051f6..b2996b8393888 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "39.0.0", + "version": "42.0.0", "artifacts": { "aws-cdk-dynamodb-global-replicas-provisioned.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}/46105056e4cb756717bc9a253a6e903a5523992bcaad1c8fd99e882adea2b2d9.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/cfc11c7527b6f90290938776ea39cb193c7daa9b2ea93c71dee7825b89eef119.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -1213,5 +1213,6 @@ "file": "tree.json" } } - } + }, + "minimumCliVersion": "2.1006.0" } \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/tree.json index 58977a15e7b87..26486cedd7209 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/tree.json @@ -1,2562 +1 @@ -{ - "version": "tree-0.1", - "tree": { - "id": "App", - "path": "", - "children": { - "aws-cdk-dynamodb-global-replicas-provisioned": { - "id": "aws-cdk-dynamodb-global-replicas-provisioned", - "path": "aws-cdk-dynamodb-global-replicas-provisioned", - "children": { - "Table": { - "id": "Table", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::DynamoDB::Table", - "aws:cdk:cloudformation:props": { - "attributeDefinitions": [ - { - "attributeName": "hashKey", - "attributeType": "S" - } - ], - "keySchema": [ - { - "attributeName": "hashKey", - "keyType": "HASH" - } - ], - "provisionedThroughput": { - "readCapacityUnits": 5, - "writeCapacityUnits": 5 - }, - "streamSpecification": { - "streamViewType": "NEW_AND_OLD_IMAGES" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_dynamodb.CfnTable", - "version": "0.0.0" - } - }, - "ScalingRole": { - "id": "ScalingRole", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/ScalingRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD9856B77": { - "id": "SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD9856B77", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD9856B77", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD9856B77/Resource", - "children": { - "ImportedResource": { - "id": "ImportedResource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD9856B77/Resource/ImportedResource", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [] - } - }, - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD9856B77/Resource/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::ManagedPolicy", - "aws:cdk:cloudformation:props": { - "description": { - "Fn::Join": [ - "", - [ - "DynamoDB replication managed policy for table ", - { - "Ref": "TableCD117FA1" - } - ] - ] - }, - "path": "/", - "policyDocument": { - "Statement": [ - { - "Action": "dynamodb:*", - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "TableCD117FA1", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":dynamodb:eu-west-3:", - { - "Ref": "AWS::AccountId" - }, - ":table/", - { - "Ref": "TableCD117FA1" - } - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":dynamodb:us-east-2:", - { - "Ref": "AWS::AccountId" - }, - ":table/", - { - "Ref": "TableCD117FA1" - } - ] - ] - }, - { - "Ref": "AWS::NoValue" - } - ] - } - ], - "Version": "2012-10-17" - }, - "roles": [ - { - "Fn::GetAtt": [ - "awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D", - "Outputs.awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole348A0C9ARef" - ] - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnManagedPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.ManagedPolicy", - "version": "0.0.0", - "metadata": [ - { - "description": "*", - "roles": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "addStatements": [ - {} - ] - }, - { - "addStatements": [ - {} - ] - } - ] - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A": { - "id": "SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A/Resource", - "children": { - "ImportedResource": { - "id": "ImportedResource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A/Resource/ImportedResource", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [] - } - }, - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A/Resource/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::ManagedPolicy", - "aws:cdk:cloudformation:props": { - "description": { - "Fn::Join": [ - "", - [ - "DynamoDB replication managed policy for table ", - { - "Ref": "TableCD117FA1" - } - ] - ] - }, - "path": "/", - "policyDocument": { - "Statement": [ - { - "Action": "dynamodb:DescribeTable", - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "TableCD117FA1", - "Arn" - ] - }, - { - "Ref": "AWS::NoValue" - } - ] - } - ], - "Version": "2012-10-17" - }, - "roles": [ - { - "Fn::GetAtt": [ - "awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D", - "Outputs.awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole750F1EE9Ref" - ] - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnManagedPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.ManagedPolicy", - "version": "0.0.0", - "metadata": [ - { - "description": "*", - "roles": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "addStatements": [ - {} - ] - } - ] - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "Replicaus-east-2": { - "id": "Replicaus-east-2", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/Replicaus-east-2", - "children": { - "Default": { - "id": "Default", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/Replicaus-east-2/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "StackRegionNotEqualsus-east-2": { - "id": "StackRegionNotEqualsus-east-2", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/StackRegionNotEqualsus-east-2", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnCondition", - "version": "0.0.0" - } - }, - "Replicaeu-west-3": { - "id": "Replicaeu-west-3", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/Replicaeu-west-3", - "children": { - "Default": { - "id": "Default", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/Replicaeu-west-3/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "StackRegionNotEqualseu-west-3": { - "id": "StackRegionNotEqualseu-west-3", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/StackRegionNotEqualseu-west-3", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnCondition", - "version": "0.0.0" - } - }, - "WriteScaling": { - "id": "WriteScaling", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/WriteScaling", - "children": { - "Target": { - "id": "Target", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/WriteScaling/Target", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/WriteScaling/Target/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::ApplicationAutoScaling::ScalableTarget", - "aws:cdk:cloudformation:props": { - "maxCapacity": 10, - "minCapacity": 5, - "resourceId": { - "Fn::Join": [ - "", - [ - "table/", - { - "Ref": "TableCD117FA1" - } - ] - ] - }, - "roleArn": { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":iam::", - { - "Ref": "AWS::AccountId" - }, - ":role/aws-service-role/dynamodb.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_DynamoDBTable" - ] - ] - }, - "scalableDimension": "dynamodb:table:WriteCapacityUnits", - "serviceNamespace": "dynamodb" - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_applicationautoscaling.CfnScalableTarget", - "version": "0.0.0" - } - }, - "Tracking": { - "id": "Tracking", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/WriteScaling/Target/Tracking", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/Table/WriteScaling/Target/Tracking/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::ApplicationAutoScaling::ScalingPolicy", - "aws:cdk:cloudformation:props": { - "policyName": "awscdkdynamodbglobalreplicasprovisionedTableWriteScalingTargetTrackingD631E2EC", - "policyType": "TargetTrackingScaling", - "scalingTargetId": { - "Ref": "TableWriteScalingTargetE5669214" - }, - "targetTrackingScalingPolicyConfiguration": { - "predefinedMetricSpecification": { - "predefinedMetricType": "DynamoDBWriteCapacityUtilization" - }, - "targetValue": 75 - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_applicationautoscaling.CfnScalingPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_applicationautoscaling.TargetTrackingScalingPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_applicationautoscaling.ScalableTarget", - "version": "0.0.0", - "metadata": [ - { - "serviceNamespace": "dynamodb", - "scalableDimension": "*", - "resourceId": "*", - "role": "*", - "minCapacity": "*", - "maxCapacity": "*" - }, - { - "scaleToTrackMetric": [ - "*", - { - "policyName": "*", - "disableScaleIn": "*", - "scaleInCooldown": "*", - "targetValue": "*", - "predefinedMetric": "*" - } - ] - } - ] - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_applicationautoscaling.BaseScalableAttribute", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_dynamodb.Table", - "version": "0.0.0", - "metadata": [ - { - "partitionKey": { - "name": "*", - "type": "S" - }, - "removalPolicy": "destroy", - "replicationRegions": "*", - "billingMode": "PROVISIONED" - }, - { - "autoScaleWriteCapacity": [ - { - "minCapacity": "*", - "maxCapacity": "*" - } - ] - } - ] - } - }, - "@aws-cdk--aws-dynamodb.ReplicaProvider": { - "id": "@aws-cdk--aws-dynamodb.ReplicaProvider", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider", - "children": { - "LatestNodeRuntimeMap": { - "id": "LatestNodeRuntimeMap", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/LatestNodeRuntimeMap", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnMapping", - "version": "0.0.0" - } - }, - "OnEventHandler": { - "id": "OnEventHandler", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/DefaultPolicy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "iam:CreateServiceLinkedRole", - "Effect": "Allow", - "Resource": { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":iam::", - { - "Ref": "AWS::AccountId" - }, - ":role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication" - ] - ] - } - }, - { - "Action": "dynamodb:DescribeLimits", - "Effect": "Allow", - "Resource": "*" - }, - { - "Action": [ - "dynamodb:DeleteTable", - "dynamodb:DeleteTableReplica" - ], - "Effect": "Allow", - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":dynamodb:eu-west-3:", - { - "Ref": "AWS::AccountId" - }, - ":table/", - { - "Ref": "referencetoawscdkdynamodbglobalreplicasprovisionedTable12280A12Ref" - } - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":dynamodb:us-east-2:", - { - "Ref": "AWS::AccountId" - }, - ":table/", - { - "Ref": "referencetoawscdkdynamodbglobalreplicasprovisionedTable12280A12Ref" - } - ] - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "policyName": "OnEventHandlerServiceRoleDefaultPolicyC57085D4", - "roles": [ - { - "Ref": "OnEventHandlerServiceRole15A26729" - } - ] - } - }, - "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": "*" - }, - "managedPolicies": [ - { - "managedPolicyArn": "*" - } - ] - }, - { - "addToPrincipalPolicy": [ - {} - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "addToPrincipalPolicy": [ - {} - ] - }, - { - "addToPrincipalPolicy": [ - {} - ] - } - ] - } - }, - "Code": { - "id": "Code", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/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": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip" - }, - "handler": "index.onEventHandler", - "role": { - "Fn::GetAtt": [ - "OnEventHandlerServiceRole15A26729", - "Arn" - ] - }, - "runtime": { - "Fn::FindInMap": [ - "LatestNodeRuntimeMap", - { - "Ref": "AWS::Region" - }, - "value" - ] - }, - "timeout": 300 - } - }, - "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": [ - { - "timeout": "*", - "code": "*", - "handler": "*", - "runtime": "*" - } - ] - } - }, - "IsCompleteHandler": { - "id": "IsCompleteHandler", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/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" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "0.0.0", - "metadata": [ - { - "assumedBy": { - "principalAccount": "*", - "assumeRoleAction": "*" - }, - "managedPolicies": [ - { - "managedPolicyArn": "*" - } - ] - } - ] - } - }, - "Code": { - "id": "Code", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/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": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip" - }, - "handler": "index.isCompleteHandler", - "role": { - "Fn::GetAtt": [ - "IsCompleteHandlerServiceRole5810CC58", - "Arn" - ] - }, - "runtime": { - "Fn::FindInMap": [ - "LatestNodeRuntimeMap", - { - "Ref": "AWS::Region" - }, - "value" - ] - }, - "timeout": 30 - } - }, - "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": [ - { - "timeout": "*", - "code": "*", - "handler": "*", - "runtime": "*" - } - ] - } - }, - "Provider": { - "id": "Provider", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider", - "children": { - "framework-onEvent": { - "id": "framework-onEvent", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - ":*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - ":*" - ] - ] - } - ] - }, - { - "Action": "lambda:GetFunction", - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - } - ] - }, - { - "Action": "states:StartExecution", - "Effect": "Allow", - "Resource": { - "Ref": "Providerwaiterstatemachine5D4A9DF0" - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkonEventServiceRoleDefaultPolicy48CD2133", - "roles": [ - { - "Ref": "ProviderframeworkonEventServiceRole9FF04296" - } - ] - } - }, - "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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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 (aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)", - "environment": { - "variables": { - "USER_ON_EVENT_FUNCTION_ARN": { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - "USER_IS_COMPLETE_FUNCTION_ARN": { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - "WAITER_STATE_MACHINE_ARN": { - "Ref": "Providerwaiterstatemachine5D4A9DF0" - } - } - }, - "handler": "framework.onEvent", - "role": { - "Fn::GetAtt": [ - "ProviderframeworkonEventServiceRole9FF04296", - "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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - ":*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - ":*" - ] - ] - } - ] - }, - { - "Action": "lambda:GetFunction", - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkisCompleteServiceRoleDefaultPolicy2E7140AC", - "roles": [ - { - "Ref": "ProviderframeworkisCompleteServiceRoleB1087139" - } - ] - } - }, - "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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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 (aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)", - "environment": { - "variables": { - "USER_ON_EVENT_FUNCTION_ARN": { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - "USER_IS_COMPLETE_FUNCTION_ARN": { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - } - } - }, - "handler": "framework.isComplete", - "role": { - "Fn::GetAtt": [ - "ProviderframeworkisCompleteServiceRoleB1087139", - "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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - ":*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - ":*" - ] - ] - } - ] - }, - { - "Action": "lambda:GetFunction", - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkonTimeoutServiceRoleDefaultPolicy2688969F", - "roles": [ - { - "Ref": "ProviderframeworkonTimeoutServiceRole28643D26" - } - ] - } - }, - "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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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 (aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)", - "environment": { - "variables": { - "USER_ON_EVENT_FUNCTION_ARN": { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - "USER_IS_COMPLETE_FUNCTION_ARN": { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - } - } - }, - "handler": "framework.onTimeout", - "role": { - "Fn::GetAtt": [ - "ProviderframeworkonTimeoutServiceRole28643D26", - "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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine", - "children": { - "Role": { - "id": "Role", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role", - "children": { - "ImportRole": { - "id": "ImportRole", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/ImportRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": [ - "ProviderframeworkisComplete26D7B0CB", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "ProviderframeworkonTimeout0B47CA38", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "ProviderframeworkisComplete26D7B0CB", - "Arn" - ] - }, - ":*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "ProviderframeworkonTimeout0B47CA38", - "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": "ProviderwaiterstatemachineRoleDefaultPolicyD3C3DA1A", - "roles": [ - { - "Ref": "ProviderwaiterstatemachineRole0C7159F9" - } - ] - } - }, - "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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/LogGroup", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "ProviderframeworkisComplete26D7B0CB" - }, - "-c861cd2a83a6af30e2613fcc9324bc4db65ca58d7f" - ] - ] - }, - "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": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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\":10,\"MaxAttempts\":180,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"", - { - "Fn::GetAtt": [ - "ProviderframeworkisComplete26D7B0CB", - "Arn" - ] - }, - "\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"", - { - "Fn::GetAtt": [ - "ProviderframeworkonTimeout0B47CA38", - "Arn" - ] - }, - "\"}}}" - ] - ] - }, - "loggingConfiguration": { - "destinations": [ - { - "cloudWatchLogsLogGroup": { - "logGroupArn": { - "Fn::GetAtt": [ - "ProviderwaiterstatemachineLogGroupDD693A98", - "Arn" - ] - } - } - } - ], - "includeExecutionData": false, - "level": "ERROR" - }, - "roleArn": { - "Fn::GetAtt": [ - "ProviderwaiterstatemachineRole0C7159F9", - "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" - } - }, - "awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole348A0C9ARef": { - "id": "awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole348A0C9ARef", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole348A0C9ARef", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - }, - "awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole750F1EE9Ref": { - "id": "awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole750F1EE9Ref", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole750F1EE9Ref", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - }, - "awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderframeworkonEventACC2C387Arn": { - "id": "awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderframeworkonEventACC2C387Arn", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderframeworkonEventACC2C387Arn", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - }, - "reference-to-awscdkdynamodbglobalreplicasprovisionedTable12280A12Ref": { - "id": "reference-to-awscdkdynamodbglobalreplicasprovisionedTable12280A12Ref", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/reference-to-awscdkdynamodbglobalreplicasprovisionedTable12280A12Ref", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.NestedStack", - "version": "0.0.0" - } - }, - "@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack": { - "id": "@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack", - "children": { - "@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource": { - "id": "@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::CloudFormation::Stack", - "aws:cdk:cloudformation:props": { - "parameters": { - "referencetoawscdkdynamodbglobalreplicasprovisionedTable12280A12Ref": { - "Ref": "TableCD117FA1" - } - }, - "templateUrl": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" - }, - "/1b09badc4e19e59ec158617bd51789ee6ed15cfe942f7a98932d5b6a3a0a0e56.json" - ] - ] - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CfnStack", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "aws-cdk-dynamodb-global-replicas-provisioned/CheckBootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnRule", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.Stack", - "version": "0.0.0" - } - }, - "aws-cdk-dynamodb-global-replicas-provisioned-test": { - "id": "aws-cdk-dynamodb-global-replicas-provisioned-test", - "path": "aws-cdk-dynamodb-global-replicas-provisioned-test", - "children": { - "DefaultTest": { - "id": "DefaultTest", - "path": "aws-cdk-dynamodb-global-replicas-provisioned-test/DefaultTest", - "children": { - "Default": { - "id": "Default", - "path": "aws-cdk-dynamodb-global-replicas-provisioned-test/DefaultTest/Default", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "DeployAssert": { - "id": "DeployAssert", - "path": "aws-cdk-dynamodb-global-replicas-provisioned-test/DefaultTest/DeployAssert", - "children": { - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "aws-cdk-dynamodb-global-replicas-provisioned-test/DefaultTest/DeployAssert/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "aws-cdk-dynamodb-global-replicas-provisioned-test/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":"","children":{"aws-cdk-dynamodb-global-replicas-provisioned":{"id":"aws-cdk-dynamodb-global-replicas-provisioned","path":"aws-cdk-dynamodb-global-replicas-provisioned","children":{"Table":{"id":"Table","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table","children":{"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::DynamoDB::Table","aws:cdk:cloudformation:props":{"attributeDefinitions":[{"attributeName":"hashKey","attributeType":"S"}],"keySchema":[{"attributeName":"hashKey","keyType":"HASH"}],"provisionedThroughput":{"readCapacityUnits":5,"writeCapacityUnits":5},"streamSpecification":{"streamViewType":"NEW_AND_OLD_IMAGES"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_dynamodb.CfnTable","version":"0.0.0"}},"ScalingRole":{"id":"ScalingRole","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/ScalingRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD9856B77":{"id":"SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD9856B77","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD9856B77","children":{"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD9856B77/Resource","children":{"ImportedResource":{"id":"ImportedResource","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD9856B77/Resource/ImportedResource","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD9856B77/Resource/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::ManagedPolicy","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["DynamoDB replication managed policy for table ",{"Ref":"TableCD117FA1"}]]},"path":"/","policyDocument":{"Statement":[{"Action":"dynamodb:*","Effect":"Allow","Resource":[{"Fn::GetAtt":["TableCD117FA1","Arn"]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":dynamodb:eu-west-3:",{"Ref":"AWS::AccountId"},":table/",{"Ref":"TableCD117FA1"}]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":dynamodb:us-east-2:",{"Ref":"AWS::AccountId"},":table/",{"Ref":"TableCD117FA1"}]]},{"Ref":"AWS::NoValue"}]}],"Version":"2012-10-17"},"roles":[{"Fn::GetAtt":["awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D","Outputs.awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole348A0C9ARef"]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnManagedPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.ManagedPolicy","version":"0.0.0","metadata":[{"description":"*","roles":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A":{"id":"SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A","children":{"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A/Resource","children":{"ImportedResource":{"id":"ImportedResource","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A/Resource/ImportedResource","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/SourceTableAttachedManagedPolicy-awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A/Resource/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::ManagedPolicy","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["DynamoDB replication managed policy for table ",{"Ref":"TableCD117FA1"}]]},"path":"/","policyDocument":{"Statement":[{"Action":"dynamodb:DescribeTable","Effect":"Allow","Resource":[{"Fn::GetAtt":["TableCD117FA1","Arn"]},{"Ref":"AWS::NoValue"}]}],"Version":"2012-10-17"},"roles":[{"Fn::GetAtt":["awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D","Outputs.awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole750F1EE9Ref"]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnManagedPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.ManagedPolicy","version":"0.0.0","metadata":[{"description":"*","roles":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"Replicaus-east-2":{"id":"Replicaus-east-2","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/Replicaus-east-2","children":{"Default":{"id":"Default","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/Replicaus-east-2/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*"]}},"StackRegionNotEqualsus-east-2":{"id":"StackRegionNotEqualsus-east-2","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/StackRegionNotEqualsus-east-2","constructInfo":{"fqn":"aws-cdk-lib.CfnCondition","version":"0.0.0"}},"Replicaeu-west-3":{"id":"Replicaeu-west-3","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/Replicaeu-west-3","children":{"Default":{"id":"Default","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/Replicaeu-west-3/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*"]}},"StackRegionNotEqualseu-west-3":{"id":"StackRegionNotEqualseu-west-3","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/StackRegionNotEqualseu-west-3","constructInfo":{"fqn":"aws-cdk-lib.CfnCondition","version":"0.0.0"}},"WriteScaling":{"id":"WriteScaling","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/WriteScaling","children":{"Target":{"id":"Target","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/WriteScaling/Target","children":{"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/WriteScaling/Target/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::ApplicationAutoScaling::ScalableTarget","aws:cdk:cloudformation:props":{"maxCapacity":10,"minCapacity":5,"resourceId":{"Fn::Join":["",["table/",{"Ref":"TableCD117FA1"}]]},"roleArn":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::",{"Ref":"AWS::AccountId"},":role/aws-service-role/dynamodb.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_DynamoDBTable"]]},"scalableDimension":"dynamodb:table:WriteCapacityUnits","serviceNamespace":"dynamodb"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_applicationautoscaling.CfnScalableTarget","version":"0.0.0"}},"Tracking":{"id":"Tracking","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/WriteScaling/Target/Tracking","children":{"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/Table/WriteScaling/Target/Tracking/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::ApplicationAutoScaling::ScalingPolicy","aws:cdk:cloudformation:props":{"policyName":"awscdkdynamodbglobalreplicasprovisionedTableWriteScalingTargetTrackingD631E2EC","policyType":"TargetTrackingScaling","scalingTargetId":{"Ref":"TableWriteScalingTargetE5669214"},"targetTrackingScalingPolicyConfiguration":{"predefinedMetricSpecification":{"predefinedMetricType":"DynamoDBWriteCapacityUtilization"},"targetValue":75}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_applicationautoscaling.CfnScalingPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_applicationautoscaling.TargetTrackingScalingPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_applicationautoscaling.ScalableTarget","version":"0.0.0","metadata":[{"serviceNamespace":"dynamodb","scalableDimension":"*","resourceId":"*","role":"*","minCapacity":"*","maxCapacity":"*"},{"scaleToTrackMetric":["*",{"policyName":"*","disableScaleIn":"*","scaleInCooldown":"*","targetValue":"*","predefinedMetric":"*"}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_applicationautoscaling.BaseScalableAttribute","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_dynamodb.Table","version":"0.0.0","metadata":[{"partitionKey":{"name":"*","type":"S"},"removalPolicy":"destroy","replicationRegions":"*","billingMode":"PROVISIONED"},{"autoScaleWriteCapacity":[{"minCapacity":"*","maxCapacity":"*"}]}]}},"@aws-cdk--aws-dynamodb.ReplicaProvider":{"id":"@aws-cdk--aws-dynamodb.ReplicaProvider","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider","children":{"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"OnEventHandler":{"id":"OnEventHandler","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"iam:CreateServiceLinkedRole","Effect":"Allow","Resource":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::",{"Ref":"AWS::AccountId"},":role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication"]]}},{"Action":"dynamodb:DescribeLimits","Effect":"Allow","Resource":"*"},{"Action":["dynamodb:DeleteTable","dynamodb:DeleteTableReplica"],"Effect":"Allow","Resource":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":dynamodb:eu-west-3:",{"Ref":"AWS::AccountId"},":table/",{"Ref":"referencetoawscdkdynamodbglobalreplicasprovisionedTable12280A12Ref"}]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":dynamodb:us-east-2:",{"Ref":"AWS::AccountId"},":table/",{"Ref":"referencetoawscdkdynamodbglobalreplicasprovisionedTable12280A12Ref"}]]}]}],"Version":"2012-10-17"},"policyName":"OnEventHandlerServiceRoleDefaultPolicyC57085D4","roles":[{"Ref":"OnEventHandlerServiceRole15A26729"}]}},"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":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code","children":{"Stage":{"id":"Stage","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/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":"beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip"},"handler":"index.onEventHandler","role":{"Fn::GetAtt":["OnEventHandlerServiceRole15A26729","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":300}},"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":[{"timeout":"*","code":"*","handler":"*","runtime":"*"}]}},"IsCompleteHandler":{"id":"IsCompleteHandler","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]}]}},"Code":{"id":"Code","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code","children":{"Stage":{"id":"Stage","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/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":"beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip"},"handler":"index.isCompleteHandler","role":{"Fn::GetAtt":["IsCompleteHandlerServiceRole5810CC58","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":30}},"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":[{"timeout":"*","code":"*","handler":"*","runtime":"*"}]}},"Provider":{"id":"Provider","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider","children":{"framework-onEvent":{"id":"framework-onEvent","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent","children":{"ServiceRole":{"id":"ServiceRole","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]}]},{"Action":"states:StartExecution","Effect":"Allow","Resource":{"Ref":"Providerwaiterstatemachine5D4A9DF0"}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonEventServiceRoleDefaultPolicy48CD2133","roles":[{"Ref":"ProviderframeworkonEventServiceRole9FF04296"}]}},"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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code","children":{"Stage":{"id":"Stage","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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 (aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},"WAITER_STATE_MACHINE_ARN":{"Ref":"Providerwaiterstatemachine5D4A9DF0"}}},"handler":"framework.onEvent","role":{"Fn::GetAtt":["ProviderframeworkonEventServiceRole9FF04296","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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete","children":{"ServiceRole":{"id":"ServiceRole","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]}]}],"Version":"2012-10-17"},"policyName":"ProviderframeworkisCompleteServiceRoleDefaultPolicy2E7140AC","roles":[{"Ref":"ProviderframeworkisCompleteServiceRoleB1087139"}]}},"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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code","children":{"Stage":{"id":"Stage","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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 (aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}},"handler":"framework.isComplete","role":{"Fn::GetAtt":["ProviderframeworkisCompleteServiceRoleB1087139","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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout","children":{"ServiceRole":{"id":"ServiceRole","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]}]}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonTimeoutServiceRoleDefaultPolicy2688969F","roles":[{"Ref":"ProviderframeworkonTimeoutServiceRole28643D26"}]}},"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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code","children":{"Stage":{"id":"Stage","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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 (aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}},"handler":"framework.onTimeout","role":{"Fn::GetAtt":["ProviderframeworkonTimeoutServiceRole28643D26","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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine","children":{"Role":{"id":"Role","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role","children":{"ImportRole":{"id":"ImportRole","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/ImportRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["ProviderframeworkisComplete26D7B0CB","Arn"]},{"Fn::GetAtt":["ProviderframeworkonTimeout0B47CA38","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["ProviderframeworkisComplete26D7B0CB","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["ProviderframeworkonTimeout0B47CA38","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":"ProviderwaiterstatemachineRoleDefaultPolicyD3C3DA1A","roles":[{"Ref":"ProviderwaiterstatemachineRole0C7159F9"}]}},"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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/LogGroup","children":{"Resource":{"id":"Resource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"ProviderframeworkisComplete26D7B0CB"},"-c861cd2a83a6af30e2613fcc9324bc4db65ca58d7f"]]},"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":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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\":10,\"MaxAttempts\":180,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["ProviderframeworkisComplete26D7B0CB","Arn"]},"\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["ProviderframeworkonTimeout0B47CA38","Arn"]},"\"}}}"]]},"loggingConfiguration":{"destinations":[{"cloudWatchLogsLogGroup":{"logGroupArn":{"Fn::GetAtt":["ProviderwaiterstatemachineLogGroupDD693A98","Arn"]}}}],"includeExecutionData":false,"level":"ERROR"},"roleArn":{"Fn::GetAtt":["ProviderwaiterstatemachineRole0C7159F9","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"}},"awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole348A0C9ARef":{"id":"awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole348A0C9ARef","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole348A0C9ARef","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole750F1EE9Ref":{"id":"awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole750F1EE9Ref","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole750F1EE9Ref","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderframeworkonEventACC2C387Arn":{"id":"awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderframeworkonEventACC2C387Arn","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderframeworkonEventACC2C387Arn","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"reference-to-awscdkdynamodbglobalreplicasprovisionedTable12280A12Ref":{"id":"reference-to-awscdkdynamodbglobalreplicasprovisionedTable12280A12Ref","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider/reference-to-awscdkdynamodbglobalreplicasprovisionedTable12280A12Ref","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.NestedStack","version":"0.0.0"}},"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack":{"id":"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack","children":{"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource":{"id":"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource","path":"aws-cdk-dynamodb-global-replicas-provisioned/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource","attributes":{"aws:cdk:cloudformation:type":"AWS::CloudFormation::Stack","aws:cdk:cloudformation:props":{"parameters":{"referencetoawscdkdynamodbglobalreplicasprovisionedTable12280A12Ref":{"Ref":"TableCD117FA1"}},"templateUrl":{"Fn::Join":["",["https://s3.",{"Ref":"AWS::Region"},".",{"Ref":"AWS::URLSuffix"},"/",{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"/db84cdae632e6cba2f8e4a431d3f3a350218ac90c39e5eb62fff4a6737994230.json"]]}}},"constructInfo":{"fqn":"aws-cdk-lib.CfnStack","version":"0.0.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"BootstrapVersion":{"id":"BootstrapVersion","path":"aws-cdk-dynamodb-global-replicas-provisioned/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"aws-cdk-dynamodb-global-replicas-provisioned/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"}},"aws-cdk-dynamodb-global-replicas-provisioned-test":{"id":"aws-cdk-dynamodb-global-replicas-provisioned-test","path":"aws-cdk-dynamodb-global-replicas-provisioned-test","children":{"DefaultTest":{"id":"DefaultTest","path":"aws-cdk-dynamodb-global-replicas-provisioned-test/DefaultTest","children":{"Default":{"id":"Default","path":"aws-cdk-dynamodb-global-replicas-provisioned-test/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"aws-cdk-dynamodb-global-replicas-provisioned-test/DefaultTest/DeployAssert","children":{"BootstrapVersion":{"id":"BootstrapVersion","path":"aws-cdk-dynamodb-global-replicas-provisioned-test/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"aws-cdk-dynamodb-global-replicas-provisioned-test/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 diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4/index.js deleted file mode 100644 index d991c8c6a6e37..0000000000000 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4/index.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";var n=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var m=(e,s)=>{for(var t in s)n(e,t,{get:s[t],enumerable:!0})},b=(e,s,t,o)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of d(s))!u.call(e,a)&&a!==t&&n(e,a,{get:()=>s[a],enumerable:!(o=R(s,a))||o.enumerable});return e};var T=e=>b(n({},"__esModule",{value:!0}),e);var y={};m(y,{isCompleteHandler:()=>g,onEventHandler:()=>C});module.exports=T(y);var c=require("@aws-sdk/client-dynamodb");async function C(e){console.log("Event: %j",{...e,ResponseURL:"..."});let s=new c.DynamoDB({}),t=e.ResourceProperties.TableName,o=e.ResourceProperties.Region,a;if(e.RequestType==="Create"||e.RequestType==="Delete")a=e.RequestType;else{let l=await s.describeTable({TableName:t});console.log("Describe table: %j",l),a=l.Table?.Replicas?.some(i=>i.RegionName===o)?void 0:"Create"}if(a){let l=await s.updateTable({TableName:t,ReplicaUpdates:[{[a]:{RegionName:o}}]});console.log("Update table: %j",l)}else console.log("Skipping updating Table, as a replica in '%s' already exists",o);return e.RequestType==="Create"||e.RequestType==="Update"?{PhysicalResourceId:`${t}-${o}`}:{}}async function g(e){console.log("Event: %j",{...e,ResponseURL:"..."});let t=await new c.DynamoDB({}).describeTable({TableName:e.ResourceProperties.TableName});console.log("Describe table: %j",t);let o=t.Table?.TableStatus==="ACTIVE",l=(t.Table?.Replicas??[]).find(r=>r.RegionName===e.ResourceProperties.Region),p=l?.ReplicaStatus==="ACTIVE",i=e.ResourceProperties.SkipReplicationCompletedWait==="true";switch(e.RequestType){case"Create":case"Update":return{IsComplete:o&&(p||i)};case"Delete":return{IsComplete:o&&l===void 0}}}0&&(module.exports={isCompleteHandler,onEventHandler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8/index.js new file mode 100644 index 0000000000000..f33b9fbaea5e1 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8/index.js @@ -0,0 +1 @@ +"use strict";var p=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var b=(e,s)=>{for(var t in s)p(e,t,{get:s[t],enumerable:!0})},m=(e,s,t,o)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of u(s))!d.call(e,a)&&a!==t&&p(e,a,{get:()=>s[a],enumerable:!(o=R(s,a))||o.enumerable});return e};var T=e=>m(p({},"__esModule",{value:!0}),e);var y={};b(y,{isCompleteHandler:()=>C,onEventHandler:()=>g});module.exports=T(y);var c=require("@aws-sdk/client-dynamodb");async function g(e){console.log("Event: %j",{...e,ResponseURL:"..."});let s=new c.DynamoDB({}),t=e.ResourceProperties.TableName,o=e.ResourceProperties.Region,a=e.ResourceProperties.SkipReplicaDeletion,i;if(e.RequestType==="Create"||e.RequestType==="Delete")i=e.RequestType;else{let l=await s.describeTable({TableName:t});console.log("Describe table: %j",l),i=l.Table?.Replicas?.some(n=>n.RegionName===o)?void 0:"Create"}if(i)if(i==="Delete"&&a)console.log("Skipping deleting replica table as replica table is set to retain.");else{let l=await s.updateTable({TableName:t,ReplicaUpdates:[{[i]:{RegionName:o}}]});console.log("Update table: %j",l)}else console.log("Skipping updating Table, as a replica in '%s' already exists",o);return e.RequestType==="Create"||e.RequestType==="Update"?{PhysicalResourceId:`${t}-${o}`}:{}}async function C(e){console.log("Event: %j",{...e,ResponseURL:"..."});let t=await new c.DynamoDB({}).describeTable({TableName:e.ResourceProperties.TableName});console.log("Describe table: %j",t);let o=t.Table?.TableStatus==="ACTIVE",i=(t.Table?.Replicas??[]).find(n=>n.RegionName===e.ResourceProperties.Region),l=i?.ReplicaStatus==="ACTIVE",r=e.ResourceProperties.SkipReplicationCompletedWait==="true";switch(e.RequestType){case"Create":case"Update":return{IsComplete:o&&(l||r)};case"Delete":return e.ResourceProperties.SkipReplicaDeletion===!0?(console.log("Skipping replica deletion check since replica is set to retain."),{IsComplete:!0}):{IsComplete:o&&i===void 0}}}0&&(module.exports={isCompleteHandler,onEventHandler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.assets.json index 017501fbf0f84..378146b59a98f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.assets.json @@ -1,21 +1,23 @@ { - "version": "39.0.0", + "version": "41.0.0", "files": { - "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4": { + "beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8": { + "displayName": "@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code", "source": { - "path": "asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4", + "path": "asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8", "packaging": "zip" }, "destinations": { "current_account-eu-west-1": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1", - "objectKey": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip", + "objectKey": "beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip", "region": "eu-west-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-eu-west-1" } } }, "39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6": { + "displayName": "@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code", "source": { "path": "asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6", "packaging": "zip" @@ -29,7 +31,8 @@ } } }, - "382e5c366bee4bada2d396e43b7f9c1d728220cec00913cb1240c5d387d16a5a": { + "99ce8e16a78e3c9de5980fd298e7e5eb3b4b63768f61485a4f30c32a9ac3602e": { + "displayName": "${Token[TOKEN.1177]} Template", "source": { "path": "cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderB281C954.nested.template.json", "packaging": "file" @@ -37,13 +40,14 @@ "destinations": { "current_account-eu-west-1": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1", - "objectKey": "382e5c366bee4bada2d396e43b7f9c1d728220cec00913cb1240c5d387d16a5a.json", + "objectKey": "99ce8e16a78e3c9de5980fd298e7e5eb3b4b63768f61485a4f30c32a9ac3602e.json", "region": "eu-west-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-eu-west-1" } } }, - "05dd671f7ad16e3ad0de5a54a4ec2a4d475fc2db6584304cd7a5f07563e314ae": { + "7acfdbcbfc0c557c3d9dd98954b1f4858970622247739a50a3e665534d3f0784": { + "displayName": "cdk-dynamodb-global-20191121 Template", "source": { "path": "cdk-dynamodb-global-20191121.template.json", "packaging": "file" @@ -51,7 +55,7 @@ "destinations": { "current_account-eu-west-1": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1", - "objectKey": "05dd671f7ad16e3ad0de5a54a4ec2a4d475fc2db6584304cd7a5f07563e314ae.json", + "objectKey": "7acfdbcbfc0c557c3d9dd98954b1f4858970622247739a50a3e665534d3f0784.json", "region": "eu-west-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-eu-west-1" } diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.template.json index 500729650adb7..8096eec57f917 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.template.json @@ -195,7 +195,8 @@ "TableName": { "Ref": "TableCD117FA1" }, - "Region": "eu-west-2" + "Region": "eu-west-2", + "SkipReplicaDeletion": false }, "DependsOn": [ "TableSourceTableAttachedManagedPolicycdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole3971612857304880", @@ -216,7 +217,8 @@ "TableName": { "Ref": "TableCD117FA1" }, - "Region": "eu-central-1" + "Region": "eu-central-1", + "SkipReplicaDeletion": false }, "DependsOn": [ "TableReplicaeuwest290D3CD3A", @@ -246,7 +248,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1" }, - "/382e5c366bee4bada2d396e43b7f9c1d728220cec00913cb1240c5d387d16a5a.json" + "/99ce8e16a78e3c9de5980fd298e7e5eb3b4b63768f61485a4f30c32a9ac3602e.json" ] ] } diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk.out index 91e1a8b9901d5..188478b55560e 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"39.0.0"} \ No newline at end of file +{"version":"41.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderB281C954.nested.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderB281C954.nested.template.json index 0a2c813c09a44..2dfdcb3620dfe 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderB281C954.nested.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderB281C954.nested.template.json @@ -122,7 +122,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1" }, - "S3Key": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip" + "S3Key": "beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip" }, "Handler": "index.onEventHandler", "Role": { @@ -177,7 +177,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1" }, - "S3Key": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip" + "S3Key": "beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip" }, "Handler": "index.isCompleteHandler", "Role": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdkdynamodbglobal20191121testDefaultTestDeployAssert469C3611.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdkdynamodbglobal20191121testDefaultTestDeployAssert469C3611.assets.json index a0ec03a5cc475..324d9200a24bd 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdkdynamodbglobal20191121testDefaultTestDeployAssert469C3611.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdkdynamodbglobal20191121testDefaultTestDeployAssert469C3611.assets.json @@ -1,7 +1,8 @@ { - "version": "39.0.0", + "version": "41.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "displayName": "cdkdynamodbglobal20191121testDefaultTestDeployAssert469C3611 Template", "source": { "path": "cdkdynamodbglobal20191121testDefaultTestDeployAssert469C3611.template.json", "packaging": "file" diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/integ.json index 13aa54ae8e81a..01eabd02ba016 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "39.0.0", + "version": "41.0.0", "testCases": { "cdk-dynamodb-global-20191121-test/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/manifest.json index 26a25352a4680..c76deab197151 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "39.0.0", + "version": "42.0.0", "artifacts": { "cdk-dynamodb-global-20191121.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}-eu-west-1", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-eu-west-1", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1/05dd671f7ad16e3ad0de5a54a4ec2a4d475fc2db6584304cd7a5f07563e314ae.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1/7acfdbcbfc0c557c3d9dd98954b1f4858970622247739a50a3e665534d3f0784.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -1157,5 +1157,6 @@ "file": "tree.json" } } - } + }, + "minimumCliVersion": "2.1006.0" } \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/tree.json index 1cac8a3b167c6..f89cd24199b63 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/tree.json @@ -1,2401 +1 @@ -{ - "version": "tree-0.1", - "tree": { - "id": "App", - "path": "", - "children": { - "cdk-dynamodb-global-20191121": { - "id": "cdk-dynamodb-global-20191121", - "path": "cdk-dynamodb-global-20191121", - "children": { - "Table": { - "id": "Table", - "path": "cdk-dynamodb-global-20191121/Table", - "children": { - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/Table/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::DynamoDB::Table", - "aws:cdk:cloudformation:props": { - "attributeDefinitions": [ - { - "attributeName": "id", - "attributeType": "S" - }, - { - "attributeName": "key", - "attributeType": "S" - } - ], - "billingMode": "PAY_PER_REQUEST", - "globalSecondaryIndexes": [ - { - "indexName": "my-index", - "keySchema": [ - { - "attributeName": "key", - "keyType": "HASH" - } - ], - "projection": { - "projectionType": "ALL" - } - } - ], - "keySchema": [ - { - "attributeName": "id", - "keyType": "HASH" - } - ], - "streamSpecification": { - "streamViewType": "NEW_AND_OLD_IMAGES" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_dynamodb.CfnTable", - "version": "0.0.0" - } - }, - "ScalingRole": { - "id": "ScalingRole", - "path": "cdk-dynamodb-global-20191121/Table/ScalingRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole6F43DF4A": { - "id": "SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole6F43DF4A", - "path": "cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole6F43DF4A", - "children": { - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole6F43DF4A/Resource", - "children": { - "ImportedResource": { - "id": "ImportedResource", - "path": "cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole6F43DF4A/Resource/ImportedResource", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [] - } - }, - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole6F43DF4A/Resource/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::ManagedPolicy", - "aws:cdk:cloudformation:props": { - "description": { - "Fn::Join": [ - "", - [ - "DynamoDB replication managed policy for table ", - { - "Ref": "TableCD117FA1" - } - ] - ] - }, - "path": "/", - "policyDocument": { - "Statement": [ - { - "Action": "dynamodb:*", - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "TableCD117FA1", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:dynamodb:eu-central-1:", - { - "Ref": "AWS::AccountId" - }, - ":table/", - { - "Ref": "TableCD117FA1" - } - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:dynamodb:eu-west-2:", - { - "Ref": "AWS::AccountId" - }, - ":table/", - { - "Ref": "TableCD117FA1" - } - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "TableCD117FA1", - "Arn" - ] - }, - "/index/*" - ] - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "roles": [ - { - "Fn::GetAtt": [ - "awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D", - "Outputs.cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole3E8625F3Ref" - ] - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnManagedPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.ManagedPolicy", - "version": "0.0.0", - "metadata": [ - { - "description": "*", - "roles": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "addStatements": [ - {} - ] - }, - { - "addStatements": [ - {} - ] - } - ] - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole39716128": { - "id": "SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole39716128", - "path": "cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole39716128", - "children": { - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole39716128/Resource", - "children": { - "ImportedResource": { - "id": "ImportedResource", - "path": "cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole39716128/Resource/ImportedResource", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [] - } - }, - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole39716128/Resource/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::ManagedPolicy", - "aws:cdk:cloudformation:props": { - "description": { - "Fn::Join": [ - "", - [ - "DynamoDB replication managed policy for table ", - { - "Ref": "TableCD117FA1" - } - ] - ] - }, - "path": "/", - "policyDocument": { - "Statement": [ - { - "Action": "dynamodb:DescribeTable", - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "TableCD117FA1", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "TableCD117FA1", - "Arn" - ] - }, - "/index/*" - ] - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "roles": [ - { - "Fn::GetAtt": [ - "awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D", - "Outputs.cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole2F936EC4Ref" - ] - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnManagedPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.ManagedPolicy", - "version": "0.0.0", - "metadata": [ - { - "description": "*", - "roles": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "addStatements": [ - {} - ] - } - ] - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "Replicaeu-west-2": { - "id": "Replicaeu-west-2", - "path": "cdk-dynamodb-global-20191121/Table/Replicaeu-west-2", - "children": { - "Default": { - "id": "Default", - "path": "cdk-dynamodb-global-20191121/Table/Replicaeu-west-2/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Replicaeu-central-1": { - "id": "Replicaeu-central-1", - "path": "cdk-dynamodb-global-20191121/Table/Replicaeu-central-1", - "children": { - "Default": { - "id": "Default", - "path": "cdk-dynamodb-global-20191121/Table/Replicaeu-central-1/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_dynamodb.Table", - "version": "0.0.0", - "metadata": [ - { - "partitionKey": { - "name": "*", - "type": "S" - }, - "removalPolicy": "destroy", - "replicationRegions": "*" - }, - { - "addGlobalSecondaryIndex": [ - { - "indexName": "*", - "partitionKey": { - "name": "*", - "type": "S" - } - } - ] - } - ] - } - }, - "@aws-cdk--aws-dynamodb.ReplicaProvider": { - "id": "@aws-cdk--aws-dynamodb.ReplicaProvider", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider", - "children": { - "OnEventHandler": { - "id": "OnEventHandler", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/DefaultPolicy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "iam:CreateServiceLinkedRole", - "Effect": "Allow", - "Resource": { - "Fn::Join": [ - "", - [ - "arn:aws:iam::", - { - "Ref": "AWS::AccountId" - }, - ":role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication" - ] - ] - } - }, - { - "Action": "dynamodb:DescribeLimits", - "Effect": "Allow", - "Resource": "*" - }, - { - "Action": [ - "dynamodb:DeleteTable", - "dynamodb:DeleteTableReplica" - ], - "Effect": "Allow", - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":dynamodb:eu-central-1:", - { - "Ref": "AWS::AccountId" - }, - ":table/", - { - "Ref": "referencetocdkdynamodbglobal20191121TableB640876BRef" - } - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":dynamodb:eu-west-2:", - { - "Ref": "AWS::AccountId" - }, - ":table/", - { - "Ref": "referencetocdkdynamodbglobal20191121TableB640876BRef" - } - ] - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "policyName": "OnEventHandlerServiceRoleDefaultPolicyC57085D4", - "roles": [ - { - "Ref": "OnEventHandlerServiceRole15A26729" - } - ] - } - }, - "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": "*" - }, - "managedPolicies": [ - { - "managedPolicyArn": "*" - } - ] - }, - { - "addToPrincipalPolicy": [ - {} - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "addToPrincipalPolicy": [ - {} - ] - }, - { - "addToPrincipalPolicy": [ - {} - ] - } - ] - } - }, - "Code": { - "id": "Code", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Lambda::Function", - "aws:cdk:cloudformation:props": { - "code": { - "s3Bucket": { - "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1" - }, - "s3Key": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip" - }, - "handler": "index.onEventHandler", - "role": { - "Fn::GetAtt": [ - "OnEventHandlerServiceRole15A26729", - "Arn" - ] - }, - "runtime": "nodejs20.x", - "timeout": 300 - } - }, - "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": [ - { - "timeout": "*", - "code": "*", - "handler": "*", - "runtime": "*" - } - ] - } - }, - "IsCompleteHandler": { - "id": "IsCompleteHandler", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/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" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "0.0.0", - "metadata": [ - { - "assumedBy": { - "principalAccount": "*", - "assumeRoleAction": "*" - }, - "managedPolicies": [ - { - "managedPolicyArn": "*" - } - ] - } - ] - } - }, - "Code": { - "id": "Code", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Lambda::Function", - "aws:cdk:cloudformation:props": { - "code": { - "s3Bucket": { - "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1" - }, - "s3Key": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip" - }, - "handler": "index.isCompleteHandler", - "role": { - "Fn::GetAtt": [ - "IsCompleteHandlerServiceRole5810CC58", - "Arn" - ] - }, - "runtime": "nodejs20.x", - "timeout": 30 - } - }, - "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": [ - { - "timeout": "*", - "code": "*", - "handler": "*", - "runtime": "*" - } - ] - } - }, - "Provider": { - "id": "Provider", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider", - "children": { - "framework-onEvent": { - "id": "framework-onEvent", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - ":*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - ":*" - ] - ] - } - ] - }, - { - "Action": "lambda:GetFunction", - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - } - ] - }, - { - "Action": "states:StartExecution", - "Effect": "Allow", - "Resource": { - "Ref": "Providerwaiterstatemachine5D4A9DF0" - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkonEventServiceRoleDefaultPolicy48CD2133", - "roles": [ - { - "Ref": "ProviderframeworkonEventServiceRole9FF04296" - } - ] - } - }, - "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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Lambda::Function", - "aws:cdk:cloudformation:props": { - "code": { - "s3Bucket": { - "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1" - }, - "s3Key": "39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip" - }, - "description": "AWS CDK resource provider framework - onEvent (cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)", - "environment": { - "variables": { - "USER_ON_EVENT_FUNCTION_ARN": { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - "USER_IS_COMPLETE_FUNCTION_ARN": { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - "WAITER_STATE_MACHINE_ARN": { - "Ref": "Providerwaiterstatemachine5D4A9DF0" - } - } - }, - "handler": "framework.onEvent", - "role": { - "Fn::GetAtt": [ - "ProviderframeworkonEventServiceRole9FF04296", - "Arn" - ] - }, - "runtime": "nodejs20.x", - "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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - ":*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - ":*" - ] - ] - } - ] - }, - { - "Action": "lambda:GetFunction", - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkisCompleteServiceRoleDefaultPolicy2E7140AC", - "roles": [ - { - "Ref": "ProviderframeworkisCompleteServiceRoleB1087139" - } - ] - } - }, - "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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Lambda::Function", - "aws:cdk:cloudformation:props": { - "code": { - "s3Bucket": { - "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1" - }, - "s3Key": "39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip" - }, - "description": "AWS CDK resource provider framework - isComplete (cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)", - "environment": { - "variables": { - "USER_ON_EVENT_FUNCTION_ARN": { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - "USER_IS_COMPLETE_FUNCTION_ARN": { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - } - } - }, - "handler": "framework.isComplete", - "role": { - "Fn::GetAtt": [ - "ProviderframeworkisCompleteServiceRoleB1087139", - "Arn" - ] - }, - "runtime": "nodejs20.x", - "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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - ":*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - ":*" - ] - ] - } - ] - }, - { - "Action": "lambda:GetFunction", - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkonTimeoutServiceRoleDefaultPolicy2688969F", - "roles": [ - { - "Ref": "ProviderframeworkonTimeoutServiceRole28643D26" - } - ] - } - }, - "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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Lambda::Function", - "aws:cdk:cloudformation:props": { - "code": { - "s3Bucket": { - "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1" - }, - "s3Key": "39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip" - }, - "description": "AWS CDK resource provider framework - onTimeout (cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)", - "environment": { - "variables": { - "USER_ON_EVENT_FUNCTION_ARN": { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - "USER_IS_COMPLETE_FUNCTION_ARN": { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - } - } - }, - "handler": "framework.onTimeout", - "role": { - "Fn::GetAtt": [ - "ProviderframeworkonTimeoutServiceRole28643D26", - "Arn" - ] - }, - "runtime": "nodejs20.x", - "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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine", - "children": { - "Role": { - "id": "Role", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role", - "children": { - "ImportRole": { - "id": "ImportRole", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/ImportRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": [ - "ProviderframeworkisComplete26D7B0CB", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "ProviderframeworkonTimeout0B47CA38", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "ProviderframeworkisComplete26D7B0CB", - "Arn" - ] - }, - ":*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "ProviderframeworkonTimeout0B47CA38", - "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": "ProviderwaiterstatemachineRoleDefaultPolicyD3C3DA1A", - "roles": [ - { - "Ref": "ProviderwaiterstatemachineRole0C7159F9" - } - ] - } - }, - "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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/LogGroup", - "children": { - "Resource": { - "id": "Resource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "ProviderframeworkisComplete26D7B0CB" - }, - "-c8696e1868b3a8bafc51799993fdba7f11ffdcc5c5" - ] - ] - }, - "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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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\":10,\"MaxAttempts\":180,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"", - { - "Fn::GetAtt": [ - "ProviderframeworkisComplete26D7B0CB", - "Arn" - ] - }, - "\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"", - { - "Fn::GetAtt": [ - "ProviderframeworkonTimeout0B47CA38", - "Arn" - ] - }, - "\"}}}" - ] - ] - }, - "loggingConfiguration": { - "destinations": [ - { - "cloudWatchLogsLogGroup": { - "logGroupArn": { - "Fn::GetAtt": [ - "ProviderwaiterstatemachineLogGroupDD693A98", - "Arn" - ] - } - } - } - ], - "includeExecutionData": false, - "level": "ERROR" - }, - "roleArn": { - "Fn::GetAtt": [ - "ProviderwaiterstatemachineRole0C7159F9", - "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" - } - }, - "cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole3E8625F3Ref": { - "id": "cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole3E8625F3Ref", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole3E8625F3Ref", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - }, - "cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole2F936EC4Ref": { - "id": "cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole2F936EC4Ref", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole2F936EC4Ref", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - }, - "cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderframeworkonEventCFDD0BA0Arn": { - "id": "cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderframeworkonEventCFDD0BA0Arn", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderframeworkonEventCFDD0BA0Arn", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - }, - "reference-to-cdkdynamodbglobal20191121TableB640876BRef": { - "id": "reference-to-cdkdynamodbglobal20191121TableB640876BRef", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/reference-to-cdkdynamodbglobal20191121TableB640876BRef", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.NestedStack", - "version": "0.0.0" - } - }, - "@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack": { - "id": "@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack", - "children": { - "@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource": { - "id": "@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource", - "path": "cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::CloudFormation::Stack", - "aws:cdk:cloudformation:props": { - "parameters": { - "referencetocdkdynamodbglobal20191121TableB640876BRef": { - "Ref": "TableCD117FA1" - } - }, - "templateUrl": { - "Fn::Join": [ - "", - [ - "https://s3.eu-west-1.", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1" - }, - "/382e5c366bee4bada2d396e43b7f9c1d728220cec00913cb1240c5d387d16a5a.json" - ] - ] - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CfnStack", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "cdk-dynamodb-global-20191121/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "cdk-dynamodb-global-20191121/CheckBootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnRule", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.Stack", - "version": "0.0.0" - } - }, - "cdk-dynamodb-global-20191121-test": { - "id": "cdk-dynamodb-global-20191121-test", - "path": "cdk-dynamodb-global-20191121-test", - "children": { - "DefaultTest": { - "id": "DefaultTest", - "path": "cdk-dynamodb-global-20191121-test/DefaultTest", - "children": { - "Default": { - "id": "Default", - "path": "cdk-dynamodb-global-20191121-test/DefaultTest/Default", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "DeployAssert": { - "id": "DeployAssert", - "path": "cdk-dynamodb-global-20191121-test/DefaultTest/DeployAssert", - "children": { - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "cdk-dynamodb-global-20191121-test/DefaultTest/DeployAssert/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "cdk-dynamodb-global-20191121-test/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":"","children":{"cdk-dynamodb-global-20191121":{"id":"cdk-dynamodb-global-20191121","path":"cdk-dynamodb-global-20191121","children":{"Table":{"id":"Table","path":"cdk-dynamodb-global-20191121/Table","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/Table/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::DynamoDB::Table","aws:cdk:cloudformation:props":{"attributeDefinitions":[{"attributeName":"id","attributeType":"S"},{"attributeName":"key","attributeType":"S"}],"billingMode":"PAY_PER_REQUEST","globalSecondaryIndexes":[{"indexName":"my-index","keySchema":[{"attributeName":"key","keyType":"HASH"}],"projection":{"projectionType":"ALL"}}],"keySchema":[{"attributeName":"id","keyType":"HASH"}],"streamSpecification":{"streamViewType":"NEW_AND_OLD_IMAGES"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_dynamodb.CfnTable","version":"0.0.0"}},"ScalingRole":{"id":"ScalingRole","path":"cdk-dynamodb-global-20191121/Table/ScalingRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole6F43DF4A":{"id":"SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole6F43DF4A","path":"cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole6F43DF4A","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole6F43DF4A/Resource","children":{"ImportedResource":{"id":"ImportedResource","path":"cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole6F43DF4A/Resource/ImportedResource","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole6F43DF4A/Resource/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::ManagedPolicy","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["DynamoDB replication managed policy for table ",{"Ref":"TableCD117FA1"}]]},"path":"/","policyDocument":{"Statement":[{"Action":"dynamodb:*","Effect":"Allow","Resource":[{"Fn::GetAtt":["TableCD117FA1","Arn"]},{"Fn::Join":["",["arn:aws:dynamodb:eu-central-1:",{"Ref":"AWS::AccountId"},":table/",{"Ref":"TableCD117FA1"}]]},{"Fn::Join":["",["arn:aws:dynamodb:eu-west-2:",{"Ref":"AWS::AccountId"},":table/",{"Ref":"TableCD117FA1"}]]},{"Fn::Join":["",[{"Fn::GetAtt":["TableCD117FA1","Arn"]},"/index/*"]]}]}],"Version":"2012-10-17"},"roles":[{"Fn::GetAtt":["awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D","Outputs.cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole3E8625F3Ref"]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnManagedPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.ManagedPolicy","version":"0.0.0","metadata":[{"description":"*","roles":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole39716128":{"id":"SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole39716128","path":"cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole39716128","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole39716128/Resource","children":{"ImportedResource":{"id":"ImportedResource","path":"cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole39716128/Resource/ImportedResource","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/Table/SourceTableAttachedManagedPolicy-cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole39716128/Resource/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::ManagedPolicy","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["DynamoDB replication managed policy for table ",{"Ref":"TableCD117FA1"}]]},"path":"/","policyDocument":{"Statement":[{"Action":"dynamodb:DescribeTable","Effect":"Allow","Resource":[{"Fn::GetAtt":["TableCD117FA1","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["TableCD117FA1","Arn"]},"/index/*"]]}]}],"Version":"2012-10-17"},"roles":[{"Fn::GetAtt":["awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D","Outputs.cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole2F936EC4Ref"]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnManagedPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.ManagedPolicy","version":"0.0.0","metadata":[{"description":"*","roles":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"Replicaeu-west-2":{"id":"Replicaeu-west-2","path":"cdk-dynamodb-global-20191121/Table/Replicaeu-west-2","children":{"Default":{"id":"Default","path":"cdk-dynamodb-global-20191121/Table/Replicaeu-west-2/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*"]}},"Replicaeu-central-1":{"id":"Replicaeu-central-1","path":"cdk-dynamodb-global-20191121/Table/Replicaeu-central-1","children":{"Default":{"id":"Default","path":"cdk-dynamodb-global-20191121/Table/Replicaeu-central-1/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_dynamodb.Table","version":"0.0.0","metadata":[{"partitionKey":{"name":"*","type":"S"},"removalPolicy":"destroy","replicationRegions":"*"},{"addGlobalSecondaryIndex":[{"indexName":"*","partitionKey":{"name":"*","type":"S"}}]}]}},"@aws-cdk--aws-dynamodb.ReplicaProvider":{"id":"@aws-cdk--aws-dynamodb.ReplicaProvider","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider","children":{"OnEventHandler":{"id":"OnEventHandler","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"iam:CreateServiceLinkedRole","Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:iam::",{"Ref":"AWS::AccountId"},":role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication"]]}},{"Action":"dynamodb:DescribeLimits","Effect":"Allow","Resource":"*"},{"Action":["dynamodb:DeleteTable","dynamodb:DeleteTableReplica"],"Effect":"Allow","Resource":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":dynamodb:eu-central-1:",{"Ref":"AWS::AccountId"},":table/",{"Ref":"referencetocdkdynamodbglobal20191121TableB640876BRef"}]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":dynamodb:eu-west-2:",{"Ref":"AWS::AccountId"},":table/",{"Ref":"referencetocdkdynamodbglobal20191121TableB640876BRef"}]]}]}],"Version":"2012-10-17"},"policyName":"OnEventHandlerServiceRoleDefaultPolicyC57085D4","roles":[{"Ref":"OnEventHandlerServiceRole15A26729"}]}},"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":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code","children":{"Stage":{"id":"Stage","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1"},"s3Key":"beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip"},"handler":"index.onEventHandler","role":{"Fn::GetAtt":["OnEventHandlerServiceRole15A26729","Arn"]},"runtime":"nodejs20.x","timeout":300}},"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":[{"timeout":"*","code":"*","handler":"*","runtime":"*"}]}},"IsCompleteHandler":{"id":"IsCompleteHandler","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]}]}},"Code":{"id":"Code","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code","children":{"Stage":{"id":"Stage","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1"},"s3Key":"beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip"},"handler":"index.isCompleteHandler","role":{"Fn::GetAtt":["IsCompleteHandlerServiceRole5810CC58","Arn"]},"runtime":"nodejs20.x","timeout":30}},"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":[{"timeout":"*","code":"*","handler":"*","runtime":"*"}]}},"Provider":{"id":"Provider","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider","children":{"framework-onEvent":{"id":"framework-onEvent","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]}]},{"Action":"states:StartExecution","Effect":"Allow","Resource":{"Ref":"Providerwaiterstatemachine5D4A9DF0"}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonEventServiceRoleDefaultPolicy48CD2133","roles":[{"Ref":"ProviderframeworkonEventServiceRole9FF04296"}]}},"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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code","children":{"Stage":{"id":"Stage","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1"},"s3Key":"39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"},"description":"AWS CDK resource provider framework - onEvent (cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},"WAITER_STATE_MACHINE_ARN":{"Ref":"Providerwaiterstatemachine5D4A9DF0"}}},"handler":"framework.onEvent","role":{"Fn::GetAtt":["ProviderframeworkonEventServiceRole9FF04296","Arn"]},"runtime":"nodejs20.x","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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]}]}],"Version":"2012-10-17"},"policyName":"ProviderframeworkisCompleteServiceRoleDefaultPolicy2E7140AC","roles":[{"Ref":"ProviderframeworkisCompleteServiceRoleB1087139"}]}},"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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code","children":{"Stage":{"id":"Stage","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1"},"s3Key":"39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"},"description":"AWS CDK resource provider framework - isComplete (cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}},"handler":"framework.isComplete","role":{"Fn::GetAtt":["ProviderframeworkisCompleteServiceRoleB1087139","Arn"]},"runtime":"nodejs20.x","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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]}]}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonTimeoutServiceRoleDefaultPolicy2688969F","roles":[{"Ref":"ProviderframeworkonTimeoutServiceRole28643D26"}]}},"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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code","children":{"Stage":{"id":"Stage","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1"},"s3Key":"39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6.zip"},"description":"AWS CDK resource provider framework - onTimeout (cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}},"handler":"framework.onTimeout","role":{"Fn::GetAtt":["ProviderframeworkonTimeoutServiceRole28643D26","Arn"]},"runtime":"nodejs20.x","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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine","children":{"Role":{"id":"Role","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role","children":{"ImportRole":{"id":"ImportRole","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/ImportRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["ProviderframeworkisComplete26D7B0CB","Arn"]},{"Fn::GetAtt":["ProviderframeworkonTimeout0B47CA38","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["ProviderframeworkisComplete26D7B0CB","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["ProviderframeworkonTimeout0B47CA38","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":"ProviderwaiterstatemachineRoleDefaultPolicyD3C3DA1A","roles":[{"Ref":"ProviderwaiterstatemachineRole0C7159F9"}]}},"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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/LogGroup","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"ProviderframeworkisComplete26D7B0CB"},"-c8696e1868b3a8bafc51799993fdba7f11ffdcc5c5"]]},"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-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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\":10,\"MaxAttempts\":180,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["ProviderframeworkisComplete26D7B0CB","Arn"]},"\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["ProviderframeworkonTimeout0B47CA38","Arn"]},"\"}}}"]]},"loggingConfiguration":{"destinations":[{"cloudWatchLogsLogGroup":{"logGroupArn":{"Fn::GetAtt":["ProviderwaiterstatemachineLogGroupDD693A98","Arn"]}}}],"includeExecutionData":false,"level":"ERROR"},"roleArn":{"Fn::GetAtt":["ProviderwaiterstatemachineRole0C7159F9","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"}},"cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole3E8625F3Ref":{"id":"cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole3E8625F3Ref","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole3E8625F3Ref","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole2F936EC4Ref":{"id":"cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole2F936EC4Ref","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole2F936EC4Ref","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderframeworkonEventCFDD0BA0Arn":{"id":"cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderframeworkonEventCFDD0BA0Arn","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderframeworkonEventCFDD0BA0Arn","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"reference-to-cdkdynamodbglobal20191121TableB640876BRef":{"id":"reference-to-cdkdynamodbglobal20191121TableB640876BRef","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider/reference-to-cdkdynamodbglobal20191121TableB640876BRef","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.NestedStack","version":"0.0.0"}},"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack":{"id":"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack","children":{"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource":{"id":"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource","path":"cdk-dynamodb-global-20191121/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource","attributes":{"aws:cdk:cloudformation:type":"AWS::CloudFormation::Stack","aws:cdk:cloudformation:props":{"parameters":{"referencetocdkdynamodbglobal20191121TableB640876BRef":{"Ref":"TableCD117FA1"}},"templateUrl":{"Fn::Join":["",["https://s3.eu-west-1.",{"Ref":"AWS::URLSuffix"},"/",{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1"},"/99ce8e16a78e3c9de5980fd298e7e5eb3b4b63768f61485a4f30c32a9ac3602e.json"]]}}},"constructInfo":{"fqn":"aws-cdk-lib.CfnStack","version":"0.0.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"BootstrapVersion":{"id":"BootstrapVersion","path":"cdk-dynamodb-global-20191121/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"cdk-dynamodb-global-20191121/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"}},"cdk-dynamodb-global-20191121-test":{"id":"cdk-dynamodb-global-20191121-test","path":"cdk-dynamodb-global-20191121-test","children":{"DefaultTest":{"id":"DefaultTest","path":"cdk-dynamodb-global-20191121-test/DefaultTest","children":{"Default":{"id":"Default","path":"cdk-dynamodb-global-20191121-test/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"cdk-dynamodb-global-20191121-test/DefaultTest/DeployAssert","children":{"BootstrapVersion":{"id":"BootstrapVersion","path":"cdk-dynamodb-global-20191121-test/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"cdk-dynamodb-global-20191121-test/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 diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/cfn-response.js b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.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-dynamodb/test/integ.table-skip-replica-deletion.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuLXJlc3BvbnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2ZuLXJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdCQSx3Q0FtQ0M7QUFJRCxrQ0EwQ0M7QUFFRCxzREFZQztBQXZIRCw0QkFBNEI7QUFDNUIsK0JBQStCO0FBQy9CLDJCQUEyQjtBQUMzQix5Q0FBeUM7QUFDekMsaUNBQTBDO0FBRzdCLFFBQUEsZ0NBQWdDLEdBQUcsd0RBQXdELENBQUM7QUFDNUYsUUFBQSwwQkFBMEIsR0FBRyw4REFBOEQsQ0FBQztBQWdCbEcsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE0QixFQUFFLEtBQWlDLEVBQUUsVUFBeUMsRUFBRztJQUNoSixNQUFNLElBQUksR0FBbUQ7UUFDM0QsTUFBTSxFQUFFLE1BQU07UUFDZCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxNQUFNO1FBQ2hDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztRQUN0QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixJQUFJLGtDQUEwQjtRQUMxRSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1FBQzFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7S0FDakIsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFMUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0MsTUFBTSxjQUFjLEdBQUcsR0FBRyxTQUFTLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsTUFBTSxDQUFDO0lBQ2hHLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLElBQUEs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RUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBRUQsTUFBYSxLQUFNLFNBQVEsS0FBSztDQUFJO0FBQXBDLHNCQUFvQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IHsgaHR0cFJlcXVlc3QgfSBmcm9tICcuL291dGJvdW5kJztcbmltcG9ydCB7IGxvZywgd2l0aFJldHJpZXMgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgT25FdmVudFJlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVIgPSAnQVdTQ0RLOjpDdXN0b21SZXNvdXJjZVByb3ZpZGVyRnJhbWV3b3JrOjpDUkVBVEVfRkFJTEVEJztcbmV4cG9ydCBjb25zdCBNSVNTSU5HX1BIWVNJQ0FMX0lEX01BUktFUiA9ICdBV1NDREs6OkN1c3RvbVJlc291cmNlUHJvdmlkZXJGcmFtZXdvcms6Ok1JU1NJTkdfUEhZU0lDQUxfSUQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRm9ybWF0aW9uUmVzcG9uc2VPcHRpb25zIHtcbiAgcmVhZG9ubHkgcmVhc29uPzogc3RyaW5nO1xuICByZWFkb25seSBub0VjaG8/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRm9ybWF0aW9uRXZlbnRDb250ZXh0IHtcbiAgU3RhY2tJZDogc3RyaW5nO1xuICBSZXF1ZXN0SWQ6IHN0cmluZztcbiAgUGh5c2ljYWxSZXNvdXJjZUlkPzogc3RyaW5nO1xuICBMb2dpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICBSZXNwb25zZVVSTDogc3RyaW5nO1xuICBEYXRhPzogYW55O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3VibWl0UmVzcG9uc2Uoc3RhdHVzOiAnU1VDQ0VTUycgfCAnRkFJTEVEJywgZXZlbnQ6IENsb3VkRm9ybWF0aW9uRXZlbnRDb250ZXh0LCBvcHRpb25zOiBDbG91ZEZvcm1hdGlvblJlc3BvbnNlT3B0aW9ucyA9IHsgfSkge1xuICBjb25zdCBqc29uOiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlID0ge1xuICAgIFN0YXR1czogc3RhdHVzLFxuICAgIFJlYXNvbjogb3B0aW9ucy5yZWFzb24gfHwgc3RhdHVzLFxuICAgIFN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gICAgUmVxdWVzdElkOiBldmVudC5SZXF1ZXN0SWQsXG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgfHwgTUlTU0lOR19QSFlTSUNBTF9JRF9NQVJLRVIsXG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIE5vRWNobzogb3B0aW9ucy5ub0VjaG8sXG4gICAgRGF0YTogZXZlbnQuRGF0YSxcbiAgfTtcblxuICBjb25zdCByZXNwb25zZUJvZHkgPSBKU09OLnN0cmluZ2lmeShqc29uKTtcblxuICBjb25zdCBwYXJzZWRVcmwgPSB1cmwucGFyc2UoZXZlbnQuUmVzcG9uc2VVUkwpO1xuICBjb25zdCBsb2dnaW5nU2FmZVVybCA9IGAke3BhcnNlZFVybC5wcm90b2NvbH0vLyR7cGFyc2VkVXJsLmhvc3RuYW1lfS8ke3BhcnNlZFVybC5wYXRobmFtZX0/KioqYDtcbiAgaWYgKG9wdGlvbnM/Lm5vRWNobykge1xuICAgIGxvZygnc3VibWl0IHJlZGFjdGVkIHJlc3BvbnNlIHRvIGNsb3VkZm9ybWF0aW9uJywgbG9nZ2luZ1NhZmVVcmwsIHJlZGFjdERhdGFGcm9tUGF5bG9hZChqc29uKSk7XG4gIH0gZWxzZSB7XG4gICAgbG9nKCdzdWJtaXQgcmVzcG9uc2UgdG8gY2xvdWRmb3JtYXRpb24nLCBsb2dnaW5nU2FmZVVybCwganNvbik7XG4gIH1cblxuICBjb25zdCByZXRyeU9wdGlvbnMgPSB7XG4gICAgYXR0ZW1wdHM6IDUsXG4gICAgc2xlZXA6IDEwMDAsXG4gIH07XG4gIGF3YWl0IHdpdGhSZXRyaWVzKHJldHJ5T3B0aW9ucywgaHR0cFJlcXVlc3QpKHtcbiAgICBob3N0bmFtZTogcGFyc2VkVXJsLmhvc3RuYW1lLFxuICAgIHBhdGg6IHBhcnNlZFVybC5wYXRoLFxuICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICcnLFxuICAgICAgJ2NvbnRlbnQtbGVuZ3RoJzogQnVmZmVyLmJ5dGVMZW5ndGgocmVzcG9uc2VCb2R5LCAndXRmOCcpLFxuICAgIH0sXG4gIH0sIHJlc3BvbnNlQm9keSk7XG59XG5cbmV4cG9ydCBsZXQgaW5jbHVkZVN0YWNrVHJhY2VzID0gdHJ1ZTsgLy8gZm9yIHVuaXQgdGVzdHNcblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVIYW5kbGVyKGJsb2NrOiAoZXZlbnQ6IGFueSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICByZXR1cm4gYXN5bmMgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAvLyBpZ25vcmUgREVMRVRFIGV2ZW50IHdoZW4gdGhlIHBoeXNpY2FsIHJlc291cmNlIElEIGlzIHRoZSBtYXJrZXIgdGhhdFxuICAgIC8vIGluZGljYXRlcyB0aGF0IHRoaXMgREVMRVRFIGlzIGEgc3Vic2VxdWVudCBERUxFVEUgdG8gYSBmYWlsZWQgQ1JFQVRFXG4gICAgLy8gb3BlcmF0aW9uLlxuICAgIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScgJiYgZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkID09PSBDUkVBVEVfRkFJTEVEX1BIWVNJQ0FMX0lEX01BUktFUikge1xuICAgICAgbG9nKCdpZ25vcmluZyBERUxFVEUgZXZlbnQgY2F1c2VkIGJ5IGEgZmFpbGVkIENSRUFURSBldmVudCcpO1xuICAgICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ1NVQ0NFU1MnLCBldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJsb2NrKGV2ZW50KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIHRlbGwgd2FpdGVyIHN0YXRlIG1hY2hpbmUgdG8gcmV0cnlcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgUmV0cnkpIHtcbiAgICAgICAgbG9nKCdyZXRyeSByZXF1ZXN0ZWQgYnkgaGFuZGxlcicpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGlmIENSRUFURSBmYWlscywgd2hpY2ggdXN1YWxseSBpbXBsaWVzLCB3ZSB1c3VhbGx5IGRvbid0XG4gICAgICAgIC8vIGhhdmUgYSBwaHlzaWNhbCByZXNvdXJjZSBpZC4gaW4gdGhpcyBjYXNlLCB0aGUgc3Vic2VxdWVudCBERUxFVEVcbiAgICAgICAgLy8gb3BlcmF0aW9uIGRvZXMgbm90IGhhdmUgYW55IG1lYW5pbmcsIGFuZCB3aWxsIGxpa2VseSBmYWlsIGFzIHdlbGwuIHRvXG4gICAgICAgIC8vIGFkZHJlc3MgdGhpcywgd2UgdXNlIGEgbWFya2VyIHNvIHRoZSBwcm92aWRlciBmcmFtZXdvcmsgY2FuIHNpbXBseVxuICAgICAgICAvLyBpZ25vcmUgdGhlIHN1YnNlcXVlbnQgREVMRVRFLlxuICAgICAgICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdDcmVhdGUnKSB7XG4gICAgICAgICAgbG9nKCdDUkVBVEUgZmFpbGVkLCByZXNwb25kaW5nIHdpdGggYSBtYXJrZXIgcGh5c2ljYWwgcmVzb3VyY2UgaWQgc28gdGhhdCB0aGUgc3Vic2VxdWVudCBERUxFVEUgd2lsbCBiZSBpZ25vcmVkJyk7XG4gICAgICAgICAgZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkID0gQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlLCBpZiBQaHlzaWNhbFJlc291cmNlSWQgaXMgbm90IHNwZWNpZmllZCwgc29tZXRoaW5nIGlzXG4gICAgICAgICAgLy8gdGVycmlibHkgd3JvbmcgYmVjYXVzZSBhbGwgb3RoZXIgZXZlbnRzIHNob3VsZCBoYXZlIGFuIElELlxuICAgICAgICAgIGxvZyhgRVJST1I6IE1hbGZvcm1lZCBldmVudC4gXCJQaHlzaWNhbFJlc291cmNlSWRcIiBpcyByZXF1aXJlZDogJHtKU09OLnN0cmluZ2lmeSh7IC4uLmV2ZW50LCBSZXNwb25zZVVSTDogJy4uLicgfSl9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdGhpcyBpcyBhbiBhY3R1YWwgZXJyb3IsIGZhaWwgdGhlIGFjdGl2aXR5IGFsdG9nZXRoZXIgYW5kIGV4aXN0LlxuICAgICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ0ZBSUxFRCcsIGV2ZW50LCB7XG4gICAgICAgIHJlYXNvbjogaW5jbHVkZVN0YWNrVHJhY2VzID8gZS5zdGFjayA6IGUubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZGFjdERhdGFGcm9tUGF5bG9hZChwYXlsb2FkOiBPbkV2ZW50UmVzcG9uc2UpIHtcbiAgLy8gQ3JlYXRlIGEgZGVlcCBjb3B5IG9mIHRoZSBwYXlsb2FkIG9iamVjdFxuICBjb25zdCByZWRhY3RlZFBheWxvYWQ6IE9uRXZlbnRSZXNwb25zZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xuXG4gIC8vIFJlZGFjdCB0aGUgZGF0YSBpbiB0aGUgY29waWVkIHBheWxvYWQgb2JqZWN0XG4gIGlmIChyZWRhY3RlZFBheWxvYWQuRGF0YSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyZWRhY3RlZFBheWxvYWQuRGF0YSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgcmVkYWN0ZWRQYXlsb2FkLkRhdGFba2V5XSA9ICcqKioqKic7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWRhY3RlZFBheWxvYWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBSZXRyeSBleHRlbmRzIEVycm9yIHsgfVxuIl19 \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/consts.js b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/consts.js new file mode 100644 index 0000000000000..31faa077ae313 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.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-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/framework.js b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/framework.js new file mode 100644 index 0000000000000..d381e7833f0b7 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWV3b3JrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZnJhbWV3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0QkFBNEI7QUFDNUIsK0JBQStCO0FBQy9CLDhDQUE4QztBQUM5QyxtQ0FBbUM7QUFDbkMseUNBQTREO0FBQzVELGlDQUF1RDtBQVV2RDs7Ozs7Ozs7O0dBU0c7QUFDSCxLQUFLLFVBQVUsT0FBTyxDQUFDLFVBQXVEO0lBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFXLENBQUM7SUFDeEUsSUFBQSxVQUFHLEVBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUV4QyxVQUFVLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLGtCQUFrQixJQUFJLEVBQUcsQ0FBQztJQUVyRSxNQUFNLGFBQWEsR0FBRyxNQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFvQixDQUFDO0lBQ25KLElBQUksYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzFCLElBQUEsVUFBRyxFQUFDLDRCQUE0QixFQUFFLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBQSxVQUFHLEVBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELG9GQUFvRjtJQUNwRixpQ0FBaUM7SUFDakMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sY0FBYyxHQUFHLEVBQUUsR0FBRyxhQUFhLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2hFLElBQUksYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzFCLElBQUEsVUFBRyxFQUFD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QztJQUMxRSxDQUFDLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO0lBQ2hGLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLEVBQUUsU0FBUztDQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0ICogYXMgY2ZuUmVzcG9uc2UgZnJvbSAnLi9jZm4tcmVzcG9uc2UnO1xuaW1wb3J0ICogYXMgY29uc3RzIGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IGludm9rZUZ1bmN0aW9uLCBzdGFydEV4ZWN1dGlvbiB9IGZyb20gJy4vb3V0Ym91bmQnO1xuaW1wb3J0IHsgZ2V0RW52LCBsb2csIHBhcnNlSnNvblBheWxvYWQgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgSXNDb21wbGV0ZVJlc3BvbnNlLCBPbkV2ZW50UmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vIHVzZSBjb25zdHMgZm9yIGhhbmRsZXIgbmFtZXMgdG8gY29tcGlsZXItZW5mb3JjZSB0aGUgY291cGxpbmcgd2l0aCBjb25zdHJ1Y3Rpb24gY29kZS5cbmV4cG9ydCA9IHtcbiAgW2NvbnN0cy5GUkFNRVdPUktfT05fRVZFTlRfSEFORExFUl9OQU1FXTogY2ZuUmVzcG9uc2Uuc2FmZUhhbmRsZXIob25FdmVudCksXG4gIFtjb25zdHMuRlJBTUVXT1JLX0lTX0NPTVBMRVRFX0hBTkRMRVJfTkFNRV06IGNmblJlc3BvbnNlLnNhZmVIYW5kbGVyKGlzQ29tcGxldGUpLFxuICBbY29uc3RzLkZSQU1FV09SS19PTl9USU1FT1VUX0hBTkRMRVJfTkFNRV06IG9uVGltZW91dCxcbn07XG5cbi8qKlxuICogVGhlIG1haW4gcnVudGltZSBlbnRyeXBvaW50IG9mIHRoZSBhc3luYyBjdXN0b20gcmVzb3VyY2UgbGFtYmRhIGZ1bmN0aW9uLlxuICpcbiAqIEFueSBsaWZlY3ljbGUgZXZlbnQgY2hhbmdlcyB0byB0aGUgY3VzdG9tIHJlc291cmNlcyB3aWxsIGludm9rZSB0aGlzIGhhbmRsZXIsIHdoaWNoIHdpbGwsIGluIHR1cm4sXG4gKiBpbnRlcmFjdCB3aXRoIHRoZSB1c2VyLWRlZmluZWQgYG9uRXZlbnRgIGFuZCBgaXNDb21wbGV0ZWAgaGFuZGxlcnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsd2F5cyBzdWNjZWVkLiBJZiBhbiBlcnJvciBvY2N1cnMsIGl0IGlzIGxvZ2dlZCBidXQgYW4gZXJyb3IgaXMgbm90IHRocm93bi5cbiAqXG4gKiBAcGFyYW0gY2ZuUmVxdWVzdCBUaGUgY2xvdWRmb3JtYXRpb24gY3VzdG9tIHJlc291cmNlIGV2ZW50LlxuICovXG5hc3luYyBmdW5jdGlvbiBvbkV2ZW50KGNmblJlcXVlc3Q6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQpIHtcbiAgY29uc3Qgc2FuaXRpemVkUmVxdWVzdCA9IHsgLi4uY2ZuUmVxdWVzdCwgUmVzcG9uc2VVUkw6ICcuLi4nIH0gYXMgY29uc3Q7XG4gIGxvZygnb25FdmVudEhhbmRsZXInLCBzYW5pdGl6ZWRSZXF1ZXN0KTtcblxuICBjZm5SZXF1ZXN0LlJlc291cmNlUHJvcGVydGllcyA9IGNmblJlcXVlc3QuUmVzb3VyY2VQcm9wZXJ0aWVzIHx8IHsgfTtcblxuICBjb25zdCBvbkV2ZW50UmVzdWx0ID0gYXdhaXQgaW52b2tlVXNlckZ1bmN0aW9uKGNvbnN0cy5VU0VSX09OX0VWRU5UX0ZVTkNUSU9OX0FSTl9FTlYsIHNhbml0aXplZFJlcXVlc3QsIGNmblJlcXVlc3QuUmVzcG9uc2VVUkwpIGFzIE9uRXZlbnRSZXNwb25zZTtcbiAgaWYgKG9uRXZlbnRSZXN1bHQ/Lk5vRWNobykge1xuICAgIGxvZygncmVkYWN0ZWQgb25FdmVudCByZXR1cm5lZDonLCBjZm5SZXNwb25zZS5yZWRhY3REYXRhRnJvbVBheWxvYWQob25FdmVudFJlc3VsdCkpO1xuICB9IGVsc2Uge1xuICAgIGxvZygnb25FdmVudCByZXR1cm5lZDonLCBvbkV2ZW50UmVzdWx0KTtcbiAgfVxuXG4gIC8vIG1lcmdlIHRoZSByZXF1ZXN0IGFuZCB0aGUgcmVzdWx0IGZyb20gb25FdmVudCB0byBmb3JtIHRoZSBjb21wbGV0ZSByZXNvdXJjZSBldmVudFxuICAvLyB0aGlzIGFsc28gcGVyZm9ybXMgdmFsaWRhdGlvbi5cbiAgY29uc3QgcmVzb3VyY2VFdmVudCA9IGNyZWF0ZVJlc3BvbnNlRXZlbnQoY2ZuUmVxdWVzdCwgb25FdmVudFJlc3VsdCk7XG4gIGNvbnN0IHNhbml0aXplZEV2ZW50ID0geyAuLi5yZXNvdXJjZUV2ZW50LCBSZXNwb25zZVVSTDogJy4uLicgfTtcbiAgaWYgKG9uRXZlbnRSZXN1bHQ/Lk5vRWNobykge1xuICAgIGxvZygncmVhZGFjdGVkIGV2ZW50OicsIGNmblJlc3BvbnNlLnJlZGFjdERhdGFGcm9tUGF5bG9hZChzYW5pdGl6ZWRFdmVudCkpO1xuICB9IGVsc2Uge1xuICAgIGxvZygnZXZlbnQ6Jywgc2FuaXRpemVkRXZlbnQpO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYW4gYXN5bmMgcHJvdmlkZXIgYmFzZWQgb24gd2hldGhlciB3ZSBoYXZlIGFuIGlzQ29tcGxldGUgaGFuZGxlciBkZWZpbmVkLlxuICAvLyBpZiBpdCBpcyBub3QgZGVmaW5lZCwgdGhlbiB3ZSBhcmUgYmFzaWNhbGx5IHJlYWR5IHRvIHJldHVybiBhIHBvc2l0aXZlIHJlc3BvbnNlLlxuICBpZiAoIXByb2Nlc3MuZW52W2NvbnN0cy5VU0VSX0lTX0NPTVBMRVRFX0ZVTkNUSU9OX0FSTl9FTlZdKSB7XG4gICAgcmV0dXJuIGNmblJlc3BvbnNlLnN1Ym1pdFJlc3BvbnNlKCdTVUNDRVNTJywgcmVzb3VyY2VFdmVudCwgeyBub0VjaG86IHJlc291cmNlRXZlbnQuTm9FY2hvIH0pO1xuICB9XG5cbiAgLy8gb2ssIHdlIGFyZSBub3QgY29tcGxldGUsIHNvIGtpY2sgb2ZmIHRoZSB3YWl0ZXIgd29ya2Zsb3dcbiAgY29uc3Qgd2FpdGVyID0ge1xuICAgIHN0YXRlTWFjaGluZUFybjogZ2V0RW52KGNvbnN0cy5XQUlURVJfU1RBVEVfTUFDSElORV9BUk5fRU5WKSxcbiAgICBuYW1lOiByZXNvdXJjZUV2ZW50LlJlcXVlc3RJZCxcbiAgICBpbnB1dDogSlNPTi5zdHJpbmdpZnkocmVzb3VyY2VFdmVudCksXG4gIH07XG5cbiAgbG9nKCdzdGFydGluZyB3YWl0ZXInLCB7XG4gICAgc3RhdGVNYWNoaW5lQXJuOiBnZXRFbnYoY29uc3RzLldBSVRFUl9TVEFURV9NQUNISU5FX0FSTl9FTlYpLFxuICAgIG5hbWU6IHJlc291cmNlRXZlbnQuUmVxdWVzdElkLFxuICB9KTtcblxuICAvLyBraWNrIG9mZiB3YWl0ZXIgc3RhdGUgbWFjaGluZVxuICBhd2FpdCBzdGFydEV4ZWN1dGlvbih3YWl0ZXIpO1xufVxuXG4vLyBpbnZva2VkIGEgZmV3IHRpbWVzIHVudGlsIGBjb21wbGV0ZWAgaXMgdHJ1ZSBvciB1bnRpbCBpdCB0aW1lcyBvdXQuXG5hc3luYyBmdW5jdGlvbiBpc0NvbXBsZXRlKGV2ZW50OiBBV1NDREtBc3luY0N1c3RvbVJlc291cmNlLklzQ29tcGxldGVSZXF1ZXN0KSB7XG4gIGNvbnN0IHNhbml0aXplZFJlcXVlc3QgPSB7IC4uLmV2ZW50LCBSZXNwb25zZVVSTDogJy4uLicgfSBhcyBjb25zdDtcbiAgaWYgKGV2ZW50Py5Ob0VjaG8pIHtcbiAgICBsb2coJ3JlZGFjdGVkIGlzQ29tcGxldGUgcmVxdWVzdCcsIGNmblJlc3BvbnNlLnJlZGFjdERhdGFGcm9tUGF5bG9hZChzYW5pdGl6ZWRSZXF1ZXN0KSk7XG4gIH0gZWxzZSB7XG4gICAgbG9nKCdpc0NvbXBsZXRlJywgc2FuaXRpemVkUmVxdWVzdCk7XG4gIH1cblxuICBjb25zdCBpc0NvbXBsZXRlUmVzdWx0ID0gYXdhaXQgaW52b2tlVXNlckZ1bmN0aW9uKGNvbnN0cy5VU0VSX0lTX0NPTVBMRVRFX0ZVTkNUSU9OX0FSTl9FTlYsIHNhbml0aXplZFJlcXVlc3QsIGV2ZW50LlJlc3BvbnNlVVJMKSBhcyBJc0NvbXBsZXRlUmVzcG9uc2U7XG4gIGlmIChldmVudD8uTm9FY2hvKSB7XG4gICAgbG9nKCdyZWRhY3RlZCB1c2VyIGlzQ29tcGxldGUgcmV0dXJuZWQ6JywgY2ZuUmVzcG9uc2UucmVkYWN0RGF0YUZyb21QYXlsb2FkKGlzQ29tcGxldGVSZXN1bHQpKTtcbiAgfSBlbHNlIHtcbiAgICBsb2coJ3VzZXIgaXNDb21wbGV0ZSByZXR1cm5lZDonLCBpc0NvbXBsZXRlUmVzdWx0KTtcbiAgfVxuXG4gIC8vIGlmIHdlIGFyZSBub3QgY29tcGxldGUsIHJldHVybiBmYWxzZSwgYW5kIGRvbid0IHNlbmQgYSByZXNwb25zZSBiYWNrLlxuICBpZiAoIWlzQ29tcGxldGVSZXN1bHQuSXNDb21wbGV0ZSkge1xuICAgIGlmIChpc0NvbXBsZXRlUmVzdWx0LkRhdGEgJiYgT2JqZWN0LmtleXMoaXNDb21wbGV0ZVJlc3VsdC5EYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiRGF0YVwiIGlzIG5vdCBhbGxvd2VkIGlmIFwiSXNDb21wbGV0ZVwiIGlzIFwiRmFsc2VcIicpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbXVzdCBiZSB0aGUgZnVsbCBldmVudCwgaXQgd2lsbCBiZSBkZXNlcmlhbGl6ZWQgaW4gYG9uVGltZW91dGAgdG8gc2VuZCB0aGUgcmVzcG9uc2UgdG8gQ2xvdWRGb3JtYXRpb25cbiAgICB0aHJvdyBuZXcgY2ZuUmVzcG9uc2UuUmV0cnkoSlNPTi5zdHJpbmdpZnkoZXZlbnQpKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgIC4uLmV2ZW50LFxuICAgIC4uLmlzQ29tcGxldGVSZXN1bHQsXG4gICAgRGF0YToge1xuICAgICAgLi4uZXZlbnQuRGF0YSxcbiAgICAgIC4uLmlzQ29tcGxldGVSZXN1bHQuRGF0YSxcbiAgICB9LFxuICB9O1xuXG4gIGF3YWl0IGNmblJlc3BvbnNlLnN1Ym1pdFJlc3BvbnNlKCdTVUNDRVNTJywgcmVzcG9uc2UsIHsgbm9FY2hvOiBldmVudC5Ob0VjaG8gfSk7XG59XG5cbi8vIGludm9rZWQgd2hlbiBjb21wbGV0aW9uIHJldHJpZXMgYXJlIGV4aGF1c2VkLlxuYXN5bmMgZnVuY3Rpb24gb25UaW1lb3V0KHRpbWVvdXRFdmVudDogYW55KSB7XG4gIGxvZygndGltZW91dEhhbmRsZXInLCB0aW1lb3V0RXZlbnQpO1xuXG4gIGNvbnN0IGlzQ29tcGxldGVSZXF1ZXN0ID0gSlNPTi5wYXJzZShKU09OLnBhcnNlKHRpbWVvdXRFdmVudC5DYXVzZSkuZXJyb3JNZXNzYWdlKSBhcyBBV1NDREtBc3luY0N1c3RvbVJlc291cmNlLklzQ29tcGxldGVSZXF1ZXN0O1xuICBhd2FpdCBjZm5SZXNwb25zZS5zdWJtaXRSZXNwb25zZSgnRkFJTEVEJywgaXNDb21wbGV0ZVJlcXVlc3QsIHtcbiAgICByZWFzb246ICdPcGVyYXRpb24gdGltZWQgb3V0JyxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGludm9rZVVzZXJGdW5jdGlvbjxBIGV4dGVuZHMgeyBSZXNwb25zZVVSTDogJy4uLicgfT4oZnVuY3Rpb25Bcm5FbnY6IHN0cmluZywgc2FuaXRpemVkUGF5bG9hZDogQSwgcmVzcG9uc2VVcmw6IHN0cmluZykge1xuICBjb25zdCBmdW5jdGlvbkFybiA9IGdldEVudihmdW5jdGlvbkFybkVudik7XG4gIGxvZyhgZXhlY3V0aW5nIHVzZXIgZnVuY3Rpb24gJHtmdW5jdGlvbkFybn0gd2l0aCBwYXlsb2FkYCwgc2FuaXRpemVkUGF5bG9hZCk7XG5cbiAgLy8gdHJhbnNpZW50IGVycm9ycyBzdWNoIGFzIHRpbWVvdXRzLCB0aHJvdHRsaW5nIGVycm9ycyAoNDI5KSwgYW5kIG90aGVyXG4gIC8vIGVycm9ycyB0aGF0IGFyZW4ndCBjYXVzZWQgYnkgYSBiYWQgcmVxdWVzdCAoNTAwIHNlcmllcykgYXJlIHJldHJpZWRcbiAgLy8gYXV0b21hdGljYWxseSBieSB0aGUgSmF2YVNjcmlwdCBTREsuXG4gIGNvbnN0IHJlc3AgPSBhd2FpdCBpbnZva2VGdW5jdGlvbih7XG4gICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbkFybixcblxuICAgIC8vIENhbm5vdCBzdHJpcCAnUmVzcG9uc2VVUkwnIGhlcmUgYXMgdGhpcyB3b3VsZCBiZSBhIGJyZWFraW5nIGNoYW5nZSBldmVuIHRob3VnaCB0aGUgZG93bnN0cmVhbSBDUiBkb2Vzbid0IG5lZWQgaXRcbiAgICBQYXlsb2FkOiBKU09OLnN0cmluZ2lmeSh7IC4uLnNhbml0aXplZFBheWxvYWQsIFJlc3BvbnNlVVJMOiByZXNwb25zZVVybCB9KSxcbiAgfSk7XG5cbiAgbG9nKCd1c2VyIGZ1bmN0aW9uIHJlc3BvbnNlOicsIHJlc3AsIHR5cGVvZihyZXNwKSk7XG5cbiAgLy8gUGFyc2VKc29uUGF5bG9hZCBpcyB2ZXJ5IGRlZmVuc2l2ZS4gSXQgc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSBmb3IgYFBheWxvYWRgXG4gIC8vIHRvIGJlIGFueXRoaW5nIG90aGVyIHRoYW4gYSBKU09OIGVuY29kZWQgc3RyaW5nIChvciBpbnRhcnJheSkuIFNvbWV0aGluZyB3ZWlyZCBpc1xuICAvLyBnb2luZyBvbiBpZiB0aGF0IGhhcHBlbnMuIFN0aWxsLCB3ZSBzaG91bGQgZG8gb3VyIGJlc3QgdG8gc3Vydml2ZSBpdC5cbiAgY29uc3QganNvblBheWxvYWQgPSBwYXJzZUpzb25QYXlsb2FkKHJlc3AuUGF5bG9hZCk7XG4gIGlmIChyZXNwLkZ1bmN0aW9uRXJyb3IpIHtcbiAgICBsb2coJ3VzZXIgZnVuY3Rpb24gdGhyZXcgYW4gZXJyb3I6JywgcmVzcC5GdW5jdGlvbkVycm9yKTtcblxuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGpzb25QYXlsb2FkLmVycm9yTWVzc2FnZSB8fCAnZXJyb3InO1xuXG4gICAgLy8gcGFyc2UgZnVuY3Rpb24gbmFtZSBmcm9tIGFyblxuICAgIC8vIGFybjoke1BhcnRpdGlvbn06bGFtYmRhOiR7UmVnaW9ufToke0FjY291bnR9OmZ1bmN0aW9uOiR7RnVuY3Rpb25OYW1lfVxuICAgIGNvbnN0IGFybiA9IGZ1bmN0aW9uQXJuLnNwbGl0KCc6Jyk7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYXJuW2Fybi5sZW5ndGggLSAxXTtcblxuICAgIC8vIGFwcGVuZCBhIHJlZmVyZW5jZSB0byB0aGUgbG9nIGdyb3VwLlxuICAgIGNvbnN0IG1lc3NhZ2UgPSBbXG4gICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAnJyxcbiAgICAgIGBMb2dzOiAvYXdzL2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gLCAvLyBjbG91ZHdhdGNoIGxvZyBncm91cFxuICAgICAgJycsXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG5cbiAgICAvLyB0aGUgb3V0cHV0IHRoYXQgZ29lcyB0byBDRk4gaXMgd2hhdCdzIGluIGBzdGFja2AsIG5vdCB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICAvLyBpZiB3ZSBoYXZlIGEgcmVtb3RlIHRyYWNlLCBjb25zdHJ1Y3QgYSBuaWNlIG1lc3NhZ2Ugd2l0aCBsb2cgZ3JvdXAgaW5mb3JtYXRpb25cbiAgICBpZiAoanNvblBheWxvYWQudHJhY2UpIHtcbiAgICAgIC8vIHNraXAgZmlyc3QgdHJhY2UgbGluZSBiZWNhdXNlIGl0J3MgdGhlIG1lc3NhZ2VcbiAgICAgIGUuc3RhY2sgPSBbbWVzc2FnZSwgLi4uanNvblBheWxvYWQudHJhY2Uuc2xpY2UoMSldLmpvaW4oJ1xcbicpO1xuICAgIH1cblxuICAgIHRocm93IGU7XG4gIH1cblxuICByZXR1cm4ganNvblBheWxvYWQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlRXZlbnQoY2ZuUmVxdWVzdDogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgb25FdmVudFJlc3VsdDogT25FdmVudFJlc3BvbnNlKTogQVdTQ0RLQXN5bmNDdXN0b21SZXNvdXJjZS5Jc0NvbXBsZXRlUmVxdWVzdCB7XG4gIC8vXG4gIC8vIHZhbGlkYXRlIHRoYXQgb25FdmVudFJlc3VsdCBhbHdheXMgaW5jbHVkZXMgYSBQaHlzaWNhbFJlc291cmNlSWRcblxuICBvbkV2ZW50UmVzdWx0ID0gb25FdmVudFJlc3VsdCB8fCB7IH07XG5cbiAgLy8gaWYgcGh5c2ljYWwgSUQgaXMgbm90IHJldHVybmVkLCB3ZSBoYXZlIHNvbWUgZGVmYXVsdHMgZm9yIHlvdSBiYXNlZFxuICAvLyBvbiB0aGUgcmVxdWVzdCB0eXBlLlxuICBjb25zdCBwaHlzaWNhbFJlc291cmNlSWQgPSBvbkV2ZW50UmVzdWx0LlBoeXNpY2FsUmVzb3VyY2VJZCB8fCBkZWZhdWx0UGh5c2ljYWxSZXNvdXJjZUlkKGNmblJlcXVlc3QpO1xuXG4gIC8vIGlmIHdlIGFyZSBpbiBERUxFVEUgYW5kIHBoeXNpY2FsIElEIHdhcyBjaGFuZ2VkLCBpdCdzIGFuIGVycm9yLlxuICBpZiAoY2ZuUmVxdWVzdC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScgJiYgcGh5c2ljYWxSZXNvdXJjZUlkICE9PSBjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgREVMRVRFOiBjYW5ub3QgY2hhbmdlIHRoZSBwaHlzaWNhbCByZXNvdXJjZSBJRCBmcm9tIFwiJHtjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZH1cIiB0byBcIiR7b25FdmVudFJlc3VsdC5QaHlzaWNhbFJlc291cmNlSWR9XCIgZHVyaW5nIGRlbGV0aW9uYCk7XG4gIH1cblxuICAvLyBpZiB3ZSBhcmUgaW4gVVBEQVRFIGFuZCBwaHlzaWNhbCBJRCB3YXMgY2hhbmdlZCwgaXQncyBhIHJlcGxhY2VtZW50IChqdXN0IGxvZylcbiAgaWYgKGNmblJlcXVlc3QuUmVxdWVzdFR5cGUgPT09ICdVcGRhdGUnICYmIHBoeXNpY2FsUmVzb3VyY2VJZCAhPT0gY2ZuUmVxdWVzdC5QaHlzaWNhbFJlc291cmNlSWQpIHtcbiAgICBsb2coYFVQREFURTogY2hhbmdpbmcgcGh5c2ljYWwgcmVzb3VyY2UgSUQgZnJvbSBcIiR7Y2ZuUmVxdWVzdC5QaHlzaWNhbFJlc291cmNlSWR9XCIgdG8gXCIke29uRXZlbnRSZXN1bHQuUGh5c2ljYWxSZXNvdXJjZUlkfVwiYCk7XG4gIH1cblxuICAvLyBtZXJnZSByZXF1ZXN0IGV2ZW50IGFuZCByZXN1bHQgZXZlbnQgKHJlc3VsdCBwcmV2YWlscykuXG4gIHJldHVybiB7XG4gICAgLi4uY2ZuUmVxdWVzdCxcbiAgICAuLi5vbkV2ZW50UmVzdWx0LFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogcGh5c2ljYWxSZXNvdXJjZUlkLFxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGRlZmF1bHQgcGh5c2ljYWwgcmVzb3VyY2UgSUQgYmFzZWQgaW4gY2FzZSB1c2VyIGhhbmRsZXIgZGlkXG4gKiBub3QgcmV0dXJuIGEgUGh5c2ljYWxSZXNvdXJjZUlkLlxuICpcbiAqIEZvciBcIkNSRUFURVwiLCBpdCB1c2VzIHRoZSBSZXF1ZXN0SWQuXG4gKiBGb3IgXCJVUERBVEVcIiBhbmQgXCJERUxFVEVcIiBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBQaHlzaWNhbFJlc291cmNlSWQgKHRoZSBvbmUgcHJvdmlkZWQgaW4gYGV2ZW50YCkuXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRQaHlzaWNhbFJlc291cmNlSWQocmVxOiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50KTogc3RyaW5nIHtcbiAgc3dpdGNoIChyZXEuUmVxdWVzdFR5cGUpIHtcbiAgICBjYXNlICdDcmVhdGUnOlxuICAgICAgcmV0dXJuIHJlcS5SZXF1ZXN0SWQ7XG5cbiAgICBjYXNlICdVcGRhdGUnOlxuICAgIGNhc2UgJ0RlbGV0ZSc6XG4gICAgICByZXR1cm4gcmVxLlBoeXNpY2FsUmVzb3VyY2VJZDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgXCJSZXF1ZXN0VHlwZVwiIGluIHJlcXVlc3QgXCIke0pTT04uc3RyaW5naWZ5KHJlcSl9XCJgKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/outbound.js b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/outbound.js new file mode 100644 index 0000000000000..110a420ec64c5 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.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-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/util.js b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6/util.js new file mode 100644 index 0000000000000..5d48e914660a6 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.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-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8/index.js new file mode 100644 index 0000000000000..f33b9fbaea5e1 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8/index.js @@ -0,0 +1 @@ +"use strict";var p=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var b=(e,s)=>{for(var t in s)p(e,t,{get:s[t],enumerable:!0})},m=(e,s,t,o)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of u(s))!d.call(e,a)&&a!==t&&p(e,a,{get:()=>s[a],enumerable:!(o=R(s,a))||o.enumerable});return e};var T=e=>m(p({},"__esModule",{value:!0}),e);var y={};b(y,{isCompleteHandler:()=>C,onEventHandler:()=>g});module.exports=T(y);var c=require("@aws-sdk/client-dynamodb");async function g(e){console.log("Event: %j",{...e,ResponseURL:"..."});let s=new c.DynamoDB({}),t=e.ResourceProperties.TableName,o=e.ResourceProperties.Region,a=e.ResourceProperties.SkipReplicaDeletion,i;if(e.RequestType==="Create"||e.RequestType==="Delete")i=e.RequestType;else{let l=await s.describeTable({TableName:t});console.log("Describe table: %j",l),i=l.Table?.Replicas?.some(n=>n.RegionName===o)?void 0:"Create"}if(i)if(i==="Delete"&&a)console.log("Skipping deleting replica table as replica table is set to retain.");else{let l=await s.updateTable({TableName:t,ReplicaUpdates:[{[i]:{RegionName:o}}]});console.log("Update table: %j",l)}else console.log("Skipping updating Table, as a replica in '%s' already exists",o);return e.RequestType==="Create"||e.RequestType==="Update"?{PhysicalResourceId:`${t}-${o}`}:{}}async function C(e){console.log("Event: %j",{...e,ResponseURL:"..."});let t=await new c.DynamoDB({}).describeTable({TableName:e.ResourceProperties.TableName});console.log("Describe table: %j",t);let o=t.Table?.TableStatus==="ACTIVE",i=(t.Table?.Replicas??[]).find(n=>n.RegionName===e.ResourceProperties.Region),l=i?.ReplicaStatus==="ACTIVE",r=e.ResourceProperties.SkipReplicationCompletedWait==="true";switch(e.RequestType){case"Create":case"Update":return{IsComplete:o&&(l||r)};case"Delete":return e.ResourceProperties.SkipReplicaDeletion===!0?(console.log("Skipping replica deletion check since replica is set to retain."),{IsComplete:!0}):{IsComplete:o&&i===void 0}}}0&&(module.exports={isCompleteHandler,onEventHandler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdk-dynamodb-skip-replica-deletion.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdk-dynamodb-skip-replica-deletion.assets.json new file mode 100644 index 0000000000000..84caf2c5fba85 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdk-dynamodb-skip-replica-deletion.assets.json @@ -0,0 +1,62 @@ +{ + "version": "41.0.0", + "files": { + "beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8": { + "displayName": "@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code", + "source": { + "path": "asset.beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6": { + "displayName": "@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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}" + } + } + }, + "e508fdc33083ad1a2d5239497e03863a26e96cd6cd3455082de4d9315c636d45": { + "displayName": "${Token[TOKEN.35]} Template", + "source": { + "path": "cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProvider76996739.nested.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "e508fdc33083ad1a2d5239497e03863a26e96cd6cd3455082de4d9315c636d45.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "f30c6bed38c69fa1027bc379d54d35ed8990dbf66e32e9c8e563ca78c30ae690": { + "displayName": "cdk-dynamodb-skip-replica-deletion Template", + "source": { + "path": "cdk-dynamodb-skip-replica-deletion.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "f30c6bed38c69fa1027bc379d54d35ed8990dbf66e32e9c8e563ca78c30ae690.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-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdk-dynamodb-skip-replica-deletion.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdk-dynamodb-skip-replica-deletion.template.json new file mode 100644 index 0000000000000..daff3b073a3cd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdk-dynamodb-skip-replica-deletion.template.json @@ -0,0 +1,239 @@ +{ + "Resources": { + "TableCD117FA1": { + "Type": "AWS::DynamoDB::Table", + "Properties": { + "AttributeDefinitions": [ + { + "AttributeName": "id", + "AttributeType": "S" + } + ], + "BillingMode": "PAY_PER_REQUEST", + "KeySchema": [ + { + "AttributeName": "id", + "KeyType": "HASH" + } + ], + "StreamSpecification": { + "StreamViewType": "NEW_AND_OLD_IMAGES" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "TableSourceTableAttachedManagedPolicycdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole9B3DAE1774B041B9": { + "Type": "AWS::IAM::ManagedPolicy", + "Properties": { + "Description": { + "Fn::Join": [ + "", + [ + "DynamoDB replication managed policy for table ", + { + "Ref": "TableCD117FA1" + } + ] + ] + }, + "Path": "/", + "PolicyDocument": { + "Statement": [ + { + "Action": "dynamodb:*", + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "TableCD117FA1", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":dynamodb:eu-west-2:", + { + "Ref": "AWS::AccountId" + }, + ":table/", + { + "Ref": "TableCD117FA1" + } + ] + ] + }, + { + "Ref": "AWS::NoValue" + } + ] + } + ], + "Version": "2012-10-17" + }, + "Roles": [ + { + "Fn::GetAtt": [ + "awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D", + "Outputs.cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleFA3AA84ERef" + ] + } + ] + } + }, + "TableSourceTableAttachedManagedPolicycdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE14EFE68A525E1C7": { + "Type": "AWS::IAM::ManagedPolicy", + "Properties": { + "Description": { + "Fn::Join": [ + "", + [ + "DynamoDB replication managed policy for table ", + { + "Ref": "TableCD117FA1" + } + ] + ] + }, + "Path": "/", + "PolicyDocument": { + "Statement": [ + { + "Action": "dynamodb:DescribeTable", + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "TableCD117FA1", + "Arn" + ] + }, + { + "Ref": "AWS::NoValue" + } + ] + } + ], + "Version": "2012-10-17" + }, + "Roles": [ + { + "Fn::GetAtt": [ + "awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D", + "Outputs.cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole82070C50Ref" + ] + } + ] + } + }, + "TableReplicaeuwest290D3CD3A": { + "Type": "Custom::DynamoDBReplica", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D", + "Outputs.cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderframeworkonEventCBBA269EArn" + ] + }, + "TableName": { + "Ref": "TableCD117FA1" + }, + "Region": "eu-west-2", + "SkipReplicaDeletion": false + }, + "DependsOn": [ + "TableSourceTableAttachedManagedPolicycdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE14EFE68A525E1C7", + "TableSourceTableAttachedManagedPolicycdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole9B3DAE1774B041B9" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Condition": "TableStackRegionNotEqualseuwest2A03859E7" + }, + "awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "referencetocdkdynamodbskipreplicadeletionTableE2C70768Ref": { + "Ref": "TableCD117FA1" + } + }, + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "/e508fdc33083ad1a2d5239497e03863a26e96cd6cd3455082de4d9315c636d45.json" + ] + ] + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Conditions": { + "TableStackRegionNotEqualseuwest2A03859E7": { + "Fn::Not": [ + { + "Fn::Equals": [ + "eu-west-2", + { + "Ref": "AWS::Region" + } + ] + } + ] + } + }, + "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-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdk.out new file mode 100644 index 0000000000000..188478b55560e --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"41.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProvider76996739.nested.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProvider76996739.nested.template.json new file mode 100644 index 0000000000000..7eac866af37cc --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProvider76996739.nested.template.json @@ -0,0 +1,1136 @@ +{ + "Mappings": { + "LatestNodeRuntimeMap": { + "af-south-1": { + "value": "nodejs20.x" + }, + "ap-east-1": { + "value": "nodejs20.x" + }, + "ap-northeast-1": { + "value": "nodejs20.x" + }, + "ap-northeast-2": { + "value": "nodejs20.x" + }, + "ap-northeast-3": { + "value": "nodejs20.x" + }, + "ap-south-1": { + "value": "nodejs20.x" + }, + "ap-south-2": { + "value": "nodejs20.x" + }, + "ap-southeast-1": { + "value": "nodejs20.x" + }, + "ap-southeast-2": { + "value": "nodejs20.x" + }, + "ap-southeast-3": { + "value": "nodejs20.x" + }, + "ap-southeast-4": { + "value": "nodejs20.x" + }, + "ap-southeast-5": { + "value": "nodejs20.x" + }, + "ap-southeast-7": { + "value": "nodejs20.x" + }, + "ca-central-1": { + "value": "nodejs20.x" + }, + "ca-west-1": { + "value": "nodejs20.x" + }, + "cn-north-1": { + "value": "nodejs20.x" + }, + "cn-northwest-1": { + "value": "nodejs20.x" + }, + "eu-central-1": { + "value": "nodejs20.x" + }, + "eu-central-2": { + "value": "nodejs20.x" + }, + "eu-isoe-west-1": { + "value": "nodejs18.x" + }, + "eu-north-1": { + "value": "nodejs20.x" + }, + "eu-south-1": { + "value": "nodejs20.x" + }, + "eu-south-2": { + "value": "nodejs20.x" + }, + "eu-west-1": { + "value": "nodejs20.x" + }, + "eu-west-2": { + "value": "nodejs20.x" + }, + "eu-west-3": { + "value": "nodejs20.x" + }, + "il-central-1": { + "value": "nodejs20.x" + }, + "me-central-1": { + "value": "nodejs20.x" + }, + "me-south-1": { + "value": "nodejs20.x" + }, + "mx-central-1": { + "value": "nodejs20.x" + }, + "sa-east-1": { + "value": "nodejs20.x" + }, + "us-east-1": { + "value": "nodejs20.x" + }, + "us-east-2": { + "value": "nodejs20.x" + }, + "us-gov-east-1": { + "value": "nodejs20.x" + }, + "us-gov-west-1": { + "value": "nodejs20.x" + }, + "us-iso-east-1": { + "value": "nodejs18.x" + }, + "us-iso-west-1": { + "value": "nodejs18.x" + }, + "us-isob-east-1": { + "value": "nodejs18.x" + }, + "us-west-1": { + "value": "nodejs20.x" + }, + "us-west-2": { + "value": "nodejs20.x" + } + } + }, + "Resources": { + "OnEventHandlerServiceRole15A26729": { + "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" + ] + ] + } + ] + } + }, + "OnEventHandler42BEBAE0": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip" + }, + "Handler": "index.onEventHandler", + "Role": { + "Fn::GetAtt": [ + "OnEventHandlerServiceRole15A26729", + "Arn" + ] + }, + "Runtime": { + "Fn::FindInMap": [ + "LatestNodeRuntimeMap", + { + "Ref": "AWS::Region" + }, + "value" + ] + }, + "Timeout": 300 + }, + "DependsOn": [ + "OnEventHandlerServiceRole15A26729" + ] + }, + "OnEventHandlerinlinePolicyAddedToExecutionRole05B1C3796": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "iam:CreateServiceLinkedRole", + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication" + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "OnEventHandlerinlinePolicyAddedToExecutionRole05B1C3796", + "Roles": [ + { + "Ref": "OnEventHandlerServiceRole15A26729" + } + ] + } + }, + "OnEventHandlerinlinePolicyAddedToExecutionRole187629D5C": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "dynamodb:DescribeLimits", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "OnEventHandlerinlinePolicyAddedToExecutionRole187629D5C", + "Roles": [ + { + "Ref": "OnEventHandlerServiceRole15A26729" + } + ] + } + }, + "OnEventHandlerinlinePolicyAddedToExecutionRole28650F749": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "dynamodb:DeleteTable", + "dynamodb:DeleteTableReplica" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":dynamodb:eu-west-2:", + { + "Ref": "AWS::AccountId" + }, + ":table/", + { + "Ref": "referencetocdkdynamodbskipreplicadeletionTableE2C70768Ref" + } + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "OnEventHandlerinlinePolicyAddedToExecutionRole28650F749", + "Roles": [ + { + "Ref": "OnEventHandlerServiceRole15A26729" + } + ] + } + }, + "IsCompleteHandlerServiceRole5810CC58": { + "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" + ] + ] + } + ] + } + }, + "IsCompleteHandler7073F4DA": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip" + }, + "Handler": "index.isCompleteHandler", + "Role": { + "Fn::GetAtt": [ + "IsCompleteHandlerServiceRole5810CC58", + "Arn" + ] + }, + "Runtime": { + "Fn::FindInMap": [ + "LatestNodeRuntimeMap", + { + "Ref": "AWS::Region" + }, + "value" + ] + }, + "Timeout": 30 + }, + "DependsOn": [ + "IsCompleteHandlerServiceRole5810CC58" + ] + }, + "ProviderframeworkonEventServiceRole9FF04296": { + "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" + ] + ] + } + ] + } + }, + "ProviderframeworkonEventServiceRoleDefaultPolicy48CD2133": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "lambda:InvokeFunction", + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "IsCompleteHandler7073F4DA", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "OnEventHandler42BEBAE0", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "IsCompleteHandler7073F4DA", + "Arn" + ] + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "OnEventHandler42BEBAE0", + "Arn" + ] + }, + ":*" + ] + ] + } + ] + }, + { + "Action": "states:StartExecution", + "Effect": "Allow", + "Resource": { + "Ref": "Providerwaiterstatemachine5D4A9DF0" + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ProviderframeworkonEventServiceRoleDefaultPolicy48CD2133", + "Roles": [ + { + "Ref": "ProviderframeworkonEventServiceRole9FF04296" + } + ] + } + }, + "ProviderframeworkonEvent83C1D0A7": { + "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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)", + "Environment": { + "Variables": { + "USER_ON_EVENT_FUNCTION_ARN": { + "Fn::GetAtt": [ + "OnEventHandler42BEBAE0", + "Arn" + ] + }, + "USER_IS_COMPLETE_FUNCTION_ARN": { + "Fn::GetAtt": [ + "IsCompleteHandler7073F4DA", + "Arn" + ] + }, + "WAITER_STATE_MACHINE_ARN": { + "Ref": "Providerwaiterstatemachine5D4A9DF0" + } + } + }, + "Handler": "framework.onEvent", + "Role": { + "Fn::GetAtt": [ + "ProviderframeworkonEventServiceRole9FF04296", + "Arn" + ] + }, + "Runtime": { + "Fn::FindInMap": [ + "LatestNodeRuntimeMap", + { + "Ref": "AWS::Region" + }, + "value" + ] + }, + "Timeout": 900 + }, + "DependsOn": [ + "ProviderframeworkonEventServiceRoleDefaultPolicy48CD2133", + "ProviderframeworkonEventServiceRole9FF04296" + ] + }, + "ProviderframeworkonEventinlinePolicyAddedToExecutionRole0D6E83756": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "lambda:GetFunction", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "OnEventHandler42BEBAE0", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ProviderframeworkonEventinlinePolicyAddedToExecutionRole0D6E83756", + "Roles": [ + { + "Ref": "ProviderframeworkonEventServiceRole9FF04296" + } + ] + } + }, + "ProviderframeworkonEventinlinePolicyAddedToExecutionRole17772106B": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "lambda:GetFunction", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "IsCompleteHandler7073F4DA", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ProviderframeworkonEventinlinePolicyAddedToExecutionRole17772106B", + "Roles": [ + { + "Ref": "ProviderframeworkonEventServiceRole9FF04296" + } + ] + } + }, + "ProviderframeworkisCompleteServiceRoleB1087139": { + "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" + ] + ] + } + ] + } + }, + "ProviderframeworkisCompleteServiceRoleDefaultPolicy2E7140AC": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "lambda:InvokeFunction", + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "IsCompleteHandler7073F4DA", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "OnEventHandler42BEBAE0", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "IsCompleteHandler7073F4DA", + "Arn" + ] + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "OnEventHandler42BEBAE0", + "Arn" + ] + }, + ":*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ProviderframeworkisCompleteServiceRoleDefaultPolicy2E7140AC", + "Roles": [ + { + "Ref": "ProviderframeworkisCompleteServiceRoleB1087139" + } + ] + } + }, + "ProviderframeworkisComplete26D7B0CB": { + "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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)", + "Environment": { + "Variables": { + "USER_ON_EVENT_FUNCTION_ARN": { + "Fn::GetAtt": [ + "OnEventHandler42BEBAE0", + "Arn" + ] + }, + "USER_IS_COMPLETE_FUNCTION_ARN": { + "Fn::GetAtt": [ + "IsCompleteHandler7073F4DA", + "Arn" + ] + } + } + }, + "Handler": "framework.isComplete", + "Role": { + "Fn::GetAtt": [ + "ProviderframeworkisCompleteServiceRoleB1087139", + "Arn" + ] + }, + "Runtime": { + "Fn::FindInMap": [ + "LatestNodeRuntimeMap", + { + "Ref": "AWS::Region" + }, + "value" + ] + }, + "Timeout": 900 + }, + "DependsOn": [ + "ProviderframeworkisCompleteServiceRoleDefaultPolicy2E7140AC", + "ProviderframeworkisCompleteServiceRoleB1087139" + ] + }, + "ProviderframeworkisCompleteinlinePolicyAddedToExecutionRole0DA398EFB": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "lambda:GetFunction", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "OnEventHandler42BEBAE0", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ProviderframeworkisCompleteinlinePolicyAddedToExecutionRole0DA398EFB", + "Roles": [ + { + "Ref": "ProviderframeworkisCompleteServiceRoleB1087139" + } + ] + } + }, + "ProviderframeworkisCompleteinlinePolicyAddedToExecutionRole11B3461A6": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "lambda:GetFunction", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "IsCompleteHandler7073F4DA", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ProviderframeworkisCompleteinlinePolicyAddedToExecutionRole11B3461A6", + "Roles": [ + { + "Ref": "ProviderframeworkisCompleteServiceRoleB1087139" + } + ] + } + }, + "ProviderframeworkonTimeoutServiceRole28643D26": { + "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" + ] + ] + } + ] + } + }, + "ProviderframeworkonTimeoutServiceRoleDefaultPolicy2688969F": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "lambda:InvokeFunction", + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "IsCompleteHandler7073F4DA", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "OnEventHandler42BEBAE0", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "IsCompleteHandler7073F4DA", + "Arn" + ] + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "OnEventHandler42BEBAE0", + "Arn" + ] + }, + ":*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ProviderframeworkonTimeoutServiceRoleDefaultPolicy2688969F", + "Roles": [ + { + "Ref": "ProviderframeworkonTimeoutServiceRole28643D26" + } + ] + } + }, + "ProviderframeworkonTimeout0B47CA38": { + "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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)", + "Environment": { + "Variables": { + "USER_ON_EVENT_FUNCTION_ARN": { + "Fn::GetAtt": [ + "OnEventHandler42BEBAE0", + "Arn" + ] + }, + "USER_IS_COMPLETE_FUNCTION_ARN": { + "Fn::GetAtt": [ + "IsCompleteHandler7073F4DA", + "Arn" + ] + } + } + }, + "Handler": "framework.onTimeout", + "Role": { + "Fn::GetAtt": [ + "ProviderframeworkonTimeoutServiceRole28643D26", + "Arn" + ] + }, + "Runtime": { + "Fn::FindInMap": [ + "LatestNodeRuntimeMap", + { + "Ref": "AWS::Region" + }, + "value" + ] + }, + "Timeout": 900 + }, + "DependsOn": [ + "ProviderframeworkonTimeoutServiceRoleDefaultPolicy2688969F", + "ProviderframeworkonTimeoutServiceRole28643D26" + ] + }, + "ProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole03D28EB24": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "lambda:GetFunction", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "OnEventHandler42BEBAE0", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole03D28EB24", + "Roles": [ + { + "Ref": "ProviderframeworkonTimeoutServiceRole28643D26" + } + ] + } + }, + "ProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole10E895C60": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "lambda:GetFunction", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "IsCompleteHandler7073F4DA", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole10E895C60", + "Roles": [ + { + "Ref": "ProviderframeworkonTimeoutServiceRole28643D26" + } + ] + } + }, + "ProviderwaiterstatemachineRole0C7159F9": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "states.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "ProviderwaiterstatemachineRoleDefaultPolicyD3C3DA1A": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "lambda:InvokeFunction", + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "ProviderframeworkisComplete26D7B0CB", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "ProviderframeworkonTimeout0B47CA38", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "ProviderframeworkisComplete26D7B0CB", + "Arn" + ] + }, + ":*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "ProviderframeworkonTimeout0B47CA38", + "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": "ProviderwaiterstatemachineRoleDefaultPolicyD3C3DA1A", + "Roles": [ + { + "Ref": "ProviderwaiterstatemachineRole0C7159F9" + } + ] + } + }, + "ProviderwaiterstatemachineLogGroupDD693A98": { + "Type": "AWS::Logs::LogGroup", + "Properties": { + "LogGroupName": { + "Fn::Join": [ + "", + [ + "/aws/vendedlogs/states/waiter-state-machine-", + { + "Ref": "ProviderframeworkisComplete26D7B0CB" + }, + "-c828d475bedc7428b3bee3076efbd96b0286be361d" + ] + ] + }, + "RetentionInDays": 731 + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "Providerwaiterstatemachine5D4A9DF0": { + "Type": "AWS::StepFunctions::StateMachine", + "Properties": { + "DefinitionString": { + "Fn::Join": [ + "", + [ + "{\"StartAt\":\"framework-isComplete-task\",\"States\":{\"framework-isComplete-task\":{\"End\":true,\"Retry\":[{\"ErrorEquals\":[\"States.ALL\"],\"IntervalSeconds\":10,\"MaxAttempts\":180,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"", + { + "Fn::GetAtt": [ + "ProviderframeworkisComplete26D7B0CB", + "Arn" + ] + }, + "\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"", + { + "Fn::GetAtt": [ + "ProviderframeworkonTimeout0B47CA38", + "Arn" + ] + }, + "\"}}}" + ] + ] + }, + "LoggingConfiguration": { + "Destinations": [ + { + "CloudWatchLogsLogGroup": { + "LogGroupArn": { + "Fn::GetAtt": [ + "ProviderwaiterstatemachineLogGroupDD693A98", + "Arn" + ] + } + } + } + ], + "IncludeExecutionData": false, + "Level": "ERROR" + }, + "RoleArn": { + "Fn::GetAtt": [ + "ProviderwaiterstatemachineRole0C7159F9", + "Arn" + ] + } + }, + "DependsOn": [ + "ProviderwaiterstatemachineRoleDefaultPolicyD3C3DA1A", + "ProviderwaiterstatemachineRole0C7159F9" + ] + } + }, + "Outputs": { + "cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleFA3AA84ERef": { + "Value": { + "Ref": "OnEventHandlerServiceRole15A26729" + } + }, + "cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole82070C50Ref": { + "Value": { + "Ref": "IsCompleteHandlerServiceRole5810CC58" + } + }, + "cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderframeworkonEventCBBA269EArn": { + "Value": { + "Fn::GetAtt": [ + "ProviderframeworkonEvent83C1D0A7", + "Arn" + ] + } + } + }, + "Parameters": { + "referencetocdkdynamodbskipreplicadeletionTableE2C70768Ref": { + "Type": "String" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.assets.json new file mode 100644 index 0000000000000..2a8260a1ab0c7 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.assets.json @@ -0,0 +1,20 @@ +{ + "version": "41.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "displayName": "cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006 Template", + "source": { + "path": "cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.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-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.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-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/integ.json new file mode 100644 index 0000000000000..43d19d847266b --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "41.0.0", + "testCases": { + "cdk-dynamodb-skip-replica-deletion-test/DefaultTest": { + "stacks": [ + "cdk-dynamodb-skip-replica-deletion" + ], + "assertionStack": "cdk-dynamodb-skip-replica-deletion-test/DefaultTest/DeployAssert", + "assertionStackName": "cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/manifest.json new file mode 100644 index 0000000000000..8e89bc2d09239 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/manifest.json @@ -0,0 +1,1446 @@ +{ + "version": "42.0.0", + "artifacts": { + "cdk-dynamodb-skip-replica-deletion.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "cdk-dynamodb-skip-replica-deletion.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "cdk-dynamodb-skip-replica-deletion": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "cdk-dynamodb-skip-replica-deletion.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}/f30c6bed38c69fa1027bc379d54d35ed8990dbf66e32e9c8e563ca78c30ae690.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "cdk-dynamodb-skip-replica-deletion.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-dynamodb-skip-replica-deletion.assets" + ], + "metadata": { + "/cdk-dynamodb-skip-replica-deletion/Table": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "partitionKey": { + "name": "*", + "type": "S" + }, + "removalPolicy": "destroy", + "replicationRegions": "*" + } + } + ], + "/cdk-dynamodb-skip-replica-deletion/Table/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "TableCD117FA1" + } + ], + "/cdk-dynamodb-skip-replica-deletion/Table/ScalingRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/cdk-dynamodb-skip-replica-deletion/Table/SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole9B3DAE17/Resource": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "description": "*", + "roles": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachToRole": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addStatements": [ + {} + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addStatements": [ + {} + ] + } + } + ], + "/cdk-dynamodb-skip-replica-deletion/Table/SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole9B3DAE17/Resource/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "TableSourceTableAttachedManagedPolicycdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole9B3DAE1774B041B9" + } + ], + "/cdk-dynamodb-skip-replica-deletion/Table/SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE14EFE68/Resource": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "description": "*", + "roles": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachToRole": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addStatements": [ + {} + ] + } + } + ], + "/cdk-dynamodb-skip-replica-deletion/Table/SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE14EFE68/Resource/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "TableSourceTableAttachedManagedPolicycdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE14EFE68A525E1C7" + } + ], + "/cdk-dynamodb-skip-replica-deletion/Table/Replicaeu-west-2": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/cdk-dynamodb-skip-replica-deletion/Table/Replicaeu-west-2/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "TableReplicaeuwest290D3CD3A" + } + ], + "/cdk-dynamodb-skip-replica-deletion/Table/StackRegionNotEqualseu-west-2": [ + { + "type": "aws:cdk:logicalId", + "data": "TableStackRegionNotEqualseuwest2A03859E7" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/LatestNodeRuntimeMap": [ + { + "type": "aws:cdk:logicalId", + "data": "LatestNodeRuntimeMap" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "timeout": "*", + "code": "*", + "handler": "*", + "runtime": "*" + } + }, + { + "type": "aws:cdk:is-custom-resource-handler-runtime-family", + "data": 0 + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "assumedBy": { + "principalAccount": "*", + "assumeRoleAction": "*" + }, + "managedPolicies": [ + { + "managedPolicyArn": "*" + } + ] + } + }, + { + "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": { + "attachInlinePolicy": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachInlinePolicy": [ + "*" + ] + } + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/ImportServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "OnEventHandlerServiceRole15A26729" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "OnEventHandler42BEBAE0" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-0/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "OnEventHandlerinlinePolicyAddedToExecutionRole05B1C3796" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-1/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "OnEventHandlerinlinePolicyAddedToExecutionRole187629D5C" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-2": [ + { + "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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-2/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "OnEventHandlerinlinePolicyAddedToExecutionRole28650F749" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "timeout": "*", + "code": "*", + "handler": "*", + "runtime": "*" + } + }, + { + "type": "aws:cdk:is-custom-resource-handler-runtime-family", + "data": 0 + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "assumedBy": { + "principalAccount": "*", + "assumeRoleAction": "*" + }, + "managedPolicies": [ + { + "managedPolicyArn": "*" + } + ] + } + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole/ImportServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "IsCompleteHandlerServiceRole5810CC58" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "IsCompleteHandler7073F4DA" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/ImportServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkonEventServiceRole9FF04296" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkonEventServiceRoleDefaultPolicy48CD2133" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkonEvent83C1D0A7" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-0/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkonEventinlinePolicyAddedToExecutionRole0D6E83756" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-1/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkonEventinlinePolicyAddedToExecutionRole17772106B" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/ImportServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkisCompleteServiceRoleB1087139" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkisCompleteServiceRoleDefaultPolicy2E7140AC" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkisComplete26D7B0CB" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-0/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkisCompleteinlinePolicyAddedToExecutionRole0DA398EFB" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-1/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkisCompleteinlinePolicyAddedToExecutionRole11B3461A6" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/ImportServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkonTimeoutServiceRole28643D26" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkonTimeoutServiceRoleDefaultPolicy2688969F" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkonTimeout0B47CA38" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-0/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole03D28EB24" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-1/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole10E895C60" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/ImportRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderwaiterstatemachineRole0C7159F9" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderwaiterstatemachineRoleDefaultPolicyD3C3DA1A" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/LogGroup": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "logGroupName": "*" + } + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/LogGroup/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ProviderwaiterstatemachineLogGroupDD693A98" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Providerwaiterstatemachine5D4A9DF0" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleFA3AA84ERef": [ + { + "type": "aws:cdk:logicalId", + "data": "cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleFA3AA84ERef" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole82070C50Ref": [ + { + "type": "aws:cdk:logicalId", + "data": "cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole82070C50Ref" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderframeworkonEventCBBA269EArn": [ + { + "type": "aws:cdk:logicalId", + "data": "cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderframeworkonEventCBBA269EArn" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/reference-to-cdkdynamodbskipreplicadeletionTableE2C70768Ref": [ + { + "type": "aws:cdk:logicalId", + "data": "referencetocdkdynamodbskipreplicadeletionTableE2C70768Ref" + } + ], + "/cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource": [ + { + "type": "aws:cdk:logicalId", + "data": "awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D" + } + ], + "/cdk-dynamodb-skip-replica-deletion/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/cdk-dynamodb-skip-replica-deletion/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "cdk-dynamodb-skip-replica-deletion" + }, + "cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.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": [ + "cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.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": [ + "cdkdynamodbskipreplicadeletiontestDefaultTestDeployAssert2E817006.assets" + ], + "metadata": { + "/cdk-dynamodb-skip-replica-deletion-test/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/cdk-dynamodb-skip-replica-deletion-test/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "cdk-dynamodb-skip-replica-deletion-test/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + }, + "minimumCliVersion": "2.1006.0" +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/tree.json new file mode 100644 index 0000000000000..156cae3cf9256 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.js.snapshot/tree.json @@ -0,0 +1 @@ +{"version":"tree-0.1","tree":{"id":"App","path":"","children":{"cdk-dynamodb-skip-replica-deletion":{"id":"cdk-dynamodb-skip-replica-deletion","path":"cdk-dynamodb-skip-replica-deletion","children":{"Table":{"id":"Table","path":"cdk-dynamodb-skip-replica-deletion/Table","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/Table/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::DynamoDB::Table","aws:cdk:cloudformation:props":{"attributeDefinitions":[{"attributeName":"id","attributeType":"S"}],"billingMode":"PAY_PER_REQUEST","keySchema":[{"attributeName":"id","keyType":"HASH"}],"streamSpecification":{"streamViewType":"NEW_AND_OLD_IMAGES"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_dynamodb.CfnTable","version":"0.0.0"}},"ScalingRole":{"id":"ScalingRole","path":"cdk-dynamodb-skip-replica-deletion/Table/ScalingRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole9B3DAE17":{"id":"SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole9B3DAE17","path":"cdk-dynamodb-skip-replica-deletion/Table/SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole9B3DAE17","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/Table/SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole9B3DAE17/Resource","children":{"ImportedResource":{"id":"ImportedResource","path":"cdk-dynamodb-skip-replica-deletion/Table/SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole9B3DAE17/Resource/ImportedResource","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/Table/SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole9B3DAE17/Resource/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::ManagedPolicy","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["DynamoDB replication managed policy for table ",{"Ref":"TableCD117FA1"}]]},"path":"/","policyDocument":{"Statement":[{"Action":"dynamodb:*","Effect":"Allow","Resource":[{"Fn::GetAtt":["TableCD117FA1","Arn"]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":dynamodb:eu-west-2:",{"Ref":"AWS::AccountId"},":table/",{"Ref":"TableCD117FA1"}]]},{"Ref":"AWS::NoValue"}]}],"Version":"2012-10-17"},"roles":[{"Fn::GetAtt":["awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D","Outputs.cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleFA3AA84ERef"]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnManagedPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.ManagedPolicy","version":"0.0.0","metadata":[{"description":"*","roles":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE14EFE68":{"id":"SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE14EFE68","path":"cdk-dynamodb-skip-replica-deletion/Table/SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE14EFE68","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/Table/SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE14EFE68/Resource","children":{"ImportedResource":{"id":"ImportedResource","path":"cdk-dynamodb-skip-replica-deletion/Table/SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE14EFE68/Resource/ImportedResource","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/Table/SourceTableAttachedManagedPolicy-cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE14EFE68/Resource/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::ManagedPolicy","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["DynamoDB replication managed policy for table ",{"Ref":"TableCD117FA1"}]]},"path":"/","policyDocument":{"Statement":[{"Action":"dynamodb:DescribeTable","Effect":"Allow","Resource":[{"Fn::GetAtt":["TableCD117FA1","Arn"]},{"Ref":"AWS::NoValue"}]}],"Version":"2012-10-17"},"roles":[{"Fn::GetAtt":["awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D","Outputs.cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole82070C50Ref"]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnManagedPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.ManagedPolicy","version":"0.0.0","metadata":[{"description":"*","roles":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"Replicaeu-west-2":{"id":"Replicaeu-west-2","path":"cdk-dynamodb-skip-replica-deletion/Table/Replicaeu-west-2","children":{"Default":{"id":"Default","path":"cdk-dynamodb-skip-replica-deletion/Table/Replicaeu-west-2/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*"]}},"StackRegionNotEqualseu-west-2":{"id":"StackRegionNotEqualseu-west-2","path":"cdk-dynamodb-skip-replica-deletion/Table/StackRegionNotEqualseu-west-2","constructInfo":{"fqn":"aws-cdk-lib.CfnCondition","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_dynamodb.Table","version":"0.0.0","metadata":[{"partitionKey":{"name":"*","type":"S"},"removalPolicy":"destroy","replicationRegions":"*"}]}},"@aws-cdk--aws-dynamodb.ReplicaProvider":{"id":"@aws-cdk--aws-dynamodb.ReplicaProvider","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider","children":{"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"OnEventHandler":{"id":"OnEventHandler","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]}},"Code":{"id":"Code","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code","children":{"Stage":{"id":"Stage","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/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":"beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip"},"handler":"index.onEventHandler","role":{"Fn::GetAtt":["OnEventHandlerServiceRole15A26729","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":300}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-0","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-0/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"iam:CreateServiceLinkedRole","Effect":"Allow","Resource":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::",{"Ref":"AWS::AccountId"},":role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication"]]}}],"Version":"2012-10-17"},"policyName":"OnEventHandlerinlinePolicyAddedToExecutionRole05B1C3796","roles":[{"Ref":"OnEventHandlerServiceRole15A26729"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}},"inlinePolicyAddedToExecutionRole-1":{"id":"inlinePolicyAddedToExecutionRole-1","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-1","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-1/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"dynamodb:DescribeLimits","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"OnEventHandlerinlinePolicyAddedToExecutionRole187629D5C","roles":[{"Ref":"OnEventHandlerServiceRole15A26729"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}},"inlinePolicyAddedToExecutionRole-2":{"id":"inlinePolicyAddedToExecutionRole-2","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-2","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-2/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":["dynamodb:DeleteTable","dynamodb:DeleteTableReplica"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":dynamodb:eu-west-2:",{"Ref":"AWS::AccountId"},":table/",{"Ref":"referencetocdkdynamodbskipreplicadeletionTableE2C70768Ref"}]]}}],"Version":"2012-10-17"},"policyName":"OnEventHandlerinlinePolicyAddedToExecutionRole28650F749","roles":[{"Ref":"OnEventHandlerServiceRole15A26729"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"timeout":"*","code":"*","handler":"*","runtime":"*"}]}},"IsCompleteHandler":{"id":"IsCompleteHandler","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]}]}},"Code":{"id":"Code","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code","children":{"Stage":{"id":"Stage","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/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":"beee194466d406430def0e84ec8b17a0aeb98fe29f5660882cb01e9db355d7c8.zip"},"handler":"index.isCompleteHandler","role":{"Fn::GetAtt":["IsCompleteHandlerServiceRole5810CC58","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":30}},"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":[{"timeout":"*","code":"*","handler":"*","runtime":"*"}]}},"Provider":{"id":"Provider","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider","children":{"framework-onEvent":{"id":"framework-onEvent","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},":*"]]}]},{"Action":"states:StartExecution","Effect":"Allow","Resource":{"Ref":"Providerwaiterstatemachine5D4A9DF0"}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonEventServiceRoleDefaultPolicy48CD2133","roles":[{"Ref":"ProviderframeworkonEventServiceRole9FF04296"}]}},"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":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code","children":{"Stage":{"id":"Stage","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},"WAITER_STATE_MACHINE_ARN":{"Ref":"Providerwaiterstatemachine5D4A9DF0"}}},"handler":"framework.onEvent","role":{"Fn::GetAtt":["ProviderframeworkonEventServiceRole9FF04296","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-0","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-0/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonEventinlinePolicyAddedToExecutionRole0D6E83756","roles":[{"Ref":"ProviderframeworkonEventServiceRole9FF04296"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}},"inlinePolicyAddedToExecutionRole-1":{"id":"inlinePolicyAddedToExecutionRole-1","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-1","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-1/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonEventinlinePolicyAddedToExecutionRole17772106B","roles":[{"Ref":"ProviderframeworkonEventServiceRole9FF04296"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},":*"]]}]}],"Version":"2012-10-17"},"policyName":"ProviderframeworkisCompleteServiceRoleDefaultPolicy2E7140AC","roles":[{"Ref":"ProviderframeworkisCompleteServiceRoleB1087139"}]}},"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":[{}]}]}}},"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":["*"]}]}},"Code":{"id":"Code","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code","children":{"Stage":{"id":"Stage","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}},"handler":"framework.isComplete","role":{"Fn::GetAtt":["ProviderframeworkisCompleteServiceRoleB1087139","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-0","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-0/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkisCompleteinlinePolicyAddedToExecutionRole0DA398EFB","roles":[{"Ref":"ProviderframeworkisCompleteServiceRoleB1087139"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}},"inlinePolicyAddedToExecutionRole-1":{"id":"inlinePolicyAddedToExecutionRole-1","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-1","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-1/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkisCompleteinlinePolicyAddedToExecutionRole11B3461A6","roles":[{"Ref":"ProviderframeworkisCompleteServiceRoleB1087139"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout","children":{"ServiceRole":{"id":"ServiceRole","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},":*"]]}]}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonTimeoutServiceRoleDefaultPolicy2688969F","roles":[{"Ref":"ProviderframeworkonTimeoutServiceRole28643D26"}]}},"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":[{}]}]}}},"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":["*"]}]}},"Code":{"id":"Code","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code","children":{"Stage":{"id":"Stage","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}},"handler":"framework.onTimeout","role":{"Fn::GetAtt":["ProviderframeworkonTimeoutServiceRole28643D26","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-0","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-0/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole03D28EB24","roles":[{"Ref":"ProviderframeworkonTimeoutServiceRole28643D26"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}},"inlinePolicyAddedToExecutionRole-1":{"id":"inlinePolicyAddedToExecutionRole-1","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-1","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-1/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole10E895C60","roles":[{"Ref":"ProviderframeworkonTimeoutServiceRole28643D26"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine","children":{"Role":{"id":"Role","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role","children":{"ImportRole":{"id":"ImportRole","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/ImportRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["ProviderframeworkisComplete26D7B0CB","Arn"]},{"Fn::GetAtt":["ProviderframeworkonTimeout0B47CA38","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["ProviderframeworkisComplete26D7B0CB","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["ProviderframeworkonTimeout0B47CA38","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":"ProviderwaiterstatemachineRoleDefaultPolicyD3C3DA1A","roles":[{"Ref":"ProviderwaiterstatemachineRole0C7159F9"}]}},"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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/LogGroup","children":{"Resource":{"id":"Resource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"ProviderframeworkisComplete26D7B0CB"},"-c828d475bedc7428b3bee3076efbd96b0286be361d"]]},"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-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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\":10,\"MaxAttempts\":180,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["ProviderframeworkisComplete26D7B0CB","Arn"]},"\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["ProviderframeworkonTimeout0B47CA38","Arn"]},"\"}}}"]]},"loggingConfiguration":{"destinations":[{"cloudWatchLogsLogGroup":{"logGroupArn":{"Fn::GetAtt":["ProviderwaiterstatemachineLogGroupDD693A98","Arn"]}}}],"includeExecutionData":false,"level":"ERROR"},"roleArn":{"Fn::GetAtt":["ProviderwaiterstatemachineRole0C7159F9","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"}},"cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleFA3AA84ERef":{"id":"cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleFA3AA84ERef","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleFA3AA84ERef","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole82070C50Ref":{"id":"cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole82070C50Ref","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole82070C50Ref","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderframeworkonEventCBBA269EArn":{"id":"cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderframeworkonEventCBBA269EArn","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/cdkdynamodbskipreplicadeletionawscdkawsdynamodbReplicaProviderframeworkonEventCBBA269EArn","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"reference-to-cdkdynamodbskipreplicadeletionTableE2C70768Ref":{"id":"reference-to-cdkdynamodbskipreplicadeletionTableE2C70768Ref","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider/reference-to-cdkdynamodbskipreplicadeletionTableE2C70768Ref","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.NestedStack","version":"0.0.0"}},"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack":{"id":"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack","children":{"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource":{"id":"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource","path":"cdk-dynamodb-skip-replica-deletion/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource","attributes":{"aws:cdk:cloudformation:type":"AWS::CloudFormation::Stack","aws:cdk:cloudformation:props":{"parameters":{"referencetocdkdynamodbskipreplicadeletionTableE2C70768Ref":{"Ref":"TableCD117FA1"}},"templateUrl":{"Fn::Join":["",["https://s3.",{"Ref":"AWS::Region"},".",{"Ref":"AWS::URLSuffix"},"/",{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"/e508fdc33083ad1a2d5239497e03863a26e96cd6cd3455082de4d9315c636d45.json"]]}}},"constructInfo":{"fqn":"aws-cdk-lib.CfnStack","version":"0.0.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"BootstrapVersion":{"id":"BootstrapVersion","path":"cdk-dynamodb-skip-replica-deletion/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"cdk-dynamodb-skip-replica-deletion/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"}},"cdk-dynamodb-skip-replica-deletion-test":{"id":"cdk-dynamodb-skip-replica-deletion-test","path":"cdk-dynamodb-skip-replica-deletion-test","children":{"DefaultTest":{"id":"DefaultTest","path":"cdk-dynamodb-skip-replica-deletion-test/DefaultTest","children":{"Default":{"id":"Default","path":"cdk-dynamodb-skip-replica-deletion-test/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"cdk-dynamodb-skip-replica-deletion-test/DefaultTest/DeployAssert","children":{"BootstrapVersion":{"id":"BootstrapVersion","path":"cdk-dynamodb-skip-replica-deletion-test/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"cdk-dynamodb-skip-replica-deletion-test/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 diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.ts new file mode 100644 index 0000000000000..8e0e5fd63a628 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.ts @@ -0,0 +1,36 @@ +/// !cdk-integ * + +import { App, RemovalPolicy, Stack, StackProps } from 'aws-cdk-lib'; +import { Construct } from 'constructs'; +import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; +import { + IntegTest, +} from '@aws-cdk/integ-tests-alpha'; + +class TestStack extends Stack { + public table?: dynamodb.Table; + constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); + + this.table = new dynamodb.Table(this, 'Table', { + partitionKey: { + name: 'id', + type: dynamodb.AttributeType.STRING, + }, + replicaRemovalPolicy: RemovalPolicy.DESTROY, + removalPolicy: RemovalPolicy.DESTROY, + replicationRegions: ['eu-west-2'], + }); + } +} + +const app = new App(); +const stack = new TestStack(app, 'cdk-dynamodb-skip-replica-deletion'); + +new IntegTest( + app, + 'cdk-dynamodb-skip-replica-deletion-test', + { + testCases: [stack], + }, +); diff --git a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/MyStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/MyStack.assets.json index ea8d6dd33cf14..71b4911219e1d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/MyStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/MyStack.assets.json @@ -1,20 +1,22 @@ { - "version": "39.0.0", + "version": "41.0.0", "files": { - "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4": { + "b6529896e4495e2737f2221f4a6080bd2c5159352f9e2ed375a5715475f12d7c": { + "displayName": "@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code", "source": { - "path": "asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4", + "path": "asset.b6529896e4495e2737f2221f4a6080bd2c5159352f9e2ed375a5715475f12d7c", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip", + "objectKey": "b6529896e4495e2737f2221f4a6080bd2c5159352f9e2ed375a5715475f12d7c.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, "39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6": { + "displayName": "@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code", "source": { "path": "asset.39472b1c2875cf306d4ba429aeccdd34cb49bcf59dbde81f7e6b6cb9deac23a6", "packaging": "zip" @@ -27,7 +29,8 @@ } } }, - "741c37a0a4ac836be11c1d372930601e701f8990251cf1dc550f0e68409a4310": { + "cf86db83666381ec09b6c0934ad94022c4de0c86148014928be2476afb680c14": { + "displayName": "${Token[TOKEN.35]} Template", "source": { "path": "MyStackawscdkawsdynamodbReplicaProvider4F7C92F8.nested.template.json", "packaging": "file" @@ -35,12 +38,13 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "741c37a0a4ac836be11c1d372930601e701f8990251cf1dc550f0e68409a4310.json", + "objectKey": "cf86db83666381ec09b6c0934ad94022c4de0c86148014928be2476afb680c14.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "528a6bd64d6a7c1ffb72bcadef55223d302da950e8e4e22a5f6d3a61f1eaa0f3": { + "c665070d0e7bfab6b541eb80713fef9072fcfbed0e7ced678b9af6efa64942e8": { + "displayName": "MyStack Template", "source": { "path": "MyStack.template.json", "packaging": "file" @@ -48,7 +52,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "528a6bd64d6a7c1ffb72bcadef55223d302da950e8e4e22a5f6d3a61f1eaa0f3.json", + "objectKey": "c665070d0e7bfab6b541eb80713fef9072fcfbed0e7ced678b9af6efa64942e8.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/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/MyStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/MyStack.template.json index a7c37f16e1bea..af568472bcb8d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/MyStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/MyStack.template.json @@ -20,8 +20,8 @@ "StreamViewType": "NEW_AND_OLD_IMAGES" } }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain" + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" }, "TableSourceTableAttachedManagedPolicyMyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD593864897023A5A": { "Type": "AWS::IAM::ManagedPolicy", @@ -144,7 +144,8 @@ "TableName": { "Ref": "TableCD117FA1" }, - "Region": "us-east-2" + "Region": "us-east-2", + "SkipReplicaDeletion": false }, "DependsOn": [ "TableSourceTableAttachedManagedPolicyMyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B480CD9B37", @@ -178,7 +179,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/741c37a0a4ac836be11c1d372930601e701f8990251cf1dc550f0e68409a4310.json" + "/cf86db83666381ec09b6c0934ad94022c4de0c86148014928be2476afb680c14.json" ] ] } diff --git a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/MyStackawscdkawsdynamodbReplicaProvider4F7C92F8.nested.template.json b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/MyStackawscdkawsdynamodbReplicaProvider4F7C92F8.nested.template.json index d85d4cf039a68..ad518a375594c 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/MyStackawscdkawsdynamodbReplicaProvider4F7C92F8.nested.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/MyStackawscdkawsdynamodbReplicaProvider4F7C92F8.nested.template.json @@ -162,7 +162,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip" + "S3Key": "b6529896e4495e2737f2221f4a6080bd2c5159352f9e2ed375a5715475f12d7c.zip" }, "Handler": "index.onEventHandler", "Role": { @@ -315,7 +315,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip" + "S3Key": "b6529896e4495e2737f2221f4a6080bd2c5159352f9e2ed375a5715475f12d7c.zip" }, "Handler": "index.isCompleteHandler", "Role": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4/index.js b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4/index.js deleted file mode 100644 index d991c8c6a6e37..0000000000000 --- a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/asset.654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4/index.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";var n=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var m=(e,s)=>{for(var t in s)n(e,t,{get:s[t],enumerable:!0})},b=(e,s,t,o)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of d(s))!u.call(e,a)&&a!==t&&n(e,a,{get:()=>s[a],enumerable:!(o=R(s,a))||o.enumerable});return e};var T=e=>b(n({},"__esModule",{value:!0}),e);var y={};m(y,{isCompleteHandler:()=>g,onEventHandler:()=>C});module.exports=T(y);var c=require("@aws-sdk/client-dynamodb");async function C(e){console.log("Event: %j",{...e,ResponseURL:"..."});let s=new c.DynamoDB({}),t=e.ResourceProperties.TableName,o=e.ResourceProperties.Region,a;if(e.RequestType==="Create"||e.RequestType==="Delete")a=e.RequestType;else{let l=await s.describeTable({TableName:t});console.log("Describe table: %j",l),a=l.Table?.Replicas?.some(i=>i.RegionName===o)?void 0:"Create"}if(a){let l=await s.updateTable({TableName:t,ReplicaUpdates:[{[a]:{RegionName:o}}]});console.log("Update table: %j",l)}else console.log("Skipping updating Table, as a replica in '%s' already exists",o);return e.RequestType==="Create"||e.RequestType==="Update"?{PhysicalResourceId:`${t}-${o}`}:{}}async function g(e){console.log("Event: %j",{...e,ResponseURL:"..."});let t=await new c.DynamoDB({}).describeTable({TableName:e.ResourceProperties.TableName});console.log("Describe table: %j",t);let o=t.Table?.TableStatus==="ACTIVE",l=(t.Table?.Replicas??[]).find(r=>r.RegionName===e.ResourceProperties.Region),p=l?.ReplicaStatus==="ACTIVE",i=e.ResourceProperties.SkipReplicationCompletedWait==="true";switch(e.RequestType){case"Create":case"Update":return{IsComplete:o&&(p||i)};case"Delete":return{IsComplete:o&&l===void 0}}}0&&(module.exports={isCompleteHandler,onEventHandler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/asset.b6529896e4495e2737f2221f4a6080bd2c5159352f9e2ed375a5715475f12d7c/index.js b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/asset.b6529896e4495e2737f2221f4a6080bd2c5159352f9e2ed375a5715475f12d7c/index.js new file mode 100644 index 0000000000000..67105f91ddf8f --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/asset.b6529896e4495e2737f2221f4a6080bd2c5159352f9e2ed375a5715475f12d7c/index.js @@ -0,0 +1 @@ +"use strict";var p=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var m=(e,s)=>{for(var t in s)p(e,t,{get:s[t],enumerable:!0})},b=(e,s,t,o)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of u(s))!d.call(e,a)&&a!==t&&p(e,a,{get:()=>s[a],enumerable:!(o=R(s,a))||o.enumerable});return e};var T=e=>b(p({},"__esModule",{value:!0}),e);var y={};m(y,{isCompleteHandler:()=>C,onEventHandler:()=>g});module.exports=T(y);var c=require("@aws-sdk/client-dynamodb");async function g(e){console.log("Event: %j",{...e,ResponseURL:"..."});let s=new c.DynamoDB({}),t=e.ResourceProperties.TableName,o=e.ResourceProperties.Region,a=e.ResourceProperties.SkipDelete,i;if(e.RequestType==="Create"||e.RequestType==="Delete")i=e.RequestType;else{let l=await s.describeTable({TableName:t});console.log("Describe table: %j",l),i=l.Table?.Replicas?.some(n=>n.RegionName===o)?void 0:"Create"}if(i)if(i==="Delete"&&a)console.log("Skipping deleting Table");else{let l=await s.updateTable({TableName:t,ReplicaUpdates:[{[i]:{RegionName:o}}]});console.log("Update table: %j",l)}else console.log("Skipping updating Table, as a replica in '%s' already exists",o);return e.RequestType==="Create"||e.RequestType==="Update"?{PhysicalResourceId:`${t}-${o}`}:{}}async function C(e){console.log("Event: %j",{...e,ResponseURL:"..."});let t=await new c.DynamoDB({}).describeTable({TableName:e.ResourceProperties.TableName});console.log("Describe table: %j",t);let o=t.Table?.TableStatus==="ACTIVE",i=(t.Table?.Replicas??[]).find(n=>n.RegionName===e.ResourceProperties.Region),l=i?.ReplicaStatus==="ACTIVE",r=e.ResourceProperties.SkipReplicationCompletedWait==="true";switch(e.RequestType){case"Create":case"Update":return{IsComplete:o&&(l||r)};case"Delete":return e.ResourceProperties.SkipDelete==="true"?(console.log("Skipping deletion check since SkipDelete is true"),{IsComplete:!0}):{IsComplete:o&&i===void 0}}}0&&(module.exports={isCompleteHandler,onEventHandler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/cdk.out index 91e1a8b9901d5..188478b55560e 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"39.0.0"} \ No newline at end of file +{"version":"41.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/integ.json index 3871617ad3938..02226d173675d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "39.0.0", + "version": "41.0.0", "testCases": { "integ-test-custom-resource-config-lambda-node-runtime/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/integtestcustomresourceconfiglambdanoderuntimeDefaultTestDeployAssertF01B3E2D.assets.json b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/integtestcustomresourceconfiglambdanoderuntimeDefaultTestDeployAssertF01B3E2D.assets.json index 169bcb2bff11c..e51f3441c7f80 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/integtestcustomresourceconfiglambdanoderuntimeDefaultTestDeployAssertF01B3E2D.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/integtestcustomresourceconfiglambdanoderuntimeDefaultTestDeployAssertF01B3E2D.assets.json @@ -1,7 +1,8 @@ { - "version": "39.0.0", + "version": "41.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "displayName": "integtestcustomresourceconfiglambdanoderuntimeDefaultTestDeployAssertF01B3E2D Template", "source": { "path": "integtestcustomresourceconfiglambdanoderuntimeDefaultTestDeployAssertF01B3E2D.template.json", "packaging": "file" diff --git a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/manifest.json index 9c7d1ba56401e..f36223fbc2dde 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "39.0.0", + "version": "42.0.0", "artifacts": { "MyStack.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}/528a6bd64d6a7c1ffb72bcadef55223d302da950e8e4e22a5f6d3a61f1eaa0f3.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/c665070d0e7bfab6b541eb80713fef9072fcfbed0e7ced678b9af6efa64942e8.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -42,6 +42,7 @@ "name": "*", "type": "S" }, + "removalPolicy": "destroy", "replicationRegions": "*" } } @@ -1484,5 +1485,6 @@ "file": "tree.json" } } - } + }, + "minimumCliVersion": "2.1006.0" } \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/tree.json index f11a7f0c1145d..f91c567a197ed 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.js.snapshot/tree.json @@ -1,2909 +1 @@ -{ - "version": "tree-0.1", - "tree": { - "id": "App", - "path": "", - "children": { - "MyStack": { - "id": "MyStack", - "path": "MyStack", - "children": { - "Table": { - "id": "Table", - "path": "MyStack/Table", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/Table/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::DynamoDB::Table", - "aws:cdk:cloudformation:props": { - "attributeDefinitions": [ - { - "attributeName": "id", - "attributeType": "S" - } - ], - "billingMode": "PAY_PER_REQUEST", - "keySchema": [ - { - "attributeName": "id", - "keyType": "HASH" - } - ], - "streamSpecification": { - "streamViewType": "NEW_AND_OLD_IMAGES" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_dynamodb.CfnTable", - "version": "0.0.0" - } - }, - "ScalingRole": { - "id": "ScalingRole", - "path": "MyStack/Table/ScalingRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD5938648": { - "id": "SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD5938648", - "path": "MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD5938648", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD5938648/Resource", - "children": { - "ImportedResource": { - "id": "ImportedResource", - "path": "MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD5938648/Resource/ImportedResource", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [] - } - }, - "Resource": { - "id": "Resource", - "path": "MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD5938648/Resource/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::ManagedPolicy", - "aws:cdk:cloudformation:props": { - "description": { - "Fn::Join": [ - "", - [ - "DynamoDB replication managed policy for table ", - { - "Ref": "TableCD117FA1" - } - ] - ] - }, - "path": "/", - "policyDocument": { - "Statement": [ - { - "Action": "dynamodb:*", - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "TableCD117FA1", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":dynamodb:us-east-2:", - { - "Ref": "AWS::AccountId" - }, - ":table/", - { - "Ref": "TableCD117FA1" - } - ] - ] - }, - { - "Ref": "AWS::NoValue" - } - ] - } - ], - "Version": "2012-10-17" - }, - "roles": [ - { - "Fn::GetAtt": [ - "awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D", - "Outputs.MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole4467C87ARef" - ] - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnManagedPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.ManagedPolicy", - "version": "0.0.0", - "metadata": [ - { - "description": "*", - "roles": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "addStatements": [ - {} - ] - }, - { - "addStatements": [ - {} - ] - } - ] - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B4": { - "id": "SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B4", - "path": "MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B4", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B4/Resource", - "children": { - "ImportedResource": { - "id": "ImportedResource", - "path": "MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B4/Resource/ImportedResource", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [] - } - }, - "Resource": { - "id": "Resource", - "path": "MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B4/Resource/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::ManagedPolicy", - "aws:cdk:cloudformation:props": { - "description": { - "Fn::Join": [ - "", - [ - "DynamoDB replication managed policy for table ", - { - "Ref": "TableCD117FA1" - } - ] - ] - }, - "path": "/", - "policyDocument": { - "Statement": [ - { - "Action": "dynamodb:DescribeTable", - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "TableCD117FA1", - "Arn" - ] - }, - { - "Ref": "AWS::NoValue" - } - ] - } - ], - "Version": "2012-10-17" - }, - "roles": [ - { - "Fn::GetAtt": [ - "awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D", - "Outputs.MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE7639AB2Ref" - ] - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnManagedPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.ManagedPolicy", - "version": "0.0.0", - "metadata": [ - { - "description": "*", - "roles": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "addStatements": [ - {} - ] - } - ] - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "Replicaus-east-2": { - "id": "Replicaus-east-2", - "path": "MyStack/Table/Replicaus-east-2", - "children": { - "Default": { - "id": "Default", - "path": "MyStack/Table/Replicaus-east-2/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "StackRegionNotEqualsus-east-2": { - "id": "StackRegionNotEqualsus-east-2", - "path": "MyStack/Table/StackRegionNotEqualsus-east-2", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnCondition", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_dynamodb.Table", - "version": "0.0.0", - "metadata": [ - { - "partitionKey": { - "name": "*", - "type": "S" - }, - "replicationRegions": "*" - } - ] - } - }, - "@aws-cdk--aws-dynamodb.ReplicaProvider": { - "id": "@aws-cdk--aws-dynamodb.ReplicaProvider", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider", - "children": { - "LatestNodeRuntimeMap": { - "id": "LatestNodeRuntimeMap", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/LatestNodeRuntimeMap", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnMapping", - "version": "0.0.0" - } - }, - "OnEventHandler": { - "id": "OnEventHandler", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/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" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "0.0.0", - "metadata": [ - { - "assumedBy": { - "principalAccount": "*", - "assumeRoleAction": "*" - }, - "managedPolicies": [ - { - "managedPolicyArn": "*" - } - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - } - ] - } - }, - "Code": { - "id": "Code", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/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": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip" - }, - "handler": "index.onEventHandler", - "role": { - "Fn::GetAtt": [ - "OnEventHandlerServiceRole15A26729", - "Arn" - ] - }, - "runtime": { - "Fn::FindInMap": [ - "LatestNodeRuntimeMap", - { - "Ref": "AWS::Region" - }, - "value" - ] - }, - "timeout": 300 - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "0.0.0" - } - }, - "inlinePolicyAddedToExecutionRole-0": { - "id": "inlinePolicyAddedToExecutionRole-0", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-0", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-0/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "iam:CreateServiceLinkedRole", - "Effect": "Allow", - "Resource": { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":iam::", - { - "Ref": "AWS::AccountId" - }, - ":role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication" - ] - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "OnEventHandlerinlinePolicyAddedToExecutionRole05B1C3796", - "roles": [ - { - "Ref": "OnEventHandlerServiceRole15A26729" - } - ] - } - }, - "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": [ - { - "statements": "*" - }, - { - "addStatements": [ - {} - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - } - ] - } - }, - "inlinePolicyAddedToExecutionRole-1": { - "id": "inlinePolicyAddedToExecutionRole-1", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-1", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-1/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "dynamodb:DescribeLimits", - "Effect": "Allow", - "Resource": "*" - } - ], - "Version": "2012-10-17" - }, - "policyName": "OnEventHandlerinlinePolicyAddedToExecutionRole187629D5C", - "roles": [ - { - "Ref": "OnEventHandlerServiceRole15A26729" - } - ] - } - }, - "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": [ - { - "statements": "*" - }, - { - "addStatements": [ - {} - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - } - ] - } - }, - "inlinePolicyAddedToExecutionRole-2": { - "id": "inlinePolicyAddedToExecutionRole-2", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-2", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-2/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": [ - "dynamodb:DeleteTable", - "dynamodb:DeleteTableReplica" - ], - "Effect": "Allow", - "Resource": { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":dynamodb:us-east-2:", - { - "Ref": "AWS::AccountId" - }, - ":table/", - { - "Ref": "referencetoMyStackTableA7B7AF97Ref" - } - ] - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "OnEventHandlerinlinePolicyAddedToExecutionRole28650F749", - "roles": [ - { - "Ref": "OnEventHandlerServiceRole15A26729" - } - ] - } - }, - "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": [ - { - "statements": "*" - }, - { - "addStatements": [ - {} - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - } - ] - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "0.0.0", - "metadata": [ - { - "timeout": "*", - "code": "*", - "handler": "*", - "runtime": "*" - } - ] - } - }, - "IsCompleteHandler": { - "id": "IsCompleteHandler", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/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" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "0.0.0", - "metadata": [ - { - "assumedBy": { - "principalAccount": "*", - "assumeRoleAction": "*" - }, - "managedPolicies": [ - { - "managedPolicyArn": "*" - } - ] - } - ] - } - }, - "Code": { - "id": "Code", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/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": "654051b03fb3684cba885b9015a42237db092a98a4fd2ffc75f07919dde1aca4.zip" - }, - "handler": "index.isCompleteHandler", - "role": { - "Fn::GetAtt": [ - "IsCompleteHandlerServiceRole5810CC58", - "Arn" - ] - }, - "runtime": { - "Fn::FindInMap": [ - "LatestNodeRuntimeMap", - { - "Ref": "AWS::Region" - }, - "value" - ] - }, - "timeout": 30 - } - }, - "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": [ - { - "timeout": "*", - "code": "*", - "handler": "*", - "runtime": "*" - } - ] - } - }, - "Provider": { - "id": "Provider", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider", - "children": { - "framework-onEvent": { - "id": "framework-onEvent", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - ":*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - ":*" - ] - ] - } - ] - }, - { - "Action": "states:StartExecution", - "Effect": "Allow", - "Resource": { - "Ref": "Providerwaiterstatemachine5D4A9DF0" - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkonEventServiceRoleDefaultPolicy48CD2133", - "roles": [ - { - "Ref": "ProviderframeworkonEventServiceRole9FF04296" - } - ] - } - }, - "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": "*" - }, - "managedPolicies": [ - { - "managedPolicyArn": "*" - } - ] - }, - { - "addToPrincipalPolicy": [ - {} - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "addToPrincipalPolicy": [ - {} - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "attachInlinePolicy": [ - "*" - ] - }, - { - "addToPrincipalPolicy": [ - {} - ] - } - ] - } - }, - "Code": { - "id": "Code", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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 (MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)", - "environment": { - "variables": { - "USER_ON_EVENT_FUNCTION_ARN": { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - "USER_IS_COMPLETE_FUNCTION_ARN": { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - "WAITER_STATE_MACHINE_ARN": { - "Ref": "Providerwaiterstatemachine5D4A9DF0" - } - } - }, - "handler": "framework.onEvent", - "role": { - "Fn::GetAtt": [ - "ProviderframeworkonEventServiceRole9FF04296", - "Arn" - ] - }, - "runtime": { - "Fn::FindInMap": [ - "LatestNodeRuntimeMap", - { - "Ref": "AWS::Region" - }, - "value" - ] - }, - "timeout": 900 - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "0.0.0" - } - }, - "inlinePolicyAddedToExecutionRole-0": { - "id": "inlinePolicyAddedToExecutionRole-0", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-0", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-0/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "lambda:GetFunction", - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkonEventinlinePolicyAddedToExecutionRole0D6E83756", - "roles": [ - { - "Ref": "ProviderframeworkonEventServiceRole9FF04296" - } - ] - } - }, - "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": [ - { - "statements": "*" - }, - { - "addStatements": [ - {} - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - } - ] - } - }, - "inlinePolicyAddedToExecutionRole-1": { - "id": "inlinePolicyAddedToExecutionRole-1", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-1", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-1/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "lambda:GetFunction", - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkonEventinlinePolicyAddedToExecutionRole17772106B", - "roles": [ - { - "Ref": "ProviderframeworkonEventServiceRole9FF04296" - } - ] - } - }, - "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": [ - { - "statements": "*" - }, - { - "addStatements": [ - {} - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - } - ] - } - } - }, - "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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - ":*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - ":*" - ] - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkisCompleteServiceRoleDefaultPolicy2E7140AC", - "roles": [ - { - "Ref": "ProviderframeworkisCompleteServiceRoleB1087139" - } - ] - } - }, - "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": [ - {} - ] - } - ] - } - } - }, - "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": [ - "*" - ] - } - ] - } - }, - "Code": { - "id": "Code", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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 (MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)", - "environment": { - "variables": { - "USER_ON_EVENT_FUNCTION_ARN": { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - "USER_IS_COMPLETE_FUNCTION_ARN": { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - } - } - }, - "handler": "framework.isComplete", - "role": { - "Fn::GetAtt": [ - "ProviderframeworkisCompleteServiceRoleB1087139", - "Arn" - ] - }, - "runtime": { - "Fn::FindInMap": [ - "LatestNodeRuntimeMap", - { - "Ref": "AWS::Region" - }, - "value" - ] - }, - "timeout": 900 - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "0.0.0" - } - }, - "inlinePolicyAddedToExecutionRole-0": { - "id": "inlinePolicyAddedToExecutionRole-0", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-0", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-0/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "lambda:GetFunction", - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkisCompleteinlinePolicyAddedToExecutionRole0DA398EFB", - "roles": [ - { - "Ref": "ProviderframeworkisCompleteServiceRoleB1087139" - } - ] - } - }, - "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": [ - { - "statements": "*" - }, - { - "addStatements": [ - {} - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - } - ] - } - }, - "inlinePolicyAddedToExecutionRole-1": { - "id": "inlinePolicyAddedToExecutionRole-1", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-1", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-1/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "lambda:GetFunction", - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkisCompleteinlinePolicyAddedToExecutionRole11B3461A6", - "roles": [ - { - "Ref": "ProviderframeworkisCompleteServiceRoleB1087139" - } - ] - } - }, - "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": [ - { - "statements": "*" - }, - { - "addStatements": [ - {} - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - } - ] - } - } - }, - "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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - }, - ":*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - ":*" - ] - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkonTimeoutServiceRoleDefaultPolicy2688969F", - "roles": [ - { - "Ref": "ProviderframeworkonTimeoutServiceRole28643D26" - } - ] - } - }, - "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": [ - {} - ] - } - ] - } - } - }, - "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": [ - "*" - ] - } - ] - } - }, - "Code": { - "id": "Code", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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 (MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)", - "environment": { - "variables": { - "USER_ON_EVENT_FUNCTION_ARN": { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - }, - "USER_IS_COMPLETE_FUNCTION_ARN": { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - } - } - }, - "handler": "framework.onTimeout", - "role": { - "Fn::GetAtt": [ - "ProviderframeworkonTimeoutServiceRole28643D26", - "Arn" - ] - }, - "runtime": { - "Fn::FindInMap": [ - "LatestNodeRuntimeMap", - { - "Ref": "AWS::Region" - }, - "value" - ] - }, - "timeout": 900 - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "0.0.0" - } - }, - "inlinePolicyAddedToExecutionRole-0": { - "id": "inlinePolicyAddedToExecutionRole-0", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-0", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-0/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "lambda:GetFunction", - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "OnEventHandler42BEBAE0", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole03D28EB24", - "roles": [ - { - "Ref": "ProviderframeworkonTimeoutServiceRole28643D26" - } - ] - } - }, - "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": [ - { - "statements": "*" - }, - { - "addStatements": [ - {} - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - } - ] - } - }, - "inlinePolicyAddedToExecutionRole-1": { - "id": "inlinePolicyAddedToExecutionRole-1", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-1", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-1/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "lambda:GetFunction", - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "IsCompleteHandler7073F4DA", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "ProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole10E895C60", - "roles": [ - { - "Ref": "ProviderframeworkonTimeoutServiceRole28643D26" - } - ] - } - }, - "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": [ - { - "statements": "*" - }, - { - "addStatements": [ - {} - ] - }, - { - "attachToRole": [ - "*" - ] - }, - { - "attachToRole": [ - "*" - ] - } - ] - } - } - }, - "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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine", - "children": { - "Role": { - "id": "Role", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role", - "children": { - "ImportRole": { - "id": "ImportRole", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/ImportRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": [ - "ProviderframeworkisComplete26D7B0CB", - "Arn" - ] - }, - { - "Fn::GetAtt": [ - "ProviderframeworkonTimeout0B47CA38", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "ProviderframeworkisComplete26D7B0CB", - "Arn" - ] - }, - ":*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "ProviderframeworkonTimeout0B47CA38", - "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": "ProviderwaiterstatemachineRoleDefaultPolicyD3C3DA1A", - "roles": [ - { - "Ref": "ProviderwaiterstatemachineRole0C7159F9" - } - ] - } - }, - "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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/LogGroup", - "children": { - "Resource": { - "id": "Resource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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": "ProviderframeworkisComplete26D7B0CB" - }, - "-c8154310c8956b3f257fc6ceea5ccf6dfbff22f535" - ] - ] - }, - "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": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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\":10,\"MaxAttempts\":180,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"", - { - "Fn::GetAtt": [ - "ProviderframeworkisComplete26D7B0CB", - "Arn" - ] - }, - "\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"", - { - "Fn::GetAtt": [ - "ProviderframeworkonTimeout0B47CA38", - "Arn" - ] - }, - "\"}}}" - ] - ] - }, - "loggingConfiguration": { - "destinations": [ - { - "cloudWatchLogsLogGroup": { - "logGroupArn": { - "Fn::GetAtt": [ - "ProviderwaiterstatemachineLogGroupDD693A98", - "Arn" - ] - } - } - } - ], - "includeExecutionData": false, - "level": "ERROR" - }, - "roleArn": { - "Fn::GetAtt": [ - "ProviderwaiterstatemachineRole0C7159F9", - "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" - } - }, - "MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole4467C87ARef": { - "id": "MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole4467C87ARef", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole4467C87ARef", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - }, - "MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE7639AB2Ref": { - "id": "MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE7639AB2Ref", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE7639AB2Ref", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - }, - "MyStackawscdkawsdynamodbReplicaProviderframeworkonEvent53643CD7Arn": { - "id": "MyStackawscdkawsdynamodbReplicaProviderframeworkonEvent53643CD7Arn", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/MyStackawscdkawsdynamodbReplicaProviderframeworkonEvent53643CD7Arn", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - }, - "reference-to-MyStackTableA7B7AF97Ref": { - "id": "reference-to-MyStackTableA7B7AF97Ref", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/reference-to-MyStackTableA7B7AF97Ref", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.NestedStack", - "version": "0.0.0" - } - }, - "@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack": { - "id": "@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack", - "children": { - "@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource": { - "id": "@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource", - "path": "MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::CloudFormation::Stack", - "aws:cdk:cloudformation:props": { - "parameters": { - "referencetoMyStackTableA7B7AF97Ref": { - "Ref": "TableCD117FA1" - } - }, - "templateUrl": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" - }, - "/741c37a0a4ac836be11c1d372930601e701f8990251cf1dc550f0e68409a4310.json" - ] - ] - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CfnStack", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "nonCrLambda": { - "id": "nonCrLambda", - "path": "MyStack/nonCrLambda", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "MyStack/nonCrLambda/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "MyStack/nonCrLambda/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0", - "metadata": [ - "*" - ] - } - }, - "Resource": { - "id": "Resource", - "path": "MyStack/nonCrLambda/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" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "0.0.0", - "metadata": [ - { - "assumedBy": { - "principalAccount": "*", - "assumeRoleAction": "*" - }, - "managedPolicies": [ - { - "managedPolicyArn": "*" - } - ] - } - ] - } - }, - "Resource": { - "id": "Resource", - "path": "MyStack/nonCrLambda/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Lambda::Function", - "aws:cdk:cloudformation:props": { - "code": { - "zipFile": "helloWorld" - }, - "handler": "index.handler", - "role": { - "Fn::GetAtt": [ - "nonCrLambdaServiceRole10AF9D14", - "Arn" - ] - }, - "runtime": "nodejs20.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": "*", - "handler": "*", - "runtime": "*" - } - ] - } - }, - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "MyStack/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "MyStack/CheckBootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnRule", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.Stack", - "version": "0.0.0" - } - }, - "integ-test-custom-resource-config-lambda-node-runtime": { - "id": "integ-test-custom-resource-config-lambda-node-runtime", - "path": "integ-test-custom-resource-config-lambda-node-runtime", - "children": { - "DefaultTest": { - "id": "DefaultTest", - "path": "integ-test-custom-resource-config-lambda-node-runtime/DefaultTest", - "children": { - "Default": { - "id": "Default", - "path": "integ-test-custom-resource-config-lambda-node-runtime/DefaultTest/Default", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "DeployAssert": { - "id": "DeployAssert", - "path": "integ-test-custom-resource-config-lambda-node-runtime/DefaultTest/DeployAssert", - "children": { - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "integ-test-custom-resource-config-lambda-node-runtime/DefaultTest/DeployAssert/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "integ-test-custom-resource-config-lambda-node-runtime/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":"","children":{"MyStack":{"id":"MyStack","path":"MyStack","children":{"Table":{"id":"Table","path":"MyStack/Table","children":{"Resource":{"id":"Resource","path":"MyStack/Table/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::DynamoDB::Table","aws:cdk:cloudformation:props":{"attributeDefinitions":[{"attributeName":"id","attributeType":"S"}],"billingMode":"PAY_PER_REQUEST","keySchema":[{"attributeName":"id","keyType":"HASH"}],"streamSpecification":{"streamViewType":"NEW_AND_OLD_IMAGES"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_dynamodb.CfnTable","version":"0.0.0"}},"ScalingRole":{"id":"ScalingRole","path":"MyStack/Table/ScalingRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD5938648":{"id":"SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD5938648","path":"MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD5938648","children":{"Resource":{"id":"Resource","path":"MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD5938648/Resource","children":{"ImportedResource":{"id":"ImportedResource","path":"MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD5938648/Resource/ImportedResource","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"Resource":{"id":"Resource","path":"MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRoleD5938648/Resource/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::ManagedPolicy","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["DynamoDB replication managed policy for table ",{"Ref":"TableCD117FA1"}]]},"path":"/","policyDocument":{"Statement":[{"Action":"dynamodb:*","Effect":"Allow","Resource":[{"Fn::GetAtt":["TableCD117FA1","Arn"]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":dynamodb:us-east-2:",{"Ref":"AWS::AccountId"},":table/",{"Ref":"TableCD117FA1"}]]},{"Ref":"AWS::NoValue"}]}],"Version":"2012-10-17"},"roles":[{"Fn::GetAtt":["awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D","Outputs.MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole4467C87ARef"]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnManagedPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.ManagedPolicy","version":"0.0.0","metadata":[{"description":"*","roles":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B4":{"id":"SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B4","path":"MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B4","children":{"Resource":{"id":"Resource","path":"MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B4/Resource","children":{"ImportedResource":{"id":"ImportedResource","path":"MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B4/Resource/ImportedResource","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"Resource":{"id":"Resource","path":"MyStack/Table/SourceTableAttachedManagedPolicy-MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole16B7E1B4/Resource/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::ManagedPolicy","aws:cdk:cloudformation:props":{"description":{"Fn::Join":["",["DynamoDB replication managed policy for table ",{"Ref":"TableCD117FA1"}]]},"path":"/","policyDocument":{"Statement":[{"Action":"dynamodb:DescribeTable","Effect":"Allow","Resource":[{"Fn::GetAtt":["TableCD117FA1","Arn"]},{"Ref":"AWS::NoValue"}]}],"Version":"2012-10-17"},"roles":[{"Fn::GetAtt":["awscdkawsdynamodbReplicaProviderNestedStackawscdkawsdynamodbReplicaProviderNestedStackResource18E3F12D","Outputs.MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE7639AB2Ref"]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnManagedPolicy","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.ManagedPolicy","version":"0.0.0","metadata":[{"description":"*","roles":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"Replicaus-east-2":{"id":"Replicaus-east-2","path":"MyStack/Table/Replicaus-east-2","children":{"Default":{"id":"Default","path":"MyStack/Table/Replicaus-east-2/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*"]}},"StackRegionNotEqualsus-east-2":{"id":"StackRegionNotEqualsus-east-2","path":"MyStack/Table/StackRegionNotEqualsus-east-2","constructInfo":{"fqn":"aws-cdk-lib.CfnCondition","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_dynamodb.Table","version":"0.0.0","metadata":[{"partitionKey":{"name":"*","type":"S"},"removalPolicy":"destroy","replicationRegions":"*"}]}},"@aws-cdk--aws-dynamodb.ReplicaProvider":{"id":"@aws-cdk--aws-dynamodb.ReplicaProvider","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider","children":{"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"OnEventHandler":{"id":"OnEventHandler","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]}},"Code":{"id":"Code","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code","children":{"Stage":{"id":"Stage","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/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":"b6529896e4495e2737f2221f4a6080bd2c5159352f9e2ed375a5715475f12d7c.zip"},"handler":"index.onEventHandler","role":{"Fn::GetAtt":["OnEventHandlerServiceRole15A26729","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":300}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-0","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-0/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"iam:CreateServiceLinkedRole","Effect":"Allow","Resource":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::",{"Ref":"AWS::AccountId"},":role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication"]]}}],"Version":"2012-10-17"},"policyName":"OnEventHandlerinlinePolicyAddedToExecutionRole05B1C3796","roles":[{"Ref":"OnEventHandlerServiceRole15A26729"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}},"inlinePolicyAddedToExecutionRole-1":{"id":"inlinePolicyAddedToExecutionRole-1","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-1","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-1/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"dynamodb:DescribeLimits","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"OnEventHandlerinlinePolicyAddedToExecutionRole187629D5C","roles":[{"Ref":"OnEventHandlerServiceRole15A26729"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}},"inlinePolicyAddedToExecutionRole-2":{"id":"inlinePolicyAddedToExecutionRole-2","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-2","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/OnEventHandler/inlinePolicyAddedToExecutionRole-2/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":["dynamodb:DeleteTable","dynamodb:DeleteTableReplica"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":dynamodb:us-east-2:",{"Ref":"AWS::AccountId"},":table/",{"Ref":"referencetoMyStackTableA7B7AF97Ref"}]]}}],"Version":"2012-10-17"},"policyName":"OnEventHandlerinlinePolicyAddedToExecutionRole28650F749","roles":[{"Ref":"OnEventHandlerServiceRole15A26729"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"0.0.0","metadata":[{"timeout":"*","code":"*","handler":"*","runtime":"*"}]}},"IsCompleteHandler":{"id":"IsCompleteHandler","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]}]}},"Code":{"id":"Code","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code","children":{"Stage":{"id":"Stage","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/IsCompleteHandler/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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/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":"b6529896e4495e2737f2221f4a6080bd2c5159352f9e2ed375a5715475f12d7c.zip"},"handler":"index.isCompleteHandler","role":{"Fn::GetAtt":["IsCompleteHandlerServiceRole5810CC58","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":30}},"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":[{"timeout":"*","code":"*","handler":"*","runtime":"*"}]}},"Provider":{"id":"Provider","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider","children":{"framework-onEvent":{"id":"framework-onEvent","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent","children":{"ServiceRole":{"id":"ServiceRole","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},":*"]]}]},{"Action":"states:StartExecution","Effect":"Allow","Resource":{"Ref":"Providerwaiterstatemachine5D4A9DF0"}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonEventServiceRoleDefaultPolicy48CD2133","roles":[{"Ref":"ProviderframeworkonEventServiceRole9FF04296"}]}},"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":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code","children":{"Stage":{"id":"Stage","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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 (MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},"WAITER_STATE_MACHINE_ARN":{"Ref":"Providerwaiterstatemachine5D4A9DF0"}}},"handler":"framework.onEvent","role":{"Fn::GetAtt":["ProviderframeworkonEventServiceRole9FF04296","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-0","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-0/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonEventinlinePolicyAddedToExecutionRole0D6E83756","roles":[{"Ref":"ProviderframeworkonEventServiceRole9FF04296"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}},"inlinePolicyAddedToExecutionRole-1":{"id":"inlinePolicyAddedToExecutionRole-1","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-1","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onEvent/inlinePolicyAddedToExecutionRole-1/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonEventinlinePolicyAddedToExecutionRole17772106B","roles":[{"Ref":"ProviderframeworkonEventServiceRole9FF04296"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete","children":{"ServiceRole":{"id":"ServiceRole","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},":*"]]}]}],"Version":"2012-10-17"},"policyName":"ProviderframeworkisCompleteServiceRoleDefaultPolicy2E7140AC","roles":[{"Ref":"ProviderframeworkisCompleteServiceRoleB1087139"}]}},"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":[{}]}]}}},"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":["*"]}]}},"Code":{"id":"Code","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code","children":{"Stage":{"id":"Stage","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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 (MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}},"handler":"framework.isComplete","role":{"Fn::GetAtt":["ProviderframeworkisCompleteServiceRoleB1087139","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-0","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-0/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkisCompleteinlinePolicyAddedToExecutionRole0DA398EFB","roles":[{"Ref":"ProviderframeworkisCompleteServiceRoleB1087139"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}},"inlinePolicyAddedToExecutionRole-1":{"id":"inlinePolicyAddedToExecutionRole-1","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-1","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-isComplete/inlinePolicyAddedToExecutionRole-1/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkisCompleteinlinePolicyAddedToExecutionRole11B3461A6","roles":[{"Ref":"ProviderframeworkisCompleteServiceRoleB1087139"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout","children":{"ServiceRole":{"id":"ServiceRole","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["IsCompleteHandler7073F4DA","Arn"]},{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},":*"]]}]}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonTimeoutServiceRoleDefaultPolicy2688969F","roles":[{"Ref":"ProviderframeworkonTimeoutServiceRole28643D26"}]}},"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":[{}]}]}}},"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":["*"]}]}},"Code":{"id":"Code","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code","children":{"Stage":{"id":"Stage","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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 (MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]},"USER_IS_COMPLETE_FUNCTION_ARN":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}},"handler":"framework.onTimeout","role":{"Fn::GetAtt":["ProviderframeworkonTimeoutServiceRole28643D26","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"0.0.0"}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-0","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-0/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["OnEventHandler42BEBAE0","Arn"]}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole03D28EB24","roles":[{"Ref":"ProviderframeworkonTimeoutServiceRole28643D26"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}},"inlinePolicyAddedToExecutionRole-1":{"id":"inlinePolicyAddedToExecutionRole-1","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-1","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/framework-onTimeout/inlinePolicyAddedToExecutionRole-1/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["IsCompleteHandler7073F4DA","Arn"]}}],"Version":"2012-10-17"},"policyName":"ProviderframeworkonTimeoutinlinePolicyAddedToExecutionRole10E895C60","roles":[{"Ref":"ProviderframeworkonTimeoutServiceRole28643D26"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine","children":{"Role":{"id":"Role","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role","children":{"ImportRole":{"id":"ImportRole","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/ImportRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/Role/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":["ProviderframeworkisComplete26D7B0CB","Arn"]},{"Fn::GetAtt":["ProviderframeworkonTimeout0B47CA38","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["ProviderframeworkisComplete26D7B0CB","Arn"]},":*"]]},{"Fn::Join":["",[{"Fn::GetAtt":["ProviderframeworkonTimeout0B47CA38","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":"ProviderwaiterstatemachineRoleDefaultPolicyD3C3DA1A","roles":[{"Ref":"ProviderwaiterstatemachineRole0C7159F9"}]}},"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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/waiter-state-machine/LogGroup","children":{"Resource":{"id":"Resource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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":"ProviderframeworkisComplete26D7B0CB"},"-c8154310c8956b3f257fc6ceea5ccf6dfbff22f535"]]},"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":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/Provider/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\":10,\"MaxAttempts\":180,\"BackoffRate\":1}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"framework-onTimeout-task\"}],\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["ProviderframeworkisComplete26D7B0CB","Arn"]},"\"},\"framework-onTimeout-task\":{\"End\":true,\"Type\":\"Task\",\"Resource\":\"",{"Fn::GetAtt":["ProviderframeworkonTimeout0B47CA38","Arn"]},"\"}}}"]]},"loggingConfiguration":{"destinations":[{"cloudWatchLogsLogGroup":{"logGroupArn":{"Fn::GetAtt":["ProviderwaiterstatemachineLogGroupDD693A98","Arn"]}}}],"includeExecutionData":false,"level":"ERROR"},"roleArn":{"Fn::GetAtt":["ProviderwaiterstatemachineRole0C7159F9","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"}},"MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole4467C87ARef":{"id":"MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole4467C87ARef","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/MyStackawscdkawsdynamodbReplicaProviderOnEventHandlerServiceRole4467C87ARef","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE7639AB2Ref":{"id":"MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE7639AB2Ref","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/MyStackawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleE7639AB2Ref","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"MyStackawscdkawsdynamodbReplicaProviderframeworkonEvent53643CD7Arn":{"id":"MyStackawscdkawsdynamodbReplicaProviderframeworkonEvent53643CD7Arn","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/MyStackawscdkawsdynamodbReplicaProviderframeworkonEvent53643CD7Arn","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"reference-to-MyStackTableA7B7AF97Ref":{"id":"reference-to-MyStackTableA7B7AF97Ref","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider/reference-to-MyStackTableA7B7AF97Ref","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.NestedStack","version":"0.0.0"}},"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack":{"id":"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack","children":{"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource":{"id":"@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource","path":"MyStack/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStack/@aws-cdk--aws-dynamodb.ReplicaProvider.NestedStackResource","attributes":{"aws:cdk:cloudformation:type":"AWS::CloudFormation::Stack","aws:cdk:cloudformation:props":{"parameters":{"referencetoMyStackTableA7B7AF97Ref":{"Ref":"TableCD117FA1"}},"templateUrl":{"Fn::Join":["",["https://s3.",{"Ref":"AWS::Region"},".",{"Ref":"AWS::URLSuffix"},"/",{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"/cf86db83666381ec09b6c0934ad94022c4de0c86148014928be2476afb680c14.json"]]}}},"constructInfo":{"fqn":"aws-cdk-lib.CfnStack","version":"0.0.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"nonCrLambda":{"id":"nonCrLambda","path":"MyStack/nonCrLambda","children":{"ServiceRole":{"id":"ServiceRole","path":"MyStack/nonCrLambda/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"MyStack/nonCrLambda/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"MyStack/nonCrLambda/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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]}]}},"Resource":{"id":"Resource","path":"MyStack/nonCrLambda/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"zipFile":"helloWorld"},"handler":"index.handler","role":{"Fn::GetAtt":["nonCrLambdaServiceRole10AF9D14","Arn"]},"runtime":"nodejs20.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":"*","handler":"*","runtime":"*"}]}},"BootstrapVersion":{"id":"BootstrapVersion","path":"MyStack/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"MyStack/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"}},"integ-test-custom-resource-config-lambda-node-runtime":{"id":"integ-test-custom-resource-config-lambda-node-runtime","path":"integ-test-custom-resource-config-lambda-node-runtime","children":{"DefaultTest":{"id":"DefaultTest","path":"integ-test-custom-resource-config-lambda-node-runtime/DefaultTest","children":{"Default":{"id":"Default","path":"integ-test-custom-resource-config-lambda-node-runtime/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"integ-test-custom-resource-config-lambda-node-runtime/DefaultTest/DeployAssert","children":{"BootstrapVersion":{"id":"BootstrapVersion","path":"integ-test-custom-resource-config-lambda-node-runtime/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"integ-test-custom-resource-config-lambda-node-runtime/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 diff --git a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.ts b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.ts index 3f5c3c332e2da..976fd1f67c4df 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.ts @@ -12,6 +12,7 @@ new dynamodb.Table(stack, 'Table', { name: 'id', type: dynamodb.AttributeType.STRING, }, + removalPolicy: cdk.RemovalPolicy.DESTROY, replicationRegions: [ 'us-east-2', ], diff --git a/packages/@aws-cdk/custom-resource-handlers/lib/aws-dynamodb/replica-handler/index.ts b/packages/@aws-cdk/custom-resource-handlers/lib/aws-dynamodb/replica-handler/index.ts index e1c4241edb7e1..9b00f02b68447 100644 --- a/packages/@aws-cdk/custom-resource-handlers/lib/aws-dynamodb/replica-handler/index.ts +++ b/packages/@aws-cdk/custom-resource-handlers/lib/aws-dynamodb/replica-handler/index.ts @@ -10,6 +10,7 @@ export async function onEventHandler(event: OnEventRequest): Promise 0) { - this.createReplicaTables(props.replicationRegions, props.replicationTimeout, props.waitForReplicationToFinish); + this.createReplicaTables(props.replicationRegions, props.replicationTimeout, props.waitForReplicationToFinish, props.replicaRemovalPolicy); } this.node.addValidation({ validate: () => this.validateTable() }); @@ -1659,7 +1667,7 @@ export class Table extends TableBase { * * @param regions regions where to create tables */ - private createReplicaTables(regions: string[], timeout?: Duration, waitForReplicationToFinish?: boolean) { + private createReplicaTables(regions: string[], timeout?: Duration, waitForReplicationToFinish?: boolean, replicaRemovalPolicy?: RemovalPolicy) { const stack = Stack.of(this); if (!Token.isUnresolved(stack.region) && regions.includes(stack.region)) { @@ -1680,6 +1688,18 @@ export class Table extends TableBase { let previousRegion: CustomResource | undefined; let previousRegionCondition: CfnCondition | undefined; + + // Replica table's removal policy will default to DynamoDB Table's removal policy + // unless replica removal policy is specified. + const skipReplicaDeletion = Lazy.any({ + produce: () => { + if (replicaRemovalPolicy) { + return replicaRemovalPolicy == RemovalPolicy.RETAIN; + } + return (this.node.defaultChild as CfnResource).cfnOptions.deletionPolicy === CfnDeletionPolicy.RETAIN; + }, + }); + for (const region of new Set(regions)) { // Remove duplicates // Use multiple custom resources because multiple create/delete // updates cannot be combined in a single API call. @@ -1689,6 +1709,7 @@ export class Table extends TableBase { properties: { TableName: this.tableName, Region: region, + SkipReplicaDeletion: skipReplicaDeletion, SkipReplicationCompletedWait: waitForReplicationToFinish == null ? undefined // CFN changes Custom Resource properties to strings anyways, diff --git a/packages/aws-cdk-lib/aws-dynamodb/test/dynamodb.test.ts b/packages/aws-cdk-lib/aws-dynamodb/test/dynamodb.test.ts index 3097a70bcf6ed..d76d828d5efb8 100644 --- a/packages/aws-cdk-lib/aws-dynamodb/test/dynamodb.test.ts +++ b/packages/aws-cdk-lib/aws-dynamodb/test/dynamodb.test.ts @@ -445,6 +445,77 @@ testDeprecated('when specifying every property', () => { ); }); +test('when replica removal policy is not specified', () => { + const stack = new Stack(); + new Table(stack, CONSTRUCT_NAME, { + tableName: TABLE_NAME, + partitionKey: TABLE_PARTITION_KEY, + removalPolicy: RemovalPolicy.RETAIN, + replicationRegions: ['eu-west-2', 'eu-west-3'], + }); + + Template.fromStack(stack).hasResourceProperties('Custom::DynamoDBReplica', { + 'SkipReplicaDeletion': true, + }); +}); + +test('when replica removal policy is not specified', () => { + const stack = new Stack(); + const table = new Table(stack, CONSTRUCT_NAME, { + tableName: TABLE_NAME, + partitionKey: TABLE_PARTITION_KEY, + replicationRegions: ['eu-west-2', 'eu-west-3'], + }); + table.applyRemovalPolicy(RemovalPolicy.DESTROY); + + Template.fromStack(stack).hasResourceProperties('Custom::DynamoDBReplica', { + 'SkipReplicaDeletion': false, + }); +}); + +test('when replica and table removal policy is not specified', () => { + const stack = new Stack(); + const table = new Table(stack, CONSTRUCT_NAME, { + tableName: TABLE_NAME, + partitionKey: TABLE_PARTITION_KEY, + replicationRegions: ['eu-west-2', 'eu-west-3'], + }); + + Template.fromStack(stack).hasResourceProperties('Custom::DynamoDBReplica', { + 'SkipReplicaDeletion': true, + }); +}); + +test('when replica and table removal policy is not specified', () => { + const stack = new Stack(); + const table = new Table(stack, CONSTRUCT_NAME, { + tableName: TABLE_NAME, + partitionKey: TABLE_PARTITION_KEY, + removalPolicy: RemovalPolicy.DESTROY, + replicaRemovalPolicy: RemovalPolicy.RETAIN, + replicationRegions: ['eu-west-2', 'eu-west-3'], + }); + + Template.fromStack(stack).hasResourceProperties('Custom::DynamoDBReplica', { + 'SkipReplicaDeletion': true, + }); +}); + +test('when replica and table removal policy is not specified', () => { + const stack = new Stack(); + const table = new Table(stack, CONSTRUCT_NAME, { + tableName: TABLE_NAME, + partitionKey: TABLE_PARTITION_KEY, + removalPolicy: RemovalPolicy.RETAIN, + replicaRemovalPolicy: RemovalPolicy.DESTROY, + replicationRegions: ['eu-west-2', 'eu-west-3'], + }); + + Template.fromStack(stack).hasResourceProperties('Custom::DynamoDBReplica', { + 'SkipReplicaDeletion': false, + }); +}); + test('when specifying sse with customer managed CMK', () => { const stack = new Stack(); const table = new Table(stack, CONSTRUCT_NAME, { From 2ebac0ae4f471f6a809b4fe82d7ae1c3a769fd0f Mon Sep 17 00:00:00 2001 From: Xia Zhao <78883180+xazhao@users.noreply.github.com> Date: Fri, 28 Mar 2025 15:22:10 -0700 Subject: [PATCH 05/10] chore(enum-updater): fix github workflow and add exclude list (#33957) ### Reason for this change The current enum updater workflow is broken. The PR is to fix that and add some other improvements. ### Description of changes - Fix enum updater workflow - add exclusion list so some enum values can be excluded from generation of the tool - bug fix ### Description of how you validated changes ### Checklist - [ ] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .github/workflows/enum-auto-updater.yml | 18 +++++++---- .../enum-updater/lib/exclude-values.json | 14 +++++++++ .../enum-updater/lib/missing-enum-updater.ts | 6 ++-- .../lib/static-enum-mapping-updater.ts | 30 +++++++++++++++++-- 4 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 tools/@aws-cdk/enum-updater/lib/exclude-values.json diff --git a/.github/workflows/enum-auto-updater.yml b/.github/workflows/enum-auto-updater.yml index 5f85b920b205f..0eb1272518af7 100644 --- a/.github/workflows/enum-auto-updater.yml +++ b/.github/workflows/enum-auto-updater.yml @@ -21,7 +21,7 @@ jobs: NODE_OPTIONS: "--max-old-space-size=8196 --experimental-worker ${NODE_OPTIONS:-}" - name: Install dependencies - run: yarn install --frozen-lockfile && cd tools/@aws-cdk/enum-updater && yarn build + run: cd tools/@aws-cdk/enum-updater && yarn install --frozen-lockfile && yarn build - name: Identify Missing Values and Apply Code Changes run: | @@ -46,6 +46,16 @@ jobs: # Iterate through each module directory that has changes for module in $(git diff --name-only | grep -E '^packages/(@aws-cdk|aws-cdk-lib)/.*' | sed -E 's|^packages/(@aws-cdk\|aws-cdk-lib)/([^/]+).*|\2|' | sort -u); do moduleName=$(basename $module) + + # Determine the correct path for the module + if [[ -d "packages/aws-cdk-lib/$module" ]]; then + modulePath="packages/aws-cdk-lib/$module" + elif [[ -d "packages/@aws-cdk/$module" ]]; then + modulePath="packages/@aws-cdk/$module" + else + echo "Cannot find module directory for $module" + continue + fi # Check for existing PR with the same name prExists=$(gh pr list --state open --search "feat(${moduleName#aws-}): add new enum values for ${moduleName#aws-}" --json number,title -q '.[].number') @@ -61,7 +71,7 @@ jobs: git checkout -b "$branchName" # Stage, commit, and push changes for the module - git add "packages/$module" # Add only changes for this module + git add "$modulePath" # Using the correct path git commit -m "chore(${moduleName#aws-}): add new enum values for ${moduleName#aws-}" git push origin "$branchName" @@ -70,9 +80,7 @@ jobs: --body "This PR updates the enum values for ${moduleName#aws-}." \ --base main \ --head "$branchName" - --label "contribution/core,pr-linter/exempt-integ-test,pr-linter/exempt-readme,pr-linter/exempt-test" \ - --reviewer "aws-cdk-team" \ + --label "contribution/core,pr-linter/exempt-integ-test,pr-linter/exempt-readme,pr-linter/exempt-test" done - env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/tools/@aws-cdk/enum-updater/lib/exclude-values.json b/tools/@aws-cdk/enum-updater/lib/exclude-values.json new file mode 100644 index 0000000000000..20e43bc63cbdd --- /dev/null +++ b/tools/@aws-cdk/enum-updater/lib/exclude-values.json @@ -0,0 +1,14 @@ +{ + "codebuild": { + "ComputeType": ["BUILD_LAMBDA_10GB"] + }, + "eks": { + "AmiType": ["CUSTOM"] + }, + "lambda": { + "UpdateRuntimeOn": ["Manual"] + }, + "autoscaling": { + "VolumeType": ["io2"] + } +} \ No newline at end of file diff --git a/tools/@aws-cdk/enum-updater/lib/missing-enum-updater.ts b/tools/@aws-cdk/enum-updater/lib/missing-enum-updater.ts index b9e59f889cd4e..91dcf970d1325 100644 --- a/tools/@aws-cdk/enum-updater/lib/missing-enum-updater.ts +++ b/tools/@aws-cdk/enum-updater/lib/missing-enum-updater.ts @@ -311,10 +311,12 @@ export class MissingEnumsUpdater { let textToInsert = hasDoubleLineBreaks ? '\n' : ''; newEnumValues.forEach((enumVal: string, index: number) => { - const enumConstantName = enumVal.toUpperCase().replace(/[^A-Z0-9]+/g, '_').replace(/_+$/, ''); + // Make sure enumValue is a string + const enumValue = enumVal.toString(); + const enumConstantName = enumValue.toUpperCase().replace(/[^A-Z0-9]+/g, '_').replace(/_+$/, ''); textToInsert += ` /**\n * PLACEHOLDER_COMMENT_TO_BE_FILLED_OUT\n */\n`; - textToInsert += ` ${enumConstantName} = '${enumVal}'`; + textToInsert += ` ${enumConstantName} = '${enumValue}'`; // Add a comma and appropriate newlines after each member textToInsert += ','; diff --git a/tools/@aws-cdk/enum-updater/lib/static-enum-mapping-updater.ts b/tools/@aws-cdk/enum-updater/lib/static-enum-mapping-updater.ts index a2bb6bb6afcbd..323251f14136a 100644 --- a/tools/@aws-cdk/enum-updater/lib/static-enum-mapping-updater.ts +++ b/tools/@aws-cdk/enum-updater/lib/static-enum-mapping-updater.ts @@ -30,13 +30,33 @@ export interface SdkEnums { } -function extractEnums(schema: Record, enums: { [enumName: string]: (string | number)[] }) { +function extractEnums(schema: Record, enums: { [enumName: string]: (string | number)[] }, excludeDict: Record) { // Helper function to process a property and its potential enum values function processProperty(propertyName: string, property: any) { if (property.enum) { + if (propertyName in excludeDict) { + const excludeList = excludeDict[propertyName] as string[]; + if (excludeList && excludeList.length > 0) { + // if property.enum include a value in excludeList, ignore the value + const filteredEnum = property.enum.filter((value: string) => !excludeList.includes(value)); + enums[propertyName] = filteredEnum; + } + } + else { enums[propertyName] = property.enum; + } } else if (property.items?.enum) { - enums[propertyName] = property.items.enum; + if (propertyName in excludeDict) { + const excludeList = excludeDict[propertyName] as string[]; + if (excludeList) { + // if property.enum include a value in excludeList, ignore the value + const filteredEnum = property.item.enum.filter((value: string) => !excludeList.includes(value)); + enums[propertyName] = filteredEnum; + } + } + else { + enums[propertyName] = property.enum; + } } // Process nested properties @@ -213,6 +233,8 @@ export async function parseAwsSdkEnums(sdkModelsPath: string): Promise { try { const jsonFiles = getJsonFiles(sdkModelsPath); + const excludeEnums = readJsonFile(path.join(__dirname, 'exclude-values.json')); + for (const file of jsonFiles) { try { if (file == 'module.json') { @@ -224,8 +246,10 @@ export async function parseAwsSdkEnums(sdkModelsPath: string): Promise { const enumMap = sdkEnums[service] ?? {}; + const excludeList = excludeEnums[service] ?? []; + // Extract enums - extractEnums(jsonData, enumMap); + extractEnums(jsonData, enumMap, excludeList); sdkEnums[service] = enumMap; } catch (error) { From 85fc87f0773ca1e68b395dcc5aae6103b239c38d Mon Sep 17 00:00:00 2001 From: Rico Hermans Date: Sat, 29 Mar 2025 00:22:18 +0100 Subject: [PATCH 06/10] fix(core): asset names for nested stacks contain Tokens (#33966) Since Nested Stack names are Tokens (resolving to `{ Ref: 'AWS::StackName' }`), if we use `this.stackName` as the asset name just like we do for regular stacks, we end up with Tokens in the display name of the nested stack template asset. This is pointless because the token will not be resolved and look like `${Token[TOKEN.639]}`; plus, it breaks tests because the Token numbers are different on every run. In CDK Pipelines, it would also lead to the pipeline restarting on every pipeline run. Instead, test for and reject Tokens, and use the nested stack's construct path instead just like we do for other assets. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/aws-cdk-lib/core/lib/nested-stack.ts | 3 +- .../asset-manifest-builder.ts | 9 ++++++ .../stack-synthesis/all-synthesizers.test.ts | 28 ++++++++++++++++++- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/packages/aws-cdk-lib/core/lib/nested-stack.ts b/packages/aws-cdk-lib/core/lib/nested-stack.ts index 6b0e4cd8ef70a..6dcf165fd5162 100644 --- a/packages/aws-cdk-lib/core/lib/nested-stack.ts +++ b/packages/aws-cdk-lib/core/lib/nested-stack.ts @@ -226,7 +226,8 @@ export class NestedStack extends Stack { packaging: FileAssetPackaging.FILE, sourceHash: templateHash, fileName: this.templateFile, - displayName: `${this.stackName} Template`, + // this.stackName is a Token for nested stacks, so use something else + displayName: `${Names.stackRelativeConstructPath(this)} Nested Stack Template`, }); this.addResourceMetadata(this.resource, 'TemplateURL'); diff --git a/packages/aws-cdk-lib/core/lib/stack-synthesizers/asset-manifest-builder.ts b/packages/aws-cdk-lib/core/lib/stack-synthesizers/asset-manifest-builder.ts index 533f044f29d8b..bb4ad3fc2dc1d 100644 --- a/packages/aws-cdk-lib/core/lib/stack-synthesizers/asset-manifest-builder.ts +++ b/packages/aws-cdk-lib/core/lib/stack-synthesizers/asset-manifest-builder.ts @@ -5,6 +5,7 @@ import * as cxschema from '../../../cloud-assembly-schema'; import { FileAssetSource, FileAssetPackaging, DockerImageAssetSource } from '../assets'; import { resolvedOr } from '../helpers-internal/string-specializer'; import { Stack } from '../stack'; +import { Token } from '../token'; /** * Build an asset manifest from assets added to a stack @@ -289,6 +290,10 @@ function validateFileAssetSource(asset: FileAssetSource) { if (!!asset.packaging !== !!asset.fileName) { throw new Error(`'packaging' is expected in combination with 'fileName', got: ${JSON.stringify(asset)}`); } + + if (Token.isUnresolved(asset.displayName)) { + throw new Error(`'displayName' may not contain a Token, got: ${JSON.stringify(asset.displayName)}`); + } } function validateDockerImageAssetSource(asset: DockerImageAssetSource) { @@ -296,6 +301,10 @@ function validateDockerImageAssetSource(asset: DockerImageAssetSource) { throw new Error(`Exactly one of 'directoryName' or 'executable' is required, got: ${JSON.stringify(asset)}`); } + if (Token.isUnresolved(asset.displayName)) { + throw new Error(`'displayName' may not contain a Token, got: ${JSON.stringify(asset.displayName)}`); + } + check('dockerBuildArgs'); check('dockerBuildTarget'); check('dockerOutputs'); diff --git a/packages/aws-cdk-lib/core/test/stack-synthesis/all-synthesizers.test.ts b/packages/aws-cdk-lib/core/test/stack-synthesis/all-synthesizers.test.ts index 8562809688457..9eaa8181f4fc9 100644 --- a/packages/aws-cdk-lib/core/test/stack-synthesis/all-synthesizers.test.ts +++ b/packages/aws-cdk-lib/core/test/stack-synthesis/all-synthesizers.test.ts @@ -1,6 +1,6 @@ import { FileAssetPackaging } from '@aws-cdk/cloud-assembly-schema'; import { getAssetManifest, readAssetManifest } from './_helpers'; -import { CliCredentialsStackSynthesizer, LegacyStackSynthesizer } from '../../lib'; +import { Aws, CliCredentialsStackSynthesizer, LegacyStackSynthesizer } from '../../lib'; import { App } from '../../lib/app'; import { Stack } from '../../lib/stack'; import { DefaultStackSynthesizer } from '../../lib/stack-synthesizers/default-synthesizer'; @@ -45,3 +45,29 @@ test.each([ }); }); +test.each([ + ['DefaultStackSynthesizer', () => new DefaultStackSynthesizer()], + ['CliCredentialsStackSynthesizer', () => new CliCredentialsStackSynthesizer()], +])('%p: displayName may not contain tokens', (_name, factory) => { + // GIVEN + const app = new App(); + const stack = new Stack(app, 'Stack', { + synthesizer: factory(), + env: { + account: '111111111111', region: 'us-east-1', + }, + }); + + expect(() => stack.synthesizer.addFileAsset({ + fileName: __filename, + packaging: FileAssetPackaging.FILE, + sourceHash: 'fileHash', + displayName: Aws.STACK_NAME, + })).toThrow(/may not contain a Token/); + + expect(() => stack.synthesizer.addDockerImageAsset({ + directoryName: '.', + sourceHash: 'dockerHash', + displayName: Aws.STACK_NAME, + })).toThrow(/may not contain a Token/); +}); From 2a8a8a36ed872f7f3de4b24fd7d9c874a3da9dbf Mon Sep 17 00:00:00 2001 From: Xia Zhao <78883180+xazhao@users.noreply.github.com> Date: Fri, 28 Mar 2025 16:53:45 -0700 Subject: [PATCH 07/10] feat(iot): backfill enum values in iot module (#33969) ### Description of changes feat(iot): backfill enum values in iot module CFN Doc: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-scheduledaudit.html#cfn-iot-scheduledaudit-dayofweek ### Checklist - [ ] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- packages/@aws-cdk/aws-iot-alpha/lib/scheduled-audit.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/@aws-cdk/aws-iot-alpha/lib/scheduled-audit.ts b/packages/@aws-cdk/aws-iot-alpha/lib/scheduled-audit.ts index 14cde5b10befe..94cf2dddff4be 100644 --- a/packages/@aws-cdk/aws-iot-alpha/lib/scheduled-audit.ts +++ b/packages/@aws-cdk/aws-iot-alpha/lib/scheduled-audit.ts @@ -165,6 +165,11 @@ export enum DayOfWeek { * Saturday */ SATURDAY = 'SAT', + + /** + * UNSET_VALUE + */ + UNSET_VALUE = 'UNSET_VALUE', } /** From a67c3f5a24b2ec7b2dbd0e5244841642f9d41b5f Mon Sep 17 00:00:00 2001 From: GZ Date: Fri, 28 Mar 2025 17:23:37 -0700 Subject: [PATCH 08/10] chore: retain replica table (under feature flag) (#33970) Follow up to this PR to add feature flag https://github.com/aws/aws-cdk/pull/33953 --- ...db-global-replicas-provisioned.assets.json | 6 +- ...-global-replicas-provisioned.template.json | 6 +- .../manifest.json | 2 +- .../test/integ.global-replicas-provisioned.ts | 1 + .../cdk-dynamodb-global-20191121.assets.json | 6 +- ...cdk-dynamodb-global-20191121.template.json | 6 +- .../integ.global.js.snapshot/manifest.json | 2 +- .../test/aws-dynamodb/test/integ.global.ts | 1 + .../test/integ.table-skip-replica-deletion.ts | 6 +- ...tom-resource-config-lambda-node-runtime.ts | 6 +- .../aws-cdk-lib/aws-dynamodb/lib/table.ts | 13 ++- .../aws-dynamodb/test/dynamodb.test.ts | 100 ++++++++++++++++-- packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md | 18 +++- packages/aws-cdk-lib/cx-api/README.md | 15 +++ packages/aws-cdk-lib/cx-api/lib/features.ts | 13 +++ .../recommended-feature-flags.json | 3 +- 16 files changed, 171 insertions(+), 33 deletions(-) diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.assets.json index 07cb530a77ec7..63db488ca3f8d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.assets.json @@ -30,7 +30,7 @@ } }, "db84cdae632e6cba2f8e4a431d3f3a350218ac90c39e5eb62fff4a6737994230": { - "displayName": "${Token[TOKEN.1182]} Template", + "displayName": "${Token[TOKEN.32]} Template", "source": { "path": "awscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderEA32CB30.nested.template.json", "packaging": "file" @@ -43,7 +43,7 @@ } } }, - "cfc11c7527b6f90290938776ea39cb193c7daa9b2ea93c71dee7825b89eef119": { + "fc354b7aca04956a0e97ee933af330dba13abbe6a84db5dc2b465adaf5f914b9": { "displayName": "aws-cdk-dynamodb-global-replicas-provisioned Template", "source": { "path": "aws-cdk-dynamodb-global-replicas-provisioned.template.json", @@ -52,7 +52,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "cfc11c7527b6f90290938776ea39cb193c7daa9b2ea93c71dee7825b89eef119.json", + "objectKey": "fc354b7aca04956a0e97ee933af330dba13abbe6a84db5dc2b465adaf5f914b9.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-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.template.json index 1cdacb69bd472..51b22b22dc811 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/aws-cdk-dynamodb-global-replicas-provisioned.template.json @@ -166,8 +166,7 @@ "TableName": { "Ref": "TableCD117FA1" }, - "Region": "us-east-2", - "SkipReplicaDeletion": false + "Region": "us-east-2" }, "DependsOn": [ "TableSourceTableAttachedManagedPolicyawscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A5DC546D2", @@ -191,8 +190,7 @@ "TableName": { "Ref": "TableCD117FA1" }, - "Region": "eu-west-3", - "SkipReplicaDeletion": false + "Region": "eu-west-3" }, "DependsOn": [ "TableSourceTableAttachedManagedPolicyawscdkdynamodbglobalreplicasprovisionedawscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRoleBE2B1C1A5DC546D2", diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/manifest.json index b2996b8393888..c8dc6f8eefac1 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.js.snapshot/manifest.json @@ -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}/cfc11c7527b6f90290938776ea39cb193c7daa9b2ea93c71dee7825b89eef119.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/fc354b7aca04956a0e97ee933af330dba13abbe6a84db5dc2b465adaf5f914b9.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.ts index 753d97c8f06e0..3c341435f2937 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global-replicas-provisioned.ts @@ -6,6 +6,7 @@ import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; const app = new cdk.App({ postCliContext: { '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false, + '@aws-cdk/aws-dynamodb:retainTableReplica': false, }, }); const stack = new cdk.Stack(app, 'aws-cdk-dynamodb-global-replicas-provisioned'); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.assets.json index 378146b59a98f..960d1a9d32baf 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.assets.json @@ -32,7 +32,7 @@ } }, "99ce8e16a78e3c9de5980fd298e7e5eb3b4b63768f61485a4f30c32a9ac3602e": { - "displayName": "${Token[TOKEN.1177]} Template", + "displayName": "${Token[TOKEN.36]} Template", "source": { "path": "cdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderB281C954.nested.template.json", "packaging": "file" @@ -46,7 +46,7 @@ } } }, - "7acfdbcbfc0c557c3d9dd98954b1f4858970622247739a50a3e665534d3f0784": { + "738f7845d939e4e6a4e898a60452a5cebce11aa4fb22dc1f77cdf8a765e81da9": { "displayName": "cdk-dynamodb-global-20191121 Template", "source": { "path": "cdk-dynamodb-global-20191121.template.json", @@ -55,7 +55,7 @@ "destinations": { "current_account-eu-west-1": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1", - "objectKey": "7acfdbcbfc0c557c3d9dd98954b1f4858970622247739a50a3e665534d3f0784.json", + "objectKey": "738f7845d939e4e6a4e898a60452a5cebce11aa4fb22dc1f77cdf8a765e81da9.json", "region": "eu-west-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-eu-west-1" } diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.template.json index 8096eec57f917..1f84d28a0bcc3 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/cdk-dynamodb-global-20191121.template.json @@ -195,8 +195,7 @@ "TableName": { "Ref": "TableCD117FA1" }, - "Region": "eu-west-2", - "SkipReplicaDeletion": false + "Region": "eu-west-2" }, "DependsOn": [ "TableSourceTableAttachedManagedPolicycdkdynamodbglobal20191121awscdkawsdynamodbReplicaProviderIsCompleteHandlerServiceRole3971612857304880", @@ -217,8 +216,7 @@ "TableName": { "Ref": "TableCD117FA1" }, - "Region": "eu-central-1", - "SkipReplicaDeletion": false + "Region": "eu-central-1" }, "DependsOn": [ "TableReplicaeuwest290D3CD3A", diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/manifest.json index c76deab197151..7b1eaa99c02f2 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.js.snapshot/manifest.json @@ -18,7 +18,7 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-eu-west-1", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-eu-west-1", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1/7acfdbcbfc0c557c3d9dd98954b1f4858970622247739a50a3e665534d3f0784.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-eu-west-1/738f7845d939e4e6a4e898a60452a5cebce11aa4fb22dc1f77cdf8a765e81da9.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.ts index da0ebb9832dcd..938fb6924d414 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.global.ts @@ -34,6 +34,7 @@ class TestStack extends Stack { const app = new App({ postCliContext: { '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false, + '@aws-cdk/aws-dynamodb:retainTableReplica': false, }, }); const stack = new TestStack(app, 'cdk-dynamodb-global-20191121', { env: { region: 'eu-west-1' } }); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.ts index 8e0e5fd63a628..742a4cb24d0fe 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-skip-replica-deletion.ts @@ -24,7 +24,11 @@ class TestStack extends Stack { } } -const app = new App(); +const app = new App({ + postCliContext: { + '@aws-cdk/aws-dynamodb:retainTableReplica': true, + }, +}); const stack = new TestStack(app, 'cdk-dynamodb-skip-replica-deletion'); new IntegTest( diff --git a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.ts b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.ts index 976fd1f67c4df..fc8ef0a8c7ee3 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/custom-resources/test/custom-resource-config/integ.custom-resource-config-lambda-node-runtime.ts @@ -4,7 +4,11 @@ import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; import * as lambda from 'aws-cdk-lib/aws-lambda'; import { CustomResourceConfig } from 'aws-cdk-lib/custom-resources'; -const app = new cdk.App(); +const app = new cdk.App({ + postCliContext: { + '@aws-cdk/aws-dynamodb:retainTableReplica': true, + }, +}); const stack = new cdk.Stack(app, 'MyStack'); new dynamodb.Table(stack, 'Table', { diff --git a/packages/aws-cdk-lib/aws-dynamodb/lib/table.ts b/packages/aws-cdk-lib/aws-dynamodb/lib/table.ts index c8d91cc48327d..1fec1f8d25b56 100644 --- a/packages/aws-cdk-lib/aws-dynamodb/lib/table.ts +++ b/packages/aws-cdk-lib/aws-dynamodb/lib/table.ts @@ -21,9 +21,11 @@ import { Aws, CfnCondition, CfnCustomResource, CfnResource, Duration, Fn, Lazy, Names, RemovalPolicy, Stack, Token, CustomResource, CfnDeletionPolicy, + FeatureFlags, } from '../../core'; import { UnscopedValidationError, ValidationError } from '../../core/lib/errors'; import { addConstructMetadata, MethodMetadata } from '../../core/lib/metadata-resource'; +import { DYNAMODB_TABLE_RETAIN_TABLE_REPLICA } from '../../cx-api'; const HASH_KEY_TYPE = 'HASH'; const RANGE_KEY_TYPE = 'RANGE'; @@ -1691,14 +1693,19 @@ export class Table extends TableBase { // Replica table's removal policy will default to DynamoDB Table's removal policy // unless replica removal policy is specified. - const skipReplicaDeletion = Lazy.any({ + const retainReplica = FeatureFlags.of(this).isEnabled(DYNAMODB_TABLE_RETAIN_TABLE_REPLICA); + + // If feature flag is disabled, never retain replica to maintain backward compatibility + const skipReplicaDeletion = retainReplica ? Lazy.any({ produce: () => { + // If feature flag is enabled, prioritize replica removal policy if (replicaRemovalPolicy) { return replicaRemovalPolicy == RemovalPolicy.RETAIN; } + // Otherwise fall back to source table's removal policy return (this.node.defaultChild as CfnResource).cfnOptions.deletionPolicy === CfnDeletionPolicy.RETAIN; }, - }); + }) : false; for (const region of new Set(regions)) { // Remove duplicates // Use multiple custom resources because multiple create/delete @@ -1709,7 +1716,7 @@ export class Table extends TableBase { properties: { TableName: this.tableName, Region: region, - SkipReplicaDeletion: skipReplicaDeletion, + ...skipReplicaDeletion && { SkipReplicaDeletion: skipReplicaDeletion }, SkipReplicationCompletedWait: waitForReplicationToFinish == null ? undefined // CFN changes Custom Resource properties to strings anyways, diff --git a/packages/aws-cdk-lib/aws-dynamodb/test/dynamodb.test.ts b/packages/aws-cdk-lib/aws-dynamodb/test/dynamodb.test.ts index d76d828d5efb8..e097c1b1e5514 100644 --- a/packages/aws-cdk-lib/aws-dynamodb/test/dynamodb.test.ts +++ b/packages/aws-cdk-lib/aws-dynamodb/test/dynamodb.test.ts @@ -446,7 +446,12 @@ testDeprecated('when specifying every property', () => { }); test('when replica removal policy is not specified', () => { - const stack = new Stack(); + const app = new App({ + context: { + [cxapi.DYNAMODB_TABLE_RETAIN_TABLE_REPLICA]: true, + }, + }); + const stack = new Stack(app); new Table(stack, CONSTRUCT_NAME, { tableName: TABLE_NAME, partitionKey: TABLE_PARTITION_KEY, @@ -460,7 +465,12 @@ test('when replica removal policy is not specified', () => { }); test('when replica removal policy is not specified', () => { - const stack = new Stack(); + const app = new App({ + context: { + [cxapi.DYNAMODB_TABLE_RETAIN_TABLE_REPLICA]: true, + }, + }); + const stack = new Stack(app); const table = new Table(stack, CONSTRUCT_NAME, { tableName: TABLE_NAME, partitionKey: TABLE_PARTITION_KEY, @@ -474,8 +484,13 @@ test('when replica removal policy is not specified', () => { }); test('when replica and table removal policy is not specified', () => { - const stack = new Stack(); - const table = new Table(stack, CONSTRUCT_NAME, { + const app = new App({ + context: { + [cxapi.DYNAMODB_TABLE_RETAIN_TABLE_REPLICA]: true, + }, + }); + const stack = new Stack(app); + new Table(stack, CONSTRUCT_NAME, { tableName: TABLE_NAME, partitionKey: TABLE_PARTITION_KEY, replicationRegions: ['eu-west-2', 'eu-west-3'], @@ -486,9 +501,69 @@ test('when replica and table removal policy is not specified', () => { }); }); -test('when replica and table removal policy is not specified', () => { - const stack = new Stack(); - const table = new Table(stack, CONSTRUCT_NAME, { +test('when replica and table removal policy is not specified with feature flag true', () => { + const app = new App({ + context: { + [cxapi.DYNAMODB_TABLE_RETAIN_TABLE_REPLICA]: true, + }, + }); + const stack = new Stack(app); + new Table(stack, CONSTRUCT_NAME, { + tableName: TABLE_NAME, + partitionKey: TABLE_PARTITION_KEY, + replicationRegions: ['eu-west-2', 'eu-west-3'], + }); + + Template.fromStack(stack).hasResourceProperties('Custom::DynamoDBReplica', { + 'SkipReplicaDeletion': true, + }); +}); + +test('when table removal policy is specified with feature flag true', () => { + const app = new App({ + context: { + [cxapi.DYNAMODB_TABLE_RETAIN_TABLE_REPLICA]: true, + }, + }); + const stack = new Stack(app); + new Table(stack, CONSTRUCT_NAME, { + tableName: TABLE_NAME, + partitionKey: TABLE_PARTITION_KEY, + removalPolicy: RemovalPolicy.DESTROY, + replicationRegions: ['eu-west-2', 'eu-west-3'], + }); + + Template.fromStack(stack).hasResourceProperties('Custom::DynamoDBReplica', { + 'SkipReplicaDeletion': false, + }); +}); + +test('when replica and table removal policy is not specified with feature flag false', () => { + const app = new App({ + context: { + [cxapi.DYNAMODB_TABLE_RETAIN_TABLE_REPLICA]: false, + }, + }); + const stack = new Stack(app); + new Table(stack, CONSTRUCT_NAME, { + tableName: TABLE_NAME, + partitionKey: TABLE_PARTITION_KEY, + replicationRegions: ['eu-west-2', 'eu-west-3'], + }); + + Template.fromStack(stack).hasResourceProperties('Custom::DynamoDBReplica', { + 'SkipReplicaDeletion': Match.absent(), + }); +}); + +test('when replica is retain and table is destroy', () => { + const app = new App({ + context: { + [cxapi.DYNAMODB_TABLE_RETAIN_TABLE_REPLICA]: true, + }, + }); + const stack = new Stack(app); + new Table(stack, CONSTRUCT_NAME, { tableName: TABLE_NAME, partitionKey: TABLE_PARTITION_KEY, removalPolicy: RemovalPolicy.DESTROY, @@ -501,9 +576,14 @@ test('when replica and table removal policy is not specified', () => { }); }); -test('when replica and table removal policy is not specified', () => { - const stack = new Stack(); - const table = new Table(stack, CONSTRUCT_NAME, { +test('when replica is destory and table is retain', () => { + const app = new App({ + context: { + [cxapi.DYNAMODB_TABLE_RETAIN_TABLE_REPLICA]: true, + }, + }); + const stack = new Stack(app); + new Table(stack, CONSTRUCT_NAME, { tableName: TABLE_NAME, partitionKey: TABLE_PARTITION_KEY, removalPolicy: RemovalPolicy.RETAIN, diff --git a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md index 5b7095e362072..90ff8cdfe8d10 100644 --- a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md +++ b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md @@ -93,6 +93,7 @@ Flags come in three types: | [@aws-cdk/aws-s3:setUniqueReplicationRoleName](#aws-cdkaws-s3setuniquereplicationrolename) | When enabled, CDK will automatically generate a unique role name that is used for s3 object replication. | 2.182.0 | (fix) | | [@aws-cdk/pipelines:reduceStageRoleTrustScope](#aws-cdkpipelinesreducestageroletrustscope) | Remove the root account principal from Stage addActions trust policy | 2.184.0 | (default) | | [@aws-cdk/aws-events:requireEventBusPolicySid](#aws-cdkaws-eventsrequireeventbuspolicysid) | When enabled, grantPutEventsTo() will use resource policies with Statement IDs for service principals. | 2.186.0 | (fix) | +| [@aws-cdk/aws-dynamodb:retainTableReplica](#aws-cdkaws-dynamodbretaintablereplica) | When enabled, table replica will be default to the removal policy of source table unless specified otherwise. | V2NEXT | (fix) | @@ -172,7 +173,8 @@ The following json shows the current recommended set of flags, as `cdk init` wou "@aws-cdk/core:enableAdditionalMetadataCollection": true, "@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy": true, "@aws-cdk/aws-s3:setUniqueReplicationRoleName": true, - "@aws-cdk/aws-events:requireEventBusPolicySid": true + "@aws-cdk/aws-events:requireEventBusPolicySid": true, + "@aws-cdk/aws-dynamodb:retainTableReplica": true } } ``` @@ -1767,4 +1769,18 @@ This fixes the issue where permissions were silently not being added for service | 2.186.0 | `false` | `true` | +### @aws-cdk/aws-dynamodb:retainTableReplica + +*When enabled, table replica will be default to the removal policy of source table unless specified otherwise.* (fix) + +Currently, table replica will always be deleted when stack deletes regardless of source table's deletion policy. +When enabled, table replica will be default to the removal policy of source table unless specified otherwise. + + +| Since | Default | Recommended | +| ----- | ----- | ----- | +| (not in v1) | | | +| V2NEXT | `false` | `true` | + + diff --git a/packages/aws-cdk-lib/cx-api/README.md b/packages/aws-cdk-lib/cx-api/README.md index f628009ba4b66..293937247f2ee 100644 --- a/packages/aws-cdk-lib/cx-api/README.md +++ b/packages/aws-cdk-lib/cx-api/README.md @@ -679,3 +679,18 @@ _cdk.json_ } } ``` + +* `@aws-cdk/aws-dynamodb:retainTableReplica` + +Currently, table replica will always be deleted when stack deletes regardless of source table's deletion policy. +When enabled, table replica will be default to the removal policy of source table unless specified otherwise. + +_cdk.json_ + +```json +{ + "context": { + "@aws-cdk/aws-dynamodb:retainTableReplica": true + } +} +``` diff --git a/packages/aws-cdk-lib/cx-api/lib/features.ts b/packages/aws-cdk-lib/cx-api/lib/features.ts index 0e045fa5a12d9..5f3ec2ea27d10 100644 --- a/packages/aws-cdk-lib/cx-api/lib/features.ts +++ b/packages/aws-cdk-lib/cx-api/lib/features.ts @@ -127,6 +127,7 @@ export const LAMBDA_CREATE_NEW_POLICIES_WITH_ADDTOROLEPOLICY = '@aws-cdk/aws-lam export const SET_UNIQUE_REPLICATION_ROLE_NAME = '@aws-cdk/aws-s3:setUniqueReplicationRoleName'; export const PIPELINE_REDUCE_STAGE_ROLE_TRUST_SCOPE = '@aws-cdk/pipelines:reduceStageRoleTrustScope'; export const EVENTBUS_POLICY_SID_REQUIRED = '@aws-cdk/aws-events:requireEventBusPolicySid'; +export const DYNAMODB_TABLE_RETAIN_TABLE_REPLICA = '@aws-cdk/aws-dynamodb:retainTableReplica'; export const FLAGS: Record = { ////////////////////////////////////////////////////////////////////// @@ -1453,6 +1454,18 @@ export const FLAGS: Record = { introducedIn: { v2: '2.186.0' }, recommendedValue: true, }, + + ////////////////////////////////////////////////////////////////////// + [DYNAMODB_TABLE_RETAIN_TABLE_REPLICA]: { + type: FlagType.BugFix, + summary: 'When enabled, table replica will be default to the removal policy of source table unless specified otherwise.', + detailsMd: ` + Currently, table replica will always be deleted when stack deletes regardless of source table's deletion policy. + When enabled, table replica will be default to the removal policy of source table unless specified otherwise. + `, + introducedIn: { v2: 'V2NEXT' }, + recommendedValue: true, + }, }; const CURRENT_MV = 'v2'; diff --git a/packages/aws-cdk-lib/recommended-feature-flags.json b/packages/aws-cdk-lib/recommended-feature-flags.json index 25ad5ae06bff3..7e77a8d923094 100644 --- a/packages/aws-cdk-lib/recommended-feature-flags.json +++ b/packages/aws-cdk-lib/recommended-feature-flags.json @@ -67,5 +67,6 @@ "@aws-cdk/core:enableAdditionalMetadataCollection": true, "@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy": true, "@aws-cdk/aws-s3:setUniqueReplicationRoleName": true, - "@aws-cdk/aws-events:requireEventBusPolicySid": true + "@aws-cdk/aws-events:requireEventBusPolicySid": true, + "@aws-cdk/aws-dynamodb:retainTableReplica": true } \ No newline at end of file From d02e64aac18a72195ddcdb973defea7f32382c33 Mon Sep 17 00:00:00 2001 From: Shikha Aggarwal Date: Mon, 31 Mar 2025 10:51:58 -0700 Subject: [PATCH 09/10] fix(cognito): fix logging behaviour for user pool client custom resource (#33983) ### Issue # (if applicable) GHSA https://github.com/aws/aws-cdk/security/advisories/GHSA-qq4x-c6h6-rfxh ### Reason for this change ## Problem Summary Cognito User Pool Client secret being logged by a custom resource lambda function in the AWS Cloud Development Kit (CDK). ## Root Cause If the customer opts to generate a secret for the app client and refers to the field userPoolClientSecret, the getter method in CDK get userPoolClientSecret() triggers the creation of an AwsCustomResource to retrieve the client secret using an SDK API call (describeUserPoolClient). However, the API response includes the client secret value, which gets logged in the Lambda function. ### Description of changes - Change the logging behaviour in custom resource to hide logging of data associated with the API call response using Logging.withDataHidden(). - Add feature flag `@aws-cdk/cognito:logUserPoolClientSecretValue` to keep the existing logging behaviour for customers, by default the value is set to false to fix the identified vulnerability. ### Describe any new or updated permissions being added None ### Description of how you validated changes - Added unit test for both cases of feature flag. - Modified integ test with overriden feature flag default value. ### Checklist - [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../index.js | 1 - .../index.js | 1 + .../cdk.out | 2 +- ...ser-pool-client-explicit-props.assets.json | 12 +- ...r-pool-client-explicit-props.template.json | 6 +- .../integ.json | 2 +- .../manifest.json | 187 +- .../tree.json | 428 +--- .../index.js | 1 - .../index.js | 1 + .../cdk.out | 2 +- ...ser-pool-client-secret-logged.assets.json} | 14 +- ...r-pool-client-secret-logged.template.json} | 2 +- ...-pool-client-secret-not-logged.assets.json | 32 + ...ool-client-secret-not-logged.template.json | 443 ++++ .../integ.json | 5 +- ...efaultTestDeployAssert4FDD1661.assets.json | 2 +- .../manifest.json | 468 +++- .../tree.json | 448 +--- .../test/integ.user-pool-client-secret.ts | 34 +- .../IntegAlbOidc.assets.json | 6 +- .../IntegAlbOidc.template.json | 4 +- ...efaultTestDeployAssert2476ECB6.assets.json | 12 +- ...aultTestDeployAssert2476ECB6.template.json | 6 +- .../index.js | 493 +++-- .../test/integ.alb.oidc.js.snapshot/cdk.out | 2 +- .../integ.alb.oidc.js.snapshot/integ.json | 2 +- .../integ.alb.oidc.js.snapshot/manifest.json | 663 +++++- .../test/integ.alb.oidc.js.snapshot/tree.json | 1931 +---------------- .../aws-cognito/lib/user-pool-client.ts | 8 +- .../aws-cognito/test/user-pool-client.test.ts | 133 +- packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md | 20 + packages/aws-cdk-lib/cx-api/lib/features.ts | 18 + .../aws-cdk-lib/cx-api/test/features.test.ts | 1 + 34 files changed, 2318 insertions(+), 3072 deletions(-) delete mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/asset.746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e/index.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/asset.cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d/index.js delete mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/asset.746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e/index.js create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/asset.cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d/index.js rename packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/{integ-user-pool-client-secret.assets.json => integ-user-pool-client-secret-logged.assets.json} (60%) rename packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/{integ-user-pool-client-secret.template.json => integ-user-pool-client-secret-logged.template.json} (99%) create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-not-logged.assets.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-not-logged.template.json rename packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/{asset.f692c9f68e4daba2abc99103efd3518bced1e9d7a2a89847b9b5d5473c64f1bd.bundle => asset.97484721f29e34bf38d7a459804dd2d2a8dea6f8c27d7531e215bf4274fbc895.bundle}/index.js (99%) diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/asset.746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/asset.746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e/index.js deleted file mode 100644 index 4ea000eba2e09..0000000000000 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/asset.746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e/index.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";var fe=Object.create;var h=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var pe=Object.getPrototypeOf,ge=Object.prototype.hasOwnProperty;var u=(e,i)=>()=>(e&&(i=e(e=0)),i);var R=(e,i)=>()=>(i||e((i={exports:{}}).exports,i),i.exports),P=(e,i)=>{for(var r in i)h(e,r,{get:i[r],enumerable:!0})},W=(e,i,r,a)=>{if(i&&typeof i=="object"||typeof i=="function")for(let t of ue(i))!ge.call(e,t)&&t!==r&&h(e,t,{get:()=>i[t],enumerable:!(a=de(i,t))||a.enumerable});return e};var k=(e,i,r)=>(r=e!=null?fe(pe(e)):{},W(i||!e||!e.__esModule?h(r,"default",{value:e,enumerable:!0}):r,e)),x=e=>W(h({},"__esModule",{value:!0}),e);function w(e,i){return r(e);function r(a){if(a===O)return i;if(Array.isArray(a))return a.map(r);if(a&&typeof a=="object"){for(let[t,o]of Object.entries(a))a[t]=r(o);return a}return a}}function v(e,i){return Object.entries(e).reduce((r,[a,t])=>i(a)?{...r,[a]:t}:r,{})}function y(e,i,r,a,t,o){let s={Status:i,Reason:r,PhysicalResourceId:a,StackId:e.StackId,RequestId:e.RequestId,LogicalResourceId:e.LogicalResourceId,NoEcho:!1,Data:t};if(o)console.log("Responding",JSON.stringify(s));else{let{Data:c,...n}=s;console.log("Responding",JSON.stringify(n))}let d=require("url").parse(e.ResponseURL),m=JSON.stringify(s),f={hostname:d.hostname,path:d.path,method:"PUT",headers:{"content-type":"","content-length":Buffer.byteLength(m,"utf8")}};return new Promise((c,n)=>{try{let g=require("https").request(f,c);g.on("error",n),g.write(m),g.end()}catch(g){n(g)}})}function p(e){if(e)return JSON.parse(e)}function S(e){return function(i){for(let r of e)if(i.startsWith(r))return!0;return!1}}var O,J=u(()=>{"use strict";O="PHYSICAL:RESOURCEID:"});var Z,C,Y=u(()=>{"use strict";Z=k(require("zlib")),C=()=>{let i=JSON.parse(Z.brotliDecompressSync(Buffer.from("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","base64")).toString());return C=()=>i,i}});var M={};P(M,{Coercer:()=>N,coerceApiParameters:()=>T});function T(e,i,r={}){let a=C();return new N(a).coerceApiParameters(e,i,r)}function Pe(e){return e instanceof Uint8Array?e:typeof e=="string"||typeof e=="number"?new TextEncoder().encode(e.toString()):e}function xe(e){if(typeof e=="number")return e;if(typeof e=="string"){let i=Number(e);return isNaN(i)?e:i}return e}function ye(e){if(typeof e=="string"||typeof e=="number"){let i=new Date(e);return isNaN(i.getTime())?e:i}return e}var N,z=u(()=>{"use strict";Y();N=class{constructor(i){this.typeMachine=i}coerceApiParameters(i,r,a={}){let t=this.progress(r.toLowerCase(),this.progress(i.toLowerCase(),0));return this.recurse(a,t)}testCoerce(i){return this.recurse(i,0)}recurse(i,r){switch(r){case void 0:return i;case"b":return Pe(i);case"n":return xe(i);case"d":return ye(i)}if(Array.isArray(i)){let a=this.progress("*",r);return a!==void 0?i.map(t=>this.recurse(t,a)):i}if(i&&typeof i=="object"){let a=this.progress("*",r);for(let t of Object.keys(i)){let o=this.progress(t,r)??a;o!==void 0&&(i[t]=this.recurse(i[t],o))}return i}return i}progress(i,r){if(!(r===void 0||typeof r!="number"))return this.typeMachine[r][i]}}});var V={};P(V,{findV3ClientConstructor:()=>X});function X(e){let[i,r]=Object.entries(e).find(([a])=>a.endsWith("Client")&&a!=="__Client");return r}var q=u(()=>{"use strict"});var Q=R((Ze,ke)=>{ke.exports={acmpca:"acm-pca",apigateway:"api-gateway",arczonalshift:"arc-zonal-shift",alexaforbusiness:"alexa-for-business",appmesh:"app-mesh",applicationautoscaling:"application-auto-scaling",applicationinsights:"application-insights",augmentedairuntime:"sage-maker-a2iruntime",autoscaling:"auto-scaling",autoscalingplans:"auto-scaling-plans",backupgateway:"backup-gateway",bedrockruntime:"bedrock-runtime",cur:"cost-and-usage-report-service",chimesdkidentity:"chime-sdk-identity",chimesdkmediapipelines:"chime-sdk-media-pipelines",chimesdkmeetings:"chime-sdk-meetings",chimesdkmessaging:"chime-sdk-messaging",chimesdkvoice:"chime-sdk-voice",cloudhsmv2:"cloudhsm-v2",cloudsearchdomain:"cloudsearch-domain",cloudtraildata:"cloudtrail-data",cloudwatchevents:"cloudwatch-events",cloudwatchlogs:"cloudwatch-logs",codegurureviewer:"codeguru-reviewer",codegurusecurity:"codeguru-security",codestarnotifications:"codestar-notifications",codestarconnections:"codestar-connections",cognitoidentity:"cognito-identity",cognitoidentityserviceprovider:"cognito-identity-provider",cognitosync:"cognito-sync",computeoptimizer:"compute-optimizer",configservice:"config-service",connectcontactlens:"connect-contact-lens",costexplorer:"cost-explorer",customerprofiles:"customer-profiles",dms:"database-migration-service",datapipeline:"data-pipeline",devopsguru:"devops-guru",devicefarm:"device-farm",directconnect:"direct-connect",directoryservice:"directory-service",discovery:"application-discovery-service",docdbelastic:"docdb-elastic",dynamodbstreams:"dynamodb-streams",ec2instanceconnect:"ec2-instance-connect",ecrpublic:"ecr-public",elb:"elastic-load-balancing",elbv2:"elastic-load-balancing-v2",emrserverless:"emr-serverless",emrcontainers:"emr-containers",es:"elasticsearch-service",elasticbeanstalk:"elastic-beanstalk",elasticinference:"elastic-inference",elastictranscoder:"elastic-transcoder",finspacedata:"finspace-data",forecastqueryservice:"forecastquery",forecastservice:"forecast",globalaccelerator:"global-accelerator",iot1clickdevicesservice:"iot-1click-devices-service",iot1clickprojects:"iot-1click-projects",iotevents:"iot-events",ioteventsdata:"iot-events-data",iotjobsdataplane:"iot-jobs-data-plane",iotroborunner:"iot-roborunner",iotwireless:"iot-wireless",iotdata:"iot-data-plane",ivsrealtime:"ivs-realtime",kendraranking:"kendra-ranking",kinesisanalytics:"kinesis-analytics",kinesisanalyticsv2:"kinesis-analytics-v2",kinesisvideo:"kinesis-video",kinesisvideoarchivedmedia:"kinesis-video-archived-media",kinesisvideomedia:"kinesis-video-media",kinesisvideosignalingchannels:"kinesis-video-signaling",kinesisvideowebrtcstorage:"kinesis-video-webrtc-storage",launchwizard:"launch-wizard",lexmodelbuildingservice:"lex-model-building-service",lexmodelsv2:"lex-models-v2",lexruntime:"lex-runtime-service",lexruntimev2:"lex-runtime-v2",licensemanager:"license-manager",licensemanagerlinuxsubscriptions:"license-manager-linux-subscriptions",licensemanagerusersubscriptions:"license-manager-user-subscriptions",machinelearning:"machine-learning",managedblockchainquery:"managedblockchain-query",marketplacecatalog:"marketplace-catalog",marketplacecommerceanalytics:"marketplace-commerce-analytics",marketplaceentitlementservice:"marketplace-entitlement-service",marketplacemetering:"marketplace-metering",mediapackagevod:"mediapackage-vod",mediastoredata:"mediastore-data",medicalimaging:"medical-imaging",memorydb:"memory-db",migrationhub:"migration-hub",migrationhubconfig:"migrationhub-config",migrationhubrefactorspaces:"migration-hub-refactor-spaces",networkfirewall:"network-firewall",paymentcryptography:"payment-cryptography",paymentcryptographydata:"payment-cryptography-data",pcaconnectorad:"pca-connector-ad",personalizeevents:"personalize-events",personalizeruntime:"personalize-runtime",pinpointemail:"pinpoint-email",pinpointsmsvoice:"pinpoint-sms-voice",pinpointsmsvoicev2:"pinpoint-sms-voice-v2",qldbsession:"qldb-session",rdsdataservice:"rds-data",redshiftdata:"redshift-data",redshiftserverless:"redshift-serverless",resourceexplorer2:"resource-explorer-2",resourcegroups:"resource-groups",resourcegroupstaggingapi:"resource-groups-tagging-api",route53:"route-53",route53domains:"route-53-domains",route53recoverycluster:"route53-recovery-cluster",route53recoverycontrolconfig:"route53-recovery-control-config",route53recoveryreadiness:"route53-recovery-readiness",s3control:"s3-control",ssmcontacts:"ssm-contacts",ssmincidents:"ssm-incidents",ssoadmin:"sso-admin",ssooidc:"sso-oidc",sagemakerfeaturestoreruntime:"sagemaker-featurestore-runtime",sagemakergeospatial:"sagemaker-geospatial",sagemakermetrics:"sagemaker-metrics",sagemakerruntime:"sagemaker-runtime",sagemakeredge:"sagemaker-edge",secretsmanager:"secrets-manager",servicecatalog:"service-catalog",servicecatalogappregistry:"service-catalog-appregistry",servicequotas:"service-quotas",snowdevicemanagement:"snow-device-management",ssmsap:"ssm-sap",stepfunctions:"sfn",storagegateway:"storage-gateway",supportapp:"support-app",timestreamquery:"timestream-query",timestreamwrite:"timestream-write",transcribeservice:"transcribe",voiceid:"voice-id",vpclattice:"vpc-lattice",wafregional:"waf-regional",workspacesweb:"workspaces-web"}});var B=R((Ye,be)=>{be.exports={accessanalyzer:{iamPrefix:"access-analyzer"},account:{iamPrefix:"account"},"acm-pca":{iamPrefix:"acm-pca"},acm:{iamPrefix:"acm"},"alexa-for-business":{iamPrefix:"a4b"},amp:{iamPrefix:"aps"},amplify:{iamPrefix:"amplify"},amplifybackend:{iamPrefix:"amplifybackend"},amplifyuibuilder:{iamPrefix:"amplifyuibuilder"},"api-gateway":{iamPrefix:"apigateway"},apigatewaymanagementapi:{iamPrefix:"execute-api"},apigatewayv2:{iamPrefix:"apigateway"},"app-mesh":{iamPrefix:"appmesh"},appconfig:{iamPrefix:"appconfig"},appconfigdata:{iamPrefix:"appconfig"},appfabric:{iamPrefix:"appfabric"},appflow:{iamPrefix:"appflow"},appintegrations:{iamPrefix:"app-integrations"},"application-auto-scaling":{iamPrefix:"application-autoscaling"},"application-discovery-service":{iamPrefix:"discovery"},"application-insights":{iamPrefix:"applicationinsights"},applicationcostprofiler:{iamPrefix:"application-cost-profiler"},apprunner:{iamPrefix:"apprunner"},appstream:{iamPrefix:"appstream"},appsync:{iamPrefix:"appsync"},"arc-zonal-shift":{iamPrefix:"arc-zonal-shift"},athena:{iamPrefix:"athena"},auditmanager:{iamPrefix:"auditmanager"},"auto-scaling-plans":{iamPrefix:"autoscaling-plans"},"auto-scaling":{iamPrefix:"autoscaling"},b2bi:{iamPrefix:"b2bi"},"backup-gateway":{iamPrefix:"backup-gateway"},backup:{iamPrefix:"backup"},backupstorage:{iamPrefix:"backup-storage"},batch:{iamPrefix:"batch"},"bcm-data-exports":{iamPrefix:"bcm-data-exports"},"bedrock-agent-runtime":{iamPrefix:"bedrock"},"bedrock-agent":{iamPrefix:"bedrock"},"bedrock-runtime":{iamPrefix:"bedrock"},bedrock:{iamPrefix:"bedrock"},billingconductor:{iamPrefix:"billingconductor"},braket:{iamPrefix:"braket"},budgets:{iamPrefix:"budgets"},"chime-sdk-identity":{iamPrefix:"chime"},"chime-sdk-media-pipelines":{iamPrefix:"chime"},"chime-sdk-meetings":{iamPrefix:"chime"},"chime-sdk-messaging":{iamPrefix:"chime"},"chime-sdk-voice":{iamPrefix:"chime"},chime:{iamPrefix:"chime"},cleanrooms:{iamPrefix:"cleanrooms"},cleanroomsml:{iamPrefix:"cleanrooms-ml"},cloud9:{iamPrefix:"cloud9"},cloudcontrol:{iamPrefix:"cloudcontrolapi"},clouddirectory:{iamPrefix:"clouddirectory"},cloudformation:{iamPrefix:"cloudformation"},"cloudfront-keyvaluestore":{iamPrefix:"cloudfront-keyvaluestore"},cloudfront:{iamPrefix:"cloudfront"},"cloudhsm-v2":{iamPrefix:"cloudhsm"},cloudhsm:{iamPrefix:"cloudhsm"},"cloudsearch-domain":{iamPrefix:"cloudsearch"},cloudsearch:{iamPrefix:"cloudsearch"},"cloudtrail-data":{iamPrefix:"cloudtrail-data"},cloudtrail:{iamPrefix:"cloudtrail"},"cloudwatch-events":{iamPrefix:"events"},"cloudwatch-logs":{iamPrefix:"logs"},cloudwatch:{iamPrefix:"monitoring"},codeartifact:{iamPrefix:"codeartifact"},codebuild:{iamPrefix:"codebuild"},codecatalyst:{},codecommit:{iamPrefix:"codecommit"},codedeploy:{iamPrefix:"codedeploy"},"codeguru-reviewer":{iamPrefix:"codeguru-reviewer"},"codeguru-security":{iamPrefix:"codeguru-security"},codeguruprofiler:{iamPrefix:"codeguru-profiler"},codepipeline:{iamPrefix:"codepipeline"},"codestar-connections":{iamPrefix:"codestar-connections"},"codestar-notifications":{iamPrefix:"codestar-notifications"},codestar:{iamPrefix:"codestar"},"cognito-identity-provider":{iamPrefix:"cognito-idp"},"cognito-identity":{iamPrefix:"cognito-identity"},"cognito-sync":{iamPrefix:"cognito-sync"},comprehend:{iamPrefix:"comprehend"},comprehendmedical:{iamPrefix:"comprehendmedical"},"compute-optimizer":{iamPrefix:"compute-optimizer"},"config-service":{iamPrefix:"config"},"connect-contact-lens":{iamPrefix:"connect"},connect:{iamPrefix:"connect"},connectcampaigns:{iamPrefix:"connect-campaigns"},connectcases:{iamPrefix:"cases"},connectparticipant:{iamPrefix:"execute-api"},controltower:{iamPrefix:"controltower"},"cost-and-usage-report-service":{iamPrefix:"cur"},"cost-explorer":{iamPrefix:"ce"},"cost-optimization-hub":{iamPrefix:"cost-optimization-hub"},"customer-profiles":{iamPrefix:"profile"},"data-pipeline":{iamPrefix:"datapipeline"},"database-migration-service":{iamPrefix:"dms"},databrew:{iamPrefix:"databrew"},dataexchange:{iamPrefix:"dataexchange"},datasync:{iamPrefix:"datasync"},datazone:{iamPrefix:"datazone"},dax:{iamPrefix:"dax"},detective:{iamPrefix:"detective"},"device-farm":{iamPrefix:"devicefarm"},"devops-guru":{iamPrefix:"devops-guru"},"direct-connect":{iamPrefix:"directconnect"},"directory-service":{iamPrefix:"ds"},dlm:{iamPrefix:"dlm"},"docdb-elastic":{iamPrefix:"docdb-elastic"},docdb:{iamPrefix:"rds"},drs:{iamPrefix:"drs"},"dynamodb-streams":{iamPrefix:"dynamodb"},dynamodb:{iamPrefix:"dynamodb"},ebs:{iamPrefix:"ebs"},"ec2-instance-connect":{iamPrefix:"ec2-instance-connect"},ec2:{iamPrefix:"ec2"},"ecr-public":{iamPrefix:"ecr-public"},ecr:{iamPrefix:"ecr"},ecs:{iamPrefix:"ecs",commands:["ExecuteCommand"]},efs:{iamPrefix:"elasticfilesystem"},"eks-auth":{iamPrefix:"eks-auth"},eks:{iamPrefix:"eks"},"elastic-beanstalk":{iamPrefix:"elasticbeanstalk"},"elastic-inference":{iamPrefix:"elastic-inference"},"elastic-load-balancing-v2":{iamPrefix:"elasticloadbalancing"},"elastic-load-balancing":{iamPrefix:"elasticloadbalancing"},"elastic-transcoder":{iamPrefix:"elastictranscoder"},elasticache:{iamPrefix:"elasticache"},"elasticsearch-service":{iamPrefix:"es"},"emr-containers":{iamPrefix:"emr-containers"},"emr-serverless":{iamPrefix:"emr-serverless"},emr:{iamPrefix:"elasticmapreduce"},entityresolution:{iamPrefix:"entityresolution"},eventbridge:{iamPrefix:"events"},evidently:{iamPrefix:"evidently"},"finspace-data":{iamPrefix:"finspace-api"},finspace:{iamPrefix:"finspace"},firehose:{iamPrefix:"firehose"},fis:{iamPrefix:"fis"},fms:{iamPrefix:"fms"},forecast:{iamPrefix:"forecast"},forecastquery:{iamPrefix:"forecast"},frauddetector:{iamPrefix:"frauddetector"},freetier:{iamPrefix:"freetier"},fsx:{iamPrefix:"fsx"},gamelift:{iamPrefix:"gamelift"},glacier:{iamPrefix:"glacier"},"global-accelerator":{iamPrefix:"globalaccelerator"},glue:{iamPrefix:"glue"},grafana:{iamPrefix:"grafana"},greengrass:{iamPrefix:"greengrass"},greengrassv2:{iamPrefix:"greengrass"},groundstation:{iamPrefix:"groundstation"},guardduty:{iamPrefix:"guardduty"},health:{iamPrefix:"health"},healthlake:{iamPrefix:"healthlake"},honeycode:{iamPrefix:"honeycode"},iam:{iamPrefix:"iam"},identitystore:{iamPrefix:"identitystore"},imagebuilder:{iamPrefix:"imagebuilder"},"inspector-scan":{iamPrefix:"inspector-scan"},inspector:{iamPrefix:"inspector"},inspector2:{iamPrefix:"inspector2"},internetmonitor:{iamPrefix:"internetmonitor"},"iot-1click-devices-service":{iamPrefix:"iot1click"},"iot-1click-projects":{iamPrefix:"iot1click"},"iot-data-plane":{iamPrefix:"iotdata"},"iot-events-data":{iamPrefix:"ioteventsdata"},"iot-events":{iamPrefix:"iotevents"},"iot-jobs-data-plane":{iamPrefix:"iot-jobs-data"},"iot-roborunner":{iamPrefix:"iotroborunner"},"iot-wireless":{iamPrefix:"iotwireless"},iot:{iamPrefix:"iot"},iotanalytics:{iamPrefix:"iotanalytics"},iotdeviceadvisor:{iamPrefix:"iotdeviceadvisor"},iotfleethub:{iamPrefix:"iotfleethub"},iotfleetwise:{iamPrefix:"iotfleetwise"},iotsecuretunneling:{iamPrefix:"IoTSecuredTunneling"},iotsitewise:{iamPrefix:"iotsitewise"},iotthingsgraph:{iamPrefix:"iotthingsgraph"},iottwinmaker:{iamPrefix:"iottwinmaker"},"ivs-realtime":{iamPrefix:"ivs"},ivs:{iamPrefix:"ivs"},ivschat:{iamPrefix:"ivschat"},kafka:{iamPrefix:"kafka"},kafkaconnect:{iamPrefix:"kafkaconnect"},"kendra-ranking":{iamPrefix:"kendra-ranking"},kendra:{iamPrefix:"kendra"},keyspaces:{iamPrefix:"cassandra"},"kinesis-analytics-v2":{iamPrefix:"kinesisanalytics"},"kinesis-analytics":{iamPrefix:"kinesisanalytics"},"kinesis-video-archived-media":{iamPrefix:"kinesisvideo"},"kinesis-video-media":{iamPrefix:"kinesisvideo"},"kinesis-video-signaling":{iamPrefix:"kinesisvideo"},"kinesis-video-webrtc-storage":{iamPrefix:"kinesisvideo"},"kinesis-video":{iamPrefix:"kinesisvideo"},kinesis:{iamPrefix:"kinesis"},kms:{iamPrefix:"kms"},lakeformation:{iamPrefix:"lakeformation"},lambda:{iamPrefix:"lambda"},"launch-wizard":{iamPrefix:"launchwizard"},"lex-model-building-service":{iamPrefix:"lex"},"lex-models-v2":{iamPrefix:"lex"},"lex-runtime-service":{iamPrefix:"lex"},"lex-runtime-v2":{iamPrefix:"lex"},"license-manager-linux-subscriptions":{iamPrefix:"license-manager-linux-subscriptions"},"license-manager-user-subscriptions":{iamPrefix:"license-manager-user-subscriptions"},"license-manager":{iamPrefix:"license-manager"},lightsail:{iamPrefix:"lightsail"},location:{iamPrefix:"geo"},lookoutequipment:{iamPrefix:"lookoutequipment"},lookoutmetrics:{iamPrefix:"lookoutmetrics"},lookoutvision:{iamPrefix:"lookoutvision"},m2:{iamPrefix:"m2"},"machine-learning":{iamPrefix:"machinelearning"},macie2:{iamPrefix:"macie2"},"managedblockchain-query":{iamPrefix:"managedblockchain-query"},managedblockchain:{iamPrefix:"managedblockchain"},"marketplace-agreement":{iamPrefix:"aws-marketplace"},"marketplace-catalog":{iamPrefix:"aws-marketplace"},"marketplace-commerce-analytics":{iamPrefix:"marketplacecommerceanalytics"},"marketplace-deployment":{iamPrefix:"aws-marketplace"},"marketplace-entitlement-service":{iamPrefix:"aws-marketplace"},"marketplace-metering":{iamPrefix:"aws-marketplace"},mediaconnect:{iamPrefix:"mediaconnect"},mediaconvert:{iamPrefix:"mediaconvert"},medialive:{iamPrefix:"medialive"},"mediapackage-vod":{iamPrefix:"mediapackage-vod"},mediapackage:{iamPrefix:"mediapackage"},mediapackagev2:{iamPrefix:"mediapackagev2"},"mediastore-data":{iamPrefix:"mediastore"},mediastore:{iamPrefix:"mediastore"},mediatailor:{iamPrefix:"mediatailor"},"medical-imaging":{iamPrefix:"medical-imaging"},memorydb:{iamPrefix:"memorydb"},mgn:{iamPrefix:"mgn"},"migration-hub-refactor-spaces":{iamPrefix:"refactor-spaces"},"migration-hub":{iamPrefix:"mgh"},"migrationhub-config":{iamPrefix:"mgh"},migrationhuborchestrator:{iamPrefix:"migrationhub-orchestrator"},migrationhubstrategy:{iamPrefix:"migrationhub-strategy"},mobile:{iamPrefix:"AWSMobileHubService"},mq:{iamPrefix:"mq"},mturk:{iamPrefix:"mturk-requester"},mwaa:{iamPrefix:"airflow"},"neptune-graph":{iamPrefix:"neptune-graph"},neptune:{iamPrefix:"rds"},neptunedata:{iamPrefix:"neptune-db"},"network-firewall":{iamPrefix:"network-firewall"},networkmanager:{iamPrefix:"networkmanager"},networkmonitor:{iamPrefix:"networkmonitor"},nimble:{iamPrefix:"nimble"},oam:{iamPrefix:"oam"},omics:{iamPrefix:"omics"},opensearch:{iamPrefix:"es"},opensearchserverless:{iamPrefix:"aoss"},opsworks:{iamPrefix:"opsworks"},opsworkscm:{iamPrefix:"opsworks-cm"},organizations:{iamPrefix:"organizations"},osis:{iamPrefix:"osis"},outposts:{iamPrefix:"outposts"},panorama:{iamPrefix:"panorama"},"payment-cryptography-data":{iamPrefix:"payment-cryptography"},"payment-cryptography":{iamPrefix:"payment-cryptography"},"pca-connector-ad":{iamPrefix:"pca-connector-ad"},"personalize-events":{iamPrefix:"personalize"},"personalize-runtime":{iamPrefix:"personalize"},personalize:{iamPrefix:"personalize"},pi:{iamPrefix:"pi"},"pinpoint-email":{iamPrefix:"ses"},"pinpoint-sms-voice-v2":{iamPrefix:"sms-voice"},"pinpoint-sms-voice":{iamPrefix:"sms-voice"},pinpoint:{iamPrefix:"mobiletargeting"},pipes:{iamPrefix:"pipes"},polly:{iamPrefix:"polly"},pricing:{iamPrefix:"pricing"},privatenetworks:{iamPrefix:"private-networks"},proton:{iamPrefix:"proton"},qbusiness:{iamPrefix:"qbusiness"},qconnect:{iamPrefix:"wisdom"},"qldb-session":{iamPrefix:"qldb",commands:["SendCommand"]},qldb:{iamPrefix:"qldb"},quicksight:{iamPrefix:"quicksight"},ram:{iamPrefix:"ram"},rbin:{iamPrefix:"rbin"},"rds-data":{iamPrefix:"rds-data"},rds:{iamPrefix:"rds"},"redshift-data":{iamPrefix:"redshift-data"},"redshift-serverless":{iamPrefix:"redshift-serverless"},redshift:{iamPrefix:"redshift"},rekognition:{iamPrefix:"rekognition"},rekognitionstreaming:{iamPrefix:"rekognition"},repostspace:{iamPrefix:"repostspace"},resiliencehub:{iamPrefix:"resiliencehub"},"resource-explorer-2":{iamPrefix:"resource-explorer-2"},"resource-groups-tagging-api":{iamPrefix:"tagging"},"resource-groups":{iamPrefix:"resource-groups"},robomaker:{iamPrefix:"robomaker"},rolesanywhere:{iamPrefix:"rolesanywhere"},"route-53-domains":{iamPrefix:"route53domains"},"route-53":{iamPrefix:"route53"},"route53-recovery-cluster":{iamPrefix:"route53-recovery-cluster"},"route53-recovery-control-config":{iamPrefix:"route53-recovery-control-config"},"route53-recovery-readiness":{iamPrefix:"route53-recovery-readiness"},route53resolver:{iamPrefix:"route53resolver"},rum:{iamPrefix:"rum"},"s3-control":{iamPrefix:"s3"},s3:{iamPrefix:"s3"},s3outposts:{iamPrefix:"s3-outposts"},"sagemaker-a2i-runtime":{iamPrefix:"sagemaker"},"sagemaker-edge":{iamPrefix:"sagemaker"},"sagemaker-featurestore-runtime":{iamPrefix:"sagemaker"},"sagemaker-geospatial":{iamPrefix:"sagemaker-geospatial"},"sagemaker-metrics":{iamPrefix:"sagemaker"},"sagemaker-runtime":{iamPrefix:"sagemaker"},sagemaker:{iamPrefix:"sagemaker"},savingsplans:{iamPrefix:"savingsplans"},scheduler:{iamPrefix:"scheduler"},schemas:{iamPrefix:"schemas"},"secrets-manager":{iamPrefix:"secretsmanager"},securityhub:{iamPrefix:"securityhub"},securitylake:{iamPrefix:"securitylake"},serverlessapplicationrepository:{iamPrefix:"serverlessrepo"},"service-catalog-appregistry":{iamPrefix:"servicecatalog"},"service-catalog":{iamPrefix:"servicecatalog"},"service-quotas":{iamPrefix:"servicequotas"},servicediscovery:{iamPrefix:"servicediscovery"},ses:{iamPrefix:"ses"},sesv2:{iamPrefix:"ses"},sfn:{iamPrefix:"states"},shield:{iamPrefix:"shield"},signer:{iamPrefix:"signer"},simspaceweaver:{iamPrefix:"simspaceweaver"},sms:{iamPrefix:"sms"},"snow-device-management":{iamPrefix:"snow-device-management"},snowball:{iamPrefix:"snowball"},sns:{iamPrefix:"sns"},sqs:{iamPrefix:"sqs"},"ssm-contacts":{iamPrefix:"ssm-contacts"},"ssm-incidents":{iamPrefix:"ssm-incidents"},"ssm-sap":{iamPrefix:"ssm-sap"},ssm:{iamPrefix:"ssm",commands:["CancelCommand","SendCommand"]},"sso-admin":{iamPrefix:"sso"},"sso-oidc":{iamPrefix:"sso-oauth"},sso:{iamPrefix:"awsssoportal"},"storage-gateway":{iamPrefix:"storagegateway"},sts:{iamPrefix:"sts"},supplychain:{iamPrefix:"scn"},"support-app":{iamPrefix:"supportapp"},support:{iamPrefix:"support"},swf:{iamPrefix:"swf"},synthetics:{iamPrefix:"synthetics"},textract:{iamPrefix:"textract"},"timestream-query":{iamPrefix:"timestream"},"timestream-write":{iamPrefix:"timestream"},tnb:{iamPrefix:"tnb"},"transcribe-streaming":{iamPrefix:"transcribe"},transcribe:{iamPrefix:"transcribe"},transfer:{iamPrefix:"transfer"},translate:{iamPrefix:"translate"},trustedadvisor:{iamPrefix:"trustedadvisor"},verifiedpermissions:{iamPrefix:"verifiedpermissions"},"voice-id":{iamPrefix:"voiceid"},"vpc-lattice":{iamPrefix:"vpc-lattice"},"waf-regional":{iamPrefix:"waf-regional"},waf:{iamPrefix:"waf"},wafv2:{iamPrefix:"wafv2"},wellarchitected:{iamPrefix:"wellarchitected"},wisdom:{iamPrefix:"wisdom"},workdocs:{iamPrefix:"workdocs"},worklink:{iamPrefix:"worklink"},workmail:{iamPrefix:"workmail"},workmailmessageflow:{iamPrefix:"workmailmessageflow"},"workspaces-thin-client":{iamPrefix:"thinclient"},"workspaces-web":{iamPrefix:"workspaces-web"},workspaces:{iamPrefix:"workspaces"},xray:{iamPrefix:"xray"}}});var F={};P(F,{normalizeActionName:()=>H,normalizeServiceName:()=>D});function D(e){return e=e.toLowerCase(),e=e.replace(/^@aws-sdk\/client-/,""),e=he()?.[e]??e,e}function H(e,i){return i.charAt(0).toLowerCase()===i.charAt(0)?i.charAt(0).toUpperCase()+i.slice(1):we()[e]?.commands?.includes(i)?i:i.replace(/Command$/,"")}function he(){return Q()}function we(){return B()}var j=u(()=>{"use strict"});var _={};P(_,{ApiCall:()=>E,coerceSdkv3Response:()=>A,flatten:()=>G});function G(e){let i={};return r(e),i;function r(a,t=[]){if(a&&typeof a=="object"){for(let[o,s]of Object.entries(a))r(s,[...t,o]);return}i[t.join(".")]=a}}async function A(e){if(e&&typeof e=="object"&&typeof e.transformToString=="function")return e.transformToString();if(Buffer.isBuffer(e))return e.toString("utf8");if(ArrayBuffer.isView(e))return ve.decode(e.buffer);if(Array.isArray(e)){let i=[];for(let r of e)i.push(await A(r));return i}if(e&&typeof e=="object"){for(let i of Object.keys(e))e[i]=await A(e[i]);return e}return e}var E,ve,$=u(()=>{"use strict";z();q();j();E=class{constructor(i,r){this.service=D(i),this.action=H(this.service,r),this.v3PackageName=`@aws-sdk/client-${this.service}`}async invoke(i){this.initializePackage(i.sdkPackage),this.initializeClient(i);let r=this.findCommandClass(),a=await this.client.send(new r(T(this.service,this.action,i.parameters??{})));delete a.$metadata;let t=await A(a);return i.flattenResponse?G(t):t}initializePackage(i){if(!this.v3Package){if(i){this.v3Package=i;return}try{this.v3Package=require(this.v3PackageName)}catch{throw Error(`Service ${this.service} client package with name '${this.v3PackageName}' does not exist.`)}}}initializeClient(i){this.v3Package||this.initializePackage();let r=this.findConstructor(this.v3Package);return this.client=new r({apiVersion:i.apiVersion,credentials:i.credentials,region:i.region}),this.client}findCommandClass(){this.v3Package||this.initializePackage();let i=`${this.action}Command`,r=Object.entries(this.v3Package??{}).find(([a])=>a.toLowerCase()===i.toLowerCase())?.[1];if(!r)throw new Error(`Unable to find command named: ${i} for action: ${this.action} in service package ${this.v3PackageName}`);return r}findConstructor(i){try{let r=X(i);if(!r)throw new Error("findV3ClientConstructor returned undefined");return r}catch(r){throw console.error(r),Error(`No client constructor found within package: ${this.v3PackageName}`)}}};ve=new TextDecoder});var I=R(l=>{"use strict";var Se=l&&l.__createBinding||(Object.create?function(e,i,r,a){a===void 0&&(a=r);var t=Object.getOwnPropertyDescriptor(i,r);(!t||("get"in t?!i.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return i[r]}}),Object.defineProperty(e,a,t)}:function(e,i,r,a){a===void 0&&(a=r),e[a]=i[r]}),Je=l&&l.__exportStar||function(e,i){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(i,r)&&Se(i,e,r)};Object.defineProperty(l,"__esModule",{value:!0});l.normalizeActionName=l.normalizeServiceName=l.findV3ClientConstructor=l.coerceApiParameters=void 0;var Ne=(z(),x(M));Object.defineProperty(l,"coerceApiParameters",{enumerable:!0,get:function(){return Ne.coerceApiParameters}});var Ae=(q(),x(V));Object.defineProperty(l,"findV3ClientConstructor",{enumerable:!0,get:function(){return Ae.findV3ClientConstructor}});var ee=(j(),x(F));Object.defineProperty(l,"normalizeServiceName",{enumerable:!0,get:function(){return ee.normalizeServiceName}});Object.defineProperty(l,"normalizeActionName",{enumerable:!0,get:function(){return ee.normalizeActionName}});Je(($(),x(_)),l)});var ae={};P(ae,{forceSdkInstallation:()=>Ue,handler:()=>Te});function Ue(){U=!1}function Re(){console.log("Installing latest AWS SDK v2"),(0,ie.execSync)("HOME=/tmp npm install aws-sdk@2 --production --no-package-lock --no-save --prefix /tmp"),U=!0}function Ce(e){let i=e.apiLoader;return Oe.forEach(({serviceName:r,apiVersions:a})=>{let t=r.toLowerCase();e.Service.hasService(t)?e.Service.addVersions(e[r],a):(i.services[t]={},e[r]=e.Service.defineService(t,a)),a.forEach(o=>{Object.defineProperty(i.services[t],o,{get:function(){let d=`aws-sdk-patch/${t}-${o}`,m=JSON.parse(K.readFileSync((0,L.join)(__dirname,`${d}.service.json`),"utf-8"));return m.paginators=JSON.parse(K.readFileSync((0,L.join)(__dirname,`${d}.paginators.json`),"utf-8")).pagination,m},enumerable:!0,configurable:!0})})}),e}async function Te(e,i){try{let r;if(!U&&e.ResourceProperties.InstallLatestAwsSdk==="true")try{Re(),r=require("/tmp/node_modules/aws-sdk")}catch(m){console.log(`Failed to install latest AWS SDK v2: ${m}`),r=require("aws-sdk")}else U?r=require("/tmp/node_modules/aws-sdk"):r=require("aws-sdk");try{r=Ce(r)}catch(m){console.log(`Failed to patch AWS SDK: ${m}. Proceeding with the installed copy.`)}console.log(JSON.stringify({...e,ResponseURL:"..."})),console.log("AWS SDK VERSION: "+r.VERSION),e.ResourceProperties.Create=p(e.ResourceProperties.Create),e.ResourceProperties.Update=p(e.ResourceProperties.Update),e.ResourceProperties.Delete=p(e.ResourceProperties.Delete);let a;switch(e.RequestType){case"Create":a=e.ResourceProperties.Create?.physicalResourceId?.id??e.ResourceProperties.Update?.physicalResourceId?.id??e.ResourceProperties.Delete?.physicalResourceId?.id??e.LogicalResourceId;break;case"Update":case"Delete":a=e.ResourceProperties[e.RequestType]?.physicalResourceId?.id??e.PhysicalResourceId;break}let t={},o={},s=e.ResourceProperties[e.RequestType],d=s?.logApiResponseData??!0;if(s){let m;if(s.assumedRoleArn){let c=new Date().getTime(),n={RoleArn:s.assumedRoleArn,RoleSessionName:`${c}-${a}`.substring(0,64)};m=new r.ChainableTemporaryCredentials({params:n,stsConfig:{stsRegionalEndpoints:"regional"}})}if(!Object.prototype.hasOwnProperty.call(r,s.service))throw Error(`Service ${s.service} does not exist in AWS SDK version ${r.VERSION}.`);let f=new r[s.service]({apiVersion:s.apiVersion,credentials:m,region:s.region});try{let c=await f[s.action](s.parameters&&w(s.parameters,a)).promise();t={apiVersion:f.config.apiVersion,region:f.config.region,...(0,re.flatten)(c)};let n;s.outputPath?n=[s.outputPath]:s.outputPaths&&(n=s.outputPaths),n?o=v(t,S(n)):o=t}catch(c){if(!s.ignoreErrorCodesMatching||!new RegExp(s.ignoreErrorCodesMatching).test(c.code))throw c}s.physicalResourceId?.responsePath&&(a=t[s.physicalResourceId.responsePath])}await y(e,"SUCCESS","OK",a,o,d)}catch(r){console.log(r),await y(e,"FAILED",r.message||"Internal Error",i.logStreamName,{},!0)}}var ie,K,L,re,U,Oe,te=u(()=>{"use strict";ie=require("child_process"),K=k(require("fs")),L=require("path");J();re=k(I()),U=!1;Oe=[]});var oe={};P(oe,{forceSdkInstallation:()=>ze,handler:()=>De});function ze(){b={}}function Xe(e){console.log(`Installing latest AWS SDK v3: ${e}`),(0,se.execSync)(`NPM_CONFIG_UPDATE_NOTIFIER=false HOME=/tmp npm install ${JSON.stringify(e)} --omit=dev --no-package-lock --no-save --prefix /tmp`),b={...b,[e]:!0}}async function qe(e,i){let r;try{if(!b[e]&&i==="true")try{Xe(e),r=require(`/tmp/node_modules/${e}`)}catch(a){return console.log(`Failed to install latest AWS SDK v3. Falling back to pre-installed version. Error: ${a}`),require(e)}else b[e]?r=require(`/tmp/node_modules/${e}`):r=require(e)}catch{throw Error(`Package ${e} does not exist.`)}return r}async function De(e,i){try{e.ResourceProperties.Create=p(e.ResourceProperties.Create),e.ResourceProperties.Update=p(e.ResourceProperties.Update),e.ResourceProperties.Delete=p(e.ResourceProperties.Delete);let r={},a;switch(e.RequestType){case"Create":a=e.ResourceProperties.Create?.physicalResourceId?.id??e.ResourceProperties.Update?.physicalResourceId?.id??e.ResourceProperties.Delete?.physicalResourceId?.id??e.LogicalResourceId;break;case"Update":case"Delete":a=e.ResourceProperties[e.RequestType]?.physicalResourceId?.id??e.PhysicalResourceId;break}let t=e.ResourceProperties[e.RequestType],o=t?.logApiResponseData??!0;if(t){let s=new ne.ApiCall(t.service,t.action),d=qe(s.v3PackageName,e.ResourceProperties.InstallLatestAwsSdk);console.log(JSON.stringify({...e,ResponseURL:"..."}));let m;if(t.assumedRoleArn){let c=new Date().getTime(),n={RoleArn:t.assumedRoleArn,RoleSessionName:`${c}-${a}`.substring(0,64)},{fromTemporaryCredentials:g}=await import("@aws-sdk/credential-providers");m=g({params:n,clientConfig:t.region!==void 0?{region:t.region}:void 0})}d=await d;let f={};try{let c=await s.invoke({sdkPackage:d,apiVersion:t.apiVersion,credentials:m,region:t.region,parameters:w(t.parameters,a),flattenResponse:!0});o&&console.log("API response",c),f.apiVersion=s.client.config.apiVersion,f.region=await s.client.config.region().catch(()=>{}),Object.assign(f,c);let n;t.outputPath?n=[t.outputPath]:t.outputPaths&&(n=t.outputPaths),n?r=v(f,S(n)):r=f}catch(c){let n=c.name??c.constructor.name;if(!t.ignoreErrorCodesMatching||!new RegExp(t.ignoreErrorCodesMatching).test(n))throw c}t.physicalResourceId?.responsePath&&(a=f[t.physicalResourceId.responsePath])}await y(e,"SUCCESS","OK",a,r,o)}catch(r){console.log(r),await y(e,"FAILED",r.message||"Internal Error",i.logStreamName,{},!0)}}var se,ne,b,ce=u(()=>{"use strict";se=require("child_process"),ne=k(I());J();b={}});var je={};P(je,{PHYSICAL_RESOURCE_ID_REFERENCE:()=>O,handler:()=>He,v2handler:()=>me,v3handler:()=>le});module.exports=x(je);J();function me(e,i){return(te(),x(ae)).handler(e,i)}function le(e,i){return(ce(),x(oe)).handler(e,i)}function He(e,i){let r=process.env.AWS_EXECUTION_ENV;return r&&r>="AWS_Lambda_nodejs18.x"?le(e,i):me(e,i)}0&&(module.exports={PHYSICAL_RESOURCE_ID_REFERENCE,handler,v2handler,v3handler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/asset.cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/asset.cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d/index.js new file mode 100644 index 0000000000000..b8736f86c3c65 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/asset.cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d/index.js @@ -0,0 +1 @@ +"use strict";var $=Object.create;var x=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var l=(e,i)=>()=>(e&&(i=e(e=0)),i);var w=(e,i)=>()=>(i||e((i={exports:{}}).exports,i),i.exports),u=(e,i)=>{for(var r in i)x(e,r,{get:i[r],enumerable:!0})},H=(e,i,r,a)=>{if(i&&typeof i=="object"||typeof i=="function")for(let t of ie(i))!ae.call(e,t)&&t!==r&&x(e,t,{get:()=>i[t],enumerable:!(a=ee(i,t))||a.enumerable});return e};var v=(e,i,r)=>(r=e!=null?$(re(e)):{},H(i||!e||!e.__esModule?x(r,"default",{value:e,enumerable:!0}):r,e)),p=e=>H(x({},"__esModule",{value:!0}),e);var q,S,R=l(()=>{"use strict";q=v(require("zlib")),S=()=>{let i=JSON.parse(q.brotliDecompressSync(Buffer.from("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","base64")).toString());return S=()=>i,i}});var D={};u(D,{Coercer:()=>k,coerceApiParameters:()=>J});function J(e,i,r={}){let a=S();return new k(a).coerceApiParameters(e,i,r)}function te(e){return e instanceof Uint8Array?e:typeof e=="string"||typeof e=="number"?new TextEncoder().encode(e.toString()):e}function ne(e){if(typeof e=="number")return e;if(typeof e=="string"){let i=Number(e);return isNaN(i)?e:i}return e}function se(e){if(typeof e=="string"||typeof e=="number"){let i=new Date(e);return isNaN(i.getTime())?e:i}return e}var k,N=l(()=>{"use strict";R();k=class{constructor(i){this.typeMachine=i}coerceApiParameters(i,r,a={}){let t=this.progress(r.toLowerCase(),this.progress(i.toLowerCase(),0));return this.recurse(a,t)}testCoerce(i){return this.recurse(i,0)}recurse(i,r){switch(r){case void 0:return i;case"b":return te(i);case"n":return ne(i);case"d":return se(i)}if(Array.isArray(i)){let a=this.progress("*",r);return a!==void 0?i.map(t=>this.recurse(t,a)):i}if(i&&typeof i=="object"){let a=this.progress("*",r);for(let t of Object.keys(i)){let s=this.progress(t,r)??a;s!==void 0&&(i[t]=this.recurse(i[t],s))}return i}return i}progress(i,r){if(!(r===void 0||typeof r!="number"))return this.typeMachine[r][i]}}});var j={};u(j,{findV3ClientConstructor:()=>U});function U(e){let[i,r]=Object.entries(e).find(([a])=>a.endsWith("Client")&&a!=="__Client");return r}var z=l(()=>{"use strict"});var K=w((Ne,oe)=>{oe.exports={acmpca:"acm-pca",apigateway:"api-gateway",arczonalshift:"arc-zonal-shift",alexaforbusiness:"alexa-for-business",appmesh:"app-mesh",applicationautoscaling:"application-auto-scaling",applicationinsights:"application-insights",augmentedairuntime:"sage-maker-a2iruntime",autoscaling:"auto-scaling",autoscalingplans:"auto-scaling-plans",backupgateway:"backup-gateway",bedrockruntime:"bedrock-runtime",cur:"cost-and-usage-report-service",chimesdkidentity:"chime-sdk-identity",chimesdkmediapipelines:"chime-sdk-media-pipelines",chimesdkmeetings:"chime-sdk-meetings",chimesdkmessaging:"chime-sdk-messaging",chimesdkvoice:"chime-sdk-voice",cloudhsmv2:"cloudhsm-v2",cloudsearchdomain:"cloudsearch-domain",cloudtraildata:"cloudtrail-data",cloudwatchevents:"cloudwatch-events",cloudwatchlogs:"cloudwatch-logs",codegurureviewer:"codeguru-reviewer",codegurusecurity:"codeguru-security",codestarnotifications:"codestar-notifications",codestarconnections:"codestar-connections",cognitoidentity:"cognito-identity",cognitoidentityserviceprovider:"cognito-identity-provider",cognitosync:"cognito-sync",computeoptimizer:"compute-optimizer",configservice:"config-service",connectcontactlens:"connect-contact-lens",costexplorer:"cost-explorer",customerprofiles:"customer-profiles",dms:"database-migration-service",datapipeline:"data-pipeline",devopsguru:"devops-guru",devicefarm:"device-farm",directconnect:"direct-connect",directoryservice:"directory-service",discovery:"application-discovery-service",docdbelastic:"docdb-elastic",dynamodbstreams:"dynamodb-streams",ec2instanceconnect:"ec2-instance-connect",ecrpublic:"ecr-public",elb:"elastic-load-balancing",elbv2:"elastic-load-balancing-v2",emrserverless:"emr-serverless",emrcontainers:"emr-containers",es:"elasticsearch-service",elasticbeanstalk:"elastic-beanstalk",elasticinference:"elastic-inference",elastictranscoder:"elastic-transcoder",finspacedata:"finspace-data",forecastqueryservice:"forecastquery",forecastservice:"forecast",globalaccelerator:"global-accelerator",iot1clickdevicesservice:"iot-1click-devices-service",iot1clickprojects:"iot-1click-projects",iotevents:"iot-events",ioteventsdata:"iot-events-data",iotjobsdataplane:"iot-jobs-data-plane",iotroborunner:"iot-roborunner",iotwireless:"iot-wireless",iotdata:"iot-data-plane",ivsrealtime:"ivs-realtime",kendraranking:"kendra-ranking",kinesisanalytics:"kinesis-analytics",kinesisanalyticsv2:"kinesis-analytics-v2",kinesisvideo:"kinesis-video",kinesisvideoarchivedmedia:"kinesis-video-archived-media",kinesisvideomedia:"kinesis-video-media",kinesisvideosignalingchannels:"kinesis-video-signaling",kinesisvideowebrtcstorage:"kinesis-video-webrtc-storage",launchwizard:"launch-wizard",lexmodelbuildingservice:"lex-model-building-service",lexmodelsv2:"lex-models-v2",lexruntime:"lex-runtime-service",lexruntimev2:"lex-runtime-v2",licensemanager:"license-manager",licensemanagerlinuxsubscriptions:"license-manager-linux-subscriptions",licensemanagerusersubscriptions:"license-manager-user-subscriptions",machinelearning:"machine-learning",managedblockchainquery:"managedblockchain-query",marketplacecatalog:"marketplace-catalog",marketplacecommerceanalytics:"marketplace-commerce-analytics",marketplaceentitlementservice:"marketplace-entitlement-service",marketplacemetering:"marketplace-metering",mediapackagevod:"mediapackage-vod",mediastoredata:"mediastore-data",medicalimaging:"medical-imaging",memorydb:"memory-db",migrationhub:"migration-hub",migrationhubconfig:"migrationhub-config",migrationhubrefactorspaces:"migration-hub-refactor-spaces",networkfirewall:"network-firewall",paymentcryptography:"payment-cryptography",paymentcryptographydata:"payment-cryptography-data",pcaconnectorad:"pca-connector-ad",personalizeevents:"personalize-events",personalizeruntime:"personalize-runtime",pinpointemail:"pinpoint-email",pinpointsmsvoice:"pinpoint-sms-voice",pinpointsmsvoicev2:"pinpoint-sms-voice-v2",qldbsession:"qldb-session",rdsdataservice:"rds-data",redshiftdata:"redshift-data",redshiftserverless:"redshift-serverless",resourceexplorer2:"resource-explorer-2",resourcegroups:"resource-groups",resourcegroupstaggingapi:"resource-groups-tagging-api",route53:"route-53",route53domains:"route-53-domains",route53recoverycluster:"route53-recovery-cluster",route53recoverycontrolconfig:"route53-recovery-control-config",route53recoveryreadiness:"route53-recovery-readiness",s3control:"s3-control",ssmcontacts:"ssm-contacts",ssmincidents:"ssm-incidents",ssoadmin:"sso-admin",ssooidc:"sso-oidc",sagemakerfeaturestoreruntime:"sagemaker-featurestore-runtime",sagemakergeospatial:"sagemaker-geospatial",sagemakermetrics:"sagemaker-metrics",sagemakerruntime:"sagemaker-runtime",sagemakeredge:"sagemaker-edge",secretsmanager:"secrets-manager",servicecatalog:"service-catalog",servicecatalogappregistry:"service-catalog-appregistry",servicequotas:"service-quotas",snowdevicemanagement:"snow-device-management",ssmsap:"ssm-sap",stepfunctions:"sfn",storagegateway:"storage-gateway",supportapp:"support-app",timestreamquery:"timestream-query",timestreamwrite:"timestream-write",transcribeservice:"transcribe",voiceid:"voice-id",vpclattice:"vpc-lattice",wafregional:"waf-regional",workspacesweb:"workspaces-web"}});var Z=w((Ue,ce)=>{ce.exports={accessanalyzer:{iamPrefix:"access-analyzer"},account:{iamPrefix:"account"},"acm-pca":{iamPrefix:"acm-pca"},acm:{iamPrefix:"acm"},"alexa-for-business":{iamPrefix:"a4b"},amp:{iamPrefix:"aps"},amplify:{iamPrefix:"amplify"},amplifybackend:{iamPrefix:"amplifybackend"},amplifyuibuilder:{iamPrefix:"amplifyuibuilder"},"api-gateway":{iamPrefix:"apigateway"},apigatewaymanagementapi:{iamPrefix:"execute-api"},apigatewayv2:{iamPrefix:"apigateway"},"app-mesh":{iamPrefix:"appmesh"},appconfig:{iamPrefix:"appconfig"},appconfigdata:{iamPrefix:"appconfig"},appfabric:{iamPrefix:"appfabric"},appflow:{iamPrefix:"appflow"},appintegrations:{iamPrefix:"app-integrations"},"application-auto-scaling":{iamPrefix:"application-autoscaling"},"application-discovery-service":{iamPrefix:"discovery"},"application-insights":{iamPrefix:"applicationinsights"},applicationcostprofiler:{iamPrefix:"application-cost-profiler"},apprunner:{iamPrefix:"apprunner"},appstream:{iamPrefix:"appstream"},appsync:{iamPrefix:"appsync"},"arc-zonal-shift":{iamPrefix:"arc-zonal-shift"},athena:{iamPrefix:"athena"},auditmanager:{iamPrefix:"auditmanager"},"auto-scaling-plans":{iamPrefix:"autoscaling-plans"},"auto-scaling":{iamPrefix:"autoscaling"},b2bi:{iamPrefix:"b2bi"},"backup-gateway":{iamPrefix:"backup-gateway"},backup:{iamPrefix:"backup"},backupstorage:{iamPrefix:"backup-storage"},batch:{iamPrefix:"batch"},"bcm-data-exports":{iamPrefix:"bcm-data-exports"},"bedrock-agent-runtime":{iamPrefix:"bedrock"},"bedrock-agent":{iamPrefix:"bedrock"},"bedrock-runtime":{iamPrefix:"bedrock"},bedrock:{iamPrefix:"bedrock"},billingconductor:{iamPrefix:"billingconductor"},braket:{iamPrefix:"braket"},budgets:{iamPrefix:"budgets"},"chime-sdk-identity":{iamPrefix:"chime"},"chime-sdk-media-pipelines":{iamPrefix:"chime"},"chime-sdk-meetings":{iamPrefix:"chime"},"chime-sdk-messaging":{iamPrefix:"chime"},"chime-sdk-voice":{iamPrefix:"chime"},chime:{iamPrefix:"chime"},cleanrooms:{iamPrefix:"cleanrooms"},cleanroomsml:{iamPrefix:"cleanrooms-ml"},cloud9:{iamPrefix:"cloud9"},cloudcontrol:{iamPrefix:"cloudcontrolapi"},clouddirectory:{iamPrefix:"clouddirectory"},cloudformation:{iamPrefix:"cloudformation"},"cloudfront-keyvaluestore":{iamPrefix:"cloudfront-keyvaluestore"},cloudfront:{iamPrefix:"cloudfront"},"cloudhsm-v2":{iamPrefix:"cloudhsm"},cloudhsm:{iamPrefix:"cloudhsm"},"cloudsearch-domain":{iamPrefix:"cloudsearch"},cloudsearch:{iamPrefix:"cloudsearch"},"cloudtrail-data":{iamPrefix:"cloudtrail-data"},cloudtrail:{iamPrefix:"cloudtrail"},"cloudwatch-events":{iamPrefix:"events"},"cloudwatch-logs":{iamPrefix:"logs"},cloudwatch:{iamPrefix:"cloudwatch"},codeartifact:{iamPrefix:"codeartifact"},codebuild:{iamPrefix:"codebuild"},codecatalyst:{},codecommit:{iamPrefix:"codecommit"},codedeploy:{iamPrefix:"codedeploy"},"codeguru-reviewer":{iamPrefix:"codeguru-reviewer"},"codeguru-security":{iamPrefix:"codeguru-security"},codeguruprofiler:{iamPrefix:"codeguru-profiler"},codepipeline:{iamPrefix:"codepipeline"},"codestar-connections":{iamPrefix:"codestar-connections"},"codestar-notifications":{iamPrefix:"codestar-notifications"},codestar:{iamPrefix:"codestar"},"cognito-identity-provider":{iamPrefix:"cognito-idp"},"cognito-identity":{iamPrefix:"cognito-identity"},"cognito-sync":{iamPrefix:"cognito-sync"},comprehend:{iamPrefix:"comprehend"},comprehendmedical:{iamPrefix:"comprehendmedical"},"compute-optimizer":{iamPrefix:"compute-optimizer"},"config-service":{iamPrefix:"config"},"connect-contact-lens":{iamPrefix:"connect"},connect:{iamPrefix:"connect"},connectcampaigns:{iamPrefix:"connect-campaigns"},connectcases:{iamPrefix:"cases"},connectparticipant:{iamPrefix:"execute-api"},controltower:{iamPrefix:"controltower"},"cost-and-usage-report-service":{iamPrefix:"cur"},"cost-explorer":{iamPrefix:"ce"},"cost-optimization-hub":{iamPrefix:"cost-optimization-hub"},"customer-profiles":{iamPrefix:"profile"},"data-pipeline":{iamPrefix:"datapipeline"},"database-migration-service":{iamPrefix:"dms"},databrew:{iamPrefix:"databrew"},dataexchange:{iamPrefix:"dataexchange"},datasync:{iamPrefix:"datasync"},datazone:{iamPrefix:"datazone"},dax:{iamPrefix:"dax"},detective:{iamPrefix:"detective"},"device-farm":{iamPrefix:"devicefarm"},"devops-guru":{iamPrefix:"devops-guru"},"direct-connect":{iamPrefix:"directconnect"},"directory-service":{iamPrefix:"ds"},dlm:{iamPrefix:"dlm"},"docdb-elastic":{iamPrefix:"docdb-elastic"},docdb:{iamPrefix:"rds"},drs:{iamPrefix:"drs"},"dynamodb-streams":{iamPrefix:"dynamodb"},dynamodb:{iamPrefix:"dynamodb"},ebs:{iamPrefix:"ebs"},"ec2-instance-connect":{iamPrefix:"ec2-instance-connect"},ec2:{iamPrefix:"ec2"},"ecr-public":{iamPrefix:"ecr-public"},ecr:{iamPrefix:"ecr"},ecs:{iamPrefix:"ecs",commands:["ExecuteCommand"]},efs:{iamPrefix:"elasticfilesystem"},"eks-auth":{iamPrefix:"eks-auth"},eks:{iamPrefix:"eks"},"elastic-beanstalk":{iamPrefix:"elasticbeanstalk"},"elastic-inference":{iamPrefix:"elastic-inference"},"elastic-load-balancing-v2":{iamPrefix:"elasticloadbalancing"},"elastic-load-balancing":{iamPrefix:"elasticloadbalancing"},"elastic-transcoder":{iamPrefix:"elastictranscoder"},elasticache:{iamPrefix:"elasticache"},"elasticsearch-service":{iamPrefix:"es"},"emr-containers":{iamPrefix:"emr-containers"},"emr-serverless":{iamPrefix:"emr-serverless"},emr:{iamPrefix:"elasticmapreduce"},entityresolution:{iamPrefix:"entityresolution"},eventbridge:{iamPrefix:"events"},evidently:{iamPrefix:"evidently"},"finspace-data":{iamPrefix:"finspace-api"},finspace:{iamPrefix:"finspace"},firehose:{iamPrefix:"firehose"},fis:{iamPrefix:"fis"},fms:{iamPrefix:"fms"},forecast:{iamPrefix:"forecast"},forecastquery:{iamPrefix:"forecast"},frauddetector:{iamPrefix:"frauddetector"},freetier:{iamPrefix:"freetier"},fsx:{iamPrefix:"fsx"},gamelift:{iamPrefix:"gamelift"},glacier:{iamPrefix:"glacier"},"global-accelerator":{iamPrefix:"globalaccelerator"},glue:{iamPrefix:"glue"},grafana:{iamPrefix:"grafana"},greengrass:{iamPrefix:"greengrass"},greengrassv2:{iamPrefix:"greengrass"},groundstation:{iamPrefix:"groundstation"},guardduty:{iamPrefix:"guardduty"},health:{iamPrefix:"health"},healthlake:{iamPrefix:"healthlake"},honeycode:{iamPrefix:"honeycode"},iam:{iamPrefix:"iam"},identitystore:{iamPrefix:"identitystore"},imagebuilder:{iamPrefix:"imagebuilder"},"inspector-scan":{iamPrefix:"inspector-scan"},inspector:{iamPrefix:"inspector"},inspector2:{iamPrefix:"inspector2"},internetmonitor:{iamPrefix:"internetmonitor"},"iot-1click-devices-service":{iamPrefix:"iot1click"},"iot-1click-projects":{iamPrefix:"iot1click"},"iot-data-plane":{iamPrefix:"iotdata"},"iot-events-data":{iamPrefix:"ioteventsdata"},"iot-events":{iamPrefix:"iotevents"},"iot-jobs-data-plane":{iamPrefix:"iot-jobs-data"},"iot-roborunner":{iamPrefix:"iotroborunner"},"iot-wireless":{iamPrefix:"iotwireless"},iot:{iamPrefix:"iot"},iotanalytics:{iamPrefix:"iotanalytics"},iotdeviceadvisor:{iamPrefix:"iotdeviceadvisor"},iotfleethub:{iamPrefix:"iotfleethub"},iotfleetwise:{iamPrefix:"iotfleetwise"},iotsecuretunneling:{iamPrefix:"IoTSecuredTunneling"},iotsitewise:{iamPrefix:"iotsitewise"},iotthingsgraph:{iamPrefix:"iotthingsgraph"},iottwinmaker:{iamPrefix:"iottwinmaker"},"ivs-realtime":{iamPrefix:"ivs"},ivs:{iamPrefix:"ivs"},ivschat:{iamPrefix:"ivschat"},kafka:{iamPrefix:"kafka"},kafkaconnect:{iamPrefix:"kafkaconnect"},"kendra-ranking":{iamPrefix:"kendra-ranking"},kendra:{iamPrefix:"kendra"},keyspaces:{iamPrefix:"cassandra"},"kinesis-analytics-v2":{iamPrefix:"kinesisanalytics"},"kinesis-analytics":{iamPrefix:"kinesisanalytics"},"kinesis-video-archived-media":{iamPrefix:"kinesisvideo"},"kinesis-video-media":{iamPrefix:"kinesisvideo"},"kinesis-video-signaling":{iamPrefix:"kinesisvideo"},"kinesis-video-webrtc-storage":{iamPrefix:"kinesisvideo"},"kinesis-video":{iamPrefix:"kinesisvideo"},kinesis:{iamPrefix:"kinesis"},kms:{iamPrefix:"kms"},lakeformation:{iamPrefix:"lakeformation"},lambda:{iamPrefix:"lambda"},"launch-wizard":{iamPrefix:"launchwizard"},"lex-model-building-service":{iamPrefix:"lex"},"lex-models-v2":{iamPrefix:"lex"},"lex-runtime-service":{iamPrefix:"lex"},"lex-runtime-v2":{iamPrefix:"lex"},"license-manager-linux-subscriptions":{iamPrefix:"license-manager-linux-subscriptions"},"license-manager-user-subscriptions":{iamPrefix:"license-manager-user-subscriptions"},"license-manager":{iamPrefix:"license-manager"},lightsail:{iamPrefix:"lightsail"},location:{iamPrefix:"geo"},lookoutequipment:{iamPrefix:"lookoutequipment"},lookoutmetrics:{iamPrefix:"lookoutmetrics"},lookoutvision:{iamPrefix:"lookoutvision"},m2:{iamPrefix:"m2"},"machine-learning":{iamPrefix:"machinelearning"},macie2:{iamPrefix:"macie2"},"managedblockchain-query":{iamPrefix:"managedblockchain-query"},managedblockchain:{iamPrefix:"managedblockchain"},"marketplace-agreement":{iamPrefix:"aws-marketplace"},"marketplace-catalog":{iamPrefix:"aws-marketplace"},"marketplace-commerce-analytics":{iamPrefix:"marketplacecommerceanalytics"},"marketplace-deployment":{iamPrefix:"aws-marketplace"},"marketplace-entitlement-service":{iamPrefix:"aws-marketplace"},"marketplace-metering":{iamPrefix:"aws-marketplace"},mediaconnect:{iamPrefix:"mediaconnect"},mediaconvert:{iamPrefix:"mediaconvert"},medialive:{iamPrefix:"medialive"},"mediapackage-vod":{iamPrefix:"mediapackage-vod"},mediapackage:{iamPrefix:"mediapackage"},mediapackagev2:{iamPrefix:"mediapackagev2"},"mediastore-data":{iamPrefix:"mediastore"},mediastore:{iamPrefix:"mediastore"},mediatailor:{iamPrefix:"mediatailor"},"medical-imaging":{iamPrefix:"medical-imaging"},memorydb:{iamPrefix:"memorydb"},mgn:{iamPrefix:"mgn"},"migration-hub-refactor-spaces":{iamPrefix:"refactor-spaces"},"migration-hub":{iamPrefix:"mgh"},"migrationhub-config":{iamPrefix:"mgh"},migrationhuborchestrator:{iamPrefix:"migrationhub-orchestrator"},migrationhubstrategy:{iamPrefix:"migrationhub-strategy"},mobile:{iamPrefix:"AWSMobileHubService"},mq:{iamPrefix:"mq"},mturk:{iamPrefix:"mturk-requester"},mwaa:{iamPrefix:"airflow"},"neptune-graph":{iamPrefix:"neptune-graph"},neptune:{iamPrefix:"rds"},neptunedata:{iamPrefix:"neptune-db"},"network-firewall":{iamPrefix:"network-firewall"},networkmanager:{iamPrefix:"networkmanager"},networkmonitor:{iamPrefix:"networkmonitor"},nimble:{iamPrefix:"nimble"},oam:{iamPrefix:"oam"},omics:{iamPrefix:"omics"},opensearch:{iamPrefix:"es"},opensearchserverless:{iamPrefix:"aoss"},opsworks:{iamPrefix:"opsworks"},opsworkscm:{iamPrefix:"opsworks-cm"},organizations:{iamPrefix:"organizations"},osis:{iamPrefix:"osis"},outposts:{iamPrefix:"outposts"},panorama:{iamPrefix:"panorama"},"payment-cryptography-data":{iamPrefix:"payment-cryptography"},"payment-cryptography":{iamPrefix:"payment-cryptography"},"pca-connector-ad":{iamPrefix:"pca-connector-ad"},"personalize-events":{iamPrefix:"personalize"},"personalize-runtime":{iamPrefix:"personalize"},personalize:{iamPrefix:"personalize"},pi:{iamPrefix:"pi"},"pinpoint-email":{iamPrefix:"ses"},"pinpoint-sms-voice-v2":{iamPrefix:"sms-voice"},"pinpoint-sms-voice":{iamPrefix:"sms-voice"},pinpoint:{iamPrefix:"mobiletargeting"},pipes:{iamPrefix:"pipes"},polly:{iamPrefix:"polly"},pricing:{iamPrefix:"pricing"},privatenetworks:{iamPrefix:"private-networks"},proton:{iamPrefix:"proton"},qbusiness:{iamPrefix:"qbusiness"},qconnect:{iamPrefix:"wisdom"},"qldb-session":{iamPrefix:"qldb",commands:["SendCommand"]},qldb:{iamPrefix:"qldb"},quicksight:{iamPrefix:"quicksight"},ram:{iamPrefix:"ram"},rbin:{iamPrefix:"rbin"},"rds-data":{iamPrefix:"rds-data"},rds:{iamPrefix:"rds"},"redshift-data":{iamPrefix:"redshift-data"},"redshift-serverless":{iamPrefix:"redshift-serverless"},redshift:{iamPrefix:"redshift"},rekognition:{iamPrefix:"rekognition"},rekognitionstreaming:{iamPrefix:"rekognition"},repostspace:{iamPrefix:"repostspace"},resiliencehub:{iamPrefix:"resiliencehub"},"resource-explorer-2":{iamPrefix:"resource-explorer-2"},"resource-groups-tagging-api":{iamPrefix:"tagging"},"resource-groups":{iamPrefix:"resource-groups"},robomaker:{iamPrefix:"robomaker"},rolesanywhere:{iamPrefix:"rolesanywhere"},"route-53-domains":{iamPrefix:"route53domains"},"route-53":{iamPrefix:"route53"},"route53-recovery-cluster":{iamPrefix:"route53-recovery-cluster"},"route53-recovery-control-config":{iamPrefix:"route53-recovery-control-config"},"route53-recovery-readiness":{iamPrefix:"route53-recovery-readiness"},route53resolver:{iamPrefix:"route53resolver"},rum:{iamPrefix:"rum"},"s3-control":{iamPrefix:"s3"},s3:{iamPrefix:"s3"},s3outposts:{iamPrefix:"s3-outposts"},"sagemaker-a2i-runtime":{iamPrefix:"sagemaker"},"sagemaker-edge":{iamPrefix:"sagemaker"},"sagemaker-featurestore-runtime":{iamPrefix:"sagemaker"},"sagemaker-geospatial":{iamPrefix:"sagemaker-geospatial"},"sagemaker-metrics":{iamPrefix:"sagemaker"},"sagemaker-runtime":{iamPrefix:"sagemaker"},sagemaker:{iamPrefix:"sagemaker"},savingsplans:{iamPrefix:"savingsplans"},scheduler:{iamPrefix:"scheduler"},schemas:{iamPrefix:"schemas"},"secrets-manager":{iamPrefix:"secretsmanager"},securityhub:{iamPrefix:"securityhub"},securitylake:{iamPrefix:"securitylake"},serverlessapplicationrepository:{iamPrefix:"serverlessrepo"},"service-catalog-appregistry":{iamPrefix:"servicecatalog"},"service-catalog":{iamPrefix:"servicecatalog"},"service-quotas":{iamPrefix:"servicequotas"},servicediscovery:{iamPrefix:"servicediscovery"},ses:{iamPrefix:"ses"},sesv2:{iamPrefix:"ses"},sfn:{iamPrefix:"states"},shield:{iamPrefix:"shield"},signer:{iamPrefix:"signer"},simspaceweaver:{iamPrefix:"simspaceweaver"},sms:{iamPrefix:"sms"},"snow-device-management":{iamPrefix:"snow-device-management"},snowball:{iamPrefix:"snowball"},sns:{iamPrefix:"sns"},sqs:{iamPrefix:"sqs"},"ssm-contacts":{iamPrefix:"ssm-contacts"},"ssm-incidents":{iamPrefix:"ssm-incidents"},"ssm-sap":{iamPrefix:"ssm-sap"},ssm:{iamPrefix:"ssm",commands:["CancelCommand","SendCommand"]},"sso-admin":{iamPrefix:"sso"},"sso-oidc":{iamPrefix:"sso-oauth"},sso:{iamPrefix:"awsssoportal"},"storage-gateway":{iamPrefix:"storagegateway"},sts:{iamPrefix:"sts"},supplychain:{iamPrefix:"scn"},"support-app":{iamPrefix:"supportapp"},support:{iamPrefix:"support"},swf:{iamPrefix:"swf"},synthetics:{iamPrefix:"synthetics"},textract:{iamPrefix:"textract"},"timestream-query":{iamPrefix:"timestream"},"timestream-write":{iamPrefix:"timestream"},tnb:{iamPrefix:"tnb"},"transcribe-streaming":{iamPrefix:"transcribe"},transcribe:{iamPrefix:"transcribe"},transfer:{iamPrefix:"transfer"},translate:{iamPrefix:"translate"},trustedadvisor:{iamPrefix:"trustedadvisor"},verifiedpermissions:{iamPrefix:"verifiedpermissions"},"voice-id":{iamPrefix:"voiceid"},"vpc-lattice":{iamPrefix:"vpc-lattice"},"waf-regional":{iamPrefix:"waf-regional"},waf:{iamPrefix:"waf"},wafv2:{iamPrefix:"wafv2"},wellarchitected:{iamPrefix:"wellarchitected"},wisdom:{iamPrefix:"wisdom"},workdocs:{iamPrefix:"workdocs"},worklink:{iamPrefix:"worklink"},workmail:{iamPrefix:"workmail"},workmailmessageflow:{iamPrefix:"workmailmessageflow"},"workspaces-thin-client":{iamPrefix:"thinclient"},"workspaces-web":{iamPrefix:"workspaces-web"},workspaces:{iamPrefix:"workspaces"},xray:{iamPrefix:"xray"}}});var E={};u(E,{normalizeActionName:()=>T,normalizeServiceName:()=>A});function A(e){return e=e.toLowerCase(),e=e.replace(/^@aws-sdk\/client-/,""),e=me()?.[e]??e,e}function T(e,i){return i.charAt(0).toLowerCase()===i.charAt(0)?i.charAt(0).toUpperCase()+i.slice(1):fe()[e]?.commands?.includes(i)?i:i.replace(/Command$/,"")}function me(){return K()}function fe(){return Z()}var O=l(()=>{"use strict"});var Y={};u(Y,{ApiCall:()=>C,coerceSdkv3Response:()=>y,flatten:()=>I});function I(e){let i={};return r(e),i;function r(a,t=[]){if(a&&typeof a=="object"){for(let[s,o]of Object.entries(a))r(o,[...t,s]);return}i[t.join(".")]=a}}async function y(e){if(e&&typeof e=="object"&&typeof e.transformToString=="function")return e.transformToString();if(Buffer.isBuffer(e))return e.toString("utf8");if(ArrayBuffer.isView(e))return de.decode(e.buffer);if(Array.isArray(e)){let i=[];for(let r of e)i.push(await y(r));return i}if(e&&typeof e=="object"){for(let i of Object.keys(e))e[i]=await y(e[i]);return e}return e}var C,de,L=l(()=>{"use strict";N();z();O();C=class{constructor(i,r){this.service=A(i),this.action=T(this.service,r),this.v3PackageName=`@aws-sdk/client-${this.service}`}async invoke(i){this.initializePackage(i.sdkPackage),this.initializeClient(i);let r=this.findCommandClass(),a=await this.client.send(new r(J(this.service,this.action,i.parameters??{})));delete a.$metadata;let t=await y(a);return i.flattenResponse?I(t):t}initializePackage(i){if(!this.v3Package){if(i){this.v3Package=i;return}try{this.v3Package=require(this.v3PackageName)}catch{throw Error(`Service ${this.service} client package with name '${this.v3PackageName}' does not exist.`)}}}initializeClient(i){this.v3Package||this.initializePackage();let r=this.findConstructor(this.v3Package);return this.client=new r({apiVersion:i.apiVersion,credentials:i.credentials,region:i.region}),this.client}findCommandClass(){this.v3Package||this.initializePackage();let i=`${this.action}Command`,r=Object.entries(this.v3Package??{}).find(([a])=>a.toLowerCase()===i.toLowerCase())?.[1];if(!r)throw new Error(`Unable to find command named: ${i} for action: ${this.action} in service package ${this.v3PackageName}`);return r}findConstructor(i){try{let r=U(i);if(!r)throw new Error("findV3ClientConstructor returned undefined");return r}catch(r){throw console.error(r),Error(`No client constructor found within package: ${this.v3PackageName}`)}}};de=new TextDecoder});var W=w(n=>{"use strict";var le=n&&n.__createBinding||(Object.create?function(e,i,r,a){a===void 0&&(a=r);var t=Object.getOwnPropertyDescriptor(i,r);(!t||("get"in t?!i.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return i[r]}}),Object.defineProperty(e,a,t)}:function(e,i,r,a){a===void 0&&(a=r),e[a]=i[r]}),ue=n&&n.__exportStar||function(e,i){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(i,r)&&le(i,e,r)};Object.defineProperty(n,"__esModule",{value:!0});n.normalizeActionName=n.normalizeServiceName=n.findV3ClientConstructor=n.coerceApiParameters=void 0;var pe=(N(),p(D));Object.defineProperty(n,"coerceApiParameters",{enumerable:!0,get:function(){return pe.coerceApiParameters}});var ge=(z(),p(j));Object.defineProperty(n,"findV3ClientConstructor",{enumerable:!0,get:function(){return ge.findV3ClientConstructor}});var M=(O(),p(E));Object.defineProperty(n,"normalizeServiceName",{enumerable:!0,get:function(){return M.normalizeServiceName}});Object.defineProperty(n,"normalizeActionName",{enumerable:!0,get:function(){return M.normalizeActionName}});ue((L(),p(Y)),n)});var he={};u(he,{handler:()=>be});module.exports=p(he);var _=v(W());var Q=require("child_process"),b={};function Pe(e){console.log(`Installing latest AWS SDK v3: ${e}`),(0,Q.execSync)(`NPM_CONFIG_UPDATE_NOTIFIER=false HOME=/tmp npm install ${JSON.stringify(e)} --omit=dev --no-package-lock --no-save --prefix /tmp`),b={...b,[e]:!0}}async function V(e,i){let r;try{if(!b[e]&&i==="true")try{Pe(e),r=require(`/tmp/node_modules/${e}`)}catch(a){return console.log(`Failed to install latest AWS SDK v3. Falling back to pre-installed version. Error: ${a}`),require(e)}else b[e]?r=require(`/tmp/node_modules/${e}`):r=require(e)}catch{throw Error(`Package ${e} does not exist.`)}return r}var xe="PHYSICAL:RESOURCEID:";function B(e,i){return r(e);function r(a){if(a===xe)return i;if(Array.isArray(a))return a.map(r);if(a&&typeof a=="object"){for(let[t,s]of Object.entries(a))a[t]=r(s);return a}return a}}function h(e){if(e)return JSON.parse(e)}function X(e,i,r,a,t,s){let o={Status:i,Reason:r,PhysicalResourceId:a,StackId:e.StackId,RequestId:e.RequestId,LogicalResourceId:e.LogicalResourceId,NoEcho:!1,Data:t};if(s)console.log("Responding",JSON.stringify(o));else{let{Data:c,...f}=o;console.log("Responding",JSON.stringify(f))}let g=require("url").parse(e.ResponseURL),P=JSON.stringify(o),m={hostname:g.hostname,path:g.path,method:"PUT",headers:{"content-type":"","content-length":Buffer.byteLength(P,"utf8")}};return new Promise((c,f)=>{try{let d=require("https").request(m,c);d.on("error",f),d.write(P),d.end()}catch(d){f(d)}})}async function F(e,i){let r;if(e.assumedRoleArn){let a=new Date().getTime(),t={RoleArn:e.assumedRoleArn,RoleSessionName:`${a}-${i}`.substring(0,64)},{fromTemporaryCredentials:s}=await import("@aws-sdk/credential-providers");r=s({params:t,clientConfig:e.region!==void 0?{region:e.region}:void 0})}return r}function G(e,i){let r;return e.outputPath?r=[e.outputPath]:e.outputPaths&&(r=e.outputPaths),r?ye(i,ke(r)):i}function ke(e){return function(i){for(let r of e)if(i.startsWith(r))return!0;return!1}}function ye(e,i){return Object.entries(e).reduce((r,[a,t])=>i(a)?{...r,[a]:t}:r,{})}async function be(e,i){try{e.ResourceProperties.Create=h(e.ResourceProperties.Create),e.ResourceProperties.Update=h(e.ResourceProperties.Update),e.ResourceProperties.Delete=h(e.ResourceProperties.Delete);let r={},a;switch(e.RequestType){case"Create":a=e.ResourceProperties.Create?.physicalResourceId?.id??e.ResourceProperties.Update?.physicalResourceId?.id??e.ResourceProperties.Delete?.physicalResourceId?.id??e.LogicalResourceId;break;case"Update":case"Delete":a=e.ResourceProperties[e.RequestType]?.physicalResourceId?.id??e.PhysicalResourceId;break}let t=e.ResourceProperties[e.RequestType],s=t?.logApiResponseData??!0;if(t){let o=new _.ApiCall(t.service,t.action),g=await V(o.v3PackageName,e.ResourceProperties.InstallLatestAwsSdk);console.log(JSON.stringify({...e,ResponseURL:"..."}));let P=await F(t,a),m={};try{let c=await o.invoke({sdkPackage:g,apiVersion:t.apiVersion,credentials:P,region:t.region,parameters:B(t.parameters,a),flattenResponse:!0});s&&console.log("API response",c),m.apiVersion=o.client.config.apiVersion,m.region=await o.client.config.region().catch(()=>{}),Object.assign(m,c),r=G(t,m)}catch(c){let f=c.name??c.constructor.name;if(!t.ignoreErrorCodesMatching||!new RegExp(t.ignoreErrorCodesMatching).test(f))throw c}t.physicalResourceId?.responsePath&&(a=m[t.physicalResourceId.responsePath])}await X(e,"SUCCESS","OK",a,r,s)}catch(r){console.log(r),await X(e,"FAILED",r.message||"Internal Error",i.logStreamName,{},!0)}}0&&(module.exports={handler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/cdk.out index 1f0068d32659a..1e02a2deb191b 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"36.0.0"} \ No newline at end of file +{"version":"40.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/integ-user-pool-client-explicit-props.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/integ-user-pool-client-explicit-props.assets.json index 37d7ea69486d3..14bf6e1505949 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/integ-user-pool-client-explicit-props.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/integ-user-pool-client-explicit-props.assets.json @@ -1,20 +1,20 @@ { - "version": "36.0.0", + "version": "40.0.0", "files": { - "746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e": { + "cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d": { "source": { - "path": "asset.746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e", + "path": "asset.cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e.zip", + "objectKey": "cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "818e0a5f80da9195c8bb51dd9e9da860f135a1d29343137b03b4c0e7d1d2c8a9": { + "4e1528b30aa4c87897402b0658fa637ca4bb716a7ff115374b6a972e96e1d077": { "source": { "path": "integ-user-pool-client-explicit-props.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "818e0a5f80da9195c8bb51dd9e9da860f135a1d29343137b03b4c0e7d1d2c8a9.json", + "objectKey": "4e1528b30aa4c87897402b0658fa637ca4bb716a7ff115374b6a972e96e1d077.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-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/integ-user-pool-client-explicit-props.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/integ-user-pool-client-explicit-props.template.json index 87318780a54b4..0342621eb1770 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/integ-user-pool-client-explicit-props.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/integ-user-pool-client-explicit-props.template.json @@ -129,7 +129,7 @@ { "Ref": "myuserpoolmyuserpoolclientAFB2274E" }, - "\"}}" + "\"},\"logApiResponseData\":false}" ] ] }, @@ -153,7 +153,7 @@ { "Ref": "myuserpoolmyuserpoolclientAFB2274E" }, - "\"}}" + "\"},\"logApiResponseData\":false}" ] ] }, @@ -229,7 +229,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e.zip" + "S3Key": "cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d.zip" }, "Handler": "index.handler", "Role": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/integ.json index 9a6c83a5bac91..cb01ab86e5dfa 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "40.0.0", "testCases": { "integ.user-pool-client-explicit-props": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/manifest.json index a2f4ad3b080cb..1f4cbe36c253c 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "40.0.0", "artifacts": { "integ-user-pool-client-explicit-props.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}/818e0a5f80da9195c8bb51dd9e9da860f135a1d29343137b03b4c0e7d1d2c8a9.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/4e1528b30aa4c87897402b0658fa637ca4bb716a7ff115374b6a972e96e1d077.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -34,24 +34,144 @@ "integ-user-pool-client-explicit-props.assets" ], "metadata": { + "/integ-user-pool-client-explicit-props/myuserpool": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "removalPolicy": "destroy", + "customAttributes": "*" + } + } + ], "/integ-user-pool-client-explicit-props/myuserpool/Resource": [ { "type": "aws:cdk:logicalId", "data": "myuserpool01998219" } ], + "/integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "userPool": "*", + "userPoolClientName": "*", + "authFlows": { + "adminUserPassword": true, + "custom": true, + "userPassword": true, + "userSrp": true, + "user": true + }, + "generateSecret": true, + "oAuth": { + "flows": { + "implicitCodeGrant": true, + "authorizationCodeGrant": true + }, + "scopes": "*", + "callbackUrls": "*" + }, + "preventUserExistenceErrors": true, + "authSessionValidity": "*", + "writeAttributes": "*" + } + } + ], "/integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/Resource": [ { "type": "aws:cdk:logicalId", "data": "myuserpoolmyuserpoolclientAFB2274E" } ], + "/integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/Provider": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "uuid": "*", + "lambdaPurpose": "*", + "memorySize": "*", + "timeout": "*", + "role": "*", + "logGroup": "*", + "functionName": "*", + "vpc": "*", + "vpcSubnets": "*", + "code": "*", + "handler": "*", + "runtime": "*" + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addMetadata": [ + "*", + true + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addMetadata": [ + "*", + "*" + ] + } + } + ], + "/integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/Resource": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + } + ], "/integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/Resource/Default": [ { "type": "aws:cdk:logicalId", "data": "myuserpoolmyuserpoolclientDescribeCognitoUserPoolClientEA733B32" } ], + "/integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/CustomResourcePolicy": [ + { + "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": [ + "*" + ] + } + } + ], "/integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/CustomResourcePolicy/Resource": [ { "type": "aws:cdk:logicalId", @@ -64,6 +184,61 @@ "data": "LatestNodeRuntimeMap" } ], + "/integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "memorySize": "*", + "timeout": "*", + "role": "*", + "logGroup": "*", + "functionName": "*", + "vpc": "*", + "vpcSubnets": "*", + "code": "*", + "handler": "*", + "runtime": "*" + } + }, + { + "type": "aws:cdk:is-custom-resource-handler-singleton", + "data": true + }, + { + "type": "aws:cdk:is-custom-resource-handler-runtime-family", + "data": 0 + } + ], + "/integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "assumedBy": { + "principalAccount": "*", + "assumeRoleAction": "*" + }, + "managedPolicies": [ + { + "managedPolicyArn": "*" + } + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachInlinePolicy": [ + "*" + ] + } + } + ], + "/integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/ImportServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], "/integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/Resource": [ { "type": "aws:cdk:logicalId", @@ -76,6 +251,14 @@ "data": "AWS679f53fac002430cb0da5b7982bd22872D164C4C" } ], + "/integ-user-pool-client-explicit-props/Secret": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "secretStringValue": "*" + } + } + ], "/integ-user-pool-client-explicit-props/Secret/Resource": [ { "type": "aws:cdk:logicalId", diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/tree.json index 3bd8520772679..f9f4c4946129d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-explicit-props.js.snapshot/tree.json @@ -1,427 +1 @@ -{ - "version": "tree-0.1", - "tree": { - "id": "App", - "path": "", - "children": { - "integ-user-pool-client-explicit-props": { - "id": "integ-user-pool-client-explicit-props", - "path": "integ-user-pool-client-explicit-props", - "children": { - "myuserpool": { - "id": "myuserpool", - "path": "integ-user-pool-client-explicit-props/myuserpool", - "children": { - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-explicit-props/myuserpool/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Cognito::UserPool", - "aws:cdk:cloudformation:props": { - "accountRecoverySetting": { - "recoveryMechanisms": [ - { - "name": "verified_phone_number", - "priority": 1 - }, - { - "name": "verified_email", - "priority": 2 - } - ] - }, - "adminCreateUserConfig": { - "allowAdminCreateUserOnly": true - }, - "emailVerificationMessage": "The verification code to your new account is {####}", - "emailVerificationSubject": "Verify your new account", - "schema": [ - { - "name": "attribute_one", - "attributeDataType": "String" - }, - { - "name": "attribute_two", - "attributeDataType": "String" - } - ], - "smsVerificationMessage": "The verification code to your new account is {####}", - "verificationMessageTemplate": { - "defaultEmailOption": "CONFIRM_WITH_CODE", - "emailMessage": "The verification code to your new account is {####}", - "emailSubject": "Verify your new account", - "smsMessage": "The verification code to your new account is {####}" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.CfnUserPool", - "version": "0.0.0" - } - }, - "myuserpoolclient": { - "id": "myuserpoolclient", - "path": "integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient", - "children": { - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Cognito::UserPoolClient", - "aws:cdk:cloudformation:props": { - "allowedOAuthFlows": [ - "implicit", - "code" - ], - "allowedOAuthFlowsUserPoolClient": true, - "allowedOAuthScopes": [ - "phone", - "email", - "openid", - "profile", - "aws.cognito.signin.user.admin" - ], - "authSessionValidity": 3, - "callbackUrLs": [ - "https://redirect-here.myapp.com" - ], - "clientName": "myuserpoolclient", - "explicitAuthFlows": [ - "ALLOW_USER_PASSWORD_AUTH", - "ALLOW_ADMIN_USER_PASSWORD_AUTH", - "ALLOW_CUSTOM_AUTH", - "ALLOW_USER_SRP_AUTH", - "ALLOW_USER_AUTH", - "ALLOW_REFRESH_TOKEN_AUTH" - ], - "generateSecret": true, - "preventUserExistenceErrors": "ENABLED", - "supportedIdentityProviders": [ - "COGNITO" - ], - "userPoolId": { - "Ref": "myuserpool01998219" - }, - "writeAttributes": [ - "address", - "birthdate", - "custom:attribute_one", - "custom:attribute_two", - "email", - "family_name", - "gender", - "given_name", - "locale", - "middle_name", - "name", - "nickname", - "phone_number", - "picture", - "preferred_username", - "profile", - "updated_at", - "website", - "zoneinfo" - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.CfnUserPoolClient", - "version": "0.0.0" - } - }, - "DescribeCognitoUserPoolClient": { - "id": "DescribeCognitoUserPoolClient", - "path": "integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient", - "children": { - "Provider": { - "id": "Provider", - "path": "integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/Provider", - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.SingletonFunction", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/Resource", - "children": { - "Default": { - "id": "Default", - "path": "integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/Resource/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0" - } - }, - "CustomResourcePolicy": { - "id": "CustomResourcePolicy", - "path": "integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/CustomResourcePolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/CustomResourcePolicy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "cognito-idp:DescribeUserPoolClient", - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "myuserpool01998219", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "myuserpoolmyuserpoolclientDescribeCognitoUserPoolClientCustomResourcePolicyF83BED40", - "roles": [ - { - "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.custom_resources.AwsCustomResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.UserPoolClient", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.UserPool", - "version": "0.0.0" - } - }, - "LatestNodeRuntimeMap": { - "id": "LatestNodeRuntimeMap", - "path": "integ-user-pool-client-explicit-props/LatestNodeRuntimeMap", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnMapping", - "version": "0.0.0" - } - }, - "AWS679f53fac002430cb0da5b7982bd2287": { - "id": "AWS679f53fac002430cb0da5b7982bd2287", - "path": "integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/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" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "0.0.0" - } - }, - "Code": { - "id": "Code", - "path": "integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/Code/AssetBucket", - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/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": "746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e.zip" - }, - "handler": "index.handler", - "role": { - "Fn::GetAtt": [ - "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", - "Arn" - ] - }, - "runtime": { - "Fn::FindInMap": [ - "LatestNodeRuntimeMap", - { - "Ref": "AWS::Region" - }, - "value" - ] - }, - "timeout": 120 - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "0.0.0" - } - }, - "Secret": { - "id": "Secret", - "path": "integ-user-pool-client-explicit-props/Secret", - "children": { - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-explicit-props/Secret/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::SecretsManager::Secret", - "aws:cdk:cloudformation:props": { - "secretString": { - "Fn::GetAtt": [ - "myuserpoolmyuserpoolclientDescribeCognitoUserPoolClientEA733B32", - "UserPoolClient.ClientSecret" - ] - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_secretsmanager.CfnSecret", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_secretsmanager.Secret", - "version": "0.0.0" - } - }, - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "integ-user-pool-client-explicit-props/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "integ-user-pool-client-explicit-props/CheckBootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnRule", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.Stack", - "version": "0.0.0" - } - }, - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.3.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.App", - "version": "0.0.0" - } - } -} \ No newline at end of file +{"version":"tree-0.1","tree":{"id":"App","path":"","children":{"integ-user-pool-client-explicit-props":{"id":"integ-user-pool-client-explicit-props","path":"integ-user-pool-client-explicit-props","children":{"myuserpool":{"id":"myuserpool","path":"integ-user-pool-client-explicit-props/myuserpool","children":{"Resource":{"id":"Resource","path":"integ-user-pool-client-explicit-props/myuserpool/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Cognito::UserPool","aws:cdk:cloudformation:props":{"accountRecoverySetting":{"recoveryMechanisms":[{"name":"verified_phone_number","priority":1},{"name":"verified_email","priority":2}]},"adminCreateUserConfig":{"allowAdminCreateUserOnly":true},"emailVerificationMessage":"The verification code to your new account is {####}","emailVerificationSubject":"Verify your new account","schema":[{"name":"attribute_one","attributeDataType":"String"},{"name":"attribute_two","attributeDataType":"String"}],"smsVerificationMessage":"The verification code to your new account is {####}","verificationMessageTemplate":{"defaultEmailOption":"CONFIRM_WITH_CODE","emailMessage":"The verification code to your new account is {####}","emailSubject":"Verify your new account","smsMessage":"The verification code to your new account is {####}"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.CfnUserPool","version":"0.0.0"}},"myuserpoolclient":{"id":"myuserpoolclient","path":"integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient","children":{"Resource":{"id":"Resource","path":"integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Cognito::UserPoolClient","aws:cdk:cloudformation:props":{"allowedOAuthFlows":["implicit","code"],"allowedOAuthFlowsUserPoolClient":true,"allowedOAuthScopes":["phone","email","openid","profile","aws.cognito.signin.user.admin"],"authSessionValidity":3,"callbackUrLs":["https://redirect-here.myapp.com"],"clientName":"myuserpoolclient","explicitAuthFlows":["ALLOW_USER_PASSWORD_AUTH","ALLOW_ADMIN_USER_PASSWORD_AUTH","ALLOW_CUSTOM_AUTH","ALLOW_USER_SRP_AUTH","ALLOW_USER_AUTH","ALLOW_REFRESH_TOKEN_AUTH"],"generateSecret":true,"preventUserExistenceErrors":"ENABLED","supportedIdentityProviders":["COGNITO"],"userPoolId":{"Ref":"myuserpool01998219"},"writeAttributes":["address","birthdate","custom:attribute_one","custom:attribute_two","email","family_name","gender","given_name","locale","middle_name","name","nickname","phone_number","picture","preferred_username","profile","updated_at","website","zoneinfo"]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.CfnUserPoolClient","version":"0.0.0"}},"DescribeCognitoUserPoolClient":{"id":"DescribeCognitoUserPoolClient","path":"integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient","children":{"Provider":{"id":"Provider","path":"integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/Provider","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.SingletonFunction","version":"0.0.0","metadata":[{"uuid":"*","lambdaPurpose":"*","memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"},{"addMetadata":["*",true]},{"addMetadata":["*","*"]}]}},"Resource":{"id":"Resource","path":"integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/Resource","children":{"Default":{"id":"Default","path":"integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/Resource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*","*","*"]}},"CustomResourcePolicy":{"id":"CustomResourcePolicy","path":"integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/CustomResourcePolicy","children":{"Resource":{"id":"Resource","path":"integ-user-pool-client-explicit-props/myuserpool/myuserpoolclient/DescribeCognitoUserPoolClient/CustomResourcePolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"cognito-idp:DescribeUserPoolClient","Effect":"Allow","Resource":{"Fn::GetAtt":["myuserpool01998219","Arn"]}}],"Version":"2012-10-17"},"policyName":"myuserpoolmyuserpoolclientDescribeCognitoUserPoolClientCustomResourcePolicyF83BED40","roles":[{"Ref":"AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.AwsCustomResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.UserPoolClient","version":"0.0.0","metadata":[{"userPool":"*","userPoolClientName":"*","authFlows":{"adminUserPassword":true,"custom":true,"userPassword":true,"userSrp":true,"user":true},"generateSecret":true,"oAuth":{"flows":{"implicitCodeGrant":true,"authorizationCodeGrant":true},"scopes":"*","callbackUrls":"*"},"preventUserExistenceErrors":true,"authSessionValidity":"*","writeAttributes":"*"}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.UserPool","version":"0.0.0","metadata":[{"removalPolicy":"destroy","customAttributes":"*"}]}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"integ-user-pool-client-explicit-props/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"AWS679f53fac002430cb0da5b7982bd2287":{"id":"AWS679f53fac002430cb0da5b7982bd2287","path":"integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287","children":{"ServiceRole":{"id":"ServiceRole","path":"integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"attachInlinePolicy":["*"]}]}},"Code":{"id":"Code","path":"integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/Code","children":{"Stage":{"id":"Stage","path":"integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/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":"integ-user-pool-client-explicit-props/AWS679f53fac002430cb0da5b7982bd2287/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":"cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":120}},"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":[{"memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"}]}},"Secret":{"id":"Secret","path":"integ-user-pool-client-explicit-props/Secret","children":{"Resource":{"id":"Resource","path":"integ-user-pool-client-explicit-props/Secret/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::Secret","aws:cdk:cloudformation:props":{"secretString":{"Fn::GetAtt":["myuserpoolmyuserpoolclientDescribeCognitoUserPoolClientEA733B32","UserPoolClient.ClientSecret"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecret","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.Secret","version":"0.0.0","metadata":[{"secretStringValue":"*"}]}},"BootstrapVersion":{"id":"BootstrapVersion","path":"integ-user-pool-client-explicit-props/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"integ-user-pool-client-explicit-props/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","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 diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/asset.746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/asset.746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e/index.js deleted file mode 100644 index 4ea000eba2e09..0000000000000 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/asset.746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e/index.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";var fe=Object.create;var h=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var pe=Object.getPrototypeOf,ge=Object.prototype.hasOwnProperty;var u=(e,i)=>()=>(e&&(i=e(e=0)),i);var R=(e,i)=>()=>(i||e((i={exports:{}}).exports,i),i.exports),P=(e,i)=>{for(var r in i)h(e,r,{get:i[r],enumerable:!0})},W=(e,i,r,a)=>{if(i&&typeof i=="object"||typeof i=="function")for(let t of ue(i))!ge.call(e,t)&&t!==r&&h(e,t,{get:()=>i[t],enumerable:!(a=de(i,t))||a.enumerable});return e};var k=(e,i,r)=>(r=e!=null?fe(pe(e)):{},W(i||!e||!e.__esModule?h(r,"default",{value:e,enumerable:!0}):r,e)),x=e=>W(h({},"__esModule",{value:!0}),e);function w(e,i){return r(e);function r(a){if(a===O)return i;if(Array.isArray(a))return a.map(r);if(a&&typeof a=="object"){for(let[t,o]of Object.entries(a))a[t]=r(o);return a}return a}}function v(e,i){return Object.entries(e).reduce((r,[a,t])=>i(a)?{...r,[a]:t}:r,{})}function y(e,i,r,a,t,o){let s={Status:i,Reason:r,PhysicalResourceId:a,StackId:e.StackId,RequestId:e.RequestId,LogicalResourceId:e.LogicalResourceId,NoEcho:!1,Data:t};if(o)console.log("Responding",JSON.stringify(s));else{let{Data:c,...n}=s;console.log("Responding",JSON.stringify(n))}let d=require("url").parse(e.ResponseURL),m=JSON.stringify(s),f={hostname:d.hostname,path:d.path,method:"PUT",headers:{"content-type":"","content-length":Buffer.byteLength(m,"utf8")}};return new Promise((c,n)=>{try{let g=require("https").request(f,c);g.on("error",n),g.write(m),g.end()}catch(g){n(g)}})}function p(e){if(e)return JSON.parse(e)}function S(e){return function(i){for(let r of e)if(i.startsWith(r))return!0;return!1}}var O,J=u(()=>{"use strict";O="PHYSICAL:RESOURCEID:"});var Z,C,Y=u(()=>{"use strict";Z=k(require("zlib")),C=()=>{let i=JSON.parse(Z.brotliDecompressSync(Buffer.from("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","base64")).toString());return C=()=>i,i}});var M={};P(M,{Coercer:()=>N,coerceApiParameters:()=>T});function T(e,i,r={}){let a=C();return new N(a).coerceApiParameters(e,i,r)}function Pe(e){return e instanceof Uint8Array?e:typeof e=="string"||typeof e=="number"?new TextEncoder().encode(e.toString()):e}function xe(e){if(typeof e=="number")return e;if(typeof e=="string"){let i=Number(e);return isNaN(i)?e:i}return e}function ye(e){if(typeof e=="string"||typeof e=="number"){let i=new Date(e);return isNaN(i.getTime())?e:i}return e}var N,z=u(()=>{"use strict";Y();N=class{constructor(i){this.typeMachine=i}coerceApiParameters(i,r,a={}){let t=this.progress(r.toLowerCase(),this.progress(i.toLowerCase(),0));return this.recurse(a,t)}testCoerce(i){return this.recurse(i,0)}recurse(i,r){switch(r){case void 0:return i;case"b":return Pe(i);case"n":return xe(i);case"d":return ye(i)}if(Array.isArray(i)){let a=this.progress("*",r);return a!==void 0?i.map(t=>this.recurse(t,a)):i}if(i&&typeof i=="object"){let a=this.progress("*",r);for(let t of Object.keys(i)){let o=this.progress(t,r)??a;o!==void 0&&(i[t]=this.recurse(i[t],o))}return i}return i}progress(i,r){if(!(r===void 0||typeof r!="number"))return this.typeMachine[r][i]}}});var V={};P(V,{findV3ClientConstructor:()=>X});function X(e){let[i,r]=Object.entries(e).find(([a])=>a.endsWith("Client")&&a!=="__Client");return r}var q=u(()=>{"use strict"});var Q=R((Ze,ke)=>{ke.exports={acmpca:"acm-pca",apigateway:"api-gateway",arczonalshift:"arc-zonal-shift",alexaforbusiness:"alexa-for-business",appmesh:"app-mesh",applicationautoscaling:"application-auto-scaling",applicationinsights:"application-insights",augmentedairuntime:"sage-maker-a2iruntime",autoscaling:"auto-scaling",autoscalingplans:"auto-scaling-plans",backupgateway:"backup-gateway",bedrockruntime:"bedrock-runtime",cur:"cost-and-usage-report-service",chimesdkidentity:"chime-sdk-identity",chimesdkmediapipelines:"chime-sdk-media-pipelines",chimesdkmeetings:"chime-sdk-meetings",chimesdkmessaging:"chime-sdk-messaging",chimesdkvoice:"chime-sdk-voice",cloudhsmv2:"cloudhsm-v2",cloudsearchdomain:"cloudsearch-domain",cloudtraildata:"cloudtrail-data",cloudwatchevents:"cloudwatch-events",cloudwatchlogs:"cloudwatch-logs",codegurureviewer:"codeguru-reviewer",codegurusecurity:"codeguru-security",codestarnotifications:"codestar-notifications",codestarconnections:"codestar-connections",cognitoidentity:"cognito-identity",cognitoidentityserviceprovider:"cognito-identity-provider",cognitosync:"cognito-sync",computeoptimizer:"compute-optimizer",configservice:"config-service",connectcontactlens:"connect-contact-lens",costexplorer:"cost-explorer",customerprofiles:"customer-profiles",dms:"database-migration-service",datapipeline:"data-pipeline",devopsguru:"devops-guru",devicefarm:"device-farm",directconnect:"direct-connect",directoryservice:"directory-service",discovery:"application-discovery-service",docdbelastic:"docdb-elastic",dynamodbstreams:"dynamodb-streams",ec2instanceconnect:"ec2-instance-connect",ecrpublic:"ecr-public",elb:"elastic-load-balancing",elbv2:"elastic-load-balancing-v2",emrserverless:"emr-serverless",emrcontainers:"emr-containers",es:"elasticsearch-service",elasticbeanstalk:"elastic-beanstalk",elasticinference:"elastic-inference",elastictranscoder:"elastic-transcoder",finspacedata:"finspace-data",forecastqueryservice:"forecastquery",forecastservice:"forecast",globalaccelerator:"global-accelerator",iot1clickdevicesservice:"iot-1click-devices-service",iot1clickprojects:"iot-1click-projects",iotevents:"iot-events",ioteventsdata:"iot-events-data",iotjobsdataplane:"iot-jobs-data-plane",iotroborunner:"iot-roborunner",iotwireless:"iot-wireless",iotdata:"iot-data-plane",ivsrealtime:"ivs-realtime",kendraranking:"kendra-ranking",kinesisanalytics:"kinesis-analytics",kinesisanalyticsv2:"kinesis-analytics-v2",kinesisvideo:"kinesis-video",kinesisvideoarchivedmedia:"kinesis-video-archived-media",kinesisvideomedia:"kinesis-video-media",kinesisvideosignalingchannels:"kinesis-video-signaling",kinesisvideowebrtcstorage:"kinesis-video-webrtc-storage",launchwizard:"launch-wizard",lexmodelbuildingservice:"lex-model-building-service",lexmodelsv2:"lex-models-v2",lexruntime:"lex-runtime-service",lexruntimev2:"lex-runtime-v2",licensemanager:"license-manager",licensemanagerlinuxsubscriptions:"license-manager-linux-subscriptions",licensemanagerusersubscriptions:"license-manager-user-subscriptions",machinelearning:"machine-learning",managedblockchainquery:"managedblockchain-query",marketplacecatalog:"marketplace-catalog",marketplacecommerceanalytics:"marketplace-commerce-analytics",marketplaceentitlementservice:"marketplace-entitlement-service",marketplacemetering:"marketplace-metering",mediapackagevod:"mediapackage-vod",mediastoredata:"mediastore-data",medicalimaging:"medical-imaging",memorydb:"memory-db",migrationhub:"migration-hub",migrationhubconfig:"migrationhub-config",migrationhubrefactorspaces:"migration-hub-refactor-spaces",networkfirewall:"network-firewall",paymentcryptography:"payment-cryptography",paymentcryptographydata:"payment-cryptography-data",pcaconnectorad:"pca-connector-ad",personalizeevents:"personalize-events",personalizeruntime:"personalize-runtime",pinpointemail:"pinpoint-email",pinpointsmsvoice:"pinpoint-sms-voice",pinpointsmsvoicev2:"pinpoint-sms-voice-v2",qldbsession:"qldb-session",rdsdataservice:"rds-data",redshiftdata:"redshift-data",redshiftserverless:"redshift-serverless",resourceexplorer2:"resource-explorer-2",resourcegroups:"resource-groups",resourcegroupstaggingapi:"resource-groups-tagging-api",route53:"route-53",route53domains:"route-53-domains",route53recoverycluster:"route53-recovery-cluster",route53recoverycontrolconfig:"route53-recovery-control-config",route53recoveryreadiness:"route53-recovery-readiness",s3control:"s3-control",ssmcontacts:"ssm-contacts",ssmincidents:"ssm-incidents",ssoadmin:"sso-admin",ssooidc:"sso-oidc",sagemakerfeaturestoreruntime:"sagemaker-featurestore-runtime",sagemakergeospatial:"sagemaker-geospatial",sagemakermetrics:"sagemaker-metrics",sagemakerruntime:"sagemaker-runtime",sagemakeredge:"sagemaker-edge",secretsmanager:"secrets-manager",servicecatalog:"service-catalog",servicecatalogappregistry:"service-catalog-appregistry",servicequotas:"service-quotas",snowdevicemanagement:"snow-device-management",ssmsap:"ssm-sap",stepfunctions:"sfn",storagegateway:"storage-gateway",supportapp:"support-app",timestreamquery:"timestream-query",timestreamwrite:"timestream-write",transcribeservice:"transcribe",voiceid:"voice-id",vpclattice:"vpc-lattice",wafregional:"waf-regional",workspacesweb:"workspaces-web"}});var B=R((Ye,be)=>{be.exports={accessanalyzer:{iamPrefix:"access-analyzer"},account:{iamPrefix:"account"},"acm-pca":{iamPrefix:"acm-pca"},acm:{iamPrefix:"acm"},"alexa-for-business":{iamPrefix:"a4b"},amp:{iamPrefix:"aps"},amplify:{iamPrefix:"amplify"},amplifybackend:{iamPrefix:"amplifybackend"},amplifyuibuilder:{iamPrefix:"amplifyuibuilder"},"api-gateway":{iamPrefix:"apigateway"},apigatewaymanagementapi:{iamPrefix:"execute-api"},apigatewayv2:{iamPrefix:"apigateway"},"app-mesh":{iamPrefix:"appmesh"},appconfig:{iamPrefix:"appconfig"},appconfigdata:{iamPrefix:"appconfig"},appfabric:{iamPrefix:"appfabric"},appflow:{iamPrefix:"appflow"},appintegrations:{iamPrefix:"app-integrations"},"application-auto-scaling":{iamPrefix:"application-autoscaling"},"application-discovery-service":{iamPrefix:"discovery"},"application-insights":{iamPrefix:"applicationinsights"},applicationcostprofiler:{iamPrefix:"application-cost-profiler"},apprunner:{iamPrefix:"apprunner"},appstream:{iamPrefix:"appstream"},appsync:{iamPrefix:"appsync"},"arc-zonal-shift":{iamPrefix:"arc-zonal-shift"},athena:{iamPrefix:"athena"},auditmanager:{iamPrefix:"auditmanager"},"auto-scaling-plans":{iamPrefix:"autoscaling-plans"},"auto-scaling":{iamPrefix:"autoscaling"},b2bi:{iamPrefix:"b2bi"},"backup-gateway":{iamPrefix:"backup-gateway"},backup:{iamPrefix:"backup"},backupstorage:{iamPrefix:"backup-storage"},batch:{iamPrefix:"batch"},"bcm-data-exports":{iamPrefix:"bcm-data-exports"},"bedrock-agent-runtime":{iamPrefix:"bedrock"},"bedrock-agent":{iamPrefix:"bedrock"},"bedrock-runtime":{iamPrefix:"bedrock"},bedrock:{iamPrefix:"bedrock"},billingconductor:{iamPrefix:"billingconductor"},braket:{iamPrefix:"braket"},budgets:{iamPrefix:"budgets"},"chime-sdk-identity":{iamPrefix:"chime"},"chime-sdk-media-pipelines":{iamPrefix:"chime"},"chime-sdk-meetings":{iamPrefix:"chime"},"chime-sdk-messaging":{iamPrefix:"chime"},"chime-sdk-voice":{iamPrefix:"chime"},chime:{iamPrefix:"chime"},cleanrooms:{iamPrefix:"cleanrooms"},cleanroomsml:{iamPrefix:"cleanrooms-ml"},cloud9:{iamPrefix:"cloud9"},cloudcontrol:{iamPrefix:"cloudcontrolapi"},clouddirectory:{iamPrefix:"clouddirectory"},cloudformation:{iamPrefix:"cloudformation"},"cloudfront-keyvaluestore":{iamPrefix:"cloudfront-keyvaluestore"},cloudfront:{iamPrefix:"cloudfront"},"cloudhsm-v2":{iamPrefix:"cloudhsm"},cloudhsm:{iamPrefix:"cloudhsm"},"cloudsearch-domain":{iamPrefix:"cloudsearch"},cloudsearch:{iamPrefix:"cloudsearch"},"cloudtrail-data":{iamPrefix:"cloudtrail-data"},cloudtrail:{iamPrefix:"cloudtrail"},"cloudwatch-events":{iamPrefix:"events"},"cloudwatch-logs":{iamPrefix:"logs"},cloudwatch:{iamPrefix:"monitoring"},codeartifact:{iamPrefix:"codeartifact"},codebuild:{iamPrefix:"codebuild"},codecatalyst:{},codecommit:{iamPrefix:"codecommit"},codedeploy:{iamPrefix:"codedeploy"},"codeguru-reviewer":{iamPrefix:"codeguru-reviewer"},"codeguru-security":{iamPrefix:"codeguru-security"},codeguruprofiler:{iamPrefix:"codeguru-profiler"},codepipeline:{iamPrefix:"codepipeline"},"codestar-connections":{iamPrefix:"codestar-connections"},"codestar-notifications":{iamPrefix:"codestar-notifications"},codestar:{iamPrefix:"codestar"},"cognito-identity-provider":{iamPrefix:"cognito-idp"},"cognito-identity":{iamPrefix:"cognito-identity"},"cognito-sync":{iamPrefix:"cognito-sync"},comprehend:{iamPrefix:"comprehend"},comprehendmedical:{iamPrefix:"comprehendmedical"},"compute-optimizer":{iamPrefix:"compute-optimizer"},"config-service":{iamPrefix:"config"},"connect-contact-lens":{iamPrefix:"connect"},connect:{iamPrefix:"connect"},connectcampaigns:{iamPrefix:"connect-campaigns"},connectcases:{iamPrefix:"cases"},connectparticipant:{iamPrefix:"execute-api"},controltower:{iamPrefix:"controltower"},"cost-and-usage-report-service":{iamPrefix:"cur"},"cost-explorer":{iamPrefix:"ce"},"cost-optimization-hub":{iamPrefix:"cost-optimization-hub"},"customer-profiles":{iamPrefix:"profile"},"data-pipeline":{iamPrefix:"datapipeline"},"database-migration-service":{iamPrefix:"dms"},databrew:{iamPrefix:"databrew"},dataexchange:{iamPrefix:"dataexchange"},datasync:{iamPrefix:"datasync"},datazone:{iamPrefix:"datazone"},dax:{iamPrefix:"dax"},detective:{iamPrefix:"detective"},"device-farm":{iamPrefix:"devicefarm"},"devops-guru":{iamPrefix:"devops-guru"},"direct-connect":{iamPrefix:"directconnect"},"directory-service":{iamPrefix:"ds"},dlm:{iamPrefix:"dlm"},"docdb-elastic":{iamPrefix:"docdb-elastic"},docdb:{iamPrefix:"rds"},drs:{iamPrefix:"drs"},"dynamodb-streams":{iamPrefix:"dynamodb"},dynamodb:{iamPrefix:"dynamodb"},ebs:{iamPrefix:"ebs"},"ec2-instance-connect":{iamPrefix:"ec2-instance-connect"},ec2:{iamPrefix:"ec2"},"ecr-public":{iamPrefix:"ecr-public"},ecr:{iamPrefix:"ecr"},ecs:{iamPrefix:"ecs",commands:["ExecuteCommand"]},efs:{iamPrefix:"elasticfilesystem"},"eks-auth":{iamPrefix:"eks-auth"},eks:{iamPrefix:"eks"},"elastic-beanstalk":{iamPrefix:"elasticbeanstalk"},"elastic-inference":{iamPrefix:"elastic-inference"},"elastic-load-balancing-v2":{iamPrefix:"elasticloadbalancing"},"elastic-load-balancing":{iamPrefix:"elasticloadbalancing"},"elastic-transcoder":{iamPrefix:"elastictranscoder"},elasticache:{iamPrefix:"elasticache"},"elasticsearch-service":{iamPrefix:"es"},"emr-containers":{iamPrefix:"emr-containers"},"emr-serverless":{iamPrefix:"emr-serverless"},emr:{iamPrefix:"elasticmapreduce"},entityresolution:{iamPrefix:"entityresolution"},eventbridge:{iamPrefix:"events"},evidently:{iamPrefix:"evidently"},"finspace-data":{iamPrefix:"finspace-api"},finspace:{iamPrefix:"finspace"},firehose:{iamPrefix:"firehose"},fis:{iamPrefix:"fis"},fms:{iamPrefix:"fms"},forecast:{iamPrefix:"forecast"},forecastquery:{iamPrefix:"forecast"},frauddetector:{iamPrefix:"frauddetector"},freetier:{iamPrefix:"freetier"},fsx:{iamPrefix:"fsx"},gamelift:{iamPrefix:"gamelift"},glacier:{iamPrefix:"glacier"},"global-accelerator":{iamPrefix:"globalaccelerator"},glue:{iamPrefix:"glue"},grafana:{iamPrefix:"grafana"},greengrass:{iamPrefix:"greengrass"},greengrassv2:{iamPrefix:"greengrass"},groundstation:{iamPrefix:"groundstation"},guardduty:{iamPrefix:"guardduty"},health:{iamPrefix:"health"},healthlake:{iamPrefix:"healthlake"},honeycode:{iamPrefix:"honeycode"},iam:{iamPrefix:"iam"},identitystore:{iamPrefix:"identitystore"},imagebuilder:{iamPrefix:"imagebuilder"},"inspector-scan":{iamPrefix:"inspector-scan"},inspector:{iamPrefix:"inspector"},inspector2:{iamPrefix:"inspector2"},internetmonitor:{iamPrefix:"internetmonitor"},"iot-1click-devices-service":{iamPrefix:"iot1click"},"iot-1click-projects":{iamPrefix:"iot1click"},"iot-data-plane":{iamPrefix:"iotdata"},"iot-events-data":{iamPrefix:"ioteventsdata"},"iot-events":{iamPrefix:"iotevents"},"iot-jobs-data-plane":{iamPrefix:"iot-jobs-data"},"iot-roborunner":{iamPrefix:"iotroborunner"},"iot-wireless":{iamPrefix:"iotwireless"},iot:{iamPrefix:"iot"},iotanalytics:{iamPrefix:"iotanalytics"},iotdeviceadvisor:{iamPrefix:"iotdeviceadvisor"},iotfleethub:{iamPrefix:"iotfleethub"},iotfleetwise:{iamPrefix:"iotfleetwise"},iotsecuretunneling:{iamPrefix:"IoTSecuredTunneling"},iotsitewise:{iamPrefix:"iotsitewise"},iotthingsgraph:{iamPrefix:"iotthingsgraph"},iottwinmaker:{iamPrefix:"iottwinmaker"},"ivs-realtime":{iamPrefix:"ivs"},ivs:{iamPrefix:"ivs"},ivschat:{iamPrefix:"ivschat"},kafka:{iamPrefix:"kafka"},kafkaconnect:{iamPrefix:"kafkaconnect"},"kendra-ranking":{iamPrefix:"kendra-ranking"},kendra:{iamPrefix:"kendra"},keyspaces:{iamPrefix:"cassandra"},"kinesis-analytics-v2":{iamPrefix:"kinesisanalytics"},"kinesis-analytics":{iamPrefix:"kinesisanalytics"},"kinesis-video-archived-media":{iamPrefix:"kinesisvideo"},"kinesis-video-media":{iamPrefix:"kinesisvideo"},"kinesis-video-signaling":{iamPrefix:"kinesisvideo"},"kinesis-video-webrtc-storage":{iamPrefix:"kinesisvideo"},"kinesis-video":{iamPrefix:"kinesisvideo"},kinesis:{iamPrefix:"kinesis"},kms:{iamPrefix:"kms"},lakeformation:{iamPrefix:"lakeformation"},lambda:{iamPrefix:"lambda"},"launch-wizard":{iamPrefix:"launchwizard"},"lex-model-building-service":{iamPrefix:"lex"},"lex-models-v2":{iamPrefix:"lex"},"lex-runtime-service":{iamPrefix:"lex"},"lex-runtime-v2":{iamPrefix:"lex"},"license-manager-linux-subscriptions":{iamPrefix:"license-manager-linux-subscriptions"},"license-manager-user-subscriptions":{iamPrefix:"license-manager-user-subscriptions"},"license-manager":{iamPrefix:"license-manager"},lightsail:{iamPrefix:"lightsail"},location:{iamPrefix:"geo"},lookoutequipment:{iamPrefix:"lookoutequipment"},lookoutmetrics:{iamPrefix:"lookoutmetrics"},lookoutvision:{iamPrefix:"lookoutvision"},m2:{iamPrefix:"m2"},"machine-learning":{iamPrefix:"machinelearning"},macie2:{iamPrefix:"macie2"},"managedblockchain-query":{iamPrefix:"managedblockchain-query"},managedblockchain:{iamPrefix:"managedblockchain"},"marketplace-agreement":{iamPrefix:"aws-marketplace"},"marketplace-catalog":{iamPrefix:"aws-marketplace"},"marketplace-commerce-analytics":{iamPrefix:"marketplacecommerceanalytics"},"marketplace-deployment":{iamPrefix:"aws-marketplace"},"marketplace-entitlement-service":{iamPrefix:"aws-marketplace"},"marketplace-metering":{iamPrefix:"aws-marketplace"},mediaconnect:{iamPrefix:"mediaconnect"},mediaconvert:{iamPrefix:"mediaconvert"},medialive:{iamPrefix:"medialive"},"mediapackage-vod":{iamPrefix:"mediapackage-vod"},mediapackage:{iamPrefix:"mediapackage"},mediapackagev2:{iamPrefix:"mediapackagev2"},"mediastore-data":{iamPrefix:"mediastore"},mediastore:{iamPrefix:"mediastore"},mediatailor:{iamPrefix:"mediatailor"},"medical-imaging":{iamPrefix:"medical-imaging"},memorydb:{iamPrefix:"memorydb"},mgn:{iamPrefix:"mgn"},"migration-hub-refactor-spaces":{iamPrefix:"refactor-spaces"},"migration-hub":{iamPrefix:"mgh"},"migrationhub-config":{iamPrefix:"mgh"},migrationhuborchestrator:{iamPrefix:"migrationhub-orchestrator"},migrationhubstrategy:{iamPrefix:"migrationhub-strategy"},mobile:{iamPrefix:"AWSMobileHubService"},mq:{iamPrefix:"mq"},mturk:{iamPrefix:"mturk-requester"},mwaa:{iamPrefix:"airflow"},"neptune-graph":{iamPrefix:"neptune-graph"},neptune:{iamPrefix:"rds"},neptunedata:{iamPrefix:"neptune-db"},"network-firewall":{iamPrefix:"network-firewall"},networkmanager:{iamPrefix:"networkmanager"},networkmonitor:{iamPrefix:"networkmonitor"},nimble:{iamPrefix:"nimble"},oam:{iamPrefix:"oam"},omics:{iamPrefix:"omics"},opensearch:{iamPrefix:"es"},opensearchserverless:{iamPrefix:"aoss"},opsworks:{iamPrefix:"opsworks"},opsworkscm:{iamPrefix:"opsworks-cm"},organizations:{iamPrefix:"organizations"},osis:{iamPrefix:"osis"},outposts:{iamPrefix:"outposts"},panorama:{iamPrefix:"panorama"},"payment-cryptography-data":{iamPrefix:"payment-cryptography"},"payment-cryptography":{iamPrefix:"payment-cryptography"},"pca-connector-ad":{iamPrefix:"pca-connector-ad"},"personalize-events":{iamPrefix:"personalize"},"personalize-runtime":{iamPrefix:"personalize"},personalize:{iamPrefix:"personalize"},pi:{iamPrefix:"pi"},"pinpoint-email":{iamPrefix:"ses"},"pinpoint-sms-voice-v2":{iamPrefix:"sms-voice"},"pinpoint-sms-voice":{iamPrefix:"sms-voice"},pinpoint:{iamPrefix:"mobiletargeting"},pipes:{iamPrefix:"pipes"},polly:{iamPrefix:"polly"},pricing:{iamPrefix:"pricing"},privatenetworks:{iamPrefix:"private-networks"},proton:{iamPrefix:"proton"},qbusiness:{iamPrefix:"qbusiness"},qconnect:{iamPrefix:"wisdom"},"qldb-session":{iamPrefix:"qldb",commands:["SendCommand"]},qldb:{iamPrefix:"qldb"},quicksight:{iamPrefix:"quicksight"},ram:{iamPrefix:"ram"},rbin:{iamPrefix:"rbin"},"rds-data":{iamPrefix:"rds-data"},rds:{iamPrefix:"rds"},"redshift-data":{iamPrefix:"redshift-data"},"redshift-serverless":{iamPrefix:"redshift-serverless"},redshift:{iamPrefix:"redshift"},rekognition:{iamPrefix:"rekognition"},rekognitionstreaming:{iamPrefix:"rekognition"},repostspace:{iamPrefix:"repostspace"},resiliencehub:{iamPrefix:"resiliencehub"},"resource-explorer-2":{iamPrefix:"resource-explorer-2"},"resource-groups-tagging-api":{iamPrefix:"tagging"},"resource-groups":{iamPrefix:"resource-groups"},robomaker:{iamPrefix:"robomaker"},rolesanywhere:{iamPrefix:"rolesanywhere"},"route-53-domains":{iamPrefix:"route53domains"},"route-53":{iamPrefix:"route53"},"route53-recovery-cluster":{iamPrefix:"route53-recovery-cluster"},"route53-recovery-control-config":{iamPrefix:"route53-recovery-control-config"},"route53-recovery-readiness":{iamPrefix:"route53-recovery-readiness"},route53resolver:{iamPrefix:"route53resolver"},rum:{iamPrefix:"rum"},"s3-control":{iamPrefix:"s3"},s3:{iamPrefix:"s3"},s3outposts:{iamPrefix:"s3-outposts"},"sagemaker-a2i-runtime":{iamPrefix:"sagemaker"},"sagemaker-edge":{iamPrefix:"sagemaker"},"sagemaker-featurestore-runtime":{iamPrefix:"sagemaker"},"sagemaker-geospatial":{iamPrefix:"sagemaker-geospatial"},"sagemaker-metrics":{iamPrefix:"sagemaker"},"sagemaker-runtime":{iamPrefix:"sagemaker"},sagemaker:{iamPrefix:"sagemaker"},savingsplans:{iamPrefix:"savingsplans"},scheduler:{iamPrefix:"scheduler"},schemas:{iamPrefix:"schemas"},"secrets-manager":{iamPrefix:"secretsmanager"},securityhub:{iamPrefix:"securityhub"},securitylake:{iamPrefix:"securitylake"},serverlessapplicationrepository:{iamPrefix:"serverlessrepo"},"service-catalog-appregistry":{iamPrefix:"servicecatalog"},"service-catalog":{iamPrefix:"servicecatalog"},"service-quotas":{iamPrefix:"servicequotas"},servicediscovery:{iamPrefix:"servicediscovery"},ses:{iamPrefix:"ses"},sesv2:{iamPrefix:"ses"},sfn:{iamPrefix:"states"},shield:{iamPrefix:"shield"},signer:{iamPrefix:"signer"},simspaceweaver:{iamPrefix:"simspaceweaver"},sms:{iamPrefix:"sms"},"snow-device-management":{iamPrefix:"snow-device-management"},snowball:{iamPrefix:"snowball"},sns:{iamPrefix:"sns"},sqs:{iamPrefix:"sqs"},"ssm-contacts":{iamPrefix:"ssm-contacts"},"ssm-incidents":{iamPrefix:"ssm-incidents"},"ssm-sap":{iamPrefix:"ssm-sap"},ssm:{iamPrefix:"ssm",commands:["CancelCommand","SendCommand"]},"sso-admin":{iamPrefix:"sso"},"sso-oidc":{iamPrefix:"sso-oauth"},sso:{iamPrefix:"awsssoportal"},"storage-gateway":{iamPrefix:"storagegateway"},sts:{iamPrefix:"sts"},supplychain:{iamPrefix:"scn"},"support-app":{iamPrefix:"supportapp"},support:{iamPrefix:"support"},swf:{iamPrefix:"swf"},synthetics:{iamPrefix:"synthetics"},textract:{iamPrefix:"textract"},"timestream-query":{iamPrefix:"timestream"},"timestream-write":{iamPrefix:"timestream"},tnb:{iamPrefix:"tnb"},"transcribe-streaming":{iamPrefix:"transcribe"},transcribe:{iamPrefix:"transcribe"},transfer:{iamPrefix:"transfer"},translate:{iamPrefix:"translate"},trustedadvisor:{iamPrefix:"trustedadvisor"},verifiedpermissions:{iamPrefix:"verifiedpermissions"},"voice-id":{iamPrefix:"voiceid"},"vpc-lattice":{iamPrefix:"vpc-lattice"},"waf-regional":{iamPrefix:"waf-regional"},waf:{iamPrefix:"waf"},wafv2:{iamPrefix:"wafv2"},wellarchitected:{iamPrefix:"wellarchitected"},wisdom:{iamPrefix:"wisdom"},workdocs:{iamPrefix:"workdocs"},worklink:{iamPrefix:"worklink"},workmail:{iamPrefix:"workmail"},workmailmessageflow:{iamPrefix:"workmailmessageflow"},"workspaces-thin-client":{iamPrefix:"thinclient"},"workspaces-web":{iamPrefix:"workspaces-web"},workspaces:{iamPrefix:"workspaces"},xray:{iamPrefix:"xray"}}});var F={};P(F,{normalizeActionName:()=>H,normalizeServiceName:()=>D});function D(e){return e=e.toLowerCase(),e=e.replace(/^@aws-sdk\/client-/,""),e=he()?.[e]??e,e}function H(e,i){return i.charAt(0).toLowerCase()===i.charAt(0)?i.charAt(0).toUpperCase()+i.slice(1):we()[e]?.commands?.includes(i)?i:i.replace(/Command$/,"")}function he(){return Q()}function we(){return B()}var j=u(()=>{"use strict"});var _={};P(_,{ApiCall:()=>E,coerceSdkv3Response:()=>A,flatten:()=>G});function G(e){let i={};return r(e),i;function r(a,t=[]){if(a&&typeof a=="object"){for(let[o,s]of Object.entries(a))r(s,[...t,o]);return}i[t.join(".")]=a}}async function A(e){if(e&&typeof e=="object"&&typeof e.transformToString=="function")return e.transformToString();if(Buffer.isBuffer(e))return e.toString("utf8");if(ArrayBuffer.isView(e))return ve.decode(e.buffer);if(Array.isArray(e)){let i=[];for(let r of e)i.push(await A(r));return i}if(e&&typeof e=="object"){for(let i of Object.keys(e))e[i]=await A(e[i]);return e}return e}var E,ve,$=u(()=>{"use strict";z();q();j();E=class{constructor(i,r){this.service=D(i),this.action=H(this.service,r),this.v3PackageName=`@aws-sdk/client-${this.service}`}async invoke(i){this.initializePackage(i.sdkPackage),this.initializeClient(i);let r=this.findCommandClass(),a=await this.client.send(new r(T(this.service,this.action,i.parameters??{})));delete a.$metadata;let t=await A(a);return i.flattenResponse?G(t):t}initializePackage(i){if(!this.v3Package){if(i){this.v3Package=i;return}try{this.v3Package=require(this.v3PackageName)}catch{throw Error(`Service ${this.service} client package with name '${this.v3PackageName}' does not exist.`)}}}initializeClient(i){this.v3Package||this.initializePackage();let r=this.findConstructor(this.v3Package);return this.client=new r({apiVersion:i.apiVersion,credentials:i.credentials,region:i.region}),this.client}findCommandClass(){this.v3Package||this.initializePackage();let i=`${this.action}Command`,r=Object.entries(this.v3Package??{}).find(([a])=>a.toLowerCase()===i.toLowerCase())?.[1];if(!r)throw new Error(`Unable to find command named: ${i} for action: ${this.action} in service package ${this.v3PackageName}`);return r}findConstructor(i){try{let r=X(i);if(!r)throw new Error("findV3ClientConstructor returned undefined");return r}catch(r){throw console.error(r),Error(`No client constructor found within package: ${this.v3PackageName}`)}}};ve=new TextDecoder});var I=R(l=>{"use strict";var Se=l&&l.__createBinding||(Object.create?function(e,i,r,a){a===void 0&&(a=r);var t=Object.getOwnPropertyDescriptor(i,r);(!t||("get"in t?!i.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return i[r]}}),Object.defineProperty(e,a,t)}:function(e,i,r,a){a===void 0&&(a=r),e[a]=i[r]}),Je=l&&l.__exportStar||function(e,i){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(i,r)&&Se(i,e,r)};Object.defineProperty(l,"__esModule",{value:!0});l.normalizeActionName=l.normalizeServiceName=l.findV3ClientConstructor=l.coerceApiParameters=void 0;var Ne=(z(),x(M));Object.defineProperty(l,"coerceApiParameters",{enumerable:!0,get:function(){return Ne.coerceApiParameters}});var Ae=(q(),x(V));Object.defineProperty(l,"findV3ClientConstructor",{enumerable:!0,get:function(){return Ae.findV3ClientConstructor}});var ee=(j(),x(F));Object.defineProperty(l,"normalizeServiceName",{enumerable:!0,get:function(){return ee.normalizeServiceName}});Object.defineProperty(l,"normalizeActionName",{enumerable:!0,get:function(){return ee.normalizeActionName}});Je(($(),x(_)),l)});var ae={};P(ae,{forceSdkInstallation:()=>Ue,handler:()=>Te});function Ue(){U=!1}function Re(){console.log("Installing latest AWS SDK v2"),(0,ie.execSync)("HOME=/tmp npm install aws-sdk@2 --production --no-package-lock --no-save --prefix /tmp"),U=!0}function Ce(e){let i=e.apiLoader;return Oe.forEach(({serviceName:r,apiVersions:a})=>{let t=r.toLowerCase();e.Service.hasService(t)?e.Service.addVersions(e[r],a):(i.services[t]={},e[r]=e.Service.defineService(t,a)),a.forEach(o=>{Object.defineProperty(i.services[t],o,{get:function(){let d=`aws-sdk-patch/${t}-${o}`,m=JSON.parse(K.readFileSync((0,L.join)(__dirname,`${d}.service.json`),"utf-8"));return m.paginators=JSON.parse(K.readFileSync((0,L.join)(__dirname,`${d}.paginators.json`),"utf-8")).pagination,m},enumerable:!0,configurable:!0})})}),e}async function Te(e,i){try{let r;if(!U&&e.ResourceProperties.InstallLatestAwsSdk==="true")try{Re(),r=require("/tmp/node_modules/aws-sdk")}catch(m){console.log(`Failed to install latest AWS SDK v2: ${m}`),r=require("aws-sdk")}else U?r=require("/tmp/node_modules/aws-sdk"):r=require("aws-sdk");try{r=Ce(r)}catch(m){console.log(`Failed to patch AWS SDK: ${m}. Proceeding with the installed copy.`)}console.log(JSON.stringify({...e,ResponseURL:"..."})),console.log("AWS SDK VERSION: "+r.VERSION),e.ResourceProperties.Create=p(e.ResourceProperties.Create),e.ResourceProperties.Update=p(e.ResourceProperties.Update),e.ResourceProperties.Delete=p(e.ResourceProperties.Delete);let a;switch(e.RequestType){case"Create":a=e.ResourceProperties.Create?.physicalResourceId?.id??e.ResourceProperties.Update?.physicalResourceId?.id??e.ResourceProperties.Delete?.physicalResourceId?.id??e.LogicalResourceId;break;case"Update":case"Delete":a=e.ResourceProperties[e.RequestType]?.physicalResourceId?.id??e.PhysicalResourceId;break}let t={},o={},s=e.ResourceProperties[e.RequestType],d=s?.logApiResponseData??!0;if(s){let m;if(s.assumedRoleArn){let c=new Date().getTime(),n={RoleArn:s.assumedRoleArn,RoleSessionName:`${c}-${a}`.substring(0,64)};m=new r.ChainableTemporaryCredentials({params:n,stsConfig:{stsRegionalEndpoints:"regional"}})}if(!Object.prototype.hasOwnProperty.call(r,s.service))throw Error(`Service ${s.service} does not exist in AWS SDK version ${r.VERSION}.`);let f=new r[s.service]({apiVersion:s.apiVersion,credentials:m,region:s.region});try{let c=await f[s.action](s.parameters&&w(s.parameters,a)).promise();t={apiVersion:f.config.apiVersion,region:f.config.region,...(0,re.flatten)(c)};let n;s.outputPath?n=[s.outputPath]:s.outputPaths&&(n=s.outputPaths),n?o=v(t,S(n)):o=t}catch(c){if(!s.ignoreErrorCodesMatching||!new RegExp(s.ignoreErrorCodesMatching).test(c.code))throw c}s.physicalResourceId?.responsePath&&(a=t[s.physicalResourceId.responsePath])}await y(e,"SUCCESS","OK",a,o,d)}catch(r){console.log(r),await y(e,"FAILED",r.message||"Internal Error",i.logStreamName,{},!0)}}var ie,K,L,re,U,Oe,te=u(()=>{"use strict";ie=require("child_process"),K=k(require("fs")),L=require("path");J();re=k(I()),U=!1;Oe=[]});var oe={};P(oe,{forceSdkInstallation:()=>ze,handler:()=>De});function ze(){b={}}function Xe(e){console.log(`Installing latest AWS SDK v3: ${e}`),(0,se.execSync)(`NPM_CONFIG_UPDATE_NOTIFIER=false HOME=/tmp npm install ${JSON.stringify(e)} --omit=dev --no-package-lock --no-save --prefix /tmp`),b={...b,[e]:!0}}async function qe(e,i){let r;try{if(!b[e]&&i==="true")try{Xe(e),r=require(`/tmp/node_modules/${e}`)}catch(a){return console.log(`Failed to install latest AWS SDK v3. Falling back to pre-installed version. Error: ${a}`),require(e)}else b[e]?r=require(`/tmp/node_modules/${e}`):r=require(e)}catch{throw Error(`Package ${e} does not exist.`)}return r}async function De(e,i){try{e.ResourceProperties.Create=p(e.ResourceProperties.Create),e.ResourceProperties.Update=p(e.ResourceProperties.Update),e.ResourceProperties.Delete=p(e.ResourceProperties.Delete);let r={},a;switch(e.RequestType){case"Create":a=e.ResourceProperties.Create?.physicalResourceId?.id??e.ResourceProperties.Update?.physicalResourceId?.id??e.ResourceProperties.Delete?.physicalResourceId?.id??e.LogicalResourceId;break;case"Update":case"Delete":a=e.ResourceProperties[e.RequestType]?.physicalResourceId?.id??e.PhysicalResourceId;break}let t=e.ResourceProperties[e.RequestType],o=t?.logApiResponseData??!0;if(t){let s=new ne.ApiCall(t.service,t.action),d=qe(s.v3PackageName,e.ResourceProperties.InstallLatestAwsSdk);console.log(JSON.stringify({...e,ResponseURL:"..."}));let m;if(t.assumedRoleArn){let c=new Date().getTime(),n={RoleArn:t.assumedRoleArn,RoleSessionName:`${c}-${a}`.substring(0,64)},{fromTemporaryCredentials:g}=await import("@aws-sdk/credential-providers");m=g({params:n,clientConfig:t.region!==void 0?{region:t.region}:void 0})}d=await d;let f={};try{let c=await s.invoke({sdkPackage:d,apiVersion:t.apiVersion,credentials:m,region:t.region,parameters:w(t.parameters,a),flattenResponse:!0});o&&console.log("API response",c),f.apiVersion=s.client.config.apiVersion,f.region=await s.client.config.region().catch(()=>{}),Object.assign(f,c);let n;t.outputPath?n=[t.outputPath]:t.outputPaths&&(n=t.outputPaths),n?r=v(f,S(n)):r=f}catch(c){let n=c.name??c.constructor.name;if(!t.ignoreErrorCodesMatching||!new RegExp(t.ignoreErrorCodesMatching).test(n))throw c}t.physicalResourceId?.responsePath&&(a=f[t.physicalResourceId.responsePath])}await y(e,"SUCCESS","OK",a,r,o)}catch(r){console.log(r),await y(e,"FAILED",r.message||"Internal Error",i.logStreamName,{},!0)}}var se,ne,b,ce=u(()=>{"use strict";se=require("child_process"),ne=k(I());J();b={}});var je={};P(je,{PHYSICAL_RESOURCE_ID_REFERENCE:()=>O,handler:()=>He,v2handler:()=>me,v3handler:()=>le});module.exports=x(je);J();function me(e,i){return(te(),x(ae)).handler(e,i)}function le(e,i){return(ce(),x(oe)).handler(e,i)}function He(e,i){let r=process.env.AWS_EXECUTION_ENV;return r&&r>="AWS_Lambda_nodejs18.x"?le(e,i):me(e,i)}0&&(module.exports={PHYSICAL_RESOURCE_ID_REFERENCE,handler,v2handler,v3handler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/asset.cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/asset.cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d/index.js new file mode 100644 index 0000000000000..b8736f86c3c65 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/asset.cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d/index.js @@ -0,0 +1 @@ +"use strict";var $=Object.create;var x=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var l=(e,i)=>()=>(e&&(i=e(e=0)),i);var w=(e,i)=>()=>(i||e((i={exports:{}}).exports,i),i.exports),u=(e,i)=>{for(var r in i)x(e,r,{get:i[r],enumerable:!0})},H=(e,i,r,a)=>{if(i&&typeof i=="object"||typeof i=="function")for(let t of ie(i))!ae.call(e,t)&&t!==r&&x(e,t,{get:()=>i[t],enumerable:!(a=ee(i,t))||a.enumerable});return e};var v=(e,i,r)=>(r=e!=null?$(re(e)):{},H(i||!e||!e.__esModule?x(r,"default",{value:e,enumerable:!0}):r,e)),p=e=>H(x({},"__esModule",{value:!0}),e);var q,S,R=l(()=>{"use strict";q=v(require("zlib")),S=()=>{let i=JSON.parse(q.brotliDecompressSync(Buffer.from("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","base64")).toString());return S=()=>i,i}});var D={};u(D,{Coercer:()=>k,coerceApiParameters:()=>J});function J(e,i,r={}){let a=S();return new k(a).coerceApiParameters(e,i,r)}function te(e){return e instanceof Uint8Array?e:typeof e=="string"||typeof e=="number"?new TextEncoder().encode(e.toString()):e}function ne(e){if(typeof e=="number")return e;if(typeof e=="string"){let i=Number(e);return isNaN(i)?e:i}return e}function se(e){if(typeof e=="string"||typeof e=="number"){let i=new Date(e);return isNaN(i.getTime())?e:i}return e}var k,N=l(()=>{"use strict";R();k=class{constructor(i){this.typeMachine=i}coerceApiParameters(i,r,a={}){let t=this.progress(r.toLowerCase(),this.progress(i.toLowerCase(),0));return this.recurse(a,t)}testCoerce(i){return this.recurse(i,0)}recurse(i,r){switch(r){case void 0:return i;case"b":return te(i);case"n":return ne(i);case"d":return se(i)}if(Array.isArray(i)){let a=this.progress("*",r);return a!==void 0?i.map(t=>this.recurse(t,a)):i}if(i&&typeof i=="object"){let a=this.progress("*",r);for(let t of Object.keys(i)){let s=this.progress(t,r)??a;s!==void 0&&(i[t]=this.recurse(i[t],s))}return i}return i}progress(i,r){if(!(r===void 0||typeof r!="number"))return this.typeMachine[r][i]}}});var j={};u(j,{findV3ClientConstructor:()=>U});function U(e){let[i,r]=Object.entries(e).find(([a])=>a.endsWith("Client")&&a!=="__Client");return r}var z=l(()=>{"use strict"});var K=w((Ne,oe)=>{oe.exports={acmpca:"acm-pca",apigateway:"api-gateway",arczonalshift:"arc-zonal-shift",alexaforbusiness:"alexa-for-business",appmesh:"app-mesh",applicationautoscaling:"application-auto-scaling",applicationinsights:"application-insights",augmentedairuntime:"sage-maker-a2iruntime",autoscaling:"auto-scaling",autoscalingplans:"auto-scaling-plans",backupgateway:"backup-gateway",bedrockruntime:"bedrock-runtime",cur:"cost-and-usage-report-service",chimesdkidentity:"chime-sdk-identity",chimesdkmediapipelines:"chime-sdk-media-pipelines",chimesdkmeetings:"chime-sdk-meetings",chimesdkmessaging:"chime-sdk-messaging",chimesdkvoice:"chime-sdk-voice",cloudhsmv2:"cloudhsm-v2",cloudsearchdomain:"cloudsearch-domain",cloudtraildata:"cloudtrail-data",cloudwatchevents:"cloudwatch-events",cloudwatchlogs:"cloudwatch-logs",codegurureviewer:"codeguru-reviewer",codegurusecurity:"codeguru-security",codestarnotifications:"codestar-notifications",codestarconnections:"codestar-connections",cognitoidentity:"cognito-identity",cognitoidentityserviceprovider:"cognito-identity-provider",cognitosync:"cognito-sync",computeoptimizer:"compute-optimizer",configservice:"config-service",connectcontactlens:"connect-contact-lens",costexplorer:"cost-explorer",customerprofiles:"customer-profiles",dms:"database-migration-service",datapipeline:"data-pipeline",devopsguru:"devops-guru",devicefarm:"device-farm",directconnect:"direct-connect",directoryservice:"directory-service",discovery:"application-discovery-service",docdbelastic:"docdb-elastic",dynamodbstreams:"dynamodb-streams",ec2instanceconnect:"ec2-instance-connect",ecrpublic:"ecr-public",elb:"elastic-load-balancing",elbv2:"elastic-load-balancing-v2",emrserverless:"emr-serverless",emrcontainers:"emr-containers",es:"elasticsearch-service",elasticbeanstalk:"elastic-beanstalk",elasticinference:"elastic-inference",elastictranscoder:"elastic-transcoder",finspacedata:"finspace-data",forecastqueryservice:"forecastquery",forecastservice:"forecast",globalaccelerator:"global-accelerator",iot1clickdevicesservice:"iot-1click-devices-service",iot1clickprojects:"iot-1click-projects",iotevents:"iot-events",ioteventsdata:"iot-events-data",iotjobsdataplane:"iot-jobs-data-plane",iotroborunner:"iot-roborunner",iotwireless:"iot-wireless",iotdata:"iot-data-plane",ivsrealtime:"ivs-realtime",kendraranking:"kendra-ranking",kinesisanalytics:"kinesis-analytics",kinesisanalyticsv2:"kinesis-analytics-v2",kinesisvideo:"kinesis-video",kinesisvideoarchivedmedia:"kinesis-video-archived-media",kinesisvideomedia:"kinesis-video-media",kinesisvideosignalingchannels:"kinesis-video-signaling",kinesisvideowebrtcstorage:"kinesis-video-webrtc-storage",launchwizard:"launch-wizard",lexmodelbuildingservice:"lex-model-building-service",lexmodelsv2:"lex-models-v2",lexruntime:"lex-runtime-service",lexruntimev2:"lex-runtime-v2",licensemanager:"license-manager",licensemanagerlinuxsubscriptions:"license-manager-linux-subscriptions",licensemanagerusersubscriptions:"license-manager-user-subscriptions",machinelearning:"machine-learning",managedblockchainquery:"managedblockchain-query",marketplacecatalog:"marketplace-catalog",marketplacecommerceanalytics:"marketplace-commerce-analytics",marketplaceentitlementservice:"marketplace-entitlement-service",marketplacemetering:"marketplace-metering",mediapackagevod:"mediapackage-vod",mediastoredata:"mediastore-data",medicalimaging:"medical-imaging",memorydb:"memory-db",migrationhub:"migration-hub",migrationhubconfig:"migrationhub-config",migrationhubrefactorspaces:"migration-hub-refactor-spaces",networkfirewall:"network-firewall",paymentcryptography:"payment-cryptography",paymentcryptographydata:"payment-cryptography-data",pcaconnectorad:"pca-connector-ad",personalizeevents:"personalize-events",personalizeruntime:"personalize-runtime",pinpointemail:"pinpoint-email",pinpointsmsvoice:"pinpoint-sms-voice",pinpointsmsvoicev2:"pinpoint-sms-voice-v2",qldbsession:"qldb-session",rdsdataservice:"rds-data",redshiftdata:"redshift-data",redshiftserverless:"redshift-serverless",resourceexplorer2:"resource-explorer-2",resourcegroups:"resource-groups",resourcegroupstaggingapi:"resource-groups-tagging-api",route53:"route-53",route53domains:"route-53-domains",route53recoverycluster:"route53-recovery-cluster",route53recoverycontrolconfig:"route53-recovery-control-config",route53recoveryreadiness:"route53-recovery-readiness",s3control:"s3-control",ssmcontacts:"ssm-contacts",ssmincidents:"ssm-incidents",ssoadmin:"sso-admin",ssooidc:"sso-oidc",sagemakerfeaturestoreruntime:"sagemaker-featurestore-runtime",sagemakergeospatial:"sagemaker-geospatial",sagemakermetrics:"sagemaker-metrics",sagemakerruntime:"sagemaker-runtime",sagemakeredge:"sagemaker-edge",secretsmanager:"secrets-manager",servicecatalog:"service-catalog",servicecatalogappregistry:"service-catalog-appregistry",servicequotas:"service-quotas",snowdevicemanagement:"snow-device-management",ssmsap:"ssm-sap",stepfunctions:"sfn",storagegateway:"storage-gateway",supportapp:"support-app",timestreamquery:"timestream-query",timestreamwrite:"timestream-write",transcribeservice:"transcribe",voiceid:"voice-id",vpclattice:"vpc-lattice",wafregional:"waf-regional",workspacesweb:"workspaces-web"}});var Z=w((Ue,ce)=>{ce.exports={accessanalyzer:{iamPrefix:"access-analyzer"},account:{iamPrefix:"account"},"acm-pca":{iamPrefix:"acm-pca"},acm:{iamPrefix:"acm"},"alexa-for-business":{iamPrefix:"a4b"},amp:{iamPrefix:"aps"},amplify:{iamPrefix:"amplify"},amplifybackend:{iamPrefix:"amplifybackend"},amplifyuibuilder:{iamPrefix:"amplifyuibuilder"},"api-gateway":{iamPrefix:"apigateway"},apigatewaymanagementapi:{iamPrefix:"execute-api"},apigatewayv2:{iamPrefix:"apigateway"},"app-mesh":{iamPrefix:"appmesh"},appconfig:{iamPrefix:"appconfig"},appconfigdata:{iamPrefix:"appconfig"},appfabric:{iamPrefix:"appfabric"},appflow:{iamPrefix:"appflow"},appintegrations:{iamPrefix:"app-integrations"},"application-auto-scaling":{iamPrefix:"application-autoscaling"},"application-discovery-service":{iamPrefix:"discovery"},"application-insights":{iamPrefix:"applicationinsights"},applicationcostprofiler:{iamPrefix:"application-cost-profiler"},apprunner:{iamPrefix:"apprunner"},appstream:{iamPrefix:"appstream"},appsync:{iamPrefix:"appsync"},"arc-zonal-shift":{iamPrefix:"arc-zonal-shift"},athena:{iamPrefix:"athena"},auditmanager:{iamPrefix:"auditmanager"},"auto-scaling-plans":{iamPrefix:"autoscaling-plans"},"auto-scaling":{iamPrefix:"autoscaling"},b2bi:{iamPrefix:"b2bi"},"backup-gateway":{iamPrefix:"backup-gateway"},backup:{iamPrefix:"backup"},backupstorage:{iamPrefix:"backup-storage"},batch:{iamPrefix:"batch"},"bcm-data-exports":{iamPrefix:"bcm-data-exports"},"bedrock-agent-runtime":{iamPrefix:"bedrock"},"bedrock-agent":{iamPrefix:"bedrock"},"bedrock-runtime":{iamPrefix:"bedrock"},bedrock:{iamPrefix:"bedrock"},billingconductor:{iamPrefix:"billingconductor"},braket:{iamPrefix:"braket"},budgets:{iamPrefix:"budgets"},"chime-sdk-identity":{iamPrefix:"chime"},"chime-sdk-media-pipelines":{iamPrefix:"chime"},"chime-sdk-meetings":{iamPrefix:"chime"},"chime-sdk-messaging":{iamPrefix:"chime"},"chime-sdk-voice":{iamPrefix:"chime"},chime:{iamPrefix:"chime"},cleanrooms:{iamPrefix:"cleanrooms"},cleanroomsml:{iamPrefix:"cleanrooms-ml"},cloud9:{iamPrefix:"cloud9"},cloudcontrol:{iamPrefix:"cloudcontrolapi"},clouddirectory:{iamPrefix:"clouddirectory"},cloudformation:{iamPrefix:"cloudformation"},"cloudfront-keyvaluestore":{iamPrefix:"cloudfront-keyvaluestore"},cloudfront:{iamPrefix:"cloudfront"},"cloudhsm-v2":{iamPrefix:"cloudhsm"},cloudhsm:{iamPrefix:"cloudhsm"},"cloudsearch-domain":{iamPrefix:"cloudsearch"},cloudsearch:{iamPrefix:"cloudsearch"},"cloudtrail-data":{iamPrefix:"cloudtrail-data"},cloudtrail:{iamPrefix:"cloudtrail"},"cloudwatch-events":{iamPrefix:"events"},"cloudwatch-logs":{iamPrefix:"logs"},cloudwatch:{iamPrefix:"cloudwatch"},codeartifact:{iamPrefix:"codeartifact"},codebuild:{iamPrefix:"codebuild"},codecatalyst:{},codecommit:{iamPrefix:"codecommit"},codedeploy:{iamPrefix:"codedeploy"},"codeguru-reviewer":{iamPrefix:"codeguru-reviewer"},"codeguru-security":{iamPrefix:"codeguru-security"},codeguruprofiler:{iamPrefix:"codeguru-profiler"},codepipeline:{iamPrefix:"codepipeline"},"codestar-connections":{iamPrefix:"codestar-connections"},"codestar-notifications":{iamPrefix:"codestar-notifications"},codestar:{iamPrefix:"codestar"},"cognito-identity-provider":{iamPrefix:"cognito-idp"},"cognito-identity":{iamPrefix:"cognito-identity"},"cognito-sync":{iamPrefix:"cognito-sync"},comprehend:{iamPrefix:"comprehend"},comprehendmedical:{iamPrefix:"comprehendmedical"},"compute-optimizer":{iamPrefix:"compute-optimizer"},"config-service":{iamPrefix:"config"},"connect-contact-lens":{iamPrefix:"connect"},connect:{iamPrefix:"connect"},connectcampaigns:{iamPrefix:"connect-campaigns"},connectcases:{iamPrefix:"cases"},connectparticipant:{iamPrefix:"execute-api"},controltower:{iamPrefix:"controltower"},"cost-and-usage-report-service":{iamPrefix:"cur"},"cost-explorer":{iamPrefix:"ce"},"cost-optimization-hub":{iamPrefix:"cost-optimization-hub"},"customer-profiles":{iamPrefix:"profile"},"data-pipeline":{iamPrefix:"datapipeline"},"database-migration-service":{iamPrefix:"dms"},databrew:{iamPrefix:"databrew"},dataexchange:{iamPrefix:"dataexchange"},datasync:{iamPrefix:"datasync"},datazone:{iamPrefix:"datazone"},dax:{iamPrefix:"dax"},detective:{iamPrefix:"detective"},"device-farm":{iamPrefix:"devicefarm"},"devops-guru":{iamPrefix:"devops-guru"},"direct-connect":{iamPrefix:"directconnect"},"directory-service":{iamPrefix:"ds"},dlm:{iamPrefix:"dlm"},"docdb-elastic":{iamPrefix:"docdb-elastic"},docdb:{iamPrefix:"rds"},drs:{iamPrefix:"drs"},"dynamodb-streams":{iamPrefix:"dynamodb"},dynamodb:{iamPrefix:"dynamodb"},ebs:{iamPrefix:"ebs"},"ec2-instance-connect":{iamPrefix:"ec2-instance-connect"},ec2:{iamPrefix:"ec2"},"ecr-public":{iamPrefix:"ecr-public"},ecr:{iamPrefix:"ecr"},ecs:{iamPrefix:"ecs",commands:["ExecuteCommand"]},efs:{iamPrefix:"elasticfilesystem"},"eks-auth":{iamPrefix:"eks-auth"},eks:{iamPrefix:"eks"},"elastic-beanstalk":{iamPrefix:"elasticbeanstalk"},"elastic-inference":{iamPrefix:"elastic-inference"},"elastic-load-balancing-v2":{iamPrefix:"elasticloadbalancing"},"elastic-load-balancing":{iamPrefix:"elasticloadbalancing"},"elastic-transcoder":{iamPrefix:"elastictranscoder"},elasticache:{iamPrefix:"elasticache"},"elasticsearch-service":{iamPrefix:"es"},"emr-containers":{iamPrefix:"emr-containers"},"emr-serverless":{iamPrefix:"emr-serverless"},emr:{iamPrefix:"elasticmapreduce"},entityresolution:{iamPrefix:"entityresolution"},eventbridge:{iamPrefix:"events"},evidently:{iamPrefix:"evidently"},"finspace-data":{iamPrefix:"finspace-api"},finspace:{iamPrefix:"finspace"},firehose:{iamPrefix:"firehose"},fis:{iamPrefix:"fis"},fms:{iamPrefix:"fms"},forecast:{iamPrefix:"forecast"},forecastquery:{iamPrefix:"forecast"},frauddetector:{iamPrefix:"frauddetector"},freetier:{iamPrefix:"freetier"},fsx:{iamPrefix:"fsx"},gamelift:{iamPrefix:"gamelift"},glacier:{iamPrefix:"glacier"},"global-accelerator":{iamPrefix:"globalaccelerator"},glue:{iamPrefix:"glue"},grafana:{iamPrefix:"grafana"},greengrass:{iamPrefix:"greengrass"},greengrassv2:{iamPrefix:"greengrass"},groundstation:{iamPrefix:"groundstation"},guardduty:{iamPrefix:"guardduty"},health:{iamPrefix:"health"},healthlake:{iamPrefix:"healthlake"},honeycode:{iamPrefix:"honeycode"},iam:{iamPrefix:"iam"},identitystore:{iamPrefix:"identitystore"},imagebuilder:{iamPrefix:"imagebuilder"},"inspector-scan":{iamPrefix:"inspector-scan"},inspector:{iamPrefix:"inspector"},inspector2:{iamPrefix:"inspector2"},internetmonitor:{iamPrefix:"internetmonitor"},"iot-1click-devices-service":{iamPrefix:"iot1click"},"iot-1click-projects":{iamPrefix:"iot1click"},"iot-data-plane":{iamPrefix:"iotdata"},"iot-events-data":{iamPrefix:"ioteventsdata"},"iot-events":{iamPrefix:"iotevents"},"iot-jobs-data-plane":{iamPrefix:"iot-jobs-data"},"iot-roborunner":{iamPrefix:"iotroborunner"},"iot-wireless":{iamPrefix:"iotwireless"},iot:{iamPrefix:"iot"},iotanalytics:{iamPrefix:"iotanalytics"},iotdeviceadvisor:{iamPrefix:"iotdeviceadvisor"},iotfleethub:{iamPrefix:"iotfleethub"},iotfleetwise:{iamPrefix:"iotfleetwise"},iotsecuretunneling:{iamPrefix:"IoTSecuredTunneling"},iotsitewise:{iamPrefix:"iotsitewise"},iotthingsgraph:{iamPrefix:"iotthingsgraph"},iottwinmaker:{iamPrefix:"iottwinmaker"},"ivs-realtime":{iamPrefix:"ivs"},ivs:{iamPrefix:"ivs"},ivschat:{iamPrefix:"ivschat"},kafka:{iamPrefix:"kafka"},kafkaconnect:{iamPrefix:"kafkaconnect"},"kendra-ranking":{iamPrefix:"kendra-ranking"},kendra:{iamPrefix:"kendra"},keyspaces:{iamPrefix:"cassandra"},"kinesis-analytics-v2":{iamPrefix:"kinesisanalytics"},"kinesis-analytics":{iamPrefix:"kinesisanalytics"},"kinesis-video-archived-media":{iamPrefix:"kinesisvideo"},"kinesis-video-media":{iamPrefix:"kinesisvideo"},"kinesis-video-signaling":{iamPrefix:"kinesisvideo"},"kinesis-video-webrtc-storage":{iamPrefix:"kinesisvideo"},"kinesis-video":{iamPrefix:"kinesisvideo"},kinesis:{iamPrefix:"kinesis"},kms:{iamPrefix:"kms"},lakeformation:{iamPrefix:"lakeformation"},lambda:{iamPrefix:"lambda"},"launch-wizard":{iamPrefix:"launchwizard"},"lex-model-building-service":{iamPrefix:"lex"},"lex-models-v2":{iamPrefix:"lex"},"lex-runtime-service":{iamPrefix:"lex"},"lex-runtime-v2":{iamPrefix:"lex"},"license-manager-linux-subscriptions":{iamPrefix:"license-manager-linux-subscriptions"},"license-manager-user-subscriptions":{iamPrefix:"license-manager-user-subscriptions"},"license-manager":{iamPrefix:"license-manager"},lightsail:{iamPrefix:"lightsail"},location:{iamPrefix:"geo"},lookoutequipment:{iamPrefix:"lookoutequipment"},lookoutmetrics:{iamPrefix:"lookoutmetrics"},lookoutvision:{iamPrefix:"lookoutvision"},m2:{iamPrefix:"m2"},"machine-learning":{iamPrefix:"machinelearning"},macie2:{iamPrefix:"macie2"},"managedblockchain-query":{iamPrefix:"managedblockchain-query"},managedblockchain:{iamPrefix:"managedblockchain"},"marketplace-agreement":{iamPrefix:"aws-marketplace"},"marketplace-catalog":{iamPrefix:"aws-marketplace"},"marketplace-commerce-analytics":{iamPrefix:"marketplacecommerceanalytics"},"marketplace-deployment":{iamPrefix:"aws-marketplace"},"marketplace-entitlement-service":{iamPrefix:"aws-marketplace"},"marketplace-metering":{iamPrefix:"aws-marketplace"},mediaconnect:{iamPrefix:"mediaconnect"},mediaconvert:{iamPrefix:"mediaconvert"},medialive:{iamPrefix:"medialive"},"mediapackage-vod":{iamPrefix:"mediapackage-vod"},mediapackage:{iamPrefix:"mediapackage"},mediapackagev2:{iamPrefix:"mediapackagev2"},"mediastore-data":{iamPrefix:"mediastore"},mediastore:{iamPrefix:"mediastore"},mediatailor:{iamPrefix:"mediatailor"},"medical-imaging":{iamPrefix:"medical-imaging"},memorydb:{iamPrefix:"memorydb"},mgn:{iamPrefix:"mgn"},"migration-hub-refactor-spaces":{iamPrefix:"refactor-spaces"},"migration-hub":{iamPrefix:"mgh"},"migrationhub-config":{iamPrefix:"mgh"},migrationhuborchestrator:{iamPrefix:"migrationhub-orchestrator"},migrationhubstrategy:{iamPrefix:"migrationhub-strategy"},mobile:{iamPrefix:"AWSMobileHubService"},mq:{iamPrefix:"mq"},mturk:{iamPrefix:"mturk-requester"},mwaa:{iamPrefix:"airflow"},"neptune-graph":{iamPrefix:"neptune-graph"},neptune:{iamPrefix:"rds"},neptunedata:{iamPrefix:"neptune-db"},"network-firewall":{iamPrefix:"network-firewall"},networkmanager:{iamPrefix:"networkmanager"},networkmonitor:{iamPrefix:"networkmonitor"},nimble:{iamPrefix:"nimble"},oam:{iamPrefix:"oam"},omics:{iamPrefix:"omics"},opensearch:{iamPrefix:"es"},opensearchserverless:{iamPrefix:"aoss"},opsworks:{iamPrefix:"opsworks"},opsworkscm:{iamPrefix:"opsworks-cm"},organizations:{iamPrefix:"organizations"},osis:{iamPrefix:"osis"},outposts:{iamPrefix:"outposts"},panorama:{iamPrefix:"panorama"},"payment-cryptography-data":{iamPrefix:"payment-cryptography"},"payment-cryptography":{iamPrefix:"payment-cryptography"},"pca-connector-ad":{iamPrefix:"pca-connector-ad"},"personalize-events":{iamPrefix:"personalize"},"personalize-runtime":{iamPrefix:"personalize"},personalize:{iamPrefix:"personalize"},pi:{iamPrefix:"pi"},"pinpoint-email":{iamPrefix:"ses"},"pinpoint-sms-voice-v2":{iamPrefix:"sms-voice"},"pinpoint-sms-voice":{iamPrefix:"sms-voice"},pinpoint:{iamPrefix:"mobiletargeting"},pipes:{iamPrefix:"pipes"},polly:{iamPrefix:"polly"},pricing:{iamPrefix:"pricing"},privatenetworks:{iamPrefix:"private-networks"},proton:{iamPrefix:"proton"},qbusiness:{iamPrefix:"qbusiness"},qconnect:{iamPrefix:"wisdom"},"qldb-session":{iamPrefix:"qldb",commands:["SendCommand"]},qldb:{iamPrefix:"qldb"},quicksight:{iamPrefix:"quicksight"},ram:{iamPrefix:"ram"},rbin:{iamPrefix:"rbin"},"rds-data":{iamPrefix:"rds-data"},rds:{iamPrefix:"rds"},"redshift-data":{iamPrefix:"redshift-data"},"redshift-serverless":{iamPrefix:"redshift-serverless"},redshift:{iamPrefix:"redshift"},rekognition:{iamPrefix:"rekognition"},rekognitionstreaming:{iamPrefix:"rekognition"},repostspace:{iamPrefix:"repostspace"},resiliencehub:{iamPrefix:"resiliencehub"},"resource-explorer-2":{iamPrefix:"resource-explorer-2"},"resource-groups-tagging-api":{iamPrefix:"tagging"},"resource-groups":{iamPrefix:"resource-groups"},robomaker:{iamPrefix:"robomaker"},rolesanywhere:{iamPrefix:"rolesanywhere"},"route-53-domains":{iamPrefix:"route53domains"},"route-53":{iamPrefix:"route53"},"route53-recovery-cluster":{iamPrefix:"route53-recovery-cluster"},"route53-recovery-control-config":{iamPrefix:"route53-recovery-control-config"},"route53-recovery-readiness":{iamPrefix:"route53-recovery-readiness"},route53resolver:{iamPrefix:"route53resolver"},rum:{iamPrefix:"rum"},"s3-control":{iamPrefix:"s3"},s3:{iamPrefix:"s3"},s3outposts:{iamPrefix:"s3-outposts"},"sagemaker-a2i-runtime":{iamPrefix:"sagemaker"},"sagemaker-edge":{iamPrefix:"sagemaker"},"sagemaker-featurestore-runtime":{iamPrefix:"sagemaker"},"sagemaker-geospatial":{iamPrefix:"sagemaker-geospatial"},"sagemaker-metrics":{iamPrefix:"sagemaker"},"sagemaker-runtime":{iamPrefix:"sagemaker"},sagemaker:{iamPrefix:"sagemaker"},savingsplans:{iamPrefix:"savingsplans"},scheduler:{iamPrefix:"scheduler"},schemas:{iamPrefix:"schemas"},"secrets-manager":{iamPrefix:"secretsmanager"},securityhub:{iamPrefix:"securityhub"},securitylake:{iamPrefix:"securitylake"},serverlessapplicationrepository:{iamPrefix:"serverlessrepo"},"service-catalog-appregistry":{iamPrefix:"servicecatalog"},"service-catalog":{iamPrefix:"servicecatalog"},"service-quotas":{iamPrefix:"servicequotas"},servicediscovery:{iamPrefix:"servicediscovery"},ses:{iamPrefix:"ses"},sesv2:{iamPrefix:"ses"},sfn:{iamPrefix:"states"},shield:{iamPrefix:"shield"},signer:{iamPrefix:"signer"},simspaceweaver:{iamPrefix:"simspaceweaver"},sms:{iamPrefix:"sms"},"snow-device-management":{iamPrefix:"snow-device-management"},snowball:{iamPrefix:"snowball"},sns:{iamPrefix:"sns"},sqs:{iamPrefix:"sqs"},"ssm-contacts":{iamPrefix:"ssm-contacts"},"ssm-incidents":{iamPrefix:"ssm-incidents"},"ssm-sap":{iamPrefix:"ssm-sap"},ssm:{iamPrefix:"ssm",commands:["CancelCommand","SendCommand"]},"sso-admin":{iamPrefix:"sso"},"sso-oidc":{iamPrefix:"sso-oauth"},sso:{iamPrefix:"awsssoportal"},"storage-gateway":{iamPrefix:"storagegateway"},sts:{iamPrefix:"sts"},supplychain:{iamPrefix:"scn"},"support-app":{iamPrefix:"supportapp"},support:{iamPrefix:"support"},swf:{iamPrefix:"swf"},synthetics:{iamPrefix:"synthetics"},textract:{iamPrefix:"textract"},"timestream-query":{iamPrefix:"timestream"},"timestream-write":{iamPrefix:"timestream"},tnb:{iamPrefix:"tnb"},"transcribe-streaming":{iamPrefix:"transcribe"},transcribe:{iamPrefix:"transcribe"},transfer:{iamPrefix:"transfer"},translate:{iamPrefix:"translate"},trustedadvisor:{iamPrefix:"trustedadvisor"},verifiedpermissions:{iamPrefix:"verifiedpermissions"},"voice-id":{iamPrefix:"voiceid"},"vpc-lattice":{iamPrefix:"vpc-lattice"},"waf-regional":{iamPrefix:"waf-regional"},waf:{iamPrefix:"waf"},wafv2:{iamPrefix:"wafv2"},wellarchitected:{iamPrefix:"wellarchitected"},wisdom:{iamPrefix:"wisdom"},workdocs:{iamPrefix:"workdocs"},worklink:{iamPrefix:"worklink"},workmail:{iamPrefix:"workmail"},workmailmessageflow:{iamPrefix:"workmailmessageflow"},"workspaces-thin-client":{iamPrefix:"thinclient"},"workspaces-web":{iamPrefix:"workspaces-web"},workspaces:{iamPrefix:"workspaces"},xray:{iamPrefix:"xray"}}});var E={};u(E,{normalizeActionName:()=>T,normalizeServiceName:()=>A});function A(e){return e=e.toLowerCase(),e=e.replace(/^@aws-sdk\/client-/,""),e=me()?.[e]??e,e}function T(e,i){return i.charAt(0).toLowerCase()===i.charAt(0)?i.charAt(0).toUpperCase()+i.slice(1):fe()[e]?.commands?.includes(i)?i:i.replace(/Command$/,"")}function me(){return K()}function fe(){return Z()}var O=l(()=>{"use strict"});var Y={};u(Y,{ApiCall:()=>C,coerceSdkv3Response:()=>y,flatten:()=>I});function I(e){let i={};return r(e),i;function r(a,t=[]){if(a&&typeof a=="object"){for(let[s,o]of Object.entries(a))r(o,[...t,s]);return}i[t.join(".")]=a}}async function y(e){if(e&&typeof e=="object"&&typeof e.transformToString=="function")return e.transformToString();if(Buffer.isBuffer(e))return e.toString("utf8");if(ArrayBuffer.isView(e))return de.decode(e.buffer);if(Array.isArray(e)){let i=[];for(let r of e)i.push(await y(r));return i}if(e&&typeof e=="object"){for(let i of Object.keys(e))e[i]=await y(e[i]);return e}return e}var C,de,L=l(()=>{"use strict";N();z();O();C=class{constructor(i,r){this.service=A(i),this.action=T(this.service,r),this.v3PackageName=`@aws-sdk/client-${this.service}`}async invoke(i){this.initializePackage(i.sdkPackage),this.initializeClient(i);let r=this.findCommandClass(),a=await this.client.send(new r(J(this.service,this.action,i.parameters??{})));delete a.$metadata;let t=await y(a);return i.flattenResponse?I(t):t}initializePackage(i){if(!this.v3Package){if(i){this.v3Package=i;return}try{this.v3Package=require(this.v3PackageName)}catch{throw Error(`Service ${this.service} client package with name '${this.v3PackageName}' does not exist.`)}}}initializeClient(i){this.v3Package||this.initializePackage();let r=this.findConstructor(this.v3Package);return this.client=new r({apiVersion:i.apiVersion,credentials:i.credentials,region:i.region}),this.client}findCommandClass(){this.v3Package||this.initializePackage();let i=`${this.action}Command`,r=Object.entries(this.v3Package??{}).find(([a])=>a.toLowerCase()===i.toLowerCase())?.[1];if(!r)throw new Error(`Unable to find command named: ${i} for action: ${this.action} in service package ${this.v3PackageName}`);return r}findConstructor(i){try{let r=U(i);if(!r)throw new Error("findV3ClientConstructor returned undefined");return r}catch(r){throw console.error(r),Error(`No client constructor found within package: ${this.v3PackageName}`)}}};de=new TextDecoder});var W=w(n=>{"use strict";var le=n&&n.__createBinding||(Object.create?function(e,i,r,a){a===void 0&&(a=r);var t=Object.getOwnPropertyDescriptor(i,r);(!t||("get"in t?!i.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return i[r]}}),Object.defineProperty(e,a,t)}:function(e,i,r,a){a===void 0&&(a=r),e[a]=i[r]}),ue=n&&n.__exportStar||function(e,i){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(i,r)&&le(i,e,r)};Object.defineProperty(n,"__esModule",{value:!0});n.normalizeActionName=n.normalizeServiceName=n.findV3ClientConstructor=n.coerceApiParameters=void 0;var pe=(N(),p(D));Object.defineProperty(n,"coerceApiParameters",{enumerable:!0,get:function(){return pe.coerceApiParameters}});var ge=(z(),p(j));Object.defineProperty(n,"findV3ClientConstructor",{enumerable:!0,get:function(){return ge.findV3ClientConstructor}});var M=(O(),p(E));Object.defineProperty(n,"normalizeServiceName",{enumerable:!0,get:function(){return M.normalizeServiceName}});Object.defineProperty(n,"normalizeActionName",{enumerable:!0,get:function(){return M.normalizeActionName}});ue((L(),p(Y)),n)});var he={};u(he,{handler:()=>be});module.exports=p(he);var _=v(W());var Q=require("child_process"),b={};function Pe(e){console.log(`Installing latest AWS SDK v3: ${e}`),(0,Q.execSync)(`NPM_CONFIG_UPDATE_NOTIFIER=false HOME=/tmp npm install ${JSON.stringify(e)} --omit=dev --no-package-lock --no-save --prefix /tmp`),b={...b,[e]:!0}}async function V(e,i){let r;try{if(!b[e]&&i==="true")try{Pe(e),r=require(`/tmp/node_modules/${e}`)}catch(a){return console.log(`Failed to install latest AWS SDK v3. Falling back to pre-installed version. Error: ${a}`),require(e)}else b[e]?r=require(`/tmp/node_modules/${e}`):r=require(e)}catch{throw Error(`Package ${e} does not exist.`)}return r}var xe="PHYSICAL:RESOURCEID:";function B(e,i){return r(e);function r(a){if(a===xe)return i;if(Array.isArray(a))return a.map(r);if(a&&typeof a=="object"){for(let[t,s]of Object.entries(a))a[t]=r(s);return a}return a}}function h(e){if(e)return JSON.parse(e)}function X(e,i,r,a,t,s){let o={Status:i,Reason:r,PhysicalResourceId:a,StackId:e.StackId,RequestId:e.RequestId,LogicalResourceId:e.LogicalResourceId,NoEcho:!1,Data:t};if(s)console.log("Responding",JSON.stringify(o));else{let{Data:c,...f}=o;console.log("Responding",JSON.stringify(f))}let g=require("url").parse(e.ResponseURL),P=JSON.stringify(o),m={hostname:g.hostname,path:g.path,method:"PUT",headers:{"content-type":"","content-length":Buffer.byteLength(P,"utf8")}};return new Promise((c,f)=>{try{let d=require("https").request(m,c);d.on("error",f),d.write(P),d.end()}catch(d){f(d)}})}async function F(e,i){let r;if(e.assumedRoleArn){let a=new Date().getTime(),t={RoleArn:e.assumedRoleArn,RoleSessionName:`${a}-${i}`.substring(0,64)},{fromTemporaryCredentials:s}=await import("@aws-sdk/credential-providers");r=s({params:t,clientConfig:e.region!==void 0?{region:e.region}:void 0})}return r}function G(e,i){let r;return e.outputPath?r=[e.outputPath]:e.outputPaths&&(r=e.outputPaths),r?ye(i,ke(r)):i}function ke(e){return function(i){for(let r of e)if(i.startsWith(r))return!0;return!1}}function ye(e,i){return Object.entries(e).reduce((r,[a,t])=>i(a)?{...r,[a]:t}:r,{})}async function be(e,i){try{e.ResourceProperties.Create=h(e.ResourceProperties.Create),e.ResourceProperties.Update=h(e.ResourceProperties.Update),e.ResourceProperties.Delete=h(e.ResourceProperties.Delete);let r={},a;switch(e.RequestType){case"Create":a=e.ResourceProperties.Create?.physicalResourceId?.id??e.ResourceProperties.Update?.physicalResourceId?.id??e.ResourceProperties.Delete?.physicalResourceId?.id??e.LogicalResourceId;break;case"Update":case"Delete":a=e.ResourceProperties[e.RequestType]?.physicalResourceId?.id??e.PhysicalResourceId;break}let t=e.ResourceProperties[e.RequestType],s=t?.logApiResponseData??!0;if(t){let o=new _.ApiCall(t.service,t.action),g=await V(o.v3PackageName,e.ResourceProperties.InstallLatestAwsSdk);console.log(JSON.stringify({...e,ResponseURL:"..."}));let P=await F(t,a),m={};try{let c=await o.invoke({sdkPackage:g,apiVersion:t.apiVersion,credentials:P,region:t.region,parameters:B(t.parameters,a),flattenResponse:!0});s&&console.log("API response",c),m.apiVersion=o.client.config.apiVersion,m.region=await o.client.config.region().catch(()=>{}),Object.assign(m,c),r=G(t,m)}catch(c){let f=c.name??c.constructor.name;if(!t.ignoreErrorCodesMatching||!new RegExp(t.ignoreErrorCodesMatching).test(f))throw c}t.physicalResourceId?.responsePath&&(a=m[t.physicalResourceId.responsePath])}await X(e,"SUCCESS","OK",a,r,s)}catch(r){console.log(r),await X(e,"FAILED",r.message||"Internal Error",i.logStreamName,{},!0)}}0&&(module.exports={handler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/cdk.out index 1f0068d32659a..1e02a2deb191b 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"36.0.0"} \ No newline at end of file +{"version":"40.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-logged.assets.json similarity index 60% rename from packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret.assets.json rename to packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-logged.assets.json index 42d5eeb0faf5d..41c265386443d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-logged.assets.json @@ -1,28 +1,28 @@ { - "version": "36.0.0", + "version": "40.0.0", "files": { - "746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e": { + "cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d": { "source": { - "path": "asset.746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e", + "path": "asset.cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e.zip", + "objectKey": "cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "3b8ce9dbaed287a880e3608160df54807c78e6bd8f2dd508f3ae939addce7977": { + "e72f1ec4c5cf2c4318013b075e2b789953f750dd2d2e40c9b017171f49a7f57b": { "source": { - "path": "integ-user-pool-client-secret.template.json", + "path": "integ-user-pool-client-secret-logged.template.json", "packaging": "file" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "3b8ce9dbaed287a880e3608160df54807c78e6bd8f2dd508f3ae939addce7977.json", + "objectKey": "e72f1ec4c5cf2c4318013b075e2b789953f750dd2d2e40c9b017171f49a7f57b.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-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-logged.template.json similarity index 99% rename from packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret.template.json rename to packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-logged.template.json index 6d7c44553a7fa..a479e5317767c 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-logged.template.json @@ -187,7 +187,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e.zip" + "S3Key": "cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d.zip" }, "Handler": "index.handler", "Role": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-not-logged.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-not-logged.assets.json new file mode 100644 index 0000000000000..472c1b909c46d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-not-logged.assets.json @@ -0,0 +1,32 @@ +{ + "version": "40.0.0", + "files": { + "cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d": { + "source": { + "path": "asset.cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "efa927d6268abbe4bbf58a9243c5782e08cf43e8366059a690f7b0f0bc737cd1": { + "source": { + "path": "integ-user-pool-client-secret-not-logged.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "efa927d6268abbe4bbf58a9243c5782e08cf43e8366059a690f7b0f0bc737cd1.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-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-not-logged.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-not-logged.template.json new file mode 100644 index 0000000000000..5adb0d99daa01 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ-user-pool-client-secret-not-logged.template.json @@ -0,0 +1,443 @@ +{ + "Resources": { + "pool056F3F7E": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AccountRecoverySetting": { + "RecoveryMechanisms": [ + { + "Name": "verified_phone_number", + "Priority": 1 + }, + { + "Name": "verified_email", + "Priority": 2 + } + ] + }, + "AdminCreateUserConfig": { + "AllowAdminCreateUserOnly": true + }, + "EmailVerificationMessage": "The verification code to your new account is {####}", + "EmailVerificationSubject": "Verify your new account", + "SmsVerificationMessage": "The verification code to your new account is {####}", + "VerificationMessageTemplate": { + "DefaultEmailOption": "CONFIRM_WITH_CODE", + "EmailMessage": "The verification code to your new account is {####}", + "EmailSubject": "Verify your new account", + "SmsMessage": "The verification code to your new account is {####}" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "poolclient2623294C": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlows": [ + "implicit", + "code" + ], + "AllowedOAuthFlowsUserPoolClient": true, + "AllowedOAuthScopes": [ + "profile", + "phone", + "email", + "openid", + "aws.cognito.signin.user.admin" + ], + "CallbackURLs": [ + "https://example.com" + ], + "GenerateSecret": true, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "UserPoolId": { + "Ref": "pool056F3F7E" + } + } + }, + "poolclientDescribeCognitoUserPoolClient51F12EBD": { + "Type": "Custom::DescribeCognitoUserPoolClient", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "Arn" + ] + }, + "Create": { + "Fn::Join": [ + "", + [ + "{\"region\":\"", + { + "Ref": "AWS::Region" + }, + "\",\"service\":\"CognitoIdentityServiceProvider\",\"action\":\"describeUserPoolClient\",\"parameters\":{\"UserPoolId\":\"", + { + "Ref": "pool056F3F7E" + }, + "\",\"ClientId\":\"", + { + "Ref": "poolclient2623294C" + }, + "\"},\"physicalResourceId\":{\"id\":\"", + { + "Ref": "poolclient2623294C" + }, + "\"},\"logApiResponseData\":false}" + ] + ] + }, + "Update": { + "Fn::Join": [ + "", + [ + "{\"region\":\"", + { + "Ref": "AWS::Region" + }, + "\",\"service\":\"CognitoIdentityServiceProvider\",\"action\":\"describeUserPoolClient\",\"parameters\":{\"UserPoolId\":\"", + { + "Ref": "pool056F3F7E" + }, + "\",\"ClientId\":\"", + { + "Ref": "poolclient2623294C" + }, + "\"},\"physicalResourceId\":{\"id\":\"", + { + "Ref": "poolclient2623294C" + }, + "\"},\"logApiResponseData\":false}" + ] + ] + }, + "InstallLatestAwsSdk": false + }, + "DependsOn": [ + "poolclientDescribeCognitoUserPoolClientCustomResourcePolicy5C0049D2" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "poolclientDescribeCognitoUserPoolClientCustomResourcePolicy5C0049D2": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:DescribeUserPoolClient", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "pool056F3F7E", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "poolclientDescribeCognitoUserPoolClientCustomResourcePolicy5C0049D2", + "Roles": [ + { + "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" + } + ] + } + }, + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2": { + "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" + ] + ] + } + ] + } + }, + "AWS679f53fac002430cb0da5b7982bd22872D164C4C": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d.zip" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", + "Arn" + ] + }, + "Runtime": { + "Fn::FindInMap": [ + "LatestNodeRuntimeMap", + { + "Ref": "AWS::Region" + }, + "value" + ] + }, + "Timeout": 120 + }, + "DependsOn": [ + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" + ] + }, + "secret4DA88516": { + "Type": "AWS::SecretsManager::Secret", + "Properties": { + "SecretString": { + "Fn::GetAtt": [ + "poolclientDescribeCognitoUserPoolClient51F12EBD", + "UserPoolClient.ClientSecret" + ] + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Mappings": { + "LatestNodeRuntimeMap": { + "af-south-1": { + "value": "nodejs20.x" + }, + "ap-east-1": { + "value": "nodejs20.x" + }, + "ap-northeast-1": { + "value": "nodejs20.x" + }, + "ap-northeast-2": { + "value": "nodejs20.x" + }, + "ap-northeast-3": { + "value": "nodejs20.x" + }, + "ap-south-1": { + "value": "nodejs20.x" + }, + "ap-south-2": { + "value": "nodejs20.x" + }, + "ap-southeast-1": { + "value": "nodejs20.x" + }, + "ap-southeast-2": { + "value": "nodejs20.x" + }, + "ap-southeast-3": { + "value": "nodejs20.x" + }, + "ap-southeast-4": { + "value": "nodejs20.x" + }, + "ap-southeast-5": { + "value": "nodejs20.x" + }, + "ap-southeast-7": { + "value": "nodejs20.x" + }, + "ca-central-1": { + "value": "nodejs20.x" + }, + "ca-west-1": { + "value": "nodejs20.x" + }, + "cn-north-1": { + "value": "nodejs20.x" + }, + "cn-northwest-1": { + "value": "nodejs20.x" + }, + "eu-central-1": { + "value": "nodejs20.x" + }, + "eu-central-2": { + "value": "nodejs20.x" + }, + "eu-isoe-west-1": { + "value": "nodejs18.x" + }, + "eu-north-1": { + "value": "nodejs20.x" + }, + "eu-south-1": { + "value": "nodejs20.x" + }, + "eu-south-2": { + "value": "nodejs20.x" + }, + "eu-west-1": { + "value": "nodejs20.x" + }, + "eu-west-2": { + "value": "nodejs20.x" + }, + "eu-west-3": { + "value": "nodejs20.x" + }, + "il-central-1": { + "value": "nodejs20.x" + }, + "me-central-1": { + "value": "nodejs20.x" + }, + "me-south-1": { + "value": "nodejs20.x" + }, + "mx-central-1": { + "value": "nodejs20.x" + }, + "sa-east-1": { + "value": "nodejs20.x" + }, + "us-east-1": { + "value": "nodejs20.x" + }, + "us-east-2": { + "value": "nodejs20.x" + }, + "us-gov-east-1": { + "value": "nodejs20.x" + }, + "us-gov-west-1": { + "value": "nodejs20.x" + }, + "us-iso-east-1": { + "value": "nodejs18.x" + }, + "us-iso-west-1": { + "value": "nodejs18.x" + }, + "us-isob-east-1": { + "value": "nodejs18.x" + }, + "us-west-1": { + "value": "nodejs20.x" + }, + "us-west-2": { + "value": "nodejs20.x" + } + } + }, + "Outputs": { + "ClientSecretName": { + "Value": { + "Fn::Join": [ + "-", + [ + { + "Fn::Select": [ + 0, + { + "Fn::Split": [ + "-", + { + "Fn::Select": [ + 6, + { + "Fn::Split": [ + ":", + { + "Ref": "secret4DA88516" + } + ] + } + ] + } + ] + } + ] + }, + { + "Fn::Select": [ + 1, + { + "Fn::Split": [ + "-", + { + "Fn::Select": [ + 6, + { + "Fn::Split": [ + ":", + { + "Ref": "secret4DA88516" + } + ] + } + ] + } + ] + } + ] + } + ] + ] + } + } + }, + "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-cognito/test/integ.user-pool-client-secret.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ.json index c65aed11f3993..ffe1e92b21df9 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integ.json @@ -1,9 +1,10 @@ { - "version": "36.0.0", + "version": "40.0.0", "testCases": { "integ-user-pool-client-secret-test/DefaultTest": { "stacks": [ - "integ-user-pool-client-secret" + "integ-user-pool-client-secret-not-logged", + "integ-user-pool-client-secret-logged" ], "assertionStack": "integ-user-pool-client-secret-test/DefaultTest/DeployAssert", "assertionStackName": "integuserpoolclientsecrettestDefaultTestDeployAssert4FDD1661" diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integuserpoolclientsecrettestDefaultTestDeployAssert4FDD1661.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integuserpoolclientsecrettestDefaultTestDeployAssert4FDD1661.assets.json index 344f173d40c2e..556b22989d52d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integuserpoolclientsecrettestDefaultTestDeployAssert4FDD1661.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/integuserpoolclientsecrettestDefaultTestDeployAssert4FDD1661.assets.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "40.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/manifest.json index 92307db3f123b..5c942157d7a6f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/manifest.json @@ -1,28 +1,28 @@ { - "version": "36.0.0", + "version": "40.0.0", "artifacts": { - "integ-user-pool-client-secret.assets": { + "integ-user-pool-client-secret-not-logged.assets": { "type": "cdk:asset-manifest", "properties": { - "file": "integ-user-pool-client-secret.assets.json", + "file": "integ-user-pool-client-secret-not-logged.assets.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" } }, - "integ-user-pool-client-secret": { + "integ-user-pool-client-secret-not-logged": { "type": "aws:cloudformation:stack", "environment": "aws://unknown-account/unknown-region", "properties": { - "templateFile": "integ-user-pool-client-secret.template.json", + "templateFile": "integ-user-pool-client-secret-not-logged.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}/3b8ce9dbaed287a880e3608160df54807c78e6bd8f2dd508f3ae939addce7977.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/efa927d6268abbe4bbf58a9243c5782e08cf43e8366059a690f7b0f0bc737cd1.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ - "integ-user-pool-client-secret.assets" + "integ-user-pool-client-secret-not-logged.assets" ], "lookupRole": { "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", @@ -31,77 +31,505 @@ } }, "dependencies": [ - "integ-user-pool-client-secret.assets" + "integ-user-pool-client-secret-not-logged.assets" ], "metadata": { - "/integ-user-pool-client-secret/pool/Resource": [ + "/integ-user-pool-client-secret-not-logged/pool": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "removalPolicy": "destroy" + } + } + ], + "/integ-user-pool-client-secret-not-logged/pool/Resource": [ { "type": "aws:cdk:logicalId", "data": "pool056F3F7E" } ], - "/integ-user-pool-client-secret/pool/client/Resource": [ + "/integ-user-pool-client-secret-not-logged/pool/client": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "userPool": "*", + "generateSecret": true + } + } + ], + "/integ-user-pool-client-secret-not-logged/pool/client/Resource": [ { "type": "aws:cdk:logicalId", "data": "poolclient2623294C" } ], - "/integ-user-pool-client-secret/pool/client/DescribeCognitoUserPoolClient/Resource/Default": [ + "/integ-user-pool-client-secret-not-logged/pool/client/DescribeCognitoUserPoolClient/Provider": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "uuid": "*", + "lambdaPurpose": "*", + "memorySize": "*", + "timeout": "*", + "role": "*", + "logGroup": "*", + "functionName": "*", + "vpc": "*", + "vpcSubnets": "*", + "code": "*", + "handler": "*", + "runtime": "*" + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addMetadata": [ + "*", + true + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addMetadata": [ + "*", + "*" + ] + } + } + ], + "/integ-user-pool-client-secret-not-logged/pool/client/DescribeCognitoUserPoolClient/Resource": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + } + ], + "/integ-user-pool-client-secret-not-logged/pool/client/DescribeCognitoUserPoolClient/Resource/Default": [ { "type": "aws:cdk:logicalId", "data": "poolclientDescribeCognitoUserPoolClient51F12EBD" } ], - "/integ-user-pool-client-secret/pool/client/DescribeCognitoUserPoolClient/CustomResourcePolicy/Resource": [ + "/integ-user-pool-client-secret-not-logged/pool/client/DescribeCognitoUserPoolClient/CustomResourcePolicy": [ + { + "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": [ + "*" + ] + } + } + ], + "/integ-user-pool-client-secret-not-logged/pool/client/DescribeCognitoUserPoolClient/CustomResourcePolicy/Resource": [ { "type": "aws:cdk:logicalId", "data": "poolclientDescribeCognitoUserPoolClientCustomResourcePolicy5C0049D2" } ], - "/integ-user-pool-client-secret/LatestNodeRuntimeMap": [ + "/integ-user-pool-client-secret-not-logged/LatestNodeRuntimeMap": [ { "type": "aws:cdk:logicalId", "data": "LatestNodeRuntimeMap" } ], - "/integ-user-pool-client-secret/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/Resource": [ + "/integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "memorySize": "*", + "timeout": "*", + "role": "*", + "logGroup": "*", + "functionName": "*", + "vpc": "*", + "vpcSubnets": "*", + "code": "*", + "handler": "*", + "runtime": "*" + } + }, + { + "type": "aws:cdk:is-custom-resource-handler-singleton", + "data": true + }, + { + "type": "aws:cdk:is-custom-resource-handler-runtime-family", + "data": 0 + } + ], + "/integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "assumedBy": { + "principalAccount": "*", + "assumeRoleAction": "*" + }, + "managedPolicies": [ + { + "managedPolicyArn": "*" + } + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachInlinePolicy": [ + "*" + ] + } + } + ], + "/integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/ImportServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/Resource": [ { "type": "aws:cdk:logicalId", "data": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" } ], - "/integ-user-pool-client-secret/AWS679f53fac002430cb0da5b7982bd2287/Resource": [ + "/integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287/Resource": [ { "type": "aws:cdk:logicalId", "data": "AWS679f53fac002430cb0da5b7982bd22872D164C4C" } ], - "/integ-user-pool-client-secret/secret/Resource": [ + "/integ-user-pool-client-secret-not-logged/secret": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "secretStringValue": "*" + } + } + ], + "/integ-user-pool-client-secret-not-logged/secret/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "secret4DA88516" + } + ], + "/integ-user-pool-client-secret-not-logged/ClientSecretName": [ + { + "type": "aws:cdk:logicalId", + "data": "ClientSecretName" + } + ], + "/integ-user-pool-client-secret-not-logged/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/integ-user-pool-client-secret-not-logged/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "integ-user-pool-client-secret-not-logged" + }, + "integ-user-pool-client-secret-logged.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "integ-user-pool-client-secret-logged.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "integ-user-pool-client-secret-logged": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "integ-user-pool-client-secret-logged.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}/e72f1ec4c5cf2c4318013b075e2b789953f750dd2d2e40c9b017171f49a7f57b.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "integ-user-pool-client-secret-logged.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": [ + "integ-user-pool-client-secret-logged.assets" + ], + "metadata": { + "/integ-user-pool-client-secret-logged/pool": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "removalPolicy": "destroy" + } + } + ], + "/integ-user-pool-client-secret-logged/pool/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "pool056F3F7E" + } + ], + "/integ-user-pool-client-secret-logged/pool/client": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "userPool": "*", + "generateSecret": true + } + } + ], + "/integ-user-pool-client-secret-logged/pool/client/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "poolclient2623294C" + } + ], + "/integ-user-pool-client-secret-logged/pool/client/DescribeCognitoUserPoolClient/Provider": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "uuid": "*", + "lambdaPurpose": "*", + "memorySize": "*", + "timeout": "*", + "role": "*", + "logGroup": "*", + "functionName": "*", + "vpc": "*", + "vpcSubnets": "*", + "code": "*", + "handler": "*", + "runtime": "*" + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addMetadata": [ + "*", + true + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addMetadata": [ + "*", + "*" + ] + } + } + ], + "/integ-user-pool-client-secret-logged/pool/client/DescribeCognitoUserPoolClient/Resource": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + } + ], + "/integ-user-pool-client-secret-logged/pool/client/DescribeCognitoUserPoolClient/Resource/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "poolclientDescribeCognitoUserPoolClient51F12EBD" + } + ], + "/integ-user-pool-client-secret-logged/pool/client/DescribeCognitoUserPoolClient/CustomResourcePolicy": [ + { + "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": [ + "*" + ] + } + } + ], + "/integ-user-pool-client-secret-logged/pool/client/DescribeCognitoUserPoolClient/CustomResourcePolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "poolclientDescribeCognitoUserPoolClientCustomResourcePolicy5C0049D2" + } + ], + "/integ-user-pool-client-secret-logged/LatestNodeRuntimeMap": [ + { + "type": "aws:cdk:logicalId", + "data": "LatestNodeRuntimeMap" + } + ], + "/integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "memorySize": "*", + "timeout": "*", + "role": "*", + "logGroup": "*", + "functionName": "*", + "vpc": "*", + "vpcSubnets": "*", + "code": "*", + "handler": "*", + "runtime": "*" + } + }, + { + "type": "aws:cdk:is-custom-resource-handler-singleton", + "data": true + }, + { + "type": "aws:cdk:is-custom-resource-handler-runtime-family", + "data": 0 + } + ], + "/integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "assumedBy": { + "principalAccount": "*", + "assumeRoleAction": "*" + }, + "managedPolicies": [ + { + "managedPolicyArn": "*" + } + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachInlinePolicy": [ + "*" + ] + } + } + ], + "/integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/ImportServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" + } + ], + "/integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "AWS679f53fac002430cb0da5b7982bd22872D164C4C" + } + ], + "/integ-user-pool-client-secret-logged/secret": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "secretStringValue": "*" + } + } + ], + "/integ-user-pool-client-secret-logged/secret/Resource": [ { "type": "aws:cdk:logicalId", "data": "secret4DA88516" } ], - "/integ-user-pool-client-secret/ClientSecretName": [ + "/integ-user-pool-client-secret-logged/ClientSecretName": [ { "type": "aws:cdk:logicalId", "data": "ClientSecretName" } ], - "/integ-user-pool-client-secret/BootstrapVersion": [ + "/integ-user-pool-client-secret-logged/BootstrapVersion": [ { "type": "aws:cdk:logicalId", "data": "BootstrapVersion" } ], - "/integ-user-pool-client-secret/CheckBootstrapVersion": [ + "/integ-user-pool-client-secret-logged/CheckBootstrapVersion": [ { "type": "aws:cdk:logicalId", "data": "CheckBootstrapVersion" } ] }, - "displayName": "integ-user-pool-client-secret" + "displayName": "integ-user-pool-client-secret-logged" }, "integuserpoolclientsecrettestDefaultTestDeployAssert4FDD1661.assets": { "type": "cdk:asset-manifest", diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/tree.json index 32462c82d42c7..514c733caa6ea 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.js.snapshot/tree.json @@ -1,447 +1 @@ -{ - "version": "tree-0.1", - "tree": { - "id": "App", - "path": "", - "children": { - "integ-user-pool-client-secret": { - "id": "integ-user-pool-client-secret", - "path": "integ-user-pool-client-secret", - "children": { - "pool": { - "id": "pool", - "path": "integ-user-pool-client-secret/pool", - "children": { - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-secret/pool/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Cognito::UserPool", - "aws:cdk:cloudformation:props": { - "accountRecoverySetting": { - "recoveryMechanisms": [ - { - "name": "verified_phone_number", - "priority": 1 - }, - { - "name": "verified_email", - "priority": 2 - } - ] - }, - "adminCreateUserConfig": { - "allowAdminCreateUserOnly": true - }, - "emailVerificationMessage": "The verification code to your new account is {####}", - "emailVerificationSubject": "Verify your new account", - "smsVerificationMessage": "The verification code to your new account is {####}", - "verificationMessageTemplate": { - "defaultEmailOption": "CONFIRM_WITH_CODE", - "emailMessage": "The verification code to your new account is {####}", - "emailSubject": "Verify your new account", - "smsMessage": "The verification code to your new account is {####}" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.CfnUserPool", - "version": "0.0.0" - } - }, - "client": { - "id": "client", - "path": "integ-user-pool-client-secret/pool/client", - "children": { - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-secret/pool/client/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Cognito::UserPoolClient", - "aws:cdk:cloudformation:props": { - "allowedOAuthFlows": [ - "implicit", - "code" - ], - "allowedOAuthFlowsUserPoolClient": true, - "allowedOAuthScopes": [ - "profile", - "phone", - "email", - "openid", - "aws.cognito.signin.user.admin" - ], - "callbackUrLs": [ - "https://example.com" - ], - "generateSecret": true, - "supportedIdentityProviders": [ - "COGNITO" - ], - "userPoolId": { - "Ref": "pool056F3F7E" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.CfnUserPoolClient", - "version": "0.0.0" - } - }, - "DescribeCognitoUserPoolClient": { - "id": "DescribeCognitoUserPoolClient", - "path": "integ-user-pool-client-secret/pool/client/DescribeCognitoUserPoolClient", - "children": { - "Provider": { - "id": "Provider", - "path": "integ-user-pool-client-secret/pool/client/DescribeCognitoUserPoolClient/Provider", - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.SingletonFunction", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-secret/pool/client/DescribeCognitoUserPoolClient/Resource", - "children": { - "Default": { - "id": "Default", - "path": "integ-user-pool-client-secret/pool/client/DescribeCognitoUserPoolClient/Resource/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0" - } - }, - "CustomResourcePolicy": { - "id": "CustomResourcePolicy", - "path": "integ-user-pool-client-secret/pool/client/DescribeCognitoUserPoolClient/CustomResourcePolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-secret/pool/client/DescribeCognitoUserPoolClient/CustomResourcePolicy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "cognito-idp:DescribeUserPoolClient", - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "pool056F3F7E", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "poolclientDescribeCognitoUserPoolClientCustomResourcePolicy5C0049D2", - "roles": [ - { - "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.custom_resources.AwsCustomResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.UserPoolClient", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.UserPool", - "version": "0.0.0" - } - }, - "LatestNodeRuntimeMap": { - "id": "LatestNodeRuntimeMap", - "path": "integ-user-pool-client-secret/LatestNodeRuntimeMap", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnMapping", - "version": "0.0.0" - } - }, - "AWS679f53fac002430cb0da5b7982bd2287": { - "id": "AWS679f53fac002430cb0da5b7982bd2287", - "path": "integ-user-pool-client-secret/AWS679f53fac002430cb0da5b7982bd2287", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "integ-user-pool-client-secret/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "integ-user-pool-client-secret/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-secret/AWS679f53fac002430cb0da5b7982bd2287/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" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "0.0.0" - } - }, - "Code": { - "id": "Code", - "path": "integ-user-pool-client-secret/AWS679f53fac002430cb0da5b7982bd2287/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "integ-user-pool-client-secret/AWS679f53fac002430cb0da5b7982bd2287/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "integ-user-pool-client-secret/AWS679f53fac002430cb0da5b7982bd2287/Code/AssetBucket", - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-secret/AWS679f53fac002430cb0da5b7982bd2287/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": "746da84b10e215c552e68b6d2061024e4429f0386f43a35ef5e4d2940655692e.zip" - }, - "handler": "index.handler", - "role": { - "Fn::GetAtt": [ - "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", - "Arn" - ] - }, - "runtime": { - "Fn::FindInMap": [ - "LatestNodeRuntimeMap", - { - "Ref": "AWS::Region" - }, - "value" - ] - }, - "timeout": 120 - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "0.0.0" - } - }, - "secret": { - "id": "secret", - "path": "integ-user-pool-client-secret/secret", - "children": { - "Resource": { - "id": "Resource", - "path": "integ-user-pool-client-secret/secret/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::SecretsManager::Secret", - "aws:cdk:cloudformation:props": { - "secretString": { - "Fn::GetAtt": [ - "poolclientDescribeCognitoUserPoolClient51F12EBD", - "UserPoolClient.ClientSecret" - ] - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_secretsmanager.CfnSecret", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_secretsmanager.Secret", - "version": "0.0.0" - } - }, - "ClientSecretName": { - "id": "ClientSecretName", - "path": "integ-user-pool-client-secret/ClientSecretName", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - }, - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "integ-user-pool-client-secret/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "integ-user-pool-client-secret/CheckBootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnRule", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.Stack", - "version": "0.0.0" - } - }, - "integ-user-pool-client-secret-test": { - "id": "integ-user-pool-client-secret-test", - "path": "integ-user-pool-client-secret-test", - "children": { - "DefaultTest": { - "id": "DefaultTest", - "path": "integ-user-pool-client-secret-test/DefaultTest", - "children": { - "Default": { - "id": "Default", - "path": "integ-user-pool-client-secret-test/DefaultTest/Default", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.3.0" - } - }, - "DeployAssert": { - "id": "DeployAssert", - "path": "integ-user-pool-client-secret-test/DefaultTest/DeployAssert", - "children": { - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "integ-user-pool-client-secret-test/DefaultTest/DeployAssert/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "integ-user-pool-client-secret-test/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.3.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.App", - "version": "0.0.0" - } - } -} \ No newline at end of file +{"version":"tree-0.1","tree":{"id":"App","path":"","children":{"integ-user-pool-client-secret-not-logged":{"id":"integ-user-pool-client-secret-not-logged","path":"integ-user-pool-client-secret-not-logged","children":{"pool":{"id":"pool","path":"integ-user-pool-client-secret-not-logged/pool","children":{"Resource":{"id":"Resource","path":"integ-user-pool-client-secret-not-logged/pool/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Cognito::UserPool","aws:cdk:cloudformation:props":{"accountRecoverySetting":{"recoveryMechanisms":[{"name":"verified_phone_number","priority":1},{"name":"verified_email","priority":2}]},"adminCreateUserConfig":{"allowAdminCreateUserOnly":true},"emailVerificationMessage":"The verification code to your new account is {####}","emailVerificationSubject":"Verify your new account","smsVerificationMessage":"The verification code to your new account is {####}","verificationMessageTemplate":{"defaultEmailOption":"CONFIRM_WITH_CODE","emailMessage":"The verification code to your new account is {####}","emailSubject":"Verify your new account","smsMessage":"The verification code to your new account is {####}"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.CfnUserPool","version":"0.0.0"}},"client":{"id":"client","path":"integ-user-pool-client-secret-not-logged/pool/client","children":{"Resource":{"id":"Resource","path":"integ-user-pool-client-secret-not-logged/pool/client/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Cognito::UserPoolClient","aws:cdk:cloudformation:props":{"allowedOAuthFlows":["implicit","code"],"allowedOAuthFlowsUserPoolClient":true,"allowedOAuthScopes":["profile","phone","email","openid","aws.cognito.signin.user.admin"],"callbackUrLs":["https://example.com"],"generateSecret":true,"supportedIdentityProviders":["COGNITO"],"userPoolId":{"Ref":"pool056F3F7E"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.CfnUserPoolClient","version":"0.0.0"}},"DescribeCognitoUserPoolClient":{"id":"DescribeCognitoUserPoolClient","path":"integ-user-pool-client-secret-not-logged/pool/client/DescribeCognitoUserPoolClient","children":{"Provider":{"id":"Provider","path":"integ-user-pool-client-secret-not-logged/pool/client/DescribeCognitoUserPoolClient/Provider","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.SingletonFunction","version":"0.0.0","metadata":[{"uuid":"*","lambdaPurpose":"*","memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"},{"addMetadata":["*",true]},{"addMetadata":["*","*"]}]}},"Resource":{"id":"Resource","path":"integ-user-pool-client-secret-not-logged/pool/client/DescribeCognitoUserPoolClient/Resource","children":{"Default":{"id":"Default","path":"integ-user-pool-client-secret-not-logged/pool/client/DescribeCognitoUserPoolClient/Resource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*","*","*"]}},"CustomResourcePolicy":{"id":"CustomResourcePolicy","path":"integ-user-pool-client-secret-not-logged/pool/client/DescribeCognitoUserPoolClient/CustomResourcePolicy","children":{"Resource":{"id":"Resource","path":"integ-user-pool-client-secret-not-logged/pool/client/DescribeCognitoUserPoolClient/CustomResourcePolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"cognito-idp:DescribeUserPoolClient","Effect":"Allow","Resource":{"Fn::GetAtt":["pool056F3F7E","Arn"]}}],"Version":"2012-10-17"},"policyName":"poolclientDescribeCognitoUserPoolClientCustomResourcePolicy5C0049D2","roles":[{"Ref":"AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.AwsCustomResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.UserPoolClient","version":"0.0.0","metadata":[{"userPool":"*","generateSecret":true}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.UserPool","version":"0.0.0","metadata":[{"removalPolicy":"destroy"}]}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"integ-user-pool-client-secret-not-logged/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"AWS679f53fac002430cb0da5b7982bd2287":{"id":"AWS679f53fac002430cb0da5b7982bd2287","path":"integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287","children":{"ServiceRole":{"id":"ServiceRole","path":"integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287/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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"attachInlinePolicy":["*"]}]}},"Code":{"id":"Code","path":"integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287/Code","children":{"Stage":{"id":"Stage","path":"integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287/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":"integ-user-pool-client-secret-not-logged/AWS679f53fac002430cb0da5b7982bd2287/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":"cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":120}},"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":[{"memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"}]}},"secret":{"id":"secret","path":"integ-user-pool-client-secret-not-logged/secret","children":{"Resource":{"id":"Resource","path":"integ-user-pool-client-secret-not-logged/secret/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::Secret","aws:cdk:cloudformation:props":{"secretString":{"Fn::GetAtt":["poolclientDescribeCognitoUserPoolClient51F12EBD","UserPoolClient.ClientSecret"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecret","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.Secret","version":"0.0.0","metadata":[{"secretStringValue":"*"}]}},"ClientSecretName":{"id":"ClientSecretName","path":"integ-user-pool-client-secret-not-logged/ClientSecretName","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"BootstrapVersion":{"id":"BootstrapVersion","path":"integ-user-pool-client-secret-not-logged/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"integ-user-pool-client-secret-not-logged/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"}},"integ-user-pool-client-secret-logged":{"id":"integ-user-pool-client-secret-logged","path":"integ-user-pool-client-secret-logged","children":{"pool":{"id":"pool","path":"integ-user-pool-client-secret-logged/pool","children":{"Resource":{"id":"Resource","path":"integ-user-pool-client-secret-logged/pool/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Cognito::UserPool","aws:cdk:cloudformation:props":{"accountRecoverySetting":{"recoveryMechanisms":[{"name":"verified_phone_number","priority":1},{"name":"verified_email","priority":2}]},"adminCreateUserConfig":{"allowAdminCreateUserOnly":true},"emailVerificationMessage":"The verification code to your new account is {####}","emailVerificationSubject":"Verify your new account","smsVerificationMessage":"The verification code to your new account is {####}","verificationMessageTemplate":{"defaultEmailOption":"CONFIRM_WITH_CODE","emailMessage":"The verification code to your new account is {####}","emailSubject":"Verify your new account","smsMessage":"The verification code to your new account is {####}"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.CfnUserPool","version":"0.0.0"}},"client":{"id":"client","path":"integ-user-pool-client-secret-logged/pool/client","children":{"Resource":{"id":"Resource","path":"integ-user-pool-client-secret-logged/pool/client/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Cognito::UserPoolClient","aws:cdk:cloudformation:props":{"allowedOAuthFlows":["implicit","code"],"allowedOAuthFlowsUserPoolClient":true,"allowedOAuthScopes":["profile","phone","email","openid","aws.cognito.signin.user.admin"],"callbackUrLs":["https://example.com"],"generateSecret":true,"supportedIdentityProviders":["COGNITO"],"userPoolId":{"Ref":"pool056F3F7E"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.CfnUserPoolClient","version":"0.0.0"}},"DescribeCognitoUserPoolClient":{"id":"DescribeCognitoUserPoolClient","path":"integ-user-pool-client-secret-logged/pool/client/DescribeCognitoUserPoolClient","children":{"Provider":{"id":"Provider","path":"integ-user-pool-client-secret-logged/pool/client/DescribeCognitoUserPoolClient/Provider","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.SingletonFunction","version":"0.0.0","metadata":[{"uuid":"*","lambdaPurpose":"*","memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"},{"addMetadata":["*",true]},{"addMetadata":["*","*"]}]}},"Resource":{"id":"Resource","path":"integ-user-pool-client-secret-logged/pool/client/DescribeCognitoUserPoolClient/Resource","children":{"Default":{"id":"Default","path":"integ-user-pool-client-secret-logged/pool/client/DescribeCognitoUserPoolClient/Resource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*","*","*"]}},"CustomResourcePolicy":{"id":"CustomResourcePolicy","path":"integ-user-pool-client-secret-logged/pool/client/DescribeCognitoUserPoolClient/CustomResourcePolicy","children":{"Resource":{"id":"Resource","path":"integ-user-pool-client-secret-logged/pool/client/DescribeCognitoUserPoolClient/CustomResourcePolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"cognito-idp:DescribeUserPoolClient","Effect":"Allow","Resource":{"Fn::GetAtt":["pool056F3F7E","Arn"]}}],"Version":"2012-10-17"},"policyName":"poolclientDescribeCognitoUserPoolClientCustomResourcePolicy5C0049D2","roles":[{"Ref":"AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.AwsCustomResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.UserPoolClient","version":"0.0.0","metadata":[{"userPool":"*","generateSecret":true}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.UserPool","version":"0.0.0","metadata":[{"removalPolicy":"destroy"}]}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"integ-user-pool-client-secret-logged/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"AWS679f53fac002430cb0da5b7982bd2287":{"id":"AWS679f53fac002430cb0da5b7982bd2287","path":"integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287","children":{"ServiceRole":{"id":"ServiceRole","path":"integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287/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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"attachInlinePolicy":["*"]}]}},"Code":{"id":"Code","path":"integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287/Code","children":{"Stage":{"id":"Stage","path":"integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287/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":"integ-user-pool-client-secret-logged/AWS679f53fac002430cb0da5b7982bd2287/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":"cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":120}},"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":[{"memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"}]}},"secret":{"id":"secret","path":"integ-user-pool-client-secret-logged/secret","children":{"Resource":{"id":"Resource","path":"integ-user-pool-client-secret-logged/secret/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::Secret","aws:cdk:cloudformation:props":{"secretString":{"Fn::GetAtt":["poolclientDescribeCognitoUserPoolClient51F12EBD","UserPoolClient.ClientSecret"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecret","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.Secret","version":"0.0.0","metadata":[{"secretStringValue":"*"}]}},"ClientSecretName":{"id":"ClientSecretName","path":"integ-user-pool-client-secret-logged/ClientSecretName","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"BootstrapVersion":{"id":"BootstrapVersion","path":"integ-user-pool-client-secret-logged/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"integ-user-pool-client-secret-logged/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"}},"integ-user-pool-client-secret-test":{"id":"integ-user-pool-client-secret-test","path":"integ-user-pool-client-secret-test","children":{"DefaultTest":{"id":"DefaultTest","path":"integ-user-pool-client-secret-test/DefaultTest","children":{"Default":{"id":"Default","path":"integ-user-pool-client-secret-test/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"integ-user-pool-client-secret-test/DefaultTest/DeployAssert","children":{"BootstrapVersion":{"id":"BootstrapVersion","path":"integ-user-pool-client-secret-test/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"integ-user-pool-client-secret-test/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 diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.ts index c2800b88dfb8a..4684653384d10 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cognito/test/integ.user-pool-client-secret.ts @@ -3,8 +3,12 @@ import { App, CfnOutput, RemovalPolicy, Stack } from 'aws-cdk-lib'; import { IntegTest } from '@aws-cdk/integ-tests-alpha'; import { Construct } from 'constructs'; import { UserPool } from 'aws-cdk-lib/aws-cognito'; +import * as cxapi from 'aws-cdk-lib/cx-api'; -class TestStack extends Stack { +/** + * Stack with feature flag disabled (default) - client secret should not be logged + */ +class TestStackSecretNotLogged extends Stack { constructor(scope: Construct, id: string) { super(scope, id); const userpool = new UserPool(this, 'pool', { @@ -22,9 +26,33 @@ class TestStack extends Stack { } } +/** + * Stack with feature flag enabled - client secret would be logged + */ +class TestStackSecretLogged extends Stack { + constructor(scope: Construct, id: string) { + super(scope, id); + // Set the feature flag to true to allow logging client secret + this.node.setContext(cxapi.LOG_USER_POOL_CLIENT_SECRET_VALUE, true); + const userpool = new UserPool(this, 'pool', { + removalPolicy: RemovalPolicy.DESTROY, + }); + + const client = userpool.addClient('client', { generateSecret: true }); + const secret = new secretsmanager.Secret(this, 'secret', { + secretStringValue: client.userPoolClientSecret, + }); + + new CfnOutput(this, 'ClientSecretName', { + value: secret.secretName, + }); + } +} + const app = new App(); -const testCase = new TestStack(app, 'integ-user-pool-client-secret'); +const testCaseNotLogged = new TestStackSecretNotLogged(app, 'integ-user-pool-client-secret-not-logged'); +const testCaseLogged = new TestStackSecretLogged(app, 'integ-user-pool-client-secret-logged'); new IntegTest(app, 'integ-user-pool-client-secret-test', { - testCases: [testCase], + testCases: [testCaseNotLogged, testCaseLogged], }); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegAlbOidc.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegAlbOidc.assets.json index ec82120e4afa9..d61a048362ca4 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegAlbOidc.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegAlbOidc.assets.json @@ -1,5 +1,5 @@ { - "version": "39.0.0", + "version": "40.0.0", "files": { "a1acfc2b5f4f6b183fd2bb9863f486bc5edef6a357b355a070d9a0e502df418c": { "source": { @@ -40,7 +40,7 @@ } } }, - "8aa83283e8849f4415cdbdbe7a755305c26ece7f5d2a88b3b7fae454316880f1": { + "b7120f86b25d57882290264853cb10b262b36429b02699b308cfec8f78adb435": { "source": { "path": "IntegAlbOidc.template.json", "packaging": "file" @@ -48,7 +48,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "8aa83283e8849f4415cdbdbe7a755305c26ece7f5d2a88b3b7fae454316880f1.json", + "objectKey": "b7120f86b25d57882290264853cb10b262b36429b02699b308cfec8f78adb435.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-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegAlbOidc.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegAlbOidc.template.json index aa638b486d2fe..c749517c4802f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegAlbOidc.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegAlbOidc.template.json @@ -635,7 +635,7 @@ { "Ref": "UserPoolUserPoolClient40176907" }, - "\"}}" + "\"},\"logApiResponseData\":false}" ] ] }, @@ -659,7 +659,7 @@ { "Ref": "UserPoolUserPoolClient40176907" }, - "\"}}" + "\"},\"logApiResponseData\":false}" ] ] }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegTestAlbOidcDefaultTestDeployAssert2476ECB6.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegTestAlbOidcDefaultTestDeployAssert2476ECB6.assets.json index 09ce994664df4..f2739f3f467ad 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegTestAlbOidcDefaultTestDeployAssert2476ECB6.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegTestAlbOidcDefaultTestDeployAssert2476ECB6.assets.json @@ -1,20 +1,20 @@ { - "version": "39.0.0", + "version": "40.0.0", "files": { - "f692c9f68e4daba2abc99103efd3518bced1e9d7a2a89847b9b5d5473c64f1bd": { + "97484721f29e34bf38d7a459804dd2d2a8dea6f8c27d7531e215bf4274fbc895": { "source": { - "path": "asset.f692c9f68e4daba2abc99103efd3518bced1e9d7a2a89847b9b5d5473c64f1bd.bundle", + "path": "asset.97484721f29e34bf38d7a459804dd2d2a8dea6f8c27d7531e215bf4274fbc895.bundle", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "f692c9f68e4daba2abc99103efd3518bced1e9d7a2a89847b9b5d5473c64f1bd.zip", + "objectKey": "97484721f29e34bf38d7a459804dd2d2a8dea6f8c27d7531e215bf4274fbc895.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "c95abc6dfbb2454af3931d4713ba4ae479647867f78af494f789bb54165903f2": { + "d5709bea1b86c70171776cd8423fcafa3d0a8a116bd5002b351afa78a0db9ea8": { "source": { "path": "IntegTestAlbOidcDefaultTestDeployAssert2476ECB6.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "c95abc6dfbb2454af3931d4713ba4ae479647867f78af494f789bb54165903f2.json", + "objectKey": "d5709bea1b86c70171776cd8423fcafa3d0a8a116bd5002b351afa78a0db9ea8.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-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegTestAlbOidcDefaultTestDeployAssert2476ECB6.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegTestAlbOidcDefaultTestDeployAssert2476ECB6.template.json index 2608ddc99f11f..26ab47f4d3dec 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegTestAlbOidcDefaultTestDeployAssert2476ECB6.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/IntegTestAlbOidcDefaultTestDeployAssert2476ECB6.template.json @@ -27,7 +27,7 @@ } }, "flattenResponse": "false", - "salt": "1737590865455" + "salt": "1743017150303" }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -144,7 +144,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "f692c9f68e4daba2abc99103efd3518bced1e9d7a2a89847b9b5d5473c64f1bd.zip" + "S3Key": "97484721f29e34bf38d7a459804dd2d2a8dea6f8c27d7531e215bf4274fbc895.zip" }, "Timeout": 120, "Handler": "index.handler", @@ -184,7 +184,7 @@ "Username": "\"test-user@example.com\"" }, "flattenResponse": "false", - "salt": "1737590865456" + "salt": "1743017150304" }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/asset.f692c9f68e4daba2abc99103efd3518bced1e9d7a2a89847b9b5d5473c64f1bd.bundle/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/asset.97484721f29e34bf38d7a459804dd2d2a8dea6f8c27d7531e215bf4274fbc895.bundle/index.js similarity index 99% rename from packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/asset.f692c9f68e4daba2abc99103efd3518bced1e9d7a2a89847b9b5d5473c64f1bd.bundle/index.js rename to packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/asset.97484721f29e34bf38d7a459804dd2d2a8dea6f8c27d7531e215bf4274fbc895.bundle/index.js index 72991429cf58e..efca1ce512334 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/asset.f692c9f68e4daba2abc99103efd3518bced1e9d7a2a89847b9b5d5473c64f1bd.bundle/index.js +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/asset.97484721f29e34bf38d7a459804dd2d2a8dea6f8c27d7531e215bf4274fbc895.bundle/index.js @@ -1,3 +1,4 @@ +"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; @@ -316,6 +317,34 @@ ${indents.join("")}`)); } }); +// ../../aws-cdk-lib/assertions/lib/private/error.ts +var ASSERTION_ERROR_SYMBOL, AssertionError; +var init_error = __esm({ + "../../aws-cdk-lib/assertions/lib/private/error.ts"() { + "use strict"; + ASSERTION_ERROR_SYMBOL = Symbol.for("@aws-cdk/assertions.AssertionError"); + AssertionError = class _AssertionError extends Error { + #time; + /** + * The time the error was thrown. + */ + get time() { + return this.#time; + } + get type() { + return "assertion"; + } + constructor(msg) { + super(msg); + Object.setPrototypeOf(this, _AssertionError.prototype); + Object.defineProperty(this, ASSERTION_ERROR_SYMBOL, { value: true }); + this.name = new.target.name; + this.#time = (/* @__PURE__ */ new Date()).toISOString(); + } + }; + } +}); + // ../../aws-cdk-lib/assertions/lib/private/matchers/absent.ts var AbsentMatch; var init_absent = __esm({ @@ -416,6 +445,7 @@ var init_match = __esm({ "../../aws-cdk-lib/assertions/lib/match.ts"() { "use strict"; init_matcher(); + init_error(); init_absent(); init_sorting(); init_sparse_matrix(); @@ -500,7 +530,7 @@ var init_match = __esm({ this.pattern = pattern; this.partialObjects = options.partialObjects ?? false; if (Matcher.isMatcher(this.pattern)) { - throw new Error("LiteralMatch cannot directly contain another matcher. Remove the top-level matcher or nest it more deeply."); + throw new AssertionError("LiteralMatch cannot directly contain another matcher. Remove the top-level matcher or nest it more deeply."); } } test(actual) { @@ -582,7 +612,7 @@ var init_match = __esm({ const matcher = Matcher.isMatcher(patternElement) ? patternElement : new LiteralMatch(this.name, patternElement, { partialObjects: this.partialObjects }); const matcherName = matcher.name; if (matcherName == "absent" || matcherName == "anyValue") { - throw new Error(`The Matcher ${matcherName}() cannot be nested within arrayWith()`); + throw new AssertionError(`The Matcher ${matcherName}() cannot be nested within arrayWith()`); } const innerResult = matcher.test(actual[actualIdx]); matches.set(patternIdx, actualIdx, innerResult); @@ -3302,13 +3332,17 @@ var require_dist_cjs19 = __commonJS({ } return transformedHeaders; }, "getTransformedHeaders"); + var timing = { + setTimeout: (cb, ms) => setTimeout(cb, ms), + clearTimeout: (timeoutId) => clearTimeout(timeoutId) + }; var DEFER_EVENT_LISTENER_TIME = 1e3; var setConnectionTimeout = /* @__PURE__ */ __name((request2, reject, timeoutInMs = 0) => { if (!timeoutInMs) { return -1; } const registerTimeout = /* @__PURE__ */ __name((offset) => { - const timeoutId = setTimeout(() => { + const timeoutId = timing.setTimeout(() => { request2.destroy(); reject( Object.assign(new Error(`Socket timed out without establishing a connection within ${timeoutInMs} ms`), { @@ -3319,10 +3353,10 @@ var require_dist_cjs19 = __commonJS({ const doWithSocket = /* @__PURE__ */ __name((socket) => { if (socket == null ? void 0 : socket.connecting) { socket.on("connect", () => { - clearTimeout(timeoutId); + timing.clearTimeout(timeoutId); }); } else { - clearTimeout(timeoutId); + timing.clearTimeout(timeoutId); } }, "doWithSocket"); if (request2.socket) { @@ -3335,7 +3369,7 @@ var require_dist_cjs19 = __commonJS({ registerTimeout(0); return 0; } - return setTimeout(registerTimeout.bind(null, DEFER_EVENT_LISTENER_TIME), DEFER_EVENT_LISTENER_TIME); + return timing.setTimeout(registerTimeout.bind(null, DEFER_EVENT_LISTENER_TIME), DEFER_EVENT_LISTENER_TIME); }, "setConnectionTimeout"); var DEFER_EVENT_LISTENER_TIME2 = 3e3; var setSocketKeepAlive = /* @__PURE__ */ __name((request2, { keepAlive, keepAliveMsecs }, deferTimeMs = DEFER_EVENT_LISTENER_TIME2) => { @@ -3355,21 +3389,27 @@ var require_dist_cjs19 = __commonJS({ registerListener(); return 0; } - return setTimeout(registerListener, deferTimeMs); + return timing.setTimeout(registerListener, deferTimeMs); }, "setSocketKeepAlive"); var DEFER_EVENT_LISTENER_TIME3 = 3e3; var setSocketTimeout = /* @__PURE__ */ __name((request2, reject, timeoutInMs = 0) => { const registerTimeout = /* @__PURE__ */ __name((offset) => { - request2.setTimeout(timeoutInMs - offset, () => { + const timeout = timeoutInMs - offset; + const onTimeout2 = /* @__PURE__ */ __name(() => { request2.destroy(); reject(Object.assign(new Error(`Connection timed out after ${timeoutInMs} ms`), { name: "TimeoutError" })); - }); + }, "onTimeout"); + if (request2.socket) { + request2.socket.setTimeout(timeout, onTimeout2); + } else { + request2.setTimeout(timeout, onTimeout2); + } }, "registerTimeout"); if (0 < timeoutInMs && timeoutInMs < 6e3) { registerTimeout(0); return 0; } - return setTimeout( + return timing.setTimeout( registerTimeout.bind(null, timeoutInMs === 0 ? 0 : DEFER_EVENT_LISTENER_TIME3), DEFER_EVENT_LISTENER_TIME3 ); @@ -3380,26 +3420,29 @@ var require_dist_cjs19 = __commonJS({ const headers = request2.headers ?? {}; const expect = headers["Expect"] || headers["expect"]; let timeoutId = -1; - let hasError = false; + let sendBody = true; if (expect === "100-continue") { - await Promise.race([ + sendBody = await Promise.race([ new Promise((resolve) => { - timeoutId = Number(setTimeout(resolve, Math.max(MIN_WAIT_TIME, maxContinueTimeoutMs))); + timeoutId = Number(timing.setTimeout(resolve, Math.max(MIN_WAIT_TIME, maxContinueTimeoutMs))); }), new Promise((resolve) => { httpRequest.on("continue", () => { - clearTimeout(timeoutId); - resolve(); + timing.clearTimeout(timeoutId); + resolve(true); + }); + httpRequest.on("response", () => { + timing.clearTimeout(timeoutId); + resolve(false); }); httpRequest.on("error", () => { - hasError = true; - clearTimeout(timeoutId); - resolve(); + timing.clearTimeout(timeoutId); + resolve(false); }); }) ]); } - if (!hasError) { + if (sendBody) { writeBody(httpRequest, request2.body); } } @@ -3521,12 +3564,12 @@ or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler conf const timeouts = []; const resolve = /* @__PURE__ */ __name(async (arg) => { await writeRequestBodyPromise; - timeouts.forEach(clearTimeout); + timeouts.forEach(timing.clearTimeout); _resolve(arg); }, "resolve"); const reject = /* @__PURE__ */ __name(async (arg) => { await writeRequestBodyPromise; - timeouts.forEach(clearTimeout); + timeouts.forEach(timing.clearTimeout); _reject(arg); }, "reject"); if (!this.config) { @@ -3541,7 +3584,7 @@ or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler conf const isSSL = request2.protocol === "https:"; const agent = isSSL ? this.config.httpsAgent : this.config.httpAgent; timeouts.push( - setTimeout( + timing.setTimeout( () => { this.socketWarningTimestamp = _NodeHttpHandler2.checkSocketUsage( agent, @@ -3627,7 +3670,7 @@ or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler conf ); } writeRequestBodyPromise = writeRequestBody(req, request2, this.config.requestTimeout).catch((e) => { - timeouts.forEach(clearTimeout); + timeouts.forEach(timing.clearTimeout); return _reject(e); }); }); @@ -3760,7 +3803,7 @@ or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler conf } } setMaxConcurrentStreams(maxConcurrentStreams) { - if (this.config.maxConcurrency && this.config.maxConcurrency <= 0) { + if (maxConcurrentStreams && maxConcurrentStreams <= 0) { throw new RangeError("maxConcurrentStreams must be greater than zero."); } this.config.maxConcurrency = maxConcurrentStreams; @@ -4030,6 +4073,10 @@ var require_dist_cjs20 = __commonJS({ module2.exports = __toCommonJS2(src_exports); var import_protocol_http8 = require_dist_cjs2(); var import_querystring_builder = require_dist_cjs18(); + function createRequest(url2, requestOptions) { + return new Request(url2, requestOptions); + } + __name(createRequest, "createRequest"); function requestTimeout(timeoutInMs = 0) { return new Promise((resolve, reject) => { if (timeoutInMs) { @@ -4065,7 +4112,7 @@ var require_dist_cjs20 = __commonJS({ } if (keepAliveSupport.supported === void 0) { keepAliveSupport.supported = Boolean( - typeof Request !== "undefined" && "keepalive" in new Request("https://[::1]") + typeof Request !== "undefined" && "keepalive" in createRequest("https://[::1]") ); } } @@ -4124,7 +4171,7 @@ var require_dist_cjs20 = __commonJS({ } let removeSignalEventListener = /* @__PURE__ */ __name(() => { }, "removeSignalEventListener"); - const fetchRequest = new Request(url2, requestOptions); + const fetchRequest = createRequest(url2, requestOptions); const raceOfPromises = [ fetch(fetchRequest).then((response) => { const fetchHeaders = response.headers; @@ -4187,12 +4234,23 @@ var require_dist_cjs20 = __commonJS({ }; __name(_FetchHttpHandler, "FetchHttpHandler"); var FetchHttpHandler = _FetchHttpHandler; + var import_util_base64 = require_dist_cjs16(); var streamCollector = /* @__PURE__ */ __name(async (stream) => { - if (typeof Blob === "function" && stream instanceof Blob) { - return new Uint8Array(await stream.arrayBuffer()); + var _a; + if (typeof Blob === "function" && stream instanceof Blob || ((_a = stream.constructor) == null ? void 0 : _a.name) === "Blob") { + if (Blob.prototype.arrayBuffer !== void 0) { + return new Uint8Array(await stream.arrayBuffer()); + } + return collectBlob(stream); } return collectStream(stream); }, "streamCollector"); + async function collectBlob(blob) { + const base64 = await readToBase64(blob); + const arrayBuffer = (0, import_util_base64.fromBase64)(base64); + return new Uint8Array(arrayBuffer); + } + __name(collectBlob, "collectBlob"); async function collectStream(stream) { const chunks = []; const reader = stream.getReader(); @@ -4215,6 +4273,24 @@ var require_dist_cjs20 = __commonJS({ return collected; } __name(collectStream, "collectStream"); + function readToBase64(blob) { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onloadend = () => { + if (reader.readyState !== 2) { + return reject(new Error("Reader aborted too early")); + } + const result = reader.result ?? ""; + const commaIndex = result.indexOf(","); + const dataOffset = commaIndex > -1 ? commaIndex + 1 : result.length; + resolve(result.substring(dataOffset)); + }; + reader.onabort = () => reject(new Error("Read aborted")); + reader.onerror = () => reject(reader.error); + reader.readAsDataURL(blob); + }); + } + __name(readToBase64, "readToBase64"); } }); @@ -4287,12 +4363,17 @@ var require_stream_type_check = __commonJS({ "../../../node_modules/@smithy/util-stream/dist-cjs/stream-type-check.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.isReadableStream = void 0; + exports2.isBlob = exports2.isReadableStream = void 0; var isReadableStream2 = (stream) => { var _a; return typeof ReadableStream === "function" && (((_a = stream === null || stream === void 0 ? void 0 : stream.constructor) === null || _a === void 0 ? void 0 : _a.name) === ReadableStream.name || stream instanceof ReadableStream); }; exports2.isReadableStream = isReadableStream2; + var isBlob2 = (blob) => { + var _a; + return typeof Blob === "function" && (((_a = blob === null || blob === void 0 ? void 0 : blob.constructor) === null || _a === void 0 ? void 0 : _a.name) === Blob.name || blob instanceof Blob); + }; + exports2.isBlob = isBlob2; } }); @@ -4373,7 +4454,6 @@ var require_sdk_stream_mixin = __commonJS({ var node_http_handler_1 = require_dist_cjs19(); var util_buffer_from_1 = require_dist_cjs14(); var stream_1 = require("stream"); - var util_1 = require("util"); var sdk_stream_mixin_browser_1 = require_sdk_stream_mixin_browser(); var ERR_MSG_STREAM_HAS_BEEN_TRANSFORMED = "The stream has already been transformed."; var sdkStreamMixin2 = (stream) => { @@ -4401,7 +4481,7 @@ var require_sdk_stream_mixin = __commonJS({ if (encoding === void 0 || Buffer.isEncoding(encoding)) { return (0, util_buffer_from_1.fromArrayBuffer)(buf.buffer, buf.byteOffset, buf.byteLength).toString(encoding); } else { - const decoder2 = new util_1.TextDecoder(encoding); + const decoder2 = new TextDecoder(encoding); return decoder2.decode(buf); } }, @@ -4451,7 +4531,7 @@ var require_splitStream = __commonJS({ var splitStream_browser_1 = require_splitStream_browser(); var stream_type_check_1 = require_stream_type_check(); async function splitStream2(stream) { - if ((0, stream_type_check_1.isReadableStream)(stream)) { + if ((0, stream_type_check_1.isReadableStream)(stream) || (0, stream_type_check_1.isBlob)(stream)) { return (0, splitStream_browser_1.splitStream)(stream); } const stream1 = new stream_1.PassThrough(); @@ -4800,6 +4880,26 @@ var init_extended_encode_uri_component = __esm({ } }); +// ../../../node_modules/@smithy/core/dist-es/submodules/protocols/resolve-path.js +var resolvedPath2; +var init_resolve_path = __esm({ + "../../../node_modules/@smithy/core/dist-es/submodules/protocols/resolve-path.js"() { + init_extended_encode_uri_component(); + resolvedPath2 = (resolvedPath3, input, memberName, labelValueProvider, uriLabel, isGreedyLabel) => { + if (input != null && input[memberName] !== void 0) { + const labelValue = labelValueProvider(); + if (labelValue.length <= 0) { + throw new Error("Empty value provided for input HTTP label: " + memberName + "."); + } + resolvedPath3 = resolvedPath3.replace(uriLabel, isGreedyLabel ? labelValue.split("/").map((segment) => extendedEncodeURIComponent2(segment)).join("/") : extendedEncodeURIComponent2(labelValue)); + } else { + throw new Error("No value provided for input HTTP label: " + memberName + "."); + } + return resolvedPath3; + }; + } +}); + // ../../../node_modules/@smithy/core/dist-es/submodules/protocols/requestBuilder.js function requestBuilder(input, context) { return new RequestBuilder(input, context); @@ -4807,8 +4907,8 @@ function requestBuilder(input, context) { var import_protocol_http2, RequestBuilder; var init_requestBuilder = __esm({ "../../../node_modules/@smithy/core/dist-es/submodules/protocols/requestBuilder.js"() { - init_protocols(); import_protocol_http2 = __toESM(require_dist_cjs2()); + init_resolve_path(); RequestBuilder = class { constructor(input, context) { this.input = input; @@ -4874,26 +4974,6 @@ var init_requestBuilder = __esm({ } }); -// ../../../node_modules/@smithy/core/dist-es/submodules/protocols/resolve-path.js -var resolvedPath2; -var init_resolve_path = __esm({ - "../../../node_modules/@smithy/core/dist-es/submodules/protocols/resolve-path.js"() { - init_extended_encode_uri_component(); - resolvedPath2 = (resolvedPath3, input, memberName, labelValueProvider, uriLabel, isGreedyLabel) => { - if (input != null && input[memberName] !== void 0) { - const labelValue = labelValueProvider(); - if (labelValue.length <= 0) { - throw new Error("Empty value provided for input HTTP label: " + memberName + "."); - } - resolvedPath3 = resolvedPath3.replace(uriLabel, isGreedyLabel ? labelValue.split("/").map((segment) => extendedEncodeURIComponent2(segment)).join("/") : extendedEncodeURIComponent2(labelValue)); - } else { - throw new Error("No value provided for input HTTP label: " + memberName + "."); - } - return resolvedPath3; - }; - } -}); - // ../../../node_modules/@smithy/core/dist-es/submodules/protocols/index.js var protocols_exports = {}; __export(protocols_exports, { @@ -5989,6 +6069,9 @@ var require_dist_cjs29 = __commonJS({ case "builtInParams": endpointParams[name] = await createConfigValueProvider(instruction.name, name, clientConfig)(); break; + case "operationContextParams": + endpointParams[name] = instruction.get(commandInput); + break; default: throw new Error("Unrecognized endpoint parameter instruction: " + JSON.stringify(instruction)); } @@ -6516,9 +6599,9 @@ var require_dist_cjs30 = __commonJS({ var _a, _b; return ((_a = error.$metadata) == null ? void 0 : _a.httpStatusCode) === 429 || THROTTLING_ERROR_CODES.includes(error.name) || ((_b = error.$retryable) == null ? void 0 : _b.throttling) == true; }, "isThrottlingError"); - var isTransientError = /* @__PURE__ */ __name((error) => { + var isTransientError = /* @__PURE__ */ __name((error, depth = 0) => { var _a; - return isClockSkewCorrectedError(error) || TRANSIENT_ERROR_CODES.includes(error.name) || NODEJS_TIMEOUT_ERROR_CODES.includes((error == null ? void 0 : error.code) || "") || TRANSIENT_ERROR_STATUS_CODES.includes(((_a = error.$metadata) == null ? void 0 : _a.httpStatusCode) || 0); + return isClockSkewCorrectedError(error) || TRANSIENT_ERROR_CODES.includes(error.name) || NODEJS_TIMEOUT_ERROR_CODES.includes((error == null ? void 0 : error.code) || "") || TRANSIENT_ERROR_STATUS_CODES.includes(((_a = error.$metadata) == null ? void 0 : _a.httpStatusCode) || 0) || error.cause !== void 0 && depth <= 10 && isTransientError(error.cause, depth + 1); }, "isTransientError"); var isServerError = /* @__PURE__ */ __name((error) => { var _a; @@ -6583,7 +6666,7 @@ var require_dist_cjs31 = __commonJS({ var DEFAULT_MAX_ATTEMPTS = 3; var DEFAULT_RETRY_MODE = "standard"; var import_service_error_classification = require_dist_cjs30(); - var _DefaultRateLimiter = class _DefaultRateLimiter { + var _DefaultRateLimiter = class _DefaultRateLimiter2 { constructor(options) { this.currentCapacity = 0; this.enabled = false; @@ -6616,7 +6699,7 @@ var require_dist_cjs31 = __commonJS({ this.refillTokenBucket(); if (amount > this.currentCapacity) { const delay = (amount - this.currentCapacity) / this.fillRate * 1e3; - await new Promise((resolve) => setTimeout(resolve, delay)); + await new Promise((resolve) => _DefaultRateLimiter2.setTimeoutFn(resolve, delay)); } this.currentCapacity = this.currentCapacity - amount; } @@ -6683,6 +6766,7 @@ var require_dist_cjs31 = __commonJS({ } }; __name(_DefaultRateLimiter, "DefaultRateLimiter"); + _DefaultRateLimiter.setTimeoutFn = setTimeout; var DefaultRateLimiter = _DefaultRateLimiter; var DEFAULT_RETRY_DELAY_BASE = 100; var MAXIMUM_RETRY_DELAY = 20 * 1e3; @@ -7194,9 +7278,8 @@ var require_dist_cjs33 = __commonJS({ NoOpLogger: () => NoOpLogger, SENSITIVE_STRING: () => SENSITIVE_STRING, ServiceException: () => ServiceException, - StringWrapper: () => StringWrapper, _json: () => _json, - collectBody: () => import_protocols3.collectBody, + collectBody: () => import_protocols2.collectBody, convertMap: () => convertMap, createAggregatedClient: () => createAggregatedClient, dateToUtcString: () => dateToUtcString, @@ -7214,7 +7297,7 @@ var require_dist_cjs33 = __commonJS({ expectShort: () => expectShort, expectString: () => expectString, expectUnion: () => expectUnion2, - extendedEncodeURIComponent: () => import_protocols3.extendedEncodeURIComponent, + extendedEncodeURIComponent: () => import_protocols2.extendedEncodeURIComponent, getArrayIfSingleItem: () => getArrayIfSingleItem, getDefaultClientConfiguration: () => getDefaultClientConfiguration, getDefaultExtensionConfiguration: () => getDefaultExtensionConfiguration, @@ -7234,7 +7317,7 @@ var require_dist_cjs33 = __commonJS({ parseRfc7231DateTime: () => parseRfc7231DateTime, quoteHeader: () => quoteHeader, resolveDefaultRuntimeConfig: () => resolveDefaultRuntimeConfig, - resolvedPath: () => import_protocols3.resolvedPath, + resolvedPath: () => import_protocols2.resolvedPath, serializeDateTime: () => serializeDateTime, serializeFloat: () => serializeFloat, splitEvery: () => splitEvery, @@ -7300,7 +7383,7 @@ var require_dist_cjs33 = __commonJS({ }; __name(_Client, "Client"); var Client = _Client; - var import_protocols3 = (init_protocols(), __toCommonJS(protocols_exports)); + var import_protocols2 = (init_protocols(), __toCommonJS(protocols_exports)); var import_types5 = require_dist_cjs(); var _Command = class _Command { constructor() { @@ -7957,6 +8040,15 @@ var require_dist_cjs33 = __commonJS({ this.$fault = options.$fault; this.$metadata = options.$metadata; } + /** + * Checks if a value is an instance of ServiceException (duck typed) + */ + static isInstance(value) { + if (!value) + return false; + const candidate = value; + return Boolean(candidate.$fault) && Boolean(candidate.$metadata) && (candidate.$fault === "client" || candidate.$fault === "server"); + } }; __name(_ServiceException, "ServiceException"); var ServiceException = _ServiceException; @@ -8097,40 +8189,29 @@ var require_dist_cjs33 = __commonJS({ var isSerializableHeaderValue = /* @__PURE__ */ __name((value) => { return value != null; }, "isSerializableHeaderValue"); - var StringWrapper = /* @__PURE__ */ __name(function() { - const Class = Object.getPrototypeOf(this).constructor; - const Constructor = Function.bind.apply(String, [null, ...arguments]); - const instance = new Constructor(); - Object.setPrototypeOf(instance, Class.prototype); - return instance; - }, "StringWrapper"); - StringWrapper.prototype = Object.create(String.prototype, { - constructor: { - value: StringWrapper, - enumerable: false, - writable: true, - configurable: true - } - }); - Object.setPrototypeOf(StringWrapper, String); - var _LazyJsonString = class _LazyJsonString2 extends StringWrapper { - deserializeJSON() { - return JSON.parse(super.toString()); - } - toJSON() { - return super.toString(); - } - static fromObject(object) { - if (object instanceof _LazyJsonString2) { - return object; - } else if (object instanceof String || typeof object === "string") { - return new _LazyJsonString2(object); + var LazyJsonString = /* @__PURE__ */ __name(function LazyJsonString2(val2) { + const str = Object.assign(new String(val2), { + deserializeJSON() { + return JSON.parse(String(val2)); + }, + toString() { + return String(val2); + }, + toJSON() { + return String(val2); } - return new _LazyJsonString2(JSON.stringify(object)); + }); + return str; + }, "LazyJsonString"); + LazyJsonString.from = (object) => { + if (object && typeof object === "object" && (object instanceof LazyJsonString || "deserializeJSON" in object)) { + return object; + } else if (typeof object === "string" || Object.getPrototypeOf(object) === String.prototype) { + return LazyJsonString(String(object)); } + return LazyJsonString(JSON.stringify(object)); }; - __name(_LazyJsonString, "LazyJsonString"); - var LazyJsonString = _LazyJsonString; + LazyJsonString.fromObject = LazyJsonString.from; var _NoOpLogger = class _NoOpLogger { trace() { } @@ -10299,15 +10380,10 @@ var require_DocTypeReader = __commonJS({ var require_strnum = __commonJS({ "../../../node_modules/strnum/strnum.js"(exports2, module2) { var hexRegex = /^[-+]?0x[a-fA-F0-9]+$/; - var numRegex = /^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/; - if (!Number.parseInt && window.parseInt) { - Number.parseInt = window.parseInt; - } - if (!Number.parseFloat && window.parseFloat) { - Number.parseFloat = window.parseFloat; - } + var numRegex = /^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/; var consider = { hex: true, + // oct: false, leadingZeros: true, decimalPoint: ".", eNotation: true @@ -10318,26 +10394,39 @@ var require_strnum = __commonJS({ if (!str || typeof str !== "string") return str; let trimmedStr = str.trim(); if (options.skipLike !== void 0 && options.skipLike.test(trimmedStr)) return str; + else if (str === "0") return 0; else if (options.hex && hexRegex.test(trimmedStr)) { - return Number.parseInt(trimmedStr, 16); + return parse_int(trimmedStr, 16); + } else if (trimmedStr.search(/[eE]/) !== -1) { + const notation = trimmedStr.match(/^([-\+])?(0*)([0-9]*(\.[0-9]*)?[eE][-\+]?[0-9]+)$/); + if (notation) { + if (options.leadingZeros) { + trimmedStr = (notation[1] || "") + notation[3]; + } else { + if (notation[2] === "0" && notation[3][0] === ".") { + } else { + return str; + } + } + return options.eNotation ? Number(trimmedStr) : str; + } else { + return str; + } } else { const match = numRegex.exec(trimmedStr); if (match) { const sign = match[1]; const leadingZeros = match[2]; let numTrimmedByZeros = trimZeros(match[3]); - const eNotation = match[4] || match[6]; if (!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== ".") return str; else if (!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== ".") return str; + else if (options.leadingZeros && leadingZeros === str) return 0; else { const num = Number(trimmedStr); const numStr = "" + num; if (numStr.search(/[eE]/) !== -1) { if (options.eNotation) return num; else return str; - } else if (eNotation) { - if (options.eNotation) return num; - else return str; } else if (trimmedStr.indexOf(".") !== -1) { if (numStr === "0" && numTrimmedByZeros === "") return num; else if (numStr === numTrimmedByZeros) return num; @@ -10345,13 +10434,10 @@ var require_strnum = __commonJS({ else return str; } if (leadingZeros) { - if (numTrimmedByZeros === numStr) return num; - else if (sign + numTrimmedByZeros === numStr) return num; - else return str; + return numTrimmedByZeros === numStr || sign + numTrimmedByZeros === numStr ? num : str; + } else { + return trimmedStr === numStr || trimmedStr === sign + numStr ? num : str; } - if (trimmedStr === numStr) return num; - else if (trimmedStr === sign + numStr) return num; - return str; } } else { return str; @@ -10368,6 +10454,12 @@ var require_strnum = __commonJS({ } return numStr; } + function parse_int(numStr, base) { + if (parseInt) return parseInt(numStr, base); + else if (Number.parseInt) return Number.parseInt(numStr, base); + else if (window && window.parseInt) return window.parseInt(numStr, base); + else throw new Error("parseInt, Number.parseInt, window.parseInt are not supported"); + } module2.exports = toNumber; } }); @@ -11897,7 +11989,7 @@ function __importStar(mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) { - for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); } __setModuleDefault(result, mod); return result; @@ -11981,7 +12073,7 @@ function __rewriteRelativeImportExtension(path, preserveJsx) { } return path; } -var extendStatics, __assign, __createBinding, __setModuleDefault, _SuppressedError, tslib_es6_default; +var extendStatics, __assign, __createBinding, __setModuleDefault, ownKeys, _SuppressedError, tslib_es6_default; var init_tslib_es6 = __esm({ "../../../node_modules/tslib/tslib.es6.mjs"() { extendStatics = function(d, b) { @@ -12020,6 +12112,14 @@ var init_tslib_es6 = __esm({ } : function(o, v) { o["default"] = v; }; + ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function(o2) { + var ar = []; + for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; @@ -23572,9 +23672,9 @@ var require_safer = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/lib/bom-handling.js +// ../../../node_modules/iconv-lite/lib/bom-handling.js var require_bom_handling = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/lib/bom-handling.js"(exports2) { + "../../../node_modules/iconv-lite/lib/bom-handling.js"(exports2) { "use strict"; var BOMChar = "\uFEFF"; exports2.PrependBOM = PrependBOMWrapper; @@ -23616,9 +23716,9 @@ var require_bom_handling = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/internal.js +// ../../../node_modules/iconv-lite/encodings/internal.js var require_internal = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/internal.js"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/internal.js"(exports2, module2) { "use strict"; var Buffer2 = require_safer().Buffer; module2.exports = { @@ -23768,9 +23868,9 @@ var require_internal = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/utf32.js +// ../../../node_modules/iconv-lite/encodings/utf32.js var require_utf32 = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/utf32.js"(exports2) { + "../../../node_modules/iconv-lite/encodings/utf32.js"(exports2) { "use strict"; var Buffer2 = require_safer().Buffer; exports2._utf32 = Utf32Codec; @@ -23987,9 +24087,9 @@ var require_utf32 = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/utf16.js +// ../../../node_modules/iconv-lite/encodings/utf16.js var require_utf16 = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/utf16.js"(exports2) { + "../../../node_modules/iconv-lite/encodings/utf16.js"(exports2) { "use strict"; var Buffer2 = require_safer().Buffer; exports2.utf16be = Utf16BECodec; @@ -24121,9 +24221,9 @@ var require_utf16 = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/utf7.js +// ../../../node_modules/iconv-lite/encodings/utf7.js var require_utf7 = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/utf7.js"(exports2) { + "../../../node_modules/iconv-lite/encodings/utf7.js"(exports2) { "use strict"; var Buffer2 = require_safer().Buffer; exports2.utf7 = Utf7Codec; @@ -24322,9 +24422,9 @@ var require_utf7 = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/sbcs-codec.js +// ../../../node_modules/iconv-lite/encodings/sbcs-codec.js var require_sbcs_codec = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/sbcs-codec.js"(exports2) { + "../../../node_modules/iconv-lite/encodings/sbcs-codec.js"(exports2) { "use strict"; var Buffer2 = require_safer().Buffer; exports2._sbcs = SBCSCodec; @@ -24378,9 +24478,9 @@ var require_sbcs_codec = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/sbcs-data.js +// ../../../node_modules/iconv-lite/encodings/sbcs-data.js var require_sbcs_data = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/sbcs-data.js"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/sbcs-data.js"(exports2, module2) { "use strict"; module2.exports = { // Not supported by iconv, not sure why. @@ -24531,9 +24631,9 @@ var require_sbcs_data = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/sbcs-data-generated.js +// ../../../node_modules/iconv-lite/encodings/sbcs-data-generated.js var require_sbcs_data_generated = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/sbcs-data-generated.js"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/sbcs-data-generated.js"(exports2, module2) { "use strict"; module2.exports = { "437": "cp437", @@ -24986,9 +25086,9 @@ var require_sbcs_data_generated = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/dbcs-codec.js +// ../../../node_modules/iconv-lite/encodings/dbcs-codec.js var require_dbcs_codec = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/dbcs-codec.js"(exports2) { + "../../../node_modules/iconv-lite/encodings/dbcs-codec.js"(exports2) { "use strict"; var Buffer2 = require_safer().Buffer; exports2._dbcs = DBCSCodec; @@ -25403,9 +25503,9 @@ var require_dbcs_codec = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/shiftjis.json +// ../../../node_modules/iconv-lite/encodings/tables/shiftjis.json var require_shiftjis = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/shiftjis.json"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/tables/shiftjis.json"(exports2, module2) { module2.exports = [ ["0", "\0", 128], ["a1", "\uFF61", 62], @@ -25534,9 +25634,9 @@ var require_shiftjis = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/eucjp.json +// ../../../node_modules/iconv-lite/encodings/tables/eucjp.json var require_eucjp = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/eucjp.json"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/tables/eucjp.json"(exports2, module2) { module2.exports = [ ["0", "\0", 127], ["8ea1", "\uFF61", 62], @@ -25722,9 +25822,9 @@ var require_eucjp = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/cp936.json +// ../../../node_modules/iconv-lite/encodings/tables/cp936.json var require_cp936 = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/cp936.json"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/tables/cp936.json"(exports2, module2) { module2.exports = [ ["0", "\0", 127, "\u20AC"], ["8140", "\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A", 5, "\u4E72\u4E74", 9, "\u4E7F", 6, "\u4E87\u4E8A"], @@ -25992,9 +26092,9 @@ var require_cp936 = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/gbk-added.json +// ../../../node_modules/iconv-lite/encodings/tables/gbk-added.json var require_gbk_added = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/gbk-added.json"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/tables/gbk-added.json"(exports2, module2) { module2.exports = [ ["a140", "\uE4C6", 62], ["a180", "\uE505", 32], @@ -26054,16 +26154,16 @@ var require_gbk_added = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +// ../../../node_modules/iconv-lite/encodings/tables/gb18030-ranges.json var require_gb18030_ranges = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/tables/gb18030-ranges.json"(exports2, module2) { module2.exports = { uChars: [128, 165, 169, 178, 184, 216, 226, 235, 238, 244, 248, 251, 253, 258, 276, 284, 300, 325, 329, 334, 364, 463, 465, 467, 469, 471, 473, 475, 477, 506, 594, 610, 712, 716, 730, 930, 938, 962, 970, 1026, 1104, 1106, 8209, 8215, 8218, 8222, 8231, 8241, 8244, 8246, 8252, 8365, 8452, 8454, 8458, 8471, 8482, 8556, 8570, 8596, 8602, 8713, 8720, 8722, 8726, 8731, 8737, 8740, 8742, 8748, 8751, 8760, 8766, 8777, 8781, 8787, 8802, 8808, 8816, 8854, 8858, 8870, 8896, 8979, 9322, 9372, 9548, 9588, 9616, 9622, 9634, 9652, 9662, 9672, 9676, 9680, 9702, 9735, 9738, 9793, 9795, 11906, 11909, 11913, 11917, 11928, 11944, 11947, 11951, 11956, 11960, 11964, 11979, 12284, 12292, 12312, 12319, 12330, 12351, 12436, 12447, 12535, 12543, 12586, 12842, 12850, 12964, 13200, 13215, 13218, 13253, 13263, 13267, 13270, 13384, 13428, 13727, 13839, 13851, 14617, 14703, 14801, 14816, 14964, 15183, 15471, 15585, 16471, 16736, 17208, 17325, 17330, 17374, 17623, 17997, 18018, 18212, 18218, 18301, 18318, 18760, 18811, 18814, 18820, 18823, 18844, 18848, 18872, 19576, 19620, 19738, 19887, 40870, 59244, 59336, 59367, 59413, 59417, 59423, 59431, 59437, 59443, 59452, 59460, 59478, 59493, 63789, 63866, 63894, 63976, 63986, 64016, 64018, 64021, 64025, 64034, 64037, 64042, 65074, 65093, 65107, 65112, 65127, 65132, 65375, 65510, 65536], gbChars: [0, 36, 38, 45, 50, 81, 89, 95, 96, 100, 103, 104, 105, 109, 126, 133, 148, 172, 175, 179, 208, 306, 307, 308, 309, 310, 311, 312, 313, 341, 428, 443, 544, 545, 558, 741, 742, 749, 750, 805, 819, 820, 7922, 7924, 7925, 7927, 7934, 7943, 7944, 7945, 7950, 8062, 8148, 8149, 8152, 8164, 8174, 8236, 8240, 8262, 8264, 8374, 8380, 8381, 8384, 8388, 8390, 8392, 8393, 8394, 8396, 8401, 8406, 8416, 8419, 8424, 8437, 8439, 8445, 8482, 8485, 8496, 8521, 8603, 8936, 8946, 9046, 9050, 9063, 9066, 9076, 9092, 9100, 9108, 9111, 9113, 9131, 9162, 9164, 9218, 9219, 11329, 11331, 11334, 11336, 11346, 11361, 11363, 11366, 11370, 11372, 11375, 11389, 11682, 11686, 11687, 11692, 11694, 11714, 11716, 11723, 11725, 11730, 11736, 11982, 11989, 12102, 12336, 12348, 12350, 12384, 12393, 12395, 12397, 12510, 12553, 12851, 12962, 12973, 13738, 13823, 13919, 13933, 14080, 14298, 14585, 14698, 15583, 15847, 16318, 16434, 16438, 16481, 16729, 17102, 17122, 17315, 17320, 17402, 17418, 17859, 17909, 17911, 17915, 17916, 17936, 17939, 17961, 18664, 18703, 18814, 18962, 19043, 33469, 33470, 33471, 33484, 33485, 33490, 33497, 33501, 33505, 33513, 33520, 33536, 33550, 37845, 37921, 37948, 38029, 38038, 38064, 38065, 38066, 38069, 38075, 38076, 38078, 39108, 39109, 39113, 39114, 39115, 39116, 39265, 39394, 189e3] }; } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/cp949.json +// ../../../node_modules/iconv-lite/encodings/tables/cp949.json var require_cp949 = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/cp949.json"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/tables/cp949.json"(exports2, module2) { module2.exports = [ ["0", "\0", 127], ["8141", "\uAC02\uAC03\uAC05\uAC06\uAC0B", 4, "\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25", 6, "\uAC2E\uAC32\uAC33\uAC34"], @@ -26340,9 +26440,9 @@ var require_cp949 = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/cp950.json +// ../../../node_modules/iconv-lite/encodings/tables/cp950.json var require_cp950 = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/cp950.json"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/tables/cp950.json"(exports2, module2) { module2.exports = [ ["0", "\0", 127], ["a140", "\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\xB7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A"], @@ -26523,9 +26623,9 @@ var require_cp950 = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/big5-added.json +// ../../../node_modules/iconv-lite/encodings/tables/big5-added.json var require_big5_added = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/tables/big5-added.json"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/tables/big5-added.json"(exports2, module2) { module2.exports = [ ["8740", "\u43F0\u4C32\u4603\u45A6\u4578\u{27267}\u4D77\u45B3\u{27CB1}\u4CE2\u{27CC5}\u3B95\u4736\u4744\u4C47\u4C40\u{242BF}\u{23617}\u{27352}\u{26E8B}\u{270D2}\u4C57\u{2A351}\u474F\u45DA\u4C85\u{27C6C}\u4D07\u4AA4\u46A1\u{26B23}\u7225\u{25A54}\u{21A63}\u{23E06}\u{23F61}\u664D\u56FB"], ["8767", "\u7D95\u591D\u{28BB9}\u3DF4\u9734\u{27BEF}\u5BDB\u{21D5E}\u5AA4\u3625\u{29EB0}\u5AD1\u5BB7\u5CFC\u676E\u8593\u{29945}\u7461\u749D\u3875\u{21D53}\u{2369E}\u{26021}\u3EEC"], @@ -26651,9 +26751,9 @@ var require_big5_added = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/dbcs-data.js +// ../../../node_modules/iconv-lite/encodings/dbcs-data.js var require_dbcs_data = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/dbcs-data.js"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/dbcs-data.js"(exports2, module2) { "use strict"; module2.exports = { // == Japanese/ShiftJIS ==================================================== @@ -26898,9 +26998,9 @@ var require_dbcs_data = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/encodings/index.js +// ../../../node_modules/iconv-lite/encodings/index.js var require_encodings = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/encodings/index.js"(exports2, module2) { + "../../../node_modules/iconv-lite/encodings/index.js"(exports2, module2) { "use strict"; var modules = [ require_internal(), @@ -26925,9 +27025,9 @@ var require_encodings = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/lib/streams.js +// ../../../node_modules/iconv-lite/lib/streams.js var require_streams = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/lib/streams.js"(exports2, module2) { + "../../../node_modules/iconv-lite/lib/streams.js"(exports2, module2) { "use strict"; var Buffer2 = require_safer().Buffer; module2.exports = function(stream_module) { @@ -27020,9 +27120,9 @@ var require_streams = __commonJS({ } }); -// ../../../node_modules/encoding/node_modules/iconv-lite/lib/index.js +// ../../../node_modules/iconv-lite/lib/index.js var require_lib2 = __commonJS({ - "../../../node_modules/encoding/node_modules/iconv-lite/lib/index.js"(exports2, module2) { + "../../../node_modules/iconv-lite/lib/index.js"(exports2, module2) { "use strict"; var Buffer2 = require_safer().Buffer; var bomHandling = require_bom_handling(); @@ -27188,9 +27288,9 @@ var require_encoding = __commonJS({ } }); -// ../../../node_modules/node-fetch/lib/index.js +// node_modules/node-fetch/lib/index.js var require_lib3 = __commonJS({ - "../../../node_modules/node-fetch/lib/index.js"(exports2, module2) { + "node_modules/node-fetch/lib/index.js"(exports2, module2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); function _interopDefault(ex) { @@ -27331,7 +27431,7 @@ var require_lib3 = __commonJS({ body = null; } else if (isURLSearchParams(body)) { body = Buffer.from(body.toString()); - } else if (isBlob(body)) ; + } else if (isBlob2(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === "[object ArrayBuffer]") { body = Buffer.from(body); @@ -27466,7 +27566,7 @@ var require_lib3 = __commonJS({ if (body === null) { return Body.Promise.resolve(Buffer.alloc(0)); } - if (isBlob(body)) { + if (isBlob2(body)) { body = body.stream(); } if (Buffer.isBuffer(body)) { @@ -27562,7 +27662,7 @@ var require_lib3 = __commonJS({ } return obj.constructor.name === "URLSearchParams" || Object.prototype.toString.call(obj) === "[object URLSearchParams]" || typeof obj.sort === "function"; } - function isBlob(obj) { + function isBlob2(obj) { return typeof obj === "object" && typeof obj.arrayBuffer === "function" && typeof obj.type === "string" && typeof obj.stream === "function" && typeof obj.constructor === "function" && typeof obj.constructor.name === "string" && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]); } function clone(instance) { @@ -27588,7 +27688,7 @@ var require_lib3 = __commonJS({ return "text/plain;charset=UTF-8"; } else if (isURLSearchParams(body)) { return "application/x-www-form-urlencoded;charset=UTF-8"; - } else if (isBlob(body)) { + } else if (isBlob2(body)) { return body.type || null; } else if (Buffer.isBuffer(body)) { return null; @@ -27608,7 +27708,7 @@ var require_lib3 = __commonJS({ const body = instance.body; if (body === null) { return 0; - } else if (isBlob(body)) { + } else if (isBlob2(body)) { return body.size; } else if (Buffer.isBuffer(body)) { return body.length; @@ -27626,7 +27726,7 @@ var require_lib3 = __commonJS({ const body = instance.body; if (body === null) { dest.end(); - } else if (isBlob(body)) { + } else if (isBlob2(body)) { body.stream().pipe(dest); } else if (Buffer.isBuffer(body)) { dest.write(body); @@ -28907,7 +29007,7 @@ var require_sdk_v3_metadata = __commonJS({ iamPrefix: "logs" }, cloudwatch: { - iamPrefix: "monitoring" + iamPrefix: "cloudwatch" }, codeartifact: { iamPrefix: "codeartifact" @@ -30056,13 +30156,13 @@ var require_lib4 = __commonJS({ }); // lib/assertions/providers/lambda-handler/index.ts -var lambda_handler_exports = {}; -__export(lambda_handler_exports, { +var index_exports = {}; +__export(index_exports, { handler: () => handler, isComplete: () => isComplete, onTimeout: () => onTimeout }); -module.exports = __toCommonJS(lambda_handler_exports); +module.exports = __toCommonJS(index_exports); // lib/assertions/providers/lambda-handler/assertion.ts var import_helpers_internal = __toESM(require_helpers_internal()); @@ -30075,6 +30175,7 @@ var CustomResourceHandler = class { constructor(event, context) { this.event = event; this.context = context; + this.timedOut = false; this.timeout = setTimeout(async () => { await this.respond({ status: "FAILED", @@ -30086,9 +30187,6 @@ var CustomResourceHandler = class { this.event = event; this.physicalResourceId = extractPhysicalResourceId(event); } - physicalResourceId; - timeout; - timedOut = false; /** * Handles executing the custom resource event. If `stateMachineArn` is present * in the props then trigger the waiter statemachine @@ -30222,7 +30320,6 @@ var AssertionHandler = class extends CustomResourceHandler { } }; var MatchCreator = class { - parsedObj; constructor(obj) { this.parsedObj = { matcher: obj @@ -30327,28 +30424,6 @@ function decodeCall(call) { // lib/assertions/providers/lambda-handler/http.ts var import_node_fetch = __toESM(require_lib3()); -var HttpHandler = class extends CustomResourceHandler { - async processEvent(request2) { - console.log("request", request2); - const response = await (0, import_node_fetch.default)(request2.parameters.url, request2.parameters.fetchOptions); - const result = { - ok: response.ok, - status: response.status, - statusText: response.statusText, - headers: response.headers.raw() - }; - result.body = await response.text(); - try { - result.body = JSON.parse(result.body); - } catch (e) { - } - return { - apiCallResponse: result - }; - } -}; - -// lib/assertions/providers/lambda-handler/sdk.ts var import_aws_custom_resource_sdk_adapter = __toESM(require_lib4()); // lib/assertions/providers/lambda-handler/utils.ts @@ -30395,10 +30470,38 @@ function decodeValue(value) { return JSON.parse(value); } +// lib/assertions/providers/lambda-handler/http.ts +var HttpHandler = class extends CustomResourceHandler { + async processEvent(request2) { + console.log("request", request2); + const response = await (0, import_node_fetch.default)(request2.parameters.url, request2.parameters.fetchOptions); + const result = { + ok: response.ok, + status: response.status, + statusText: response.statusText, + headers: response.headers.raw() + }; + result.body = await response.text(); + try { + result.body = JSON.parse(result.body); + } catch (e) { + } + let resp; + if (request2.flattenResponse === "true") { + resp = (0, import_aws_custom_resource_sdk_adapter.flatten)(deepParseJson({ apiCallResponse: result })); + } else { + resp = { apiCallResponse: result }; + } + console.log(`Returning result ${JSON.stringify(resp)}`); + return resp; + } +}; + // lib/assertions/providers/lambda-handler/sdk.ts +var import_aws_custom_resource_sdk_adapter2 = __toESM(require_lib4()); var AwsApiCallHandler = class extends CustomResourceHandler { async processEvent(request2) { - const apiCall = new import_aws_custom_resource_sdk_adapter.ApiCall(request2.service, request2.api); + const apiCall = new import_aws_custom_resource_sdk_adapter2.ApiCall(request2.service, request2.api); const parameters = request2.parameters ? decodeParameters(request2.parameters) : {}; console.log(`SDK request to ${apiCall.service}.${apiCall.action} with parameters ${JSON.stringify(parameters)}`); const response = await apiCall.invoke({ parameters }); @@ -30406,7 +30509,7 @@ var AwsApiCallHandler = class extends CustomResourceHandler { delete response.$metadata; let resp; if (request2.outputPaths || request2.flattenResponse === "true") { - const flattened = (0, import_aws_custom_resource_sdk_adapter.flatten)(deepParseJson({ apiCallResponse: response })); + const flattened = (0, import_aws_custom_resource_sdk_adapter2.flatten)(deepParseJson({ apiCallResponse: response })); resp = request2.outputPaths ? filterKeys(flattened, request2.outputPaths) : flattened; } else { resp = { apiCallResponse: response }; diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/cdk.out index 91e1a8b9901d5..1e02a2deb191b 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"39.0.0"} \ No newline at end of file +{"version":"40.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/integ.json index a27f5100ec948..07ad7ad57fbbc 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "39.0.0", + "version": "40.0.0", "testCases": { "IntegTestAlbOidc/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/manifest.json index 9fad8c5dad23d..c33f15ee9b9fb 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "39.0.0", + "version": "40.0.0", "artifacts": { "IntegAlbOidc.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}/8aa83283e8849f4415cdbdbe7a755305c26ece7f5d2a88b3b7fae454316880f1.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/b7120f86b25d57882290264853cb10b262b36429b02699b308cfec8f78adb435.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -34,12 +34,56 @@ "IntegAlbOidc.assets" ], "metadata": { + "/IntegAlbOidc/Vpc": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "maxAzs": "*" + } + } + ], "/IntegAlbOidc/Vpc/Resource": [ { "type": "aws:cdk:logicalId", "data": "Vpc8378EB38" } ], + "/IntegAlbOidc/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": [ + "*" + ] + } + } + ], "/IntegAlbOidc/Vpc/PublicSubnet1/Subnet": [ { "type": "aws:cdk:logicalId", @@ -76,6 +120,42 @@ "data": "VpcPublicSubnet1NATGateway4D7517AA" } ], + "/IntegAlbOidc/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": {} + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addNatGateway": [ + "*" + ] + } + } + ], "/IntegAlbOidc/Vpc/PublicSubnet2/Subnet": [ { "type": "aws:cdk:logicalId", @@ -112,6 +192,34 @@ "data": "VpcPublicSubnet2NATGateway9182C01D" } ], + "/IntegAlbOidc/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": {} + } + ], "/IntegAlbOidc/Vpc/PrivateSubnet1/Subnet": [ { "type": "aws:cdk:logicalId", @@ -136,6 +244,34 @@ "data": "VpcPrivateSubnet1DefaultRouteBE02A9ED" } ], + "/IntegAlbOidc/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": {} + } + ], "/IntegAlbOidc/Vpc/PrivateSubnet2/Subnet": [ { "type": "aws:cdk:logicalId", @@ -172,6 +308,12 @@ "data": "VpcVPCGWBF912B6E" } ], + "/IntegAlbOidc/Vpc/RestrictDefaultSecurityGroupCustomResource": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], "/IntegAlbOidc/Vpc/RestrictDefaultSecurityGroupCustomResource/Default": [ { "type": "aws:cdk:logicalId", @@ -202,54 +344,243 @@ "data": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E" } ], + "/IntegAlbOidc/Certificate": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "domainName": "*", + "validation": "*" + } + } + ], "/IntegAlbOidc/Certificate/Resource": [ { "type": "aws:cdk:logicalId", "data": "Certificate4E7ABB08" } ], + "/IntegAlbOidc/UserPool": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "signInAliases": { + "email": true + }, + "removalPolicy": "destroy" + } + } + ], "/IntegAlbOidc/UserPool/Resource": [ { "type": "aws:cdk:logicalId", "data": "UserPool6BA7E5F2" } ], + "/IntegAlbOidc/UserPool/Domain": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "userPool": "*", + "cognitoDomain": { + "domainPrefix": "*" + } + } + } + ], "/IntegAlbOidc/UserPool/Domain/Resource": [ { "type": "aws:cdk:logicalId", "data": "UserPoolDomainD0EA232A" } ], + "/IntegAlbOidc/UserPool/UserPoolClient": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "userPool": "*", + "generateSecret": true, + "oAuth": { + "callbackUrls": "*", + "flows": { + "authorizationCodeGrant": true + } + } + } + } + ], "/IntegAlbOidc/UserPool/UserPoolClient/Resource": [ { "type": "aws:cdk:logicalId", "data": "UserPoolUserPoolClient40176907" } ], + "/IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/Provider": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "uuid": "*", + "lambdaPurpose": "*", + "memorySize": "*", + "timeout": "*", + "role": "*", + "logGroup": "*", + "functionName": "*", + "vpc": "*", + "vpcSubnets": "*", + "code": "*", + "handler": "*", + "runtime": "*" + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addMetadata": [ + "*", + true + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addMetadata": [ + "*", + "*" + ] + } + } + ], + "/IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/Resource": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + } + ], "/IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/Resource/Default": [ { "type": "aws:cdk:logicalId", "data": "UserPoolUserPoolClientDescribeCognitoUserPoolClientA6EA22D2" } ], + "/IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/CustomResourcePolicy": [ + { + "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": [ + "*" + ] + } + } + ], "/IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/CustomResourcePolicy/Resource": [ { "type": "aws:cdk:logicalId", "data": "UserPoolUserPoolClientDescribeCognitoUserPoolClientCustomResourcePolicyFFF2174F" } ], + "/IntegAlbOidc/LoadBalancer": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + } + ], "/IntegAlbOidc/LoadBalancer/Resource": [ { "type": "aws:cdk:logicalId", "data": "LoadBalancerBE9EEC3A" } ], + "/IntegAlbOidc/LoadBalancer/SecurityGroup": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "vpc": "*", + "description": "*", + "allowAllOutbound": false + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addEgressRule": [ + { + "canInlineRule": true, + "connections": "*", + "uniqueId": "*" + }, + {}, + "*", + false + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addIngressRule": [ + { + "canInlineRule": true, + "connections": "*", + "uniqueId": "*" + }, + {}, + "*", + false + ] + } + } + ], "/IntegAlbOidc/LoadBalancer/SecurityGroup/Resource": [ { "type": "aws:cdk:logicalId", "data": "LoadBalancerSecurityGroupA28D6DD7" } ], + "/IntegAlbOidc/LoadBalancer/Listener": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + } + ], "/IntegAlbOidc/LoadBalancer/Listener/Resource": [ { "type": "aws:cdk:logicalId", @@ -257,6 +588,21 @@ } ], "/IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "memorySize": "*", + "timeout": "*", + "role": "*", + "logGroup": "*", + "functionName": "*", + "vpc": "*", + "vpcSubnets": "*", + "code": "*", + "handler": "*", + "runtime": "*" + } + }, { "type": "aws:cdk:is-custom-resource-handler-singleton", "data": true @@ -282,6 +628,52 @@ "data": 0 } ], + "/IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "assumedBy": { + "principalAccount": "*", + "assumeRoleAction": "*" + }, + "managedPolicies": [ + { + "managedPolicyArn": "*" + } + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachInlinePolicy": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachInlinePolicy": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachInlinePolicy": [ + "*" + ] + } + } + ], + "/IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/ImportServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], "/IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/Resource": [ { "type": "aws:cdk:logicalId", @@ -294,36 +686,273 @@ "data": "AWS679f53fac002430cb0da5b7982bd22872D164C4C" } ], + "/IntegAlbOidc/ARecord": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "target": "*", + "zone": "*" + } + }, + { + "type": "aws:cdk:analytics:construct", + "data": { + "target": "*", + "zone": "*" + } + } + ], "/IntegAlbOidc/ARecord/Resource": [ { "type": "aws:cdk:logicalId", "data": "ARecordE7B57761" } ], + "/IntegAlbOidc/User/Resource/Provider": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "uuid": "*", + "lambdaPurpose": "*", + "memorySize": "*", + "timeout": "*", + "role": "*", + "logGroup": "*", + "functionName": "*", + "vpc": "*", + "vpcSubnets": "*", + "code": "*", + "handler": "*", + "runtime": "*" + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addMetadata": [ + "*", + true + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addMetadata": [ + "*", + "*" + ] + } + } + ], + "/IntegAlbOidc/User/Resource/Resource": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + } + ], "/IntegAlbOidc/User/Resource/Resource/Default": [ { "type": "aws:cdk:logicalId", "data": "UserFDDCDD17" } ], + "/IntegAlbOidc/User/Resource/CustomResourcePolicy": [ + { + "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": [ + "*" + ] + } + } + ], "/IntegAlbOidc/User/Resource/CustomResourcePolicy/Resource": [ { "type": "aws:cdk:logicalId", "data": "UserCustomResourcePolicyC2EB5139" } ], + "/IntegAlbOidc/User/SetUserPassword/Provider": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "uuid": "*", + "lambdaPurpose": "*", + "memorySize": "*", + "timeout": "*", + "role": "*", + "logGroup": "*", + "functionName": "*", + "vpc": "*", + "vpcSubnets": "*", + "code": "*", + "handler": "*", + "runtime": "*" + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addMetadata": [ + "*", + true + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addMetadata": [ + "*", + "*" + ] + } + } + ], + "/IntegAlbOidc/User/SetUserPassword/Resource": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], "/IntegAlbOidc/User/SetUserPassword/Resource/Default": [ { "type": "aws:cdk:logicalId", "data": "UserSetUserPasswordAD2F2A64" } ], + "/IntegAlbOidc/User/SetUserPassword/CustomResourcePolicy": [ + { + "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": [ + "*" + ] + } + } + ], "/IntegAlbOidc/User/SetUserPassword/CustomResourcePolicy/Resource": [ { "type": "aws:cdk:logicalId", "data": "UserSetUserPasswordCustomResourcePolicy7B250C76" } ], + "/IntegAlbOidc/Signin": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "functionName": "*", + "code": "*", + "handler": "*", + "runtime": "*", + "environment": "*", + "memorySize": "*", + "timeout": "*" + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addEnvironment": [ + "*", + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addEnvironment": [ + "*", + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addEnvironment": [ + "*", + "*" + ] + } + } + ], + "/IntegAlbOidc/Signin/ServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "assumedBy": { + "principalAccount": "*", + "assumeRoleAction": "*" + }, + "managedPolicies": [ + { + "managedPolicyArn": "*" + } + ] + } + } + ], + "/IntegAlbOidc/Signin/ServiceRole/ImportServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], "/IntegAlbOidc/Signin/ServiceRole/Resource": [ { "type": "aws:cdk:logicalId", @@ -380,7 +1009,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}/c95abc6dfbb2454af3931d4713ba4ae479647867f78af494f789bb54165903f2.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/d5709bea1b86c70171776cd8423fcafa3d0a8a116bd5002b351afa78a0db9ea8.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -397,6 +1026,20 @@ "IntegTestAlbOidcDefaultTestDeployAssert2476ECB6.assets" ], "metadata": { + "/IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/Default": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + } + ], "/IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/Default/Default": [ { "type": "aws:cdk:logicalId", @@ -433,6 +1076,20 @@ "data": "LatestNodeRuntimeMap" } ], + "/IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837/Default": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + } + ], "/IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837/Default/Default": [ { "type": "aws:cdk:logicalId", diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/tree.json index c8f83f927e6d0..e58c7a2cfe82e 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-elasticloadbalancingv2/test/integ.alb.oidc.js.snapshot/tree.json @@ -1,1930 +1 @@ -{ - "version": "tree-0.1", - "tree": { - "id": "App", - "path": "", - "children": { - "IntegAlbOidc": { - "id": "IntegAlbOidc", - "path": "IntegAlbOidc", - "children": { - "Vpc": { - "id": "Vpc", - "path": "IntegAlbOidc/Vpc", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/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": "IntegAlbOidc/Vpc" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnVPC", - "version": "0.0.0" - } - }, - "PublicSubnet1": { - "id": "PublicSubnet1", - "path": "IntegAlbOidc/Vpc/PublicSubnet1", - "children": { - "Subnet": { - "id": "Subnet", - "path": "IntegAlbOidc/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": "IntegAlbOidc/Vpc/PublicSubnet1" - } - ], - "vpcId": { - "Ref": "Vpc8378EB38" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", - "version": "0.0.0" - } - }, - "Acl": { - "id": "Acl", - "path": "IntegAlbOidc/Vpc/PublicSubnet1/Acl", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0" - } - }, - "RouteTable": { - "id": "RouteTable", - "path": "IntegAlbOidc/Vpc/PublicSubnet1/RouteTable", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", - "aws:cdk:cloudformation:props": { - "tags": [ - { - "key": "Name", - "value": "IntegAlbOidc/Vpc/PublicSubnet1" - } - ], - "vpcId": { - "Ref": "Vpc8378EB38" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", - "version": "0.0.0" - } - }, - "RouteTableAssociation": { - "id": "RouteTableAssociation", - "path": "IntegAlbOidc/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": "IntegAlbOidc/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": "IntegAlbOidc/Vpc/PublicSubnet1/EIP", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::EC2::EIP", - "aws:cdk:cloudformation:props": { - "domain": "vpc", - "tags": [ - { - "key": "Name", - "value": "IntegAlbOidc/Vpc/PublicSubnet1" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnEIP", - "version": "0.0.0" - } - }, - "NATGateway": { - "id": "NATGateway", - "path": "IntegAlbOidc/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": "IntegAlbOidc/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" - } - }, - "PublicSubnet2": { - "id": "PublicSubnet2", - "path": "IntegAlbOidc/Vpc/PublicSubnet2", - "children": { - "Subnet": { - "id": "Subnet", - "path": "IntegAlbOidc/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": "IntegAlbOidc/Vpc/PublicSubnet2" - } - ], - "vpcId": { - "Ref": "Vpc8378EB38" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", - "version": "0.0.0" - } - }, - "Acl": { - "id": "Acl", - "path": "IntegAlbOidc/Vpc/PublicSubnet2/Acl", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0" - } - }, - "RouteTable": { - "id": "RouteTable", - "path": "IntegAlbOidc/Vpc/PublicSubnet2/RouteTable", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", - "aws:cdk:cloudformation:props": { - "tags": [ - { - "key": "Name", - "value": "IntegAlbOidc/Vpc/PublicSubnet2" - } - ], - "vpcId": { - "Ref": "Vpc8378EB38" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", - "version": "0.0.0" - } - }, - "RouteTableAssociation": { - "id": "RouteTableAssociation", - "path": "IntegAlbOidc/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": "IntegAlbOidc/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" - } - }, - "EIP": { - "id": "EIP", - "path": "IntegAlbOidc/Vpc/PublicSubnet2/EIP", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::EC2::EIP", - "aws:cdk:cloudformation:props": { - "domain": "vpc", - "tags": [ - { - "key": "Name", - "value": "IntegAlbOidc/Vpc/PublicSubnet2" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnEIP", - "version": "0.0.0" - } - }, - "NATGateway": { - "id": "NATGateway", - "path": "IntegAlbOidc/Vpc/PublicSubnet2/NATGateway", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::EC2::NatGateway", - "aws:cdk:cloudformation:props": { - "allocationId": { - "Fn::GetAtt": [ - "VpcPublicSubnet2EIP3C605A87", - "AllocationId" - ] - }, - "subnetId": { - "Ref": "VpcPublicSubnet2Subnet691E08A3" - }, - "tags": [ - { - "key": "Name", - "value": "IntegAlbOidc/Vpc/PublicSubnet2" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnNatGateway", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.PublicSubnet", - "version": "0.0.0" - } - }, - "PrivateSubnet1": { - "id": "PrivateSubnet1", - "path": "IntegAlbOidc/Vpc/PrivateSubnet1", - "children": { - "Subnet": { - "id": "Subnet", - "path": "IntegAlbOidc/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": "IntegAlbOidc/Vpc/PrivateSubnet1" - } - ], - "vpcId": { - "Ref": "Vpc8378EB38" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", - "version": "0.0.0" - } - }, - "Acl": { - "id": "Acl", - "path": "IntegAlbOidc/Vpc/PrivateSubnet1/Acl", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0" - } - }, - "RouteTable": { - "id": "RouteTable", - "path": "IntegAlbOidc/Vpc/PrivateSubnet1/RouteTable", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", - "aws:cdk:cloudformation:props": { - "tags": [ - { - "key": "Name", - "value": "IntegAlbOidc/Vpc/PrivateSubnet1" - } - ], - "vpcId": { - "Ref": "Vpc8378EB38" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", - "version": "0.0.0" - } - }, - "RouteTableAssociation": { - "id": "RouteTableAssociation", - "path": "IntegAlbOidc/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": "IntegAlbOidc/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" - } - }, - "PrivateSubnet2": { - "id": "PrivateSubnet2", - "path": "IntegAlbOidc/Vpc/PrivateSubnet2", - "children": { - "Subnet": { - "id": "Subnet", - "path": "IntegAlbOidc/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": "IntegAlbOidc/Vpc/PrivateSubnet2" - } - ], - "vpcId": { - "Ref": "Vpc8378EB38" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", - "version": "0.0.0" - } - }, - "Acl": { - "id": "Acl", - "path": "IntegAlbOidc/Vpc/PrivateSubnet2/Acl", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0" - } - }, - "RouteTable": { - "id": "RouteTable", - "path": "IntegAlbOidc/Vpc/PrivateSubnet2/RouteTable", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", - "aws:cdk:cloudformation:props": { - "tags": [ - { - "key": "Name", - "value": "IntegAlbOidc/Vpc/PrivateSubnet2" - } - ], - "vpcId": { - "Ref": "Vpc8378EB38" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", - "version": "0.0.0" - } - }, - "RouteTableAssociation": { - "id": "RouteTableAssociation", - "path": "IntegAlbOidc/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": "IntegAlbOidc/Vpc/PrivateSubnet2/DefaultRoute", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::EC2::Route", - "aws:cdk:cloudformation:props": { - "destinationCidrBlock": "0.0.0.0/0", - "natGatewayId": { - "Ref": "VpcPublicSubnet2NATGateway9182C01D" - }, - "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" - } - }, - "IGW": { - "id": "IGW", - "path": "IntegAlbOidc/Vpc/IGW", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::EC2::InternetGateway", - "aws:cdk:cloudformation:props": { - "tags": [ - { - "key": "Name", - "value": "IntegAlbOidc/Vpc" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.CfnInternetGateway", - "version": "0.0.0" - } - }, - "VPCGW": { - "id": "VPCGW", - "path": "IntegAlbOidc/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" - } - }, - "RestrictDefaultSecurityGroupCustomResource": { - "id": "RestrictDefaultSecurityGroupCustomResource", - "path": "IntegAlbOidc/Vpc/RestrictDefaultSecurityGroupCustomResource", - "children": { - "Default": { - "id": "Default", - "path": "IntegAlbOidc/Vpc/RestrictDefaultSecurityGroupCustomResource/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_ec2.Vpc", - "version": "0.0.0" - } - }, - "LatestNodeRuntimeMap": { - "id": "LatestNodeRuntimeMap", - "path": "IntegAlbOidc/LatestNodeRuntimeMap", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnMapping", - "version": "0.0.0" - } - }, - "Custom::VpcRestrictDefaultSGCustomResourceProvider": { - "id": "Custom::VpcRestrictDefaultSGCustomResourceProvider", - "path": "IntegAlbOidc/Custom::VpcRestrictDefaultSGCustomResourceProvider", - "children": { - "Staging": { - "id": "Staging", - "path": "IntegAlbOidc/Custom::VpcRestrictDefaultSGCustomResourceProvider/Staging", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "Role": { - "id": "Role", - "path": "IntegAlbOidc/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - }, - "Handler": { - "id": "Handler", - "path": "IntegAlbOidc/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResourceProviderBase", - "version": "0.0.0" - } - }, - "HostedZone": { - "id": "HostedZone", - "path": "IntegAlbOidc/HostedZone", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0" - } - }, - "Certificate": { - "id": "Certificate", - "path": "IntegAlbOidc/Certificate", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/Certificate/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::CertificateManager::Certificate", - "aws:cdk:cloudformation:props": { - "domainName": "*.example.com", - "domainValidationOptions": [ - { - "domainName": "*.example.com", - "hostedZoneId": "Z23ABC4XYZL05B" - } - ], - "tags": [ - { - "key": "Name", - "value": "IntegAlbOidc/Certificate" - } - ], - "validationMethod": "DNS" - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_certificatemanager.CfnCertificate", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_certificatemanager.Certificate", - "version": "0.0.0" - } - }, - "UserPool": { - "id": "UserPool", - "path": "IntegAlbOidc/UserPool", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/UserPool/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Cognito::UserPool", - "aws:cdk:cloudformation:props": { - "accountRecoverySetting": { - "recoveryMechanisms": [ - { - "name": "verified_phone_number", - "priority": 1 - }, - { - "name": "verified_email", - "priority": 2 - } - ] - }, - "adminCreateUserConfig": { - "allowAdminCreateUserOnly": true - }, - "autoVerifiedAttributes": [ - "email" - ], - "emailVerificationMessage": "The verification code to your new account is {####}", - "emailVerificationSubject": "Verify your new account", - "smsVerificationMessage": "The verification code to your new account is {####}", - "usernameAttributes": [ - "email" - ], - "verificationMessageTemplate": { - "defaultEmailOption": "CONFIRM_WITH_CODE", - "emailMessage": "The verification code to your new account is {####}", - "emailSubject": "Verify your new account", - "smsMessage": "The verification code to your new account is {####}" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.CfnUserPool", - "version": "0.0.0" - } - }, - "Domain": { - "id": "Domain", - "path": "IntegAlbOidc/UserPool/Domain", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/UserPool/Domain/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Cognito::UserPoolDomain", - "aws:cdk:cloudformation:props": { - "domain": "z23abc4xyzl05b", - "userPoolId": { - "Ref": "UserPool6BA7E5F2" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.CfnUserPoolDomain", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.UserPoolDomain", - "version": "0.0.0" - } - }, - "UserPoolClient": { - "id": "UserPoolClient", - "path": "IntegAlbOidc/UserPool/UserPoolClient", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/UserPool/UserPoolClient/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Cognito::UserPoolClient", - "aws:cdk:cloudformation:props": { - "allowedOAuthFlows": [ - "code" - ], - "allowedOAuthFlowsUserPoolClient": true, - "allowedOAuthScopes": [ - "profile", - "phone", - "email", - "openid", - "aws.cognito.signin.user.admin" - ], - "callbackUrLs": [ - "https://*.example.com/oauth2/idpresponse" - ], - "generateSecret": true, - "supportedIdentityProviders": [ - "COGNITO" - ], - "userPoolId": { - "Ref": "UserPool6BA7E5F2" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.CfnUserPoolClient", - "version": "0.0.0" - } - }, - "DescribeCognitoUserPoolClient": { - "id": "DescribeCognitoUserPoolClient", - "path": "IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient", - "children": { - "Provider": { - "id": "Provider", - "path": "IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/Provider", - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.SingletonFunction", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/Resource", - "children": { - "Default": { - "id": "Default", - "path": "IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/Resource/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0" - } - }, - "CustomResourcePolicy": { - "id": "CustomResourcePolicy", - "path": "IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/CustomResourcePolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/CustomResourcePolicy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "cognito-idp:DescribeUserPoolClient", - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "UserPool6BA7E5F2", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "UserPoolUserPoolClientDescribeCognitoUserPoolClientCustomResourcePolicyFFF2174F", - "roles": [ - { - "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.custom_resources.AwsCustomResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.UserPoolClient", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cognito.UserPool", - "version": "0.0.0" - } - }, - "LoadBalancer": { - "id": "LoadBalancer", - "path": "IntegAlbOidc/LoadBalancer", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/LoadBalancer/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::ElasticLoadBalancingV2::LoadBalancer", - "aws:cdk:cloudformation:props": { - "loadBalancerAttributes": [ - { - "key": "deletion_protection.enabled", - "value": "false" - } - ], - "scheme": "internet-facing", - "securityGroups": [ - { - "Fn::GetAtt": [ - "LoadBalancerSecurityGroupA28D6DD7", - "GroupId" - ] - } - ], - "subnets": [ - { - "Ref": "VpcPublicSubnet1Subnet5C2D37C4" - }, - { - "Ref": "VpcPublicSubnet2Subnet691E08A3" - } - ], - "type": "application" - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_elasticloadbalancingv2.CfnLoadBalancer", - "version": "0.0.0" - } - }, - "SecurityGroup": { - "id": "SecurityGroup", - "path": "IntegAlbOidc/LoadBalancer/SecurityGroup", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/LoadBalancer/SecurityGroup/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::EC2::SecurityGroup", - "aws:cdk:cloudformation:props": { - "groupDescription": "Automatically created Security Group for ELB IntegAlbOidcLoadBalancer3609D530", - "securityGroupEgress": [ - { - "cidrIp": "0.0.0.0/0", - "ipProtocol": "tcp", - "fromPort": 443, - "toPort": 443, - "description": "Allow to IdP endpoint" - } - ], - "securityGroupIngress": [ - { - "cidrIp": "0.0.0.0/0", - "ipProtocol": "tcp", - "fromPort": 443, - "toPort": 443, - "description": "Allow from anyone on port 443" - } - ], - "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" - } - }, - "Listener": { - "id": "Listener", - "path": "IntegAlbOidc/LoadBalancer/Listener", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/LoadBalancer/Listener/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::ElasticLoadBalancingV2::Listener", - "aws:cdk:cloudformation:props": { - "certificates": [ - { - "certificateArn": { - "Ref": "Certificate4E7ABB08" - } - } - ], - "defaultActions": [ - { - "type": "authenticate-oidc", - "authenticateOidcConfig": { - "authorizationEndpoint": { - "Fn::Join": [ - "", - [ - "https://", - { - "Ref": "UserPoolDomainD0EA232A" - }, - ".auth.", - { - "Ref": "AWS::Region" - }, - ".amazoncognito.com/oauth2/authorize" - ] - ] - }, - "clientId": { - "Ref": "UserPoolUserPoolClient40176907" - }, - "clientSecret": { - "Fn::GetAtt": [ - "UserPoolUserPoolClientDescribeCognitoUserPoolClientA6EA22D2", - "UserPoolClient.ClientSecret" - ] - }, - "issuer": { - "Fn::Join": [ - "", - [ - "https://cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - { - "Ref": "UserPool6BA7E5F2" - } - ] - ] - }, - "tokenEndpoint": { - "Fn::Join": [ - "", - [ - "https://", - { - "Ref": "UserPoolDomainD0EA232A" - }, - ".auth.", - { - "Ref": "AWS::Region" - }, - ".amazoncognito.com/oauth2/token" - ] - ] - }, - "userInfoEndpoint": { - "Fn::Join": [ - "", - [ - "https://", - { - "Ref": "UserPoolDomainD0EA232A" - }, - ".auth.", - { - "Ref": "AWS::Region" - }, - ".amazoncognito.com/oauth2/userInfo" - ] - ] - } - }, - "order": 1 - }, - { - "type": "fixed-response", - "fixedResponseConfig": { - "statusCode": "200", - "contentType": "text/plain", - "messageBody": "Authenticated" - }, - "order": 2 - } - ], - "loadBalancerArn": { - "Ref": "LoadBalancerBE9EEC3A" - }, - "port": 443, - "protocol": "HTTPS" - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_elasticloadbalancingv2.CfnListener", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationListener", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationLoadBalancer", - "version": "0.0.0" - } - }, - "AWS679f53fac002430cb0da5b7982bd2287": { - "id": "AWS679f53fac002430cb0da5b7982bd2287", - "path": "IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/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" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "0.0.0" - } - }, - "Code": { - "id": "Code", - "path": "IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/Code/AssetBucket", - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/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": "cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d.zip" - }, - "handler": "index.handler", - "role": { - "Fn::GetAtt": [ - "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", - "Arn" - ] - }, - "runtime": { - "Fn::FindInMap": [ - "LatestNodeRuntimeMap", - { - "Ref": "AWS::Region" - }, - "value" - ] - }, - "timeout": 120 - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "0.0.0" - } - }, - "ARecord": { - "id": "ARecord", - "path": "IntegAlbOidc/ARecord", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/ARecord/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Route53::RecordSet", - "aws:cdk:cloudformation:props": { - "aliasTarget": { - "hostedZoneId": { - "Fn::GetAtt": [ - "LoadBalancerBE9EEC3A", - "CanonicalHostedZoneID" - ] - }, - "dnsName": { - "Fn::Join": [ - "", - [ - "dualstack.", - { - "Fn::GetAtt": [ - "LoadBalancerBE9EEC3A", - "DNSName" - ] - } - ] - ] - } - }, - "hostedZoneId": "Z23ABC4XYZL05B", - "name": "example.com.", - "type": "A" - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_route53.CfnRecordSet", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_route53.ARecord", - "version": "0.0.0" - } - }, - "User": { - "id": "User", - "path": "IntegAlbOidc/User", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/User/Resource", - "children": { - "Provider": { - "id": "Provider", - "path": "IntegAlbOidc/User/Resource/Provider", - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.SingletonFunction", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/User/Resource/Resource", - "children": { - "Default": { - "id": "Default", - "path": "IntegAlbOidc/User/Resource/Resource/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0" - } - }, - "CustomResourcePolicy": { - "id": "CustomResourcePolicy", - "path": "IntegAlbOidc/User/Resource/CustomResourcePolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/User/Resource/CustomResourcePolicy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "cognito-idp:AdminCreateUser", - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "UserPool6BA7E5F2", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "UserCustomResourcePolicyC2EB5139", - "roles": [ - { - "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.custom_resources.AwsCustomResource", - "version": "0.0.0" - } - }, - "SetUserPassword": { - "id": "SetUserPassword", - "path": "IntegAlbOidc/User/SetUserPassword", - "children": { - "Provider": { - "id": "Provider", - "path": "IntegAlbOidc/User/SetUserPassword/Provider", - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.SingletonFunction", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/User/SetUserPassword/Resource", - "children": { - "Default": { - "id": "Default", - "path": "IntegAlbOidc/User/SetUserPassword/Resource/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0" - } - }, - "CustomResourcePolicy": { - "id": "CustomResourcePolicy", - "path": "IntegAlbOidc/User/SetUserPassword/CustomResourcePolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/User/SetUserPassword/CustomResourcePolicy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "cognito-idp:AdminSetUserPassword", - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "UserPool6BA7E5F2", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "UserSetUserPasswordCustomResourcePolicy7B250C76", - "roles": [ - { - "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.custom_resources.AwsCustomResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "Signin": { - "id": "Signin", - "path": "IntegAlbOidc/Signin", - "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "IntegAlbOidc/Signin/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "IntegAlbOidc/Signin/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/Signin/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" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "0.0.0" - } - }, - "Code": { - "id": "Code", - "path": "IntegAlbOidc/Signin/Code", - "children": { - "Stage": { - "id": "Stage", - "path": "IntegAlbOidc/Signin/Code/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "IntegAlbOidc/Signin/Code/AssetBucket", - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "IntegAlbOidc/Signin/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": "5630dddea01df446e7bfb15f6c335c43060ac31110774634ff6bf3f50d0fbad5.zip" - }, - "environment": { - "variables": { - "TEST_USERNAME": "test-user@example.com", - "TEST_PASSWORD": "TestUser@123", - "TEST_URL": "https://*.example.com" - } - }, - "functionName": "cdk-integ-alb-oidc-signin-handler", - "handler": "index.handler", - "memorySize": 1024, - "role": { - "Fn::GetAtt": [ - "SigninServiceRole24B8BB32", - "Arn" - ] - }, - "runtime": "nodejs18.x", - "timeout": 300 - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "0.0.0" - } - }, - "Exports": { - "id": "Exports", - "path": "IntegAlbOidc/Exports", - "children": { - "Output{\"Ref\":\"Signin352C80E6\"}": { - "id": "Output{\"Ref\":\"Signin352C80E6\"}", - "path": "IntegAlbOidc/Exports/Output{\"Ref\":\"Signin352C80E6\"}", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - }, - "Output{\"Ref\":\"UserPool6BA7E5F2\"}": { - "id": "Output{\"Ref\":\"UserPool6BA7E5F2\"}", - "path": "IntegAlbOidc/Exports/Output{\"Ref\":\"UserPool6BA7E5F2\"}", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "IntegAlbOidc/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "IntegAlbOidc/CheckBootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnRule", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.Stack", - "version": "0.0.0" - } - }, - "IntegTestAlbOidc": { - "id": "IntegTestAlbOidc", - "path": "IntegTestAlbOidc", - "children": { - "DefaultTest": { - "id": "DefaultTest", - "path": "IntegTestAlbOidc/DefaultTest", - "children": { - "Default": { - "id": "Default", - "path": "IntegTestAlbOidc/DefaultTest/Default", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "DeployAssert": { - "id": "DeployAssert", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert", - "children": { - "LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd": { - "id": "LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd", - "children": { - "SdkProvider": { - "id": "SdkProvider", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/SdkProvider", - "children": { - "AssertionsProvider": { - "id": "AssertionsProvider", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/SdkProvider/AssertionsProvider", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/integ-tests-alpha.AssertionsProvider", - "version": "0.0.0" - } - }, - "Default": { - "id": "Default", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/Default", - "children": { - "Default": { - "id": "Default", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/Default/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0" - } - }, - "Invoke": { - "id": "Invoke", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/Invoke", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - }, - "AssertionResults": { - "id": "AssertionResults", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/AssertionResults", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/integ-tests-alpha.LambdaInvokeFunction", - "version": "0.0.0" - } - }, - "SingletonFunction1488541a7b23466481b69b4408076b81": { - "id": "SingletonFunction1488541a7b23466481b69b4408076b81", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81", - "children": { - "Staging": { - "id": "Staging", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Staging", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "0.0.0" - } - }, - "Role": { - "id": "Role", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Role", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - }, - "Handler": { - "id": "Handler", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Handler", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, - "LatestNodeRuntimeMap": { - "id": "LatestNodeRuntimeMap", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/LatestNodeRuntimeMap", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnMapping", - "version": "0.0.0" - } - }, - "AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837": { - "id": "AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837", - "children": { - "SdkProvider": { - "id": "SdkProvider", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837/SdkProvider", - "children": { - "AssertionsProvider": { - "id": "AssertionsProvider", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837/SdkProvider/AssertionsProvider", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/integ-tests-alpha.AssertionsProvider", - "version": "0.0.0" - } - }, - "Default": { - "id": "Default", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837/Default", - "children": { - "Default": { - "id": "Default", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837/Default/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.CustomResource", - "version": "0.0.0" - } - }, - "AssertionResults": { - "id": "AssertionResults", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837/AssertionResults", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/integ-tests-alpha.AwsApiCall", - "version": "0.0.0" - } - }, - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "IntegTestAlbOidc/DefaultTest/DeployAssert/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "0.0.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "IntegTestAlbOidc/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":"","children":{"IntegAlbOidc":{"id":"IntegAlbOidc","path":"IntegAlbOidc","children":{"Vpc":{"id":"Vpc","path":"IntegAlbOidc/Vpc","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/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":"IntegAlbOidc/Vpc"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPC","version":"0.0.0"}},"PublicSubnet1":{"id":"PublicSubnet1","path":"IntegAlbOidc/Vpc/PublicSubnet1","children":{"Subnet":{"id":"Subnet","path":"IntegAlbOidc/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":"IntegAlbOidc/Vpc/PublicSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"IntegAlbOidc/Vpc/PublicSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"IntegAlbOidc/Vpc/PublicSubnet1/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"IntegAlbOidc/Vpc/PublicSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"IntegAlbOidc/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":"IntegAlbOidc/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":"IntegAlbOidc/Vpc/PublicSubnet1/EIP","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::EIP","aws:cdk:cloudformation:props":{"domain":"vpc","tags":[{"key":"Name","value":"IntegAlbOidc/Vpc/PublicSubnet1"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnEIP","version":"0.0.0"}},"NATGateway":{"id":"NATGateway","path":"IntegAlbOidc/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":"IntegAlbOidc/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":"IntegAlbOidc/Vpc/PublicSubnet2","children":{"Subnet":{"id":"Subnet","path":"IntegAlbOidc/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":"IntegAlbOidc/Vpc/PublicSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"IntegAlbOidc/Vpc/PublicSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"IntegAlbOidc/Vpc/PublicSubnet2/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"IntegAlbOidc/Vpc/PublicSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"IntegAlbOidc/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":"IntegAlbOidc/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"}},"EIP":{"id":"EIP","path":"IntegAlbOidc/Vpc/PublicSubnet2/EIP","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::EIP","aws:cdk:cloudformation:props":{"domain":"vpc","tags":[{"key":"Name","value":"IntegAlbOidc/Vpc/PublicSubnet2"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnEIP","version":"0.0.0"}},"NATGateway":{"id":"NATGateway","path":"IntegAlbOidc/Vpc/PublicSubnet2/NATGateway","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::NatGateway","aws:cdk:cloudformation:props":{"allocationId":{"Fn::GetAtt":["VpcPublicSubnet2EIP3C605A87","AllocationId"]},"subnetId":{"Ref":"VpcPublicSubnet2Subnet691E08A3"},"tags":[{"key":"Name","value":"IntegAlbOidc/Vpc/PublicSubnet2"}]}},"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":["*"]}]}},"PrivateSubnet1":{"id":"PrivateSubnet1","path":"IntegAlbOidc/Vpc/PrivateSubnet1","children":{"Subnet":{"id":"Subnet","path":"IntegAlbOidc/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":"IntegAlbOidc/Vpc/PrivateSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"IntegAlbOidc/Vpc/PrivateSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"IntegAlbOidc/Vpc/PrivateSubnet1/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"IntegAlbOidc/Vpc/PrivateSubnet1"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"IntegAlbOidc/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":"IntegAlbOidc/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":"IntegAlbOidc/Vpc/PrivateSubnet2","children":{"Subnet":{"id":"Subnet","path":"IntegAlbOidc/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":"IntegAlbOidc/Vpc/PrivateSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"0.0.0"}},"Acl":{"id":"Acl","path":"IntegAlbOidc/Vpc/PrivateSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"IntegAlbOidc/Vpc/PrivateSubnet2/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"IntegAlbOidc/Vpc/PrivateSubnet2"}],"vpcId":{"Ref":"Vpc8378EB38"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"0.0.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"IntegAlbOidc/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":"IntegAlbOidc/Vpc/PrivateSubnet2/DefaultRoute","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","natGatewayId":{"Ref":"VpcPublicSubnet2NATGateway9182C01D"},"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":"IntegAlbOidc/Vpc/IGW","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::InternetGateway","aws:cdk:cloudformation:props":{"tags":[{"key":"Name","value":"IntegAlbOidc/Vpc"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnInternetGateway","version":"0.0.0"}},"VPCGW":{"id":"VPCGW","path":"IntegAlbOidc/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"}},"RestrictDefaultSecurityGroupCustomResource":{"id":"RestrictDefaultSecurityGroupCustomResource","path":"IntegAlbOidc/Vpc/RestrictDefaultSecurityGroupCustomResource","children":{"Default":{"id":"Default","path":"IntegAlbOidc/Vpc/RestrictDefaultSecurityGroupCustomResource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.Vpc","version":"0.0.0","metadata":[{"maxAzs":"*"}]}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"IntegAlbOidc/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"Custom::VpcRestrictDefaultSGCustomResourceProvider":{"id":"Custom::VpcRestrictDefaultSGCustomResourceProvider","path":"IntegAlbOidc/Custom::VpcRestrictDefaultSGCustomResourceProvider","children":{"Staging":{"id":"Staging","path":"IntegAlbOidc/Custom::VpcRestrictDefaultSGCustomResourceProvider/Staging","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"Role":{"id":"Role","path":"IntegAlbOidc/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}},"Handler":{"id":"Handler","path":"IntegAlbOidc/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResourceProviderBase","version":"0.0.0"}},"HostedZone":{"id":"HostedZone","path":"IntegAlbOidc/HostedZone","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":[]}},"Certificate":{"id":"Certificate","path":"IntegAlbOidc/Certificate","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/Certificate/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::CertificateManager::Certificate","aws:cdk:cloudformation:props":{"domainName":"*.example.com","domainValidationOptions":[{"domainName":"*.example.com","hostedZoneId":"Z23ABC4XYZL05B"}],"tags":[{"key":"Name","value":"IntegAlbOidc/Certificate"}],"validationMethod":"DNS"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_certificatemanager.CfnCertificate","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_certificatemanager.Certificate","version":"0.0.0","metadata":[{"domainName":"*","validation":"*"}]}},"UserPool":{"id":"UserPool","path":"IntegAlbOidc/UserPool","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/UserPool/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Cognito::UserPool","aws:cdk:cloudformation:props":{"accountRecoverySetting":{"recoveryMechanisms":[{"name":"verified_phone_number","priority":1},{"name":"verified_email","priority":2}]},"adminCreateUserConfig":{"allowAdminCreateUserOnly":true},"autoVerifiedAttributes":["email"],"emailVerificationMessage":"The verification code to your new account is {####}","emailVerificationSubject":"Verify your new account","smsVerificationMessage":"The verification code to your new account is {####}","usernameAttributes":["email"],"verificationMessageTemplate":{"defaultEmailOption":"CONFIRM_WITH_CODE","emailMessage":"The verification code to your new account is {####}","emailSubject":"Verify your new account","smsMessage":"The verification code to your new account is {####}"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.CfnUserPool","version":"0.0.0"}},"Domain":{"id":"Domain","path":"IntegAlbOidc/UserPool/Domain","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/UserPool/Domain/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Cognito::UserPoolDomain","aws:cdk:cloudformation:props":{"domain":"z23abc4xyzl05b","userPoolId":{"Ref":"UserPool6BA7E5F2"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.CfnUserPoolDomain","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.UserPoolDomain","version":"0.0.0","metadata":[{"userPool":"*","cognitoDomain":{"domainPrefix":"*"}}]}},"UserPoolClient":{"id":"UserPoolClient","path":"IntegAlbOidc/UserPool/UserPoolClient","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/UserPool/UserPoolClient/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Cognito::UserPoolClient","aws:cdk:cloudformation:props":{"allowedOAuthFlows":["code"],"allowedOAuthFlowsUserPoolClient":true,"allowedOAuthScopes":["profile","phone","email","openid","aws.cognito.signin.user.admin"],"callbackUrLs":["https://*.example.com/oauth2/idpresponse"],"generateSecret":true,"supportedIdentityProviders":["COGNITO"],"userPoolId":{"Ref":"UserPool6BA7E5F2"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.CfnUserPoolClient","version":"0.0.0"}},"DescribeCognitoUserPoolClient":{"id":"DescribeCognitoUserPoolClient","path":"IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient","children":{"Provider":{"id":"Provider","path":"IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/Provider","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.SingletonFunction","version":"0.0.0","metadata":[{"uuid":"*","lambdaPurpose":"*","memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"},{"addMetadata":["*",true]},{"addMetadata":["*","*"]}]}},"Resource":{"id":"Resource","path":"IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/Resource","children":{"Default":{"id":"Default","path":"IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/Resource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*","*","*"]}},"CustomResourcePolicy":{"id":"CustomResourcePolicy","path":"IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/CustomResourcePolicy","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/UserPool/UserPoolClient/DescribeCognitoUserPoolClient/CustomResourcePolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"cognito-idp:DescribeUserPoolClient","Effect":"Allow","Resource":{"Fn::GetAtt":["UserPool6BA7E5F2","Arn"]}}],"Version":"2012-10-17"},"policyName":"UserPoolUserPoolClientDescribeCognitoUserPoolClientCustomResourcePolicyFFF2174F","roles":[{"Ref":"AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.AwsCustomResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.UserPoolClient","version":"0.0.0","metadata":[{"userPool":"*","generateSecret":true,"oAuth":{"callbackUrls":"*","flows":{"authorizationCodeGrant":true}}}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cognito.UserPool","version":"0.0.0","metadata":[{"signInAliases":{"email":true},"removalPolicy":"destroy"}]}},"LoadBalancer":{"id":"LoadBalancer","path":"IntegAlbOidc/LoadBalancer","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/LoadBalancer/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::ElasticLoadBalancingV2::LoadBalancer","aws:cdk:cloudformation:props":{"loadBalancerAttributes":[{"key":"deletion_protection.enabled","value":"false"}],"scheme":"internet-facing","securityGroups":[{"Fn::GetAtt":["LoadBalancerSecurityGroupA28D6DD7","GroupId"]}],"subnets":[{"Ref":"VpcPublicSubnet1Subnet5C2D37C4"},{"Ref":"VpcPublicSubnet2Subnet691E08A3"}],"type":"application"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_elasticloadbalancingv2.CfnLoadBalancer","version":"0.0.0"}},"SecurityGroup":{"id":"SecurityGroup","path":"IntegAlbOidc/LoadBalancer/SecurityGroup","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/LoadBalancer/SecurityGroup/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroup","aws:cdk:cloudformation:props":{"groupDescription":"Automatically created Security Group for ELB IntegAlbOidcLoadBalancer3609D530","securityGroupEgress":[{"cidrIp":"0.0.0.0/0","ipProtocol":"tcp","fromPort":443,"toPort":443,"description":"Allow to IdP endpoint"}],"securityGroupIngress":[{"cidrIp":"0.0.0.0/0","ipProtocol":"tcp","fromPort":443,"toPort":443,"description":"Allow from anyone on port 443"}],"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":"*","description":"*","allowAllOutbound":false},{"addEgressRule":[{"canInlineRule":true,"connections":"*","uniqueId":"*"},{},"*",false]},{"addIngressRule":[{"canInlineRule":true,"connections":"*","uniqueId":"*"},{},"*",false]}]}},"Listener":{"id":"Listener","path":"IntegAlbOidc/LoadBalancer/Listener","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/LoadBalancer/Listener/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::ElasticLoadBalancingV2::Listener","aws:cdk:cloudformation:props":{"certificates":[{"certificateArn":{"Ref":"Certificate4E7ABB08"}}],"defaultActions":[{"type":"authenticate-oidc","authenticateOidcConfig":{"authorizationEndpoint":{"Fn::Join":["",["https://",{"Ref":"UserPoolDomainD0EA232A"},".auth.",{"Ref":"AWS::Region"},".amazoncognito.com/oauth2/authorize"]]},"clientId":{"Ref":"UserPoolUserPoolClient40176907"},"clientSecret":{"Fn::GetAtt":["UserPoolUserPoolClientDescribeCognitoUserPoolClientA6EA22D2","UserPoolClient.ClientSecret"]},"issuer":{"Fn::Join":["",["https://cognito-idp.",{"Ref":"AWS::Region"},".amazonaws.com/",{"Ref":"UserPool6BA7E5F2"}]]},"tokenEndpoint":{"Fn::Join":["",["https://",{"Ref":"UserPoolDomainD0EA232A"},".auth.",{"Ref":"AWS::Region"},".amazoncognito.com/oauth2/token"]]},"userInfoEndpoint":{"Fn::Join":["",["https://",{"Ref":"UserPoolDomainD0EA232A"},".auth.",{"Ref":"AWS::Region"},".amazoncognito.com/oauth2/userInfo"]]}},"order":1},{"type":"fixed-response","fixedResponseConfig":{"statusCode":"200","contentType":"text/plain","messageBody":"Authenticated"},"order":2}],"loadBalancerArn":{"Ref":"LoadBalancerBE9EEC3A"},"port":443,"protocol":"HTTPS"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_elasticloadbalancingv2.CfnListener","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationListener","version":"0.0.0","metadata":["*","*"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationLoadBalancer","version":"0.0.0","metadata":["*","*"]}},"AWS679f53fac002430cb0da5b7982bd2287":{"id":"AWS679f53fac002430cb0da5b7982bd2287","path":"IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]}},"Code":{"id":"Code","path":"IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/Code","children":{"Stage":{"id":"Stage","path":"IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/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":"IntegAlbOidc/AWS679f53fac002430cb0da5b7982bd2287/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":"cde607091ceabfbfb56e643cd4a5647680cfaf19c63f4d59b3f4880df4a71c8d.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":120}},"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":[{"memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"}]}},"ARecord":{"id":"ARecord","path":"IntegAlbOidc/ARecord","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/ARecord/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Route53::RecordSet","aws:cdk:cloudformation:props":{"aliasTarget":{"hostedZoneId":{"Fn::GetAtt":["LoadBalancerBE9EEC3A","CanonicalHostedZoneID"]},"dnsName":{"Fn::Join":["",["dualstack.",{"Fn::GetAtt":["LoadBalancerBE9EEC3A","DNSName"]}]]}},"hostedZoneId":"Z23ABC4XYZL05B","name":"example.com.","type":"A"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_route53.CfnRecordSet","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_route53.ARecord","version":"0.0.0","metadata":[{"target":"*","zone":"*"},{"target":"*","zone":"*"}]}},"User":{"id":"User","path":"IntegAlbOidc/User","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/User/Resource","children":{"Provider":{"id":"Provider","path":"IntegAlbOidc/User/Resource/Provider","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.SingletonFunction","version":"0.0.0","metadata":[{"uuid":"*","lambdaPurpose":"*","memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"},{"addMetadata":["*",true]},{"addMetadata":["*","*"]}]}},"Resource":{"id":"Resource","path":"IntegAlbOidc/User/Resource/Resource","children":{"Default":{"id":"Default","path":"IntegAlbOidc/User/Resource/Resource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*","*","*"]}},"CustomResourcePolicy":{"id":"CustomResourcePolicy","path":"IntegAlbOidc/User/Resource/CustomResourcePolicy","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/User/Resource/CustomResourcePolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"cognito-idp:AdminCreateUser","Effect":"Allow","Resource":{"Fn::GetAtt":["UserPool6BA7E5F2","Arn"]}}],"Version":"2012-10-17"},"policyName":"UserCustomResourcePolicyC2EB5139","roles":[{"Ref":"AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.AwsCustomResource","version":"0.0.0"}},"SetUserPassword":{"id":"SetUserPassword","path":"IntegAlbOidc/User/SetUserPassword","children":{"Provider":{"id":"Provider","path":"IntegAlbOidc/User/SetUserPassword/Provider","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.SingletonFunction","version":"0.0.0","metadata":[{"uuid":"*","lambdaPurpose":"*","memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"},{"addMetadata":["*",true]},{"addMetadata":["*","*"]}]}},"Resource":{"id":"Resource","path":"IntegAlbOidc/User/SetUserPassword/Resource","children":{"Default":{"id":"Default","path":"IntegAlbOidc/User/SetUserPassword/Resource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*"]}},"CustomResourcePolicy":{"id":"CustomResourcePolicy","path":"IntegAlbOidc/User/SetUserPassword/CustomResourcePolicy","children":{"Resource":{"id":"Resource","path":"IntegAlbOidc/User/SetUserPassword/CustomResourcePolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"cognito-idp:AdminSetUserPassword","Effect":"Allow","Resource":{"Fn::GetAtt":["UserPool6BA7E5F2","Arn"]}}],"Version":"2012-10-17"},"policyName":"UserSetUserPasswordCustomResourcePolicy7B250C76","roles":[{"Ref":"AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2"}]}},"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":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.AwsCustomResource","version":"0.0.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"Signin":{"id":"Signin","path":"IntegAlbOidc/Signin","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegAlbOidc/Signin/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegAlbOidc/Signin/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"0.0.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegAlbOidc/Signin/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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"0.0.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]}]}},"Code":{"id":"Code","path":"IntegAlbOidc/Signin/Code","children":{"Stage":{"id":"Stage","path":"IntegAlbOidc/Signin/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegAlbOidc/Signin/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":"IntegAlbOidc/Signin/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":"5630dddea01df446e7bfb15f6c335c43060ac31110774634ff6bf3f50d0fbad5.zip"},"environment":{"variables":{"TEST_USERNAME":"test-user@example.com","TEST_PASSWORD":"TestUser@123","TEST_URL":"https://*.example.com"}},"functionName":"cdk-integ-alb-oidc-signin-handler","handler":"index.handler","memorySize":1024,"role":{"Fn::GetAtt":["SigninServiceRole24B8BB32","Arn"]},"runtime":"nodejs18.x","timeout":300}},"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":[{"functionName":"*","code":"*","handler":"*","runtime":"*","environment":"*","memorySize":"*","timeout":"*"},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]}]}},"Exports":{"id":"Exports","path":"IntegAlbOidc/Exports","children":{"Output{\"Ref\":\"Signin352C80E6\"}":{"id":"Output{\"Ref\":\"Signin352C80E6\"}","path":"IntegAlbOidc/Exports/Output{\"Ref\":\"Signin352C80E6\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}},"Output{\"Ref\":\"UserPool6BA7E5F2\"}":{"id":"Output{\"Ref\":\"UserPool6BA7E5F2\"}","path":"IntegAlbOidc/Exports/Output{\"Ref\":\"UserPool6BA7E5F2\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"BootstrapVersion":{"id":"BootstrapVersion","path":"IntegAlbOidc/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"IntegAlbOidc/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"0.0.0"}},"IntegTestAlbOidc":{"id":"IntegTestAlbOidc","path":"IntegTestAlbOidc","children":{"DefaultTest":{"id":"DefaultTest","path":"IntegTestAlbOidc/DefaultTest","children":{"Default":{"id":"Default","path":"IntegTestAlbOidc/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"IntegTestAlbOidc/DefaultTest/DeployAssert","children":{"LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd":{"id":"LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd","children":{"SdkProvider":{"id":"SdkProvider","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/SdkProvider","children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"0.0.0"}},"Default":{"id":"Default","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/Default","children":{"Default":{"id":"Default","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*","*","*"]}},"Invoke":{"id":"Invoke","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}},"AssertionResults":{"id":"AssertionResults","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/LambdaInvoke018ab0799f88e5aed4847cc0bb1ff6bd/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"0.0.0"}},"SingletonFunction1488541a7b23466481b69b4408076b81":{"id":"SingletonFunction1488541a7b23466481b69b4408076b81","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81","children":{"Staging":{"id":"Staging","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Staging","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"0.0.0"}},"Role":{"id":"Role","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Role","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}},"Handler":{"id":"Handler","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Handler","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"0.0.0"}},"AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837":{"id":"AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837","children":{"SdkProvider":{"id":"SdkProvider","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837/SdkProvider","children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"0.0.0"}},"Default":{"id":"Default","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837/Default","children":{"Default":{"id":"Default","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"0.0.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"0.0.0","metadata":["*","*","*"]}},"AssertionResults":{"id":"AssertionResults","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/AwsApiCallCognitoIdentityServiceProvideradminGetUsercd0af199640a9a7c74928b3c52106837/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"0.0.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AwsApiCall","version":"0.0.0"}},"BootstrapVersion":{"id":"BootstrapVersion","path":"IntegTestAlbOidc/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"0.0.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"IntegTestAlbOidc/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 diff --git a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-client.ts b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-client.ts index 5ae6d5d96af81..d75a796afc8a5 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-client.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-client.ts @@ -5,10 +5,11 @@ import { ClientAttributes } from './user-pool-attr'; import { IUserPoolResourceServer, ResourceServerScope } from './user-pool-resource-server'; import { IRole } from '../../aws-iam'; import { CfnApp } from '../../aws-pinpoint'; -import { IResource, Resource, Duration, Stack, SecretValue, Token } from '../../core'; +import { IResource, Resource, Duration, Stack, SecretValue, Token, FeatureFlags } from '../../core'; import { ValidationError } from '../../core/lib/errors'; import { addConstructMetadata } from '../../core/lib/metadata-resource'; -import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId } from '../../custom-resources'; +import { AwsCustomResource, AwsCustomResourcePolicy, Logging, PhysicalResourceId } from '../../custom-resources'; +import * as cxapi from '../../cx-api'; /** * Types of authentication flow @@ -544,6 +545,8 @@ export class UserPoolClient extends Resource implements IUserPoolClient { throw new ValidationError('userPoolClientSecret is available only if generateSecret is set to true.', this); } + const isEnableLogUserPoolClientSecret = FeatureFlags.of(this).isEnabled(cxapi.LOG_USER_POOL_CLIENT_SECRET_VALUE); + // Create the Custom Resource that assists in resolving the User Pool Client secret // just once, no matter how many times this method is called if (!this._userPoolClientSecret) { @@ -561,6 +564,7 @@ export class UserPoolClient extends Resource implements IUserPoolClient { ClientId: this.userPoolClientId, }, physicalResourceId: PhysicalResourceId.of(this.userPoolClientId), + logging: isEnableLogUserPoolClientSecret ? undefined : Logging.withDataHidden(), }, policy: AwsCustomResourcePolicy.fromSdkCalls({ resources: [this.userPool.userPoolArn], diff --git a/packages/aws-cdk-lib/aws-cognito/test/user-pool-client.test.ts b/packages/aws-cdk-lib/aws-cognito/test/user-pool-client.test.ts index d3bfff9a5b21b..30cd10bc08339 100644 --- a/packages/aws-cdk-lib/aws-cognito/test/user-pool-client.test.ts +++ b/packages/aws-cdk-lib/aws-cognito/test/user-pool-client.test.ts @@ -90,7 +90,7 @@ describe('User Pool Client', () => { { Ref: 'clientWithSecretD25031A8', }, - '"}}', + '"},"logApiResponseData":false}', ], ], }, @@ -114,7 +114,7 @@ describe('User Pool Client', () => { { Ref: 'clientWithSecretD25031A8', }, - '"}}', + '"},"logApiResponseData":false}', ], ], }, @@ -197,6 +197,135 @@ describe('User Pool Client', () => { expect(Template.fromStack(stack).findResources('AWS::Lambda::Function')).toEqual({}); }); + test('retrieving secret value does not log the API response data by default', () => { + const stack = new Stack(); + const pool = new UserPool(stack, 'Pool'); + + // WHEN + const clientWithSecret = new UserPoolClient(stack, 'clientWithoutSecret2', { + userPool: pool, + generateSecret: true, + }); + + expect(clientWithSecret.userPoolClientSecret).toBeDefined(); + + Template.fromStack(stack).hasResourceProperties('Custom::DescribeCognitoUserPoolClient', { + Create: { + 'Fn::Join': [ + '', + [ + '{"region":"', + { + Ref: 'AWS::Region', + }, + '","service":"CognitoIdentityServiceProvider","action":"describeUserPoolClient","parameters":{"UserPoolId":"', + { + Ref: 'PoolD3F588B8', + }, + '","ClientId":"', + { + Ref: 'clientWithoutSecret29B6DC7A0', + }, + '"},"physicalResourceId":{"id":"', + { + Ref: 'clientWithoutSecret29B6DC7A0', + }, + '"},"logApiResponseData":false}', + ], + ], + }, + Update: { + 'Fn::Join': [ + '', + [ + '{"region":"', + { + Ref: 'AWS::Region', + }, + '","service":"CognitoIdentityServiceProvider","action":"describeUserPoolClient","parameters":{"UserPoolId":"', + { + Ref: 'PoolD3F588B8', + }, + '","ClientId":"', + { + Ref: 'clientWithoutSecret29B6DC7A0', + }, + '"},"physicalResourceId":{"id":"', + { + Ref: 'clientWithoutSecret29B6DC7A0', + }, + '"},"logApiResponseData":false}', + ], + ], + }, + }); + }); + + test('retrieving secret value keeps the existing logging behaviour for the API response with feature flag set to true', () => { + const stack = new Stack(); + stack.node.setContext('@aws-cdk/cognito:logUserPoolClientSecretValue', true); + const pool = new UserPool(stack, 'Pool'); + + // WHEN + const clientWithSecret = new UserPoolClient(stack, 'clientWithoutSecret2', { + userPool: pool, + generateSecret: true, + }); + + expect(clientWithSecret.userPoolClientSecret).toBeDefined(); + + Template.fromStack(stack).hasResourceProperties('Custom::DescribeCognitoUserPoolClient', { + Create: { + 'Fn::Join': [ + '', + [ + '{"region":"', + { + Ref: 'AWS::Region', + }, + '","service":"CognitoIdentityServiceProvider","action":"describeUserPoolClient","parameters":{"UserPoolId":"', + { + Ref: 'PoolD3F588B8', + }, + '","ClientId":"', + { + Ref: 'clientWithoutSecret29B6DC7A0', + }, + '"},"physicalResourceId":{"id":"', + { + Ref: 'clientWithoutSecret29B6DC7A0', + }, + '"}}', + ], + ], + }, + Update: { + 'Fn::Join': [ + '', + [ + '{"region":"', + { + Ref: 'AWS::Region', + }, + '","service":"CognitoIdentityServiceProvider","action":"describeUserPoolClient","parameters":{"UserPoolId":"', + { + Ref: 'PoolD3F588B8', + }, + '","ClientId":"', + { + Ref: 'clientWithoutSecret29B6DC7A0', + }, + '"},"physicalResourceId":{"id":"', + { + Ref: 'clientWithoutSecret29B6DC7A0', + }, + '"}}', + ], + ], + }, + }); + }); + test('lacking secret configuration implicitly disables it', () => { // GIVEN const stack = new Stack(); diff --git a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md index 90ff8cdfe8d10..91976238d6465 100644 --- a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md +++ b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md @@ -94,6 +94,7 @@ Flags come in three types: | [@aws-cdk/pipelines:reduceStageRoleTrustScope](#aws-cdkpipelinesreducestageroletrustscope) | Remove the root account principal from Stage addActions trust policy | 2.184.0 | (default) | | [@aws-cdk/aws-events:requireEventBusPolicySid](#aws-cdkaws-eventsrequireeventbuspolicysid) | When enabled, grantPutEventsTo() will use resource policies with Statement IDs for service principals. | 2.186.0 | (fix) | | [@aws-cdk/aws-dynamodb:retainTableReplica](#aws-cdkaws-dynamodbretaintablereplica) | When enabled, table replica will be default to the removal policy of source table unless specified otherwise. | V2NEXT | (fix) | +| [@aws-cdk/cognito:logUserPoolClientSecretValue](#aws-cdkcognitologuserpoolclientsecretvalue) | When enabled, the value of the user pool client secret will be logged in the custom resource lambda function logs. | V2NEXT | (default) | @@ -1783,4 +1784,23 @@ When enabled, table replica will be default to the removal policy of source tabl | V2NEXT | `false` | `true` | +### @aws-cdk/cognito:logUserPoolClientSecretValue + +*When disabled, the value of the user pool client secret will not be logged in the custom resource lambda function logs.* (default) + +When this feature flag is enabled, the SDK API call response to desribe user pool client values will be logged in the custom +resource lambda function logs. + +When this feature flag is disabled, the SDK API call response to describe user pool client values will not be logged in the custom +resource lambda function logs. + + +| Since | Default | Recommended | +| ----- | ----- | ----- | +| (not in v1) | | | +| V2NEXT | `false` | `false` | + +**Compatibility with old behavior:** Enable the feature flag to keep the old behavior and log the client secret values + + diff --git a/packages/aws-cdk-lib/cx-api/lib/features.ts b/packages/aws-cdk-lib/cx-api/lib/features.ts index 5f3ec2ea27d10..e4fa6e6561e92 100644 --- a/packages/aws-cdk-lib/cx-api/lib/features.ts +++ b/packages/aws-cdk-lib/cx-api/lib/features.ts @@ -128,6 +128,7 @@ export const SET_UNIQUE_REPLICATION_ROLE_NAME = '@aws-cdk/aws-s3:setUniqueReplic export const PIPELINE_REDUCE_STAGE_ROLE_TRUST_SCOPE = '@aws-cdk/pipelines:reduceStageRoleTrustScope'; export const EVENTBUS_POLICY_SID_REQUIRED = '@aws-cdk/aws-events:requireEventBusPolicySid'; export const DYNAMODB_TABLE_RETAIN_TABLE_REPLICA = '@aws-cdk/aws-dynamodb:retainTableReplica'; +export const LOG_USER_POOL_CLIENT_SECRET_VALUE ='@aws-cdk/cognito:logUserPoolClientSecretValue'; export const FLAGS: Record = { ////////////////////////////////////////////////////////////////////// @@ -1466,6 +1467,23 @@ export const FLAGS: Record = { introducedIn: { v2: 'V2NEXT' }, recommendedValue: true, }, + + ////////////////////////////////////////////////////////////////////// + [LOG_USER_POOL_CLIENT_SECRET_VALUE]: { + type: FlagType.ApiDefault, + summary: 'When disabled, the value of the user pool client secret will not be logged in the custom resource lambda function logs.', + detailsMd: ` + When this feature flag is enabled, the SDK API call response to desribe user pool client values will be logged in the custom + resource lambda function logs. + + When this feature flag is disabled, the SDK API call response to describe user pool client values will not be logged in the custom + resource lambda function logs. + `, + introducedIn: { v2: 'V2NEXT' }, + defaults: { v2: false }, + recommendedValue: false, + compatibilityWithOldBehaviorMd: 'Enable the feature flag to keep the old behavior and log the client secret values', + }, }; const CURRENT_MV = 'v2'; diff --git a/packages/aws-cdk-lib/cx-api/test/features.test.ts b/packages/aws-cdk-lib/cx-api/test/features.test.ts index 0bd9d45c8c069..9402778c1f353 100644 --- a/packages/aws-cdk-lib/cx-api/test/features.test.ts +++ b/packages/aws-cdk-lib/cx-api/test/features.test.ts @@ -42,6 +42,7 @@ test('feature flag defaults may not be changed anymore', () => { [feats.PIPELINE_REDUCE_STAGE_ROLE_TRUST_SCOPE]: true, // Add new disabling feature flags below this line [feats.ASPECT_STABILIZATION]: true, + [feats.LOG_USER_POOL_CLIENT_SECRET_VALUE]: false, }); }); From 3c22d161684b0ae62a4891c2d9dd85db56ea7a8d Mon Sep 17 00:00:00 2001 From: AWS CDK Team Date: Mon, 31 Mar 2025 17:59:33 +0000 Subject: [PATCH 10/10] chore(release): 2.187.0 --- CHANGELOG.v2.alpha.md | 10 ++++++++++ CHANGELOG.v2.md | 21 ++++++++++++++++++++ packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md | 8 ++++---- packages/aws-cdk-lib/cx-api/lib/features.ts | 4 ++-- version.v2.json | 4 ++-- 5 files changed, 39 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.v2.alpha.md b/CHANGELOG.v2.alpha.md index 22d71ecb7eceb..bb71087061c62 100644 --- a/CHANGELOG.v2.alpha.md +++ b/CHANGELOG.v2.alpha.md @@ -2,6 +2,16 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.187.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.186.0-alpha.0...v2.187.0-alpha.0) (2025-03-31) + + +### Features + +* **apprunner:** throw ValidationError instead of untyped errors ([#33914](https://github.com/aws/aws-cdk/issues/33914)) ([38f89af](https://github.com/aws/aws-cdk/commit/38f89afe2ffdf67b0918e38f861166bdb0f8738f)) +* **ec2:** adding `placementGroup` to `LaunchTemplateProps` and `LaunchTemplate` ([#33726](https://github.com/aws/aws-cdk/issues/33726)) ([e5f71db](https://github.com/aws/aws-cdk/commit/e5f71db53ce985172e565eb9da5692d77ab7b268)), closes [#33721](https://github.com/aws/aws-cdk/issues/33721) +* **ec2:** support the new `SupportedRegions` property for `AWS::EC2::VPCEndpointService` ([#33959](https://github.com/aws/aws-cdk/issues/33959)) ([0c77cb6](https://github.com/aws/aws-cdk/commit/0c77cb627e1e7e729205624a9603331f5442af8e)) +* **iot:** backfill enum values in iot module ([#33969](https://github.com/aws/aws-cdk/issues/33969)) ([2a8a8a3](https://github.com/aws/aws-cdk/commit/2a8a8a36ed872f7f3de4b24fd7d9c874a3da9dbf)) + ## [2.186.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.185.0-alpha.0...v2.186.0-alpha.0) (2025-03-26) diff --git a/CHANGELOG.v2.md b/CHANGELOG.v2.md index 4bcf4091f68e6..e694312f3f7b6 100644 --- a/CHANGELOG.v2.md +++ b/CHANGELOG.v2.md @@ -2,6 +2,27 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.187.0](https://github.com/aws/aws-cdk/compare/v2.186.0...v2.187.0) (2025-03-31) + + +### Features + +* **cx-api:** declare support for CDK_TOOLKIT_VERSION env var ([#33963](https://github.com/aws/aws-cdk/issues/33963)) ([22dc717](https://github.com/aws/aws-cdk/commit/22dc717f8884f18c8afbc5367f40f0e733ce7a6e)) +* update L1 CloudFormation resource definitions ([#33954](https://github.com/aws/aws-cdk/issues/33954)) ([7c15988](https://github.com/aws/aws-cdk/commit/7c1598818ac4802f98b5bc583bdb38d28a971362)) +* **ecr:** lookup existing repository ([#33662](https://github.com/aws/aws-cdk/issues/33662)) ([5fff3d6](https://github.com/aws/aws-cdk/commit/5fff3d6c090a5c381af5a02be4bb588390ea0ee4)), closes [#8461](https://github.com/aws/aws-cdk/issues/8461) +* **eks:** `Nodegroup` support `nodeRepairConfig` ([#32626](https://github.com/aws/aws-cdk/issues/32626)) ([b9cb47c](https://github.com/aws/aws-cdk/commit/b9cb47c4dbaacd839ddfdc38febdc58260d20c57)), closes [#32562](https://github.com/aws/aws-cdk/issues/32562) +* **kinesisfirehose:** throw `ValidationErrors` instead of untyped Errors ([#33912](https://github.com/aws/aws-cdk/issues/33912)) ([8b23b5d](https://github.com/aws/aws-cdk/commit/8b23b5db3668c5c5b845e06397bf0001a55f5d0e)), closes [#32569](https://github.com/aws/aws-cdk/issues/32569) +* **lambda-event-sources:** starting position timestamp for kafka ([#31439](https://github.com/aws/aws-cdk/issues/31439)) ([5077d8a](https://github.com/aws/aws-cdk/commit/5077d8abe0a776c6b3e762c2d1f38f0da2003b48)), closes [#31808](https://github.com/aws/aws-cdk/issues/31808) +* show friendly display names for assets ([#33844](https://github.com/aws/aws-cdk/issues/33844)) ([4e958d4](https://github.com/aws/aws-cdk/commit/4e958d41f2825fd9c20ae27643aefd4c11d7aa8e)) + + +### Bug Fixes + +* **cognito:** fix logging behaviour for user pool client custom resource ([#33983](https://github.com/aws/aws-cdk/issues/33983)) ([d02e64a](https://github.com/aws/aws-cdk/commit/d02e64aac18a72195ddcdb973defea7f32382c33)) +* **core:** asset names for nested stacks contain Tokens ([#33966](https://github.com/aws/aws-cdk/issues/33966)) ([85fc87f](https://github.com/aws/aws-cdk/commit/85fc87f0773ca1e68b395dcc5aae6103b239c38d)) +* **dynamodb:** table v1 retain replica table if table is retain ([#33953](https://github.com/aws/aws-cdk/issues/33953)) ([21d0a5c](https://github.com/aws/aws-cdk/commit/21d0a5ce687e88250a08492e7c5f43cc30da50cf)), closes [#33952](https://github.com/aws/aws-cdk/issues/33952) +* **eks:** looked up vpc causing premature validation errors for private subnets ([#33786](https://github.com/aws/aws-cdk/issues/33786)) ([73744b4](https://github.com/aws/aws-cdk/commit/73744b452c2dd6809fddb123fa2ef6087ed18287)), closes [#22025](https://github.com/aws/aws-cdk/issues/22025) [/github.com/aws/aws-cdk/blob/main/packages/aws-cdk-lib/aws-ec2/lib/vpc.ts#L2705](https://github.com/aws//github.com/aws/aws-cdk/blob/main/packages/aws-cdk-lib/aws-ec2/lib/vpc.ts/issues/L2705) + ## [2.186.0](https://github.com/aws/aws-cdk/compare/v2.185.0...v2.186.0) (2025-03-26) diff --git a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md index 91976238d6465..bd94ffaada95c 100644 --- a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md +++ b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md @@ -93,8 +93,8 @@ Flags come in three types: | [@aws-cdk/aws-s3:setUniqueReplicationRoleName](#aws-cdkaws-s3setuniquereplicationrolename) | When enabled, CDK will automatically generate a unique role name that is used for s3 object replication. | 2.182.0 | (fix) | | [@aws-cdk/pipelines:reduceStageRoleTrustScope](#aws-cdkpipelinesreducestageroletrustscope) | Remove the root account principal from Stage addActions trust policy | 2.184.0 | (default) | | [@aws-cdk/aws-events:requireEventBusPolicySid](#aws-cdkaws-eventsrequireeventbuspolicysid) | When enabled, grantPutEventsTo() will use resource policies with Statement IDs for service principals. | 2.186.0 | (fix) | -| [@aws-cdk/aws-dynamodb:retainTableReplica](#aws-cdkaws-dynamodbretaintablereplica) | When enabled, table replica will be default to the removal policy of source table unless specified otherwise. | V2NEXT | (fix) | -| [@aws-cdk/cognito:logUserPoolClientSecretValue](#aws-cdkcognitologuserpoolclientsecretvalue) | When enabled, the value of the user pool client secret will be logged in the custom resource lambda function logs. | V2NEXT | (default) | +| [@aws-cdk/aws-dynamodb:retainTableReplica](#aws-cdkaws-dynamodbretaintablereplica) | When enabled, table replica will be default to the removal policy of source table unless specified otherwise. | 2.187.0 | (fix) | +| [@aws-cdk/cognito:logUserPoolClientSecretValue](#aws-cdkcognitologuserpoolclientsecretvalue) | When disabled, the value of the user pool client secret will not be logged in the custom resource lambda function logs. | 2.187.0 | (default) | @@ -1781,7 +1781,7 @@ When enabled, table replica will be default to the removal policy of source tabl | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | -| V2NEXT | `false` | `true` | +| 2.187.0 | `false` | `true` | ### @aws-cdk/cognito:logUserPoolClientSecretValue @@ -1798,7 +1798,7 @@ resource lambda function logs. | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | -| V2NEXT | `false` | `false` | +| 2.187.0 | `false` | `false` | **Compatibility with old behavior:** Enable the feature flag to keep the old behavior and log the client secret values diff --git a/packages/aws-cdk-lib/cx-api/lib/features.ts b/packages/aws-cdk-lib/cx-api/lib/features.ts index e4fa6e6561e92..62628504acacb 100644 --- a/packages/aws-cdk-lib/cx-api/lib/features.ts +++ b/packages/aws-cdk-lib/cx-api/lib/features.ts @@ -1464,7 +1464,7 @@ export const FLAGS: Record = { Currently, table replica will always be deleted when stack deletes regardless of source table's deletion policy. When enabled, table replica will be default to the removal policy of source table unless specified otherwise. `, - introducedIn: { v2: 'V2NEXT' }, + introducedIn: { v2: '2.187.0' }, recommendedValue: true, }, @@ -1479,7 +1479,7 @@ export const FLAGS: Record = { When this feature flag is disabled, the SDK API call response to describe user pool client values will not be logged in the custom resource lambda function logs. `, - introducedIn: { v2: 'V2NEXT' }, + introducedIn: { v2: '2.187.0' }, defaults: { v2: false }, recommendedValue: false, compatibilityWithOldBehaviorMd: 'Enable the feature flag to keep the old behavior and log the client secret values', diff --git a/version.v2.json b/version.v2.json index f7890adef21c7..f1aab833e1bab 100644 --- a/version.v2.json +++ b/version.v2.json @@ -1,4 +1,4 @@ { - "version": "2.186.0", - "alphaVersion": "2.186.0-alpha.0" + "version": "2.187.0", + "alphaVersion": "2.187.0-alpha.0" } \ No newline at end of file