diff --git a/CHANGELOG.v2.alpha.md b/CHANGELOG.v2.alpha.md index 90ebdaaca2176..c72c70ed2945e 100644 --- a/CHANGELOG.v2.alpha.md +++ b/CHANGELOG.v2.alpha.md @@ -2,6 +2,13 @@ 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.129.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.128.0-alpha.0...v2.129.0-alpha.0) (2024-02-21) + + +### Bug Fixes + +* **appconfig:** scope generated alarm role policy to '*' for composite alarm support ([#29171](https://github.com/aws/aws-cdk/issues/29171)) ([c17879d](https://github.com/aws/aws-cdk/commit/c17879dd8dab526695e69c6faf8345292634ba24)) + ## [2.128.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.127.0-alpha.0...v2.128.0-alpha.0) (2024-02-14) diff --git a/CHANGELOG.v2.md b/CHANGELOG.v2.md index 365cffa9569fc..9e9d37195cb22 100644 --- a/CHANGELOG.v2.md +++ b/CHANGELOG.v2.md @@ -2,6 +2,22 @@ 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.129.0](https://github.com/aws/aws-cdk/compare/v2.128.0...v2.129.0) (2024-02-21) + + +### Features + +* update L1 CloudFormation resource definitions ([#29191](https://github.com/aws/aws-cdk/issues/29191)) ([c579e3c](https://github.com/aws/aws-cdk/commit/c579e3cdfa425fe4e58fc20a653d32d32f943ca9)) +* **applicationautoscaling:** timezone for ScheduledAction ([#29116](https://github.com/aws/aws-cdk/issues/29116)) ([8694125](https://github.com/aws/aws-cdk/commit/869412535f564d5b36cf7cc5356aa38a381d02f1)), closes [#22645](https://github.com/aws/aws-cdk/issues/22645) [#27754](https://github.com/aws/aws-cdk/issues/27754) +* **cloudfront-origin:** adding FunctionUrlOrigin ([#29101](https://github.com/aws/aws-cdk/issues/29101)) ([2b0ed53](https://github.com/aws/aws-cdk/commit/2b0ed53bfe85a59e9334883a667c88fb9e3f5bc0)) +* **ecs:** credentialSpecs in ContainerDefinitionOptions ([#29085](https://github.com/aws/aws-cdk/issues/29085)) ([e92dbec](https://github.com/aws/aws-cdk/commit/e92dbec0e5fb51bad6037d01d6131c9ab4ce3f55)) +* **events-targets:** `launchType` property for ECS task ([#29069](https://github.com/aws/aws-cdk/issues/29069)) ([b4daf84](https://github.com/aws/aws-cdk/commit/b4daf84cf8a90ef38e3a2328df6271bdaf19de01)), closes [#28990](https://github.com/aws/aws-cdk/issues/28990) +* **lambda:** Add `Ipv6AllowedforDualStack` support for Lambda function ([#28928](https://github.com/aws/aws-cdk/issues/28928)) ([90caad9](https://github.com/aws/aws-cdk/commit/90caad953147c2c15022898f40b49a8d44997f6e)) +* **lambda:** adding .net 8 (dotnet8) lambda runtime support ([#29178](https://github.com/aws/aws-cdk/issues/29178)) ([74335f6](https://github.com/aws/aws-cdk/commit/74335f63b7be81ede07e1ae2e24e7f59ed44beef)) +* **rds:** support Aurora MySQL 3.05.2 ([#29166](https://github.com/aws/aws-cdk/issues/29166)) ([da0b82c](https://github.com/aws/aws-cdk/commit/da0b82c21e1ddd3c301db8f98e39767e07ff32fc)) +* **sns:** enforce ssl with topic policy ([#29144](https://github.com/aws/aws-cdk/issues/29144)) ([a75f447](https://github.com/aws/aws-cdk/commit/a75f447d6dc9ad8b1b00a7faebdd8aadc3d25e28)), closes [#29142](https://github.com/aws/aws-cdk/issues/29142) +* **synthetics:** latest canary runtimes for NodeJS, Python ([#29132](https://github.com/aws/aws-cdk/issues/29132)) ([3c122a4](https://github.com/aws/aws-cdk/commit/3c122a435c9d8ee3012859c05a5acf4864e9030a)), closes [#29135](https://github.com/aws/aws-cdk/issues/29135) + ## [2.128.0](https://github.com/aws/aws-cdk/compare/v2.127.0...v2.128.0) (2024-02-14) diff --git a/package.json b/package.json index fbd0aee37880c..210adc01dc93a 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@types/prettier": "2.6.0", "@yarnpkg/lockfile": "^1.1.0", "aws-sdk-js-codemod": "^0.28.2", - "cdk-generate-synthetic-examples": "^0.1.303", + "cdk-generate-synthetic-examples": "^0.1.304", "conventional-changelog-cli": "^2.2.2", "fs-extra": "^9.1.0", "graceful-fs": "^4.2.11", @@ -28,7 +28,7 @@ "jsii-diff": "1.94.0", "jsii-pacmak": "1.94.0", "jsii-reflect": "1.94.0", - "jsii-rosetta": "~5.3.15", + "jsii-rosetta": "~5.3.18", "lerna": "^7.4.2", "nx": "^16.10.0", "patch-package": "^6.5.1", @@ -159,6 +159,8 @@ "aws-cdk-lib/ignore/**", "aws-cdk-lib/jsonschema", "aws-cdk-lib/jsonschema/**", + "aws-cdk-lib/mime-types", + "aws-cdk-lib/mime-types/**", "aws-cdk-lib/minimatch", "aws-cdk-lib/minimatch/**", "aws-cdk-lib/punycode", diff --git a/packages/@aws-cdk-testing/cli-integ/package.json b/packages/@aws-cdk-testing/cli-integ/package.json index 27ba6d78100a2..389cb0c85a313 100644 --- a/packages/@aws-cdk-testing/cli-integ/package.json +++ b/packages/@aws-cdk-testing/cli-integ/package.json @@ -39,7 +39,7 @@ }, "dependencies": { "@octokit/rest": "^18.12.0", - "aws-sdk": "^2.1557.0", + "aws-sdk": "^2.1562.0", "axios": "^1.6.7", "fs-extra": "^9.1.0", "glob": "^7.2.3", diff --git a/packages/@aws-cdk-testing/framework-integ/package.json b/packages/@aws-cdk-testing/framework-integ/package.json index 484fe220b916e..d818f5081c206 100644 --- a/packages/@aws-cdk-testing/framework-integ/package.json +++ b/packages/@aws-cdk-testing/framework-integ/package.json @@ -41,10 +41,10 @@ "@aws-cdk/integ-tests-alpha": "0.0.0", "@aws-cdk/lambda-layer-kubectl-v24": "^2.0.242", "aws-cdk-lib": "0.0.0", - "aws-sdk": "^2.1557.0", + "aws-sdk": "^2.1562.0", "aws-sdk-mock": "5.6.0", - "cdk8s": "2.68.37", - "cdk8s-plus-27": "2.7.77", + "cdk8s": "2.68.40", + "cdk8s-plus-27": "2.7.80", "constructs": "^10.0.0" }, "repository": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/config.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/config.json new file mode 100644 index 0000000000000..5c2ecbd6e6cf7 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/config.json @@ -0,0 +1,3 @@ +{ + "content": "This is the configuration content" +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/appconfigapplicationDefaultTestDeployAssertD6537C40.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/appconfigapplicationDefaultTestDeployAssertD6537C40.assets.json new file mode 100644 index 0000000000000..2de973e7d532a --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/appconfigapplicationDefaultTestDeployAssertD6537C40.assets.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "appconfigapplicationDefaultTestDeployAssertD6537C40.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-appconfig/test/integ.application.js.snapshot/appconfigapplicationDefaultTestDeployAssertD6537C40.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/appconfigapplicationDefaultTestDeployAssertD6537C40.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/appconfigapplicationDefaultTestDeployAssertD6537C40.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-appconfig/test/integ.application.js.snapshot/aws-appconfig-application.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/aws-appconfig-application.assets.json new file mode 100644 index 0000000000000..589232ce06967 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/aws-appconfig-application.assets.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.0", + "files": { + "e9c7efc5ccbc9637d562dcbcefc3713d4e81f48aff6a62cef50c80d78500d2ed": { + "source": { + "path": "aws-appconfig-application.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "e9c7efc5ccbc9637d562dcbcefc3713d4e81f48aff6a62cef50c80d78500d2ed.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-appconfig/test/integ.application.js.snapshot/aws-appconfig-application.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/aws-appconfig-application.template.json new file mode 100644 index 0000000000000..12c5a040e6bef --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/aws-appconfig-application.template.json @@ -0,0 +1,87 @@ +{ + "Resources": { + "MyAppConfigB4B63E75": { + "Type": "AWS::AppConfig::Application", + "Properties": { + "Description": "This is my application for testing", + "Name": "MySampleApplication" + } + }, + "MyTaskDefTaskRole727F9D3B": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "ecs-tasks.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "MyTaskDef01F0D39B": { + "Type": "AWS::ECS::TaskDefinition", + "Properties": { + "ContainerDefinitions": [ + { + "Essential": true, + "Image": "public.ecr.aws/aws-appconfig/aws-appconfig-agent:latest", + "Name": "AppConfigAgentContainer" + } + ], + "Cpu": "256", + "Family": "awsappconfigapplicationMyTaskDef7372410D", + "Memory": "512", + "NetworkMode": "awsvpc", + "RequiresCompatibilities": [ + "FARGATE" + ], + "TaskRoleArn": { + "Fn::GetAtt": [ + "MyTaskDefTaskRole727F9D3B", + "Arn" + ] + } + } + } + }, + "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-appconfig/test/integ.application.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/cdk.out new file mode 100644 index 0000000000000..1f0068d32659a --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/integ.json new file mode 100644 index 0000000000000..f4b1471d0b104 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "36.0.0", + "testCases": { + "appconfig-application/DefaultTest": { + "stacks": [ + "aws-appconfig-application" + ], + "assertionStack": "appconfig-application/DefaultTest/DeployAssert", + "assertionStackName": "appconfigapplicationDefaultTestDeployAssertD6537C40" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/manifest.json new file mode 100644 index 0000000000000..a02b53e19b078 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/manifest.json @@ -0,0 +1,125 @@ +{ + "version": "36.0.0", + "artifacts": { + "aws-appconfig-application.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "aws-appconfig-application.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "aws-appconfig-application": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "aws-appconfig-application.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}/e9c7efc5ccbc9637d562dcbcefc3713d4e81f48aff6a62cef50c80d78500d2ed.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "aws-appconfig-application.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": [ + "aws-appconfig-application.assets" + ], + "metadata": { + "/aws-appconfig-application/MyAppConfig/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyAppConfigB4B63E75" + } + ], + "/aws-appconfig-application/MyTaskDef/TaskRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyTaskDefTaskRole727F9D3B" + } + ], + "/aws-appconfig-application/MyTaskDef/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyTaskDef01F0D39B" + } + ], + "/aws-appconfig-application/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-appconfig-application/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "aws-appconfig-application" + }, + "appconfigapplicationDefaultTestDeployAssertD6537C40.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "appconfigapplicationDefaultTestDeployAssertD6537C40.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "appconfigapplicationDefaultTestDeployAssertD6537C40": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "appconfigapplicationDefaultTestDeployAssertD6537C40.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": [ + "appconfigapplicationDefaultTestDeployAssertD6537C40.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": [ + "appconfigapplicationDefaultTestDeployAssertD6537C40.assets" + ], + "metadata": { + "/appconfig-application/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/appconfig-application/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "appconfig-application/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/tree.json new file mode 100644 index 0000000000000..9a82fceaea7ac --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.js.snapshot/tree.json @@ -0,0 +1,220 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "aws-appconfig-application": { + "id": "aws-appconfig-application", + "path": "aws-appconfig-application", + "children": { + "MyAppConfig": { + "id": "MyAppConfig", + "path": "aws-appconfig-application/MyAppConfig", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-application/MyAppConfig/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Application", + "aws:cdk:cloudformation:props": { + "description": "This is my application for testing", + "name": "MySampleApplication" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnApplication", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.Application", + "version": "0.0.0" + } + }, + "MyTaskDef": { + "id": "MyTaskDef", + "path": "aws-appconfig-application/MyTaskDef", + "children": { + "TaskRole": { + "id": "TaskRole", + "path": "aws-appconfig-application/MyTaskDef/TaskRole", + "children": { + "ImportTaskRole": { + "id": "ImportTaskRole", + "path": "aws-appconfig-application/MyTaskDef/TaskRole/ImportTaskRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-application/MyTaskDef/TaskRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "ecs-tasks.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-application/MyTaskDef/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::ECS::TaskDefinition", + "aws:cdk:cloudformation:props": { + "containerDefinitions": [ + { + "essential": true, + "image": "public.ecr.aws/aws-appconfig/aws-appconfig-agent:latest", + "name": "AppConfigAgentContainer" + } + ], + "cpu": "256", + "family": "awsappconfigapplicationMyTaskDef7372410D", + "memory": "512", + "networkMode": "awsvpc", + "requiresCompatibilities": [ + "FARGATE" + ], + "taskRoleArn": { + "Fn::GetAtt": [ + "MyTaskDefTaskRole727F9D3B", + "Arn" + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ecs.CfnTaskDefinition", + "version": "0.0.0" + } + }, + "AppConfigAgentContainer": { + "id": "AppConfigAgentContainer", + "path": "aws-appconfig-application/MyTaskDef/AppConfigAgentContainer", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ecs.ContainerDefinition", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ecs.FargateTaskDefinition", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-appconfig-application/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-appconfig-application/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "appconfig-application": { + "id": "appconfig-application", + "path": "appconfig-application", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "appconfig-application/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "appconfig-application/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "appconfig-application/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "appconfig-application/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "appconfig-application/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 diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.ts new file mode 100644 index 0000000000000..887fd2b12a1c4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.application.ts @@ -0,0 +1,24 @@ +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import { Stack, App } from 'aws-cdk-lib'; +import { FargateTaskDefinition } from 'aws-cdk-lib/aws-ecs'; +import { Application } from 'aws-cdk-lib/aws-appconfig'; + +const app = new App(); + +const stack = new Stack(app, 'aws-appconfig-application'); + +new Application(stack, 'MyAppConfig', { + description: 'This is my application for testing', + applicationName: 'MySampleApplication', +}); + +const taskDef = new FargateTaskDefinition(stack, 'MyTaskDef'); +Application.addAgentToEcs(taskDef); + +/* resource deployment alone is sufficient because we already have the + corresponding resource handler tests to assert that resources can be + used after created */ + +new IntegTest(app, 'appconfig-application', { + testCases: [stack], +}); \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/appconfigconfigurationDefaultTestDeployAssert6752CD38.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/appconfigconfigurationDefaultTestDeployAssert6752CD38.assets.json new file mode 100644 index 0000000000000..10ca0ca02c75f --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/appconfigconfigurationDefaultTestDeployAssert6752CD38.assets.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "appconfigconfigurationDefaultTestDeployAssert6752CD38.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-appconfig/test/integ.configuration.js.snapshot/appconfigconfigurationDefaultTestDeployAssert6752CD38.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/appconfigconfigurationDefaultTestDeployAssert6752CD38.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/appconfigconfigurationDefaultTestDeployAssert6752CD38.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-appconfig/test/integ.configuration.js.snapshot/asset.3322b7049fb0ed2b7cbb644a2ada8d1116ff80c32dca89e6ada846b5de26f961.zip b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/asset.3322b7049fb0ed2b7cbb644a2ada8d1116ff80c32dca89e6ada846b5de26f961.zip new file mode 100644 index 0000000000000..f624b92c63849 Binary files /dev/null and b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/asset.3322b7049fb0ed2b7cbb644a2ada8d1116ff80c32dca89e6ada846b5de26f961.zip differ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/asset.9b7590a121e3b39547297cbf009beb8a27e1cf9daaa760cb82c42bd530d5ef8f/hello/world/codepipeline.txt b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/asset.9b7590a121e3b39547297cbf009beb8a27e1cf9daaa760cb82c42bd530d5ef8f/hello/world/codepipeline.txt new file mode 100644 index 0000000000000..167d0deaf2dcc --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/asset.9b7590a121e3b39547297cbf009beb8a27e1cf9daaa760cb82c42bd530d5ef8f/hello/world/codepipeline.txt @@ -0,0 +1 @@ +This is the content stored in code pipeline \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/asset.9f148cad39f325035dfec935c0a2e907135f10cb64e7c4ef78c2320fc9ad24ae/hello/world/file.txt b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/asset.9f148cad39f325035dfec935c0a2e907135f10cb64e7c4ef78c2320fc9ad24ae/hello/world/file.txt new file mode 100644 index 0000000000000..9c4249ba50142 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/asset.9f148cad39f325035dfec935c0a2e907135f10cb64e7c4ef78c2320fc9ad24ae/hello/world/file.txt @@ -0,0 +1 @@ +This is the content stored in S3 \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/asset.e976a796f036a5efbf44b99e44cfb5a961df08d8dbf7cd37e60bf216fb982a00/index.py b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/asset.e976a796f036a5efbf44b99e44cfb5a961df08d8dbf7cd37e60bf216fb982a00/index.py new file mode 100644 index 0000000000000..4015927d9c843 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/asset.e976a796f036a5efbf44b99e44cfb5a961df08d8dbf7cd37e60bf216fb982a00/index.py @@ -0,0 +1,320 @@ +import contextlib +import json +import logging +import os +import shutil +import subprocess +import tempfile +from urllib.request import Request, urlopen +from uuid import uuid4 +from zipfile import ZipFile + +import boto3 + +logger = logging.getLogger() +logger.setLevel(logging.INFO) + +cloudfront = boto3.client('cloudfront') +s3 = boto3.client('s3') + +CFN_SUCCESS = "SUCCESS" +CFN_FAILED = "FAILED" +ENV_KEY_MOUNT_PATH = "MOUNT_PATH" +ENV_KEY_SKIP_CLEANUP = "SKIP_CLEANUP" + +AWS_CLI_CONFIG_FILE = "/tmp/aws_cli_config" +CUSTOM_RESOURCE_OWNER_TAG = "aws-cdk:cr-owned" + +os.putenv('AWS_CONFIG_FILE', AWS_CLI_CONFIG_FILE) + +def handler(event, context): + + def cfn_error(message=None): + logger.error("| cfn_error: %s" % message) + cfn_send(event, context, CFN_FAILED, reason=message, physicalResourceId=event.get('PhysicalResourceId', None)) + + + try: + # We are not logging ResponseURL as this is a pre-signed S3 URL, and could be used to tamper + # with the response CloudFormation sees from this Custom Resource execution. + logger.info({ key:value for (key, value) in event.items() if key != 'ResponseURL'}) + + # cloudformation request type (create/update/delete) + request_type = event['RequestType'] + + # extract resource properties + props = event['ResourceProperties'] + old_props = event.get('OldResourceProperties', {}) + physical_id = event.get('PhysicalResourceId', None) + + try: + source_bucket_names = props['SourceBucketNames'] + source_object_keys = props['SourceObjectKeys'] + source_markers = props.get('SourceMarkers', None) + dest_bucket_name = props['DestinationBucketName'] + dest_bucket_prefix = props.get('DestinationBucketKeyPrefix', '') + extract = props.get('Extract', 'true') == 'true' + retain_on_delete = props.get('RetainOnDelete', "true") == "true" + distribution_id = props.get('DistributionId', '') + user_metadata = props.get('UserMetadata', {}) + system_metadata = props.get('SystemMetadata', {}) + prune = props.get('Prune', 'true').lower() == 'true' + exclude = props.get('Exclude', []) + include = props.get('Include', []) + sign_content = props.get('SignContent', 'false').lower() == 'true' + + # backwards compatibility - if "SourceMarkers" is not specified, + # assume all sources have an empty market map + if source_markers is None: + source_markers = [{} for i in range(len(source_bucket_names))] + + default_distribution_path = dest_bucket_prefix + if not default_distribution_path.endswith("/"): + default_distribution_path += "/" + if not default_distribution_path.startswith("/"): + default_distribution_path = "/" + default_distribution_path + default_distribution_path += "*" + + distribution_paths = props.get('DistributionPaths', [default_distribution_path]) + except KeyError as e: + cfn_error("missing request resource property %s. props: %s" % (str(e), props)) + return + + # configure aws cli options after resetting back to the defaults for each request + if os.path.exists(AWS_CLI_CONFIG_FILE): + os.remove(AWS_CLI_CONFIG_FILE) + if sign_content: + aws_command("configure", "set", "default.s3.payload_signing_enabled", "true") + + # treat "/" as if no prefix was specified + if dest_bucket_prefix == "/": + dest_bucket_prefix = "" + + s3_source_zips = list(map(lambda name, key: "s3://%s/%s" % (name, key), source_bucket_names, source_object_keys)) + s3_dest = "s3://%s/%s" % (dest_bucket_name, dest_bucket_prefix) + old_s3_dest = "s3://%s/%s" % (old_props.get("DestinationBucketName", ""), old_props.get("DestinationBucketKeyPrefix", "")) + + + # obviously this is not + if old_s3_dest == "s3:///": + old_s3_dest = None + + logger.info("| s3_dest: %s" % s3_dest) + logger.info("| old_s3_dest: %s" % old_s3_dest) + + # if we are creating a new resource, allocate a physical id for it + # otherwise, we expect physical id to be relayed by cloudformation + if request_type == "Create": + physical_id = "aws.cdk.s3deployment.%s" % str(uuid4()) + else: + if not physical_id: + cfn_error("invalid request: request type is '%s' but 'PhysicalResourceId' is not defined" % {request_type}) + return + + # delete or create/update (only if "retain_on_delete" is false) + if request_type == "Delete" and not retain_on_delete: + if not bucket_owned(dest_bucket_name, dest_bucket_prefix): + aws_command("s3", "rm", s3_dest, "--recursive") + + # if we are updating without retention and the destination changed, delete first + if request_type == "Update" and not retain_on_delete and old_s3_dest != s3_dest: + if not old_s3_dest: + logger.warn("cannot delete old resource without old resource properties") + return + + aws_command("s3", "rm", old_s3_dest, "--recursive") + + if request_type == "Update" or request_type == "Create": + s3_deploy(s3_source_zips, s3_dest, user_metadata, system_metadata, prune, exclude, include, source_markers, extract) + + if distribution_id: + cloudfront_invalidate(distribution_id, distribution_paths) + + cfn_send(event, context, CFN_SUCCESS, physicalResourceId=physical_id, responseData={ + # Passing through the ARN sequences dependencees on the deployment + 'DestinationBucketArn': props.get('DestinationBucketArn'), + 'SourceObjectKeys': props.get('SourceObjectKeys'), + }) + except KeyError as e: + cfn_error("invalid request. Missing key %s" % str(e)) + except Exception as e: + logger.exception(e) + cfn_error(str(e)) + +#--------------------------------------------------------------------------------------------------- +# populate all files from s3_source_zips to a destination bucket +def s3_deploy(s3_source_zips, s3_dest, user_metadata, system_metadata, prune, exclude, include, source_markers, extract): + # list lengths are equal + if len(s3_source_zips) != len(source_markers): + raise Exception("'source_markers' and 's3_source_zips' must be the same length") + + # create a temporary working directory in /tmp or if enabled an attached efs volume + if ENV_KEY_MOUNT_PATH in os.environ: + workdir = os.getenv(ENV_KEY_MOUNT_PATH) + "/" + str(uuid4()) + os.mkdir(workdir) + else: + workdir = tempfile.mkdtemp() + + logger.info("| workdir: %s" % workdir) + + # create a directory into which we extract the contents of the zip file + contents_dir=os.path.join(workdir, 'contents') + os.mkdir(contents_dir) + + try: + # download the archive from the source and extract to "contents" + for i in range(len(s3_source_zips)): + s3_source_zip = s3_source_zips[i] + markers = source_markers[i] + + if extract: + archive=os.path.join(workdir, str(uuid4())) + logger.info("archive: %s" % archive) + aws_command("s3", "cp", s3_source_zip, archive) + logger.info("| extracting archive to: %s\n" % contents_dir) + logger.info("| markers: %s" % markers) + extract_and_replace_markers(archive, contents_dir, markers) + else: + logger.info("| copying archive to: %s\n" % contents_dir) + aws_command("s3", "cp", s3_source_zip, contents_dir) + + # sync from "contents" to destination + + s3_command = ["s3", "sync"] + + if prune: + s3_command.append("--delete") + + if exclude: + for filter in exclude: + s3_command.extend(["--exclude", filter]) + + if include: + for filter in include: + s3_command.extend(["--include", filter]) + + s3_command.extend([contents_dir, s3_dest]) + s3_command.extend(create_metadata_args(user_metadata, system_metadata)) + aws_command(*s3_command) + finally: + if not os.getenv(ENV_KEY_SKIP_CLEANUP): + shutil.rmtree(workdir) + +#--------------------------------------------------------------------------------------------------- +# invalidate files in the CloudFront distribution edge caches +def cloudfront_invalidate(distribution_id, distribution_paths): + invalidation_resp = cloudfront.create_invalidation( + DistributionId=distribution_id, + InvalidationBatch={ + 'Paths': { + 'Quantity': len(distribution_paths), + 'Items': distribution_paths + }, + 'CallerReference': str(uuid4()), + }) + # by default, will wait up to 10 minutes + cloudfront.get_waiter('invalidation_completed').wait( + DistributionId=distribution_id, + Id=invalidation_resp['Invalidation']['Id']) + +#--------------------------------------------------------------------------------------------------- +# set metadata +def create_metadata_args(raw_user_metadata, raw_system_metadata): + if len(raw_user_metadata) == 0 and len(raw_system_metadata) == 0: + return [] + + format_system_metadata_key = lambda k: k.lower() + format_user_metadata_key = lambda k: k.lower() + + system_metadata = { format_system_metadata_key(k): v for k, v in raw_system_metadata.items() } + user_metadata = { format_user_metadata_key(k): v for k, v in raw_user_metadata.items() } + + flatten = lambda l: [item for sublist in l for item in sublist] + system_args = flatten([[f"--{k}", v] for k, v in system_metadata.items()]) + user_args = ["--metadata", json.dumps(user_metadata, separators=(',', ':'))] if len(user_metadata) > 0 else [] + + return system_args + user_args + ["--metadata-directive", "REPLACE"] + +#--------------------------------------------------------------------------------------------------- +# executes an "aws" cli command +def aws_command(*args): + aws="/opt/awscli/aws" # from AwsCliLayer + logger.info("| aws %s" % ' '.join(args)) + subprocess.check_call([aws] + list(args)) + +#--------------------------------------------------------------------------------------------------- +# sends a response to cloudformation +def cfn_send(event, context, responseStatus, responseData={}, physicalResourceId=None, noEcho=False, reason=None): + + responseUrl = event['ResponseURL'] + + responseBody = {} + responseBody['Status'] = responseStatus + responseBody['Reason'] = reason or ('See the details in CloudWatch Log Stream: ' + context.log_stream_name) + responseBody['PhysicalResourceId'] = physicalResourceId or context.log_stream_name + responseBody['StackId'] = event['StackId'] + responseBody['RequestId'] = event['RequestId'] + responseBody['LogicalResourceId'] = event['LogicalResourceId'] + responseBody['NoEcho'] = noEcho + responseBody['Data'] = responseData + + body = json.dumps(responseBody) + logger.info("| response body:\n" + body) + + headers = { + 'content-type' : '', + 'content-length' : str(len(body)) + } + + try: + request = Request(responseUrl, method='PUT', data=bytes(body.encode('utf-8')), headers=headers) + with contextlib.closing(urlopen(request)) as response: + logger.info("| status code: " + response.reason) + except Exception as e: + logger.error("| unable to send response to CloudFormation") + logger.exception(e) + + +#--------------------------------------------------------------------------------------------------- +# check if bucket is owned by a custom resource +# if it is then we don't want to delete content +def bucket_owned(bucketName, keyPrefix): + tag = CUSTOM_RESOURCE_OWNER_TAG + if keyPrefix != "": + tag = tag + ':' + keyPrefix + try: + request = s3.get_bucket_tagging( + Bucket=bucketName, + ) + return any((x["Key"].startswith(tag)) for x in request["TagSet"]) + except Exception as e: + logger.info("| error getting tags from bucket") + logger.exception(e) + return False + +# extract archive and replace markers in output files +def extract_and_replace_markers(archive, contents_dir, markers): + with ZipFile(archive, "r") as zip: + zip.extractall(contents_dir) + + # replace markers for this source + for file in zip.namelist(): + file_path = os.path.join(contents_dir, file) + if os.path.isdir(file_path): continue + replace_markers(file_path, markers) + +def replace_markers(filename, markers): + # convert the dict of string markers to binary markers + replace_tokens = dict([(k.encode('utf-8'), v.encode('utf-8')) for k, v in markers.items()]) + + outfile = filename + '.new' + with open(filename, 'rb') as fi, open(outfile, 'wb') as fo: + for line in fi: + for token in replace_tokens: + line = line.replace(token, replace_tokens[token]) + fo.write(line) + + # # delete the original file and rename the new one to the original + os.remove(filename) + os.rename(outfile, filename) + \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/aws-appconfig-configuration.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/aws-appconfig-configuration.assets.json new file mode 100644 index 0000000000000..82c6d027afe5f --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/aws-appconfig-configuration.assets.json @@ -0,0 +1,71 @@ +{ + "version": "36.0.0", + "files": { + "3322b7049fb0ed2b7cbb644a2ada8d1116ff80c32dca89e6ada846b5de26f961": { + "source": { + "path": "asset.3322b7049fb0ed2b7cbb644a2ada8d1116ff80c32dca89e6ada846b5de26f961.zip", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "3322b7049fb0ed2b7cbb644a2ada8d1116ff80c32dca89e6ada846b5de26f961.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "e976a796f036a5efbf44b99e44cfb5a961df08d8dbf7cd37e60bf216fb982a00": { + "source": { + "path": "asset.e976a796f036a5efbf44b99e44cfb5a961df08d8dbf7cd37e60bf216fb982a00", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "e976a796f036a5efbf44b99e44cfb5a961df08d8dbf7cd37e60bf216fb982a00.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "9f148cad39f325035dfec935c0a2e907135f10cb64e7c4ef78c2320fc9ad24ae": { + "source": { + "path": "asset.9f148cad39f325035dfec935c0a2e907135f10cb64e7c4ef78c2320fc9ad24ae", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "9f148cad39f325035dfec935c0a2e907135f10cb64e7c4ef78c2320fc9ad24ae.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "9b7590a121e3b39547297cbf009beb8a27e1cf9daaa760cb82c42bd530d5ef8f": { + "source": { + "path": "asset.9b7590a121e3b39547297cbf009beb8a27e1cf9daaa760cb82c42bd530d5ef8f", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "9b7590a121e3b39547297cbf009beb8a27e1cf9daaa760cb82c42bd530d5ef8f.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "bc60e6498e01ff2afc7280330547559fc0e8c9c15f5ff05fc560ea731f76277e": { + "source": { + "path": "aws-appconfig-configuration.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "bc60e6498e01ff2afc7280330547559fc0e8c9c15f5ff05fc560ea731f76277e.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-appconfig/test/integ.configuration.js.snapshot/aws-appconfig-configuration.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/aws-appconfig-configuration.template.json new file mode 100644 index 0000000000000..2ff57c90bfa5f --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/aws-appconfig-configuration.template.json @@ -0,0 +1,1824 @@ +{ + "Resources": { + "MyAppConfigB4B63E75": { + "Type": "AWS::AppConfig::Application", + "Properties": { + "Name": "AppForConfigTest" + } + }, + "MyAppConfigHostedEnvF39C847E": { + "Type": "AWS::AppConfig::Environment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "Name": "awsappconfigconfiguration-MyAppConfig-HostedEnv-D1EED3BE" + } + }, + "MyAppConfigHostedEnvFromJson9E6E36C4": { + "Type": "AWS::AppConfig::Environment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "Name": "awsappconfigconfiguration-MyAppConfig-HostedEnvFromJson-140D2DDD" + } + }, + "MyAppConfigHostedEnvFromYaml82D3D1B2": { + "Type": "AWS::AppConfig::Environment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "Name": "awsappconfigconfiguration-MyAppConfig-HostedEnvFromYaml-BB2C802A" + } + }, + "MyAppConfigParameterEnvD769FB19": { + "Type": "AWS::AppConfig::Environment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "Name": "awsappconfigconfiguration-MyAppConfig-ParameterEnv-803E803A" + } + }, + "MyAppConfigDocumentEnv34B10223": { + "Type": "AWS::AppConfig::Environment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "Name": "awsappconfigconfiguration-MyAppConfig-DocumentEnv-5B0DCEC5" + } + }, + "MyAppConfigBucketEnvCBDFEF45": { + "Type": "AWS::AppConfig::Environment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "Name": "awsappconfigconfiguration-MyAppConfig-BucketEnv-1A81B6F5" + } + }, + "MyAppConfigSecretEnvE1102B63": { + "Type": "AWS::AppConfig::Environment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "Name": "awsappconfigconfiguration-MyAppConfig-SecretEnv-371FF6BB" + } + }, + "MyAppConfigSecretEnvWithKey9C93DA23": { + "Type": "AWS::AppConfig::Environment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "Name": "awsappconfigconfiguration-MyAppConfig-SecretEnvWithKey-8D4A2FFE" + } + }, + "MyDeployStrategy062CAEA2": { + "Type": "AWS::AppConfig::DeploymentStrategy", + "Properties": { + "DeploymentDurationInMinutes": 0, + "GrowthFactor": 100, + "GrowthType": "LINEAR", + "Name": "awsappconfigconfiguration-MyDeployStrategy-91730AE8", + "ReplicateTo": "NONE" + } + }, + "MyHostedConfigFromFileDeploymentStrategyCAF37A7C": { + "Type": "AWS::AppConfig::DeploymentStrategy", + "Properties": { + "DeploymentDurationInMinutes": 20, + "FinalBakeTimeInMinutes": 10, + "GrowthFactor": 10, + "GrowthType": "EXPONENTIAL", + "Name": "awsappconfigconfiguration-MyFromFile-DeploymentStrategy-C2367737", + "ReplicateTo": "NONE" + } + }, + "MyHostedConfigFromFileConfigurationProfile32B2D26F": { + "Type": "AWS::AppConfig::ConfigurationProfile", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "LocationUri": "hosted", + "Name": "awsappconfigconfiguration-MyHostedConfigFromFile-8ED1123C" + } + }, + "MyHostedConfigFromFile943CF9F9": { + "Type": "AWS::AppConfig::HostedConfigurationVersion", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "ConfigurationProfileId": { + "Ref": "MyHostedConfigFromFileConfigurationProfile32B2D26F" + }, + "Content": "{\n \"content\": \"This is the configuration content\"\n}", + "ContentType": "application/json" + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "MyHostedConfigConfigurationProfile2E1A2BBC": { + "Type": "AWS::AppConfig::ConfigurationProfile", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "LocationUri": "hosted", + "Name": "awsappconfigconfiguration-MyHostedConfig-4CF350AE", + "Validators": [ + { + "Content": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"string\"\n}", + "Type": "JSON_SCHEMA" + }, + { + "Content": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"string\"\n}", + "Type": "JSON_SCHEMA" + } + ] + } + }, + "MyHostedConfig51D3877D": { + "Type": "AWS::AppConfig::HostedConfigurationVersion", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "ConfigurationProfileId": { + "Ref": "MyHostedConfigConfigurationProfile2E1A2BBC" + }, + "Content": "This is my configuration content.", + "ContentType": "text/plain" + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "MyHostedConfigDeployment8E5DB1FCC9183": { + "Type": "AWS::AppConfig::Deployment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "ConfigurationProfileId": { + "Ref": "MyHostedConfigConfigurationProfile2E1A2BBC" + }, + "ConfigurationVersion": { + "Ref": "MyHostedConfig51D3877D" + }, + "DeploymentStrategyId": { + "Ref": "MyDeployStrategy062CAEA2" + }, + "EnvironmentId": { + "Ref": "MyAppConfigHostedEnvF39C847E" + } + } + }, + "MyHostedConfigFromJsonConfigurationProfile863E1E42": { + "Type": "AWS::AppConfig::ConfigurationProfile", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "LocationUri": "hosted", + "Name": "awsappconfigconfiguration-MyHostedConfigFromJson-3E786E81" + } + }, + "MyHostedConfigFromJsonD8CF9BE4": { + "Type": "AWS::AppConfig::HostedConfigurationVersion", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "ConfigurationProfileId": { + "Ref": "MyHostedConfigFromJsonConfigurationProfile863E1E42" + }, + "Content": "This is the configuration content", + "ContentType": "text/plain" + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "MyHostedConfigFromJsonDeployment3AC6ED5A2933B": { + "Type": "AWS::AppConfig::Deployment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "ConfigurationProfileId": { + "Ref": "MyHostedConfigFromJsonConfigurationProfile863E1E42" + }, + "ConfigurationVersion": { + "Ref": "MyHostedConfigFromJsonD8CF9BE4" + }, + "DeploymentStrategyId": { + "Ref": "MyDeployStrategy062CAEA2" + }, + "EnvironmentId": { + "Ref": "MyAppConfigHostedEnvFromJson9E6E36C4" + } + } + }, + "MyHostedConfigFromYamlConfigurationProfile7C77A435": { + "Type": "AWS::AppConfig::ConfigurationProfile", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "LocationUri": "hosted", + "Name": "awsappconfigconfiguration-MyHostedConfigFromYaml-87E9786A" + } + }, + "MyHostedConfigFromYaml13C5BE35": { + "Type": "AWS::AppConfig::HostedConfigurationVersion", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "ConfigurationProfileId": { + "Ref": "MyHostedConfigFromYamlConfigurationProfile7C77A435" + }, + "Content": "This is the configuration content", + "ContentType": "application/x-yaml" + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "MyHostedConfigFromYamlDeploymentD93A5BDCCAAB2": { + "Type": "AWS::AppConfig::Deployment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "ConfigurationProfileId": { + "Ref": "MyHostedConfigFromYamlConfigurationProfile7C77A435" + }, + "ConfigurationVersion": { + "Ref": "MyHostedConfigFromYaml13C5BE35" + }, + "DeploymentStrategyId": { + "Ref": "MyDeployStrategy062CAEA2" + }, + "EnvironmentId": { + "Ref": "MyAppConfigHostedEnvFromYaml82D3D1B2" + } + } + }, + "MyValidatorFunctionServiceRole5CD02390": { + "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" + ] + ] + } + ] + } + }, + "MyValidatorFunctionA679CB3C": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "\ndef handler(event, context):\n print('This is my dummy validator')\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "MyValidatorFunctionServiceRole5CD02390", + "Arn" + ] + }, + "Runtime": "python3.8" + }, + "DependsOn": [ + "MyValidatorFunctionServiceRole5CD02390" + ] + }, + "MyValidatorFunctionAppConfigPermission77CD11AC": { + "Type": "AWS::Lambda::Permission", + "Properties": { + "Action": "lambda:InvokeFunction", + "FunctionName": { + "Fn::GetAtt": [ + "MyValidatorFunctionA679CB3C", + "Arn" + ] + }, + "Principal": "appconfig.amazonaws.com" + } + }, + "MyParameter18BA547D": { + "Type": "AWS::SSM::Parameter", + "Properties": { + "Type": "String", + "Value": "This is the content stored in ssm parameter" + } + }, + "MyConfigFromParameterRole4E40C8BC": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Policies": [ + { + "PolicyDocument": { + "Statement": [ + { + "Action": "ssm:GetParameter", + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ssm:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":parameter/", + { + "Ref": "MyParameter18BA547D" + } + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AllowAppConfigReadFromSourcePolicy" + } + ] + } + }, + "MyConfigFromParameterDC204468": { + "Type": "AWS::AppConfig::ConfigurationProfile", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "Description": "This is a configuration profile used for integ testing", + "LocationUri": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ssm:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":parameter/", + { + "Ref": "MyParameter18BA547D" + } + ] + ] + }, + "Name": "TestConfigProfileStoredAsParamater", + "RetrievalRoleArn": { + "Fn::GetAtt": [ + "MyConfigFromParameterRole4E40C8BC", + "Arn" + ] + }, + "Validators": [ + { + "Content": { + "Fn::GetAtt": [ + "MyValidatorFunctionA679CB3C", + "Arn" + ] + }, + "Type": "LAMBDA" + } + ] + } + }, + "MyConfigFromParameterDeployment28051DE6185BF": { + "Type": "AWS::AppConfig::Deployment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "ConfigurationProfileId": { + "Ref": "MyConfigFromParameterDC204468" + }, + "ConfigurationVersion": "1", + "DeploymentStrategyId": { + "Ref": "MyDeployStrategy062CAEA2" + }, + "Description": "This is a configuration profile used for integ testing", + "EnvironmentId": { + "Ref": "MyAppConfigParameterEnvD769FB19" + } + } + }, + "MyDocument": { + "Type": "AWS::SSM::Document", + "Properties": { + "Content": { + "schemaVersion": "2.2", + "description": "Sample SSM Document", + "mainSteps": [ + { + "action": "aws:runShellScript", + "name": "step1", + "inputs": { + "runCommand": [ + "echo \"Hello, World!\"" + ] + } + } + ] + }, + "DocumentType": "Command", + "Name": "TestDocument" + } + }, + "MyConfigFromDocumentRole29FB4D3D": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Policies": [ + { + "PolicyDocument": { + "Statement": [ + { + "Action": "ssm:GetDocument", + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ssm:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":document/", + { + "Ref": "MyDocument" + } + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AllowAppConfigReadFromSourcePolicy" + } + ] + } + }, + "MyConfigFromDocument79E66ABA": { + "Type": "AWS::AppConfig::ConfigurationProfile", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "LocationUri": { + "Fn::Join": [ + "", + [ + "ssm-document://", + { + "Ref": "MyDocument" + } + ] + ] + }, + "Name": "awsappconfigconfiguration-MyConfigFromDocument-A15AC401", + "RetrievalRoleArn": { + "Fn::GetAtt": [ + "MyConfigFromDocumentRole29FB4D3D", + "Arn" + ] + } + } + }, + "MyConfigFromDocumentDeployment7A5BA9D7D69C3": { + "Type": "AWS::AppConfig::Deployment", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "ConfigurationProfileId": { + "Ref": "MyConfigFromDocument79E66ABA" + }, + "ConfigurationVersion": "1", + "DeploymentStrategyId": { + "Ref": "MyDeployStrategy062CAEA2" + }, + "EnvironmentId": { + "Ref": "MyAppConfigDocumentEnv34B10223" + } + } + }, + "MyBucketF68F3FF0": { + "Type": "AWS::S3::Bucket", + "Properties": { + "Tags": [ + { + "Key": "aws-cdk:cr-owned:2255b7ad", + "Value": "true" + } + ], + "VersioningConfiguration": { + "Status": "Enabled" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "DeployConfigInBucketAwsCliLayerFC57D055": { + "Type": "AWS::Lambda::LayerVersion", + "Properties": { + "Content": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "3322b7049fb0ed2b7cbb644a2ada8d1116ff80c32dca89e6ada846b5de26f961.zip" + }, + "Description": "/opt/awscli/aws" + } + }, + "DeployConfigInBucketCustomResource91997C5B": { + "Type": "Custom::CDKBucketDeployment", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "Arn" + ] + }, + "SourceBucketNames": [ + { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + } + ], + "SourceObjectKeys": [ + "9f148cad39f325035dfec935c0a2e907135f10cb64e7c4ef78c2320fc9ad24ae.zip", + "9b7590a121e3b39547297cbf009beb8a27e1cf9daaa760cb82c42bd530d5ef8f.zip" + ], + "SourceMarkers": [ + {}, + {} + ], + "DestinationBucketName": { + "Ref": "MyBucketF68F3FF0" + }, + "RetainOnDelete": false, + "Prune": true + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265": { + "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" + ] + ] + } + ] + } + }, + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":s3:::", + { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "/*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":s3:::", + { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + } + ] + ] + } + ] + }, + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF", + "Roles": [ + { + "Ref": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265" + } + ] + } + }, + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "e976a796f036a5efbf44b99e44cfb5a961df08d8dbf7cd37e60bf216fb982a00.zip" + }, + "Environment": { + "Variables": { + "AWS_CA_BUNDLE": "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem" + } + }, + "Handler": "index.handler", + "Layers": [ + { + "Ref": "DeployConfigInBucketAwsCliLayerFC57D055" + } + ], + "Role": { + "Fn::GetAtt": [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", + "Arn" + ] + }, + "Runtime": "python3.9", + "Timeout": 900 + }, + "DependsOn": [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF", + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265" + ] + }, + "MyConfigFromBucketDeploymentStrategy59D68C4F": { + "Type": "AWS::AppConfig::DeploymentStrategy", + "Properties": { + "DeploymentDurationInMinutes": 20, + "FinalBakeTimeInMinutes": 10, + "GrowthFactor": 10, + "GrowthType": "EXPONENTIAL", + "Name": "awsappconfigconfiguration-MyomBucket-DeploymentStrategy-8366DF86", + "ReplicateTo": "NONE" + } + }, + "MyConfigFromBucketRole5749669F": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Policies": [ + { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "s3:GetObject", + "s3:GetObjectMetadata", + "s3:GetObjectVersion" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":s3:::", + { + "Ref": "MyBucketF68F3FF0" + }, + "/hello/world/file.txt" + ] + ] + } + }, + { + "Action": [ + "s3:GetBucketLocation", + "s3:GetBucketVersioning", + "s3:ListBucket", + "s3:ListBucketVersions" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":s3:::", + { + "Ref": "MyBucketF68F3FF0" + } + ] + ] + } + }, + { + "Action": "s3:ListAllMyBuckets", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AllowAppConfigReadFromSourcePolicy" + } + ] + } + }, + "MyConfigFromBucket064B5420": { + "Type": "AWS::AppConfig::ConfigurationProfile", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "Description": { + "Fn::Join": [ + "", + [ + "Sourced from ", + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DeployConfigInBucketCustomResource91997C5B", + "SourceObjectKeys" + ] + } + ] + } + ] + ] + }, + "LocationUri": { + "Fn::Join": [ + "", + [ + "s3://", + { + "Ref": "MyBucketF68F3FF0" + }, + "/hello/world/file.txt" + ] + ] + }, + "Name": "awsappconfigconfiguration-MyConfigFromBucket-79972829", + "RetrievalRoleArn": { + "Fn::GetAtt": [ + "MyConfigFromBucketRole5749669F", + "Arn" + ] + } + } + }, + "MySecret8FE80B51": { + "Type": "AWS::SecretsManager::Secret", + "Properties": { + "SecretString": "This is the content stored in secrets manager" + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "MyConfigFromSecretDeploymentStrategy7E7398AA": { + "Type": "AWS::AppConfig::DeploymentStrategy", + "Properties": { + "DeploymentDurationInMinutes": 20, + "FinalBakeTimeInMinutes": 10, + "GrowthFactor": 10, + "GrowthType": "EXPONENTIAL", + "Name": "awsappconfigconfiguration-MyomSecret-DeploymentStrategy-2F6D94AB", + "ReplicateTo": "NONE" + } + }, + "MyConfigFromSecretRole77E11CE7": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Policies": [ + { + "PolicyDocument": { + "Statement": [ + { + "Action": "secretsmanager:GetSecretValue", + "Effect": "Allow", + "Resource": { + "Ref": "MySecret8FE80B51" + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AllowAppConfigReadFromSourcePolicy" + } + ] + } + }, + "MyConfigFromSecret42EED9DC": { + "Type": "AWS::AppConfig::ConfigurationProfile", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "LocationUri": { + "Ref": "MySecret8FE80B51" + }, + "Name": "awsappconfigconfiguration-MyConfigFromSecret-3BD4C031", + "RetrievalRoleArn": { + "Fn::GetAtt": [ + "MyConfigFromSecretRole77E11CE7", + "Arn" + ] + } + } + }, + "MyKey6AB29FA6": { + "Type": "AWS::KMS::Key", + "Properties": { + "KeyPolicy": { + "Statement": [ + { + "Action": "kms:*", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + }, + "Resource": "*" + }, + { + "Action": [ + "kms:CreateGrant", + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:GenerateDataKey*", + "kms:ReEncrypt*" + ], + "Condition": { + "StringEquals": { + "kms:ViaService": { + "Fn::Join": [ + "", + [ + "secretsmanager.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com" + ] + ] + } + } + }, + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + }, + "Resource": "*" + } + ], + "Version": "2012-10-17" + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "MySecretWithKey1F7B590B": { + "Type": "AWS::SecretsManager::Secret", + "Properties": { + "KmsKeyId": { + "Fn::GetAtt": [ + "MyKey6AB29FA6", + "Arn" + ] + }, + "SecretString": "This is the content stored in secrets manager" + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "MyConfigFromSecretWithKeyDeploymentStrategy9FAC9F62": { + "Type": "AWS::AppConfig::DeploymentStrategy", + "Properties": { + "DeploymentDurationInMinutes": 20, + "FinalBakeTimeInMinutes": 10, + "GrowthFactor": 10, + "GrowthType": "EXPONENTIAL", + "Name": "awsappconfigconfiguration-MytWithKey-DeploymentStrategy-70C32371", + "ReplicateTo": "NONE" + } + }, + "MyConfigFromSecretWithKeyRole3C7B494A": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Policies": [ + { + "PolicyDocument": { + "Statement": [ + { + "Action": "secretsmanager:GetSecretValue", + "Effect": "Allow", + "Resource": { + "Ref": "MySecretWithKey1F7B590B" + } + }, + { + "Action": "kms:Decrypt", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "MyKey6AB29FA6", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AllowAppConfigReadFromSourcePolicy" + } + ] + } + }, + "MyConfigFromSecretWithKey6F08D343": { + "Type": "AWS::AppConfig::ConfigurationProfile", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "LocationUri": { + "Ref": "MySecretWithKey1F7B590B" + }, + "Name": "awsappconfigconfiguration-MyConfigFromSecretWithKey-516D9EB2", + "RetrievalRoleArn": { + "Fn::GetAtt": [ + "MyConfigFromSecretWithKeyRole3C7B494A", + "Arn" + ] + } + } + }, + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3": { + "Type": "AWS::KMS::Key", + "Properties": { + "KeyPolicy": { + "Statement": [ + { + "Action": "kms:*", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + }, + "Resource": "*" + } + ], + "Version": "2012-10-17" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "MyPipelineArtifactsBucketEncryptionKeyAlias9D4F8C59": { + "Type": "AWS::KMS::Alias", + "Properties": { + "AliasName": "alias/codepipeline-aws-appconfig-configuration-mypipeline-893f29d4", + "TargetKeyId": { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3", + "Arn" + ] + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "MyPipelineArtifactsBucket727923DD": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "KMSMasterKeyID": { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3", + "Arn" + ] + }, + "SSEAlgorithm": "aws:kms" + } + } + ] + }, + "PublicAccessBlockConfiguration": { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "MyPipelineArtifactsBucketPolicyDFDA675B": { + "Type": "AWS::S3::BucketPolicy", + "Properties": { + "Bucket": { + "Ref": "MyPipelineArtifactsBucket727923DD" + }, + "PolicyDocument": { + "Statement": [ + { + "Action": "s3:*", + "Condition": { + "Bool": { + "aws:SecureTransport": "false" + } + }, + "Effect": "Deny", + "Principal": { + "AWS": "*" + }, + "Resource": [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + } + } + }, + "MyPipelineRoleC0D47CA4": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codepipeline.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "MyPipelineRoleDefaultPolicy34F09EFA": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:GenerateDataKey*", + "kms:ReEncrypt*" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3", + "Arn" + ] + } + }, + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyPipelinebetaSourceCodePipelineActionRoleA59DCC4C", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "MyPipelineprodDeployCodePipelineActionRoleFAD07544", + "Arn" + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "MyPipelineRoleDefaultPolicy34F09EFA", + "Roles": [ + { + "Ref": "MyPipelineRoleC0D47CA4" + } + ] + } + }, + "MyPipelineAED38ECF": { + "Type": "AWS::CodePipeline::Pipeline", + "Properties": { + "ArtifactStore": { + "EncryptionKey": { + "Id": { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3", + "Arn" + ] + }, + "Type": "KMS" + }, + "Location": { + "Ref": "MyPipelineArtifactsBucket727923DD" + }, + "Type": "S3" + }, + "RoleArn": { + "Fn::GetAtt": [ + "MyPipelineRoleC0D47CA4", + "Arn" + ] + }, + "Stages": [ + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Source", + "Owner": "AWS", + "Provider": "S3", + "Version": "1" + }, + "Configuration": { + "S3Bucket": { + "Ref": "MyBucketF68F3FF0" + }, + "S3ObjectKey": "hello/world/codepipeline.txt" + }, + "Name": "Source", + "OutputArtifacts": [ + { + "Name": "SourceOutput" + } + ], + "RoleArn": { + "Fn::GetAtt": [ + "MyPipelinebetaSourceCodePipelineActionRoleA59DCC4C", + "Arn" + ] + }, + "RunOrder": 1 + } + ], + "Name": "beta" + }, + { + "Actions": [ + { + "ActionTypeId": { + "Category": "Deploy", + "Owner": "AWS", + "Provider": "S3", + "Version": "1" + }, + "Configuration": { + "BucketName": { + "Ref": "MyBucketF68F3FF0" + }, + "Extract": "true" + }, + "InputArtifacts": [ + { + "Name": "SourceOutput" + } + ], + "Name": "Deploy", + "RoleArn": { + "Fn::GetAtt": [ + "MyPipelineprodDeployCodePipelineActionRoleFAD07544", + "Arn" + ] + }, + "RunOrder": 1 + } + ], + "Name": "prod" + } + ] + }, + "DependsOn": [ + "MyPipelineRoleDefaultPolicy34F09EFA", + "MyPipelineRoleC0D47CA4" + ] + }, + "MyPipelinebetaSourceCodePipelineActionRoleA59DCC4C": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "MyPipelinebetaSourceCodePipelineActionRoleDefaultPolicy4F6DF82E": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "Arn" + ] + }, + "/hello/world/codepipeline.txt" + ] + ] + } + ] + }, + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": [ + "kms:Decrypt", + "kms:Encrypt", + "kms:GenerateDataKey*", + "kms:ReEncrypt*" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "MyPipelinebetaSourceCodePipelineActionRoleDefaultPolicy4F6DF82E", + "Roles": [ + { + "Ref": "MyPipelinebetaSourceCodePipelineActionRoleA59DCC4C" + } + ] + } + }, + "MyPipelineprodDeployCodePipelineActionRoleFAD07544": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "MyPipelineprodDeployCodePipelineActionRoleDefaultPolicyF1913519": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": [ + "kms:Decrypt", + "kms:DescribeKey" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "MyPipelineprodDeployCodePipelineActionRoleDefaultPolicyF1913519", + "Roles": [ + { + "Ref": "MyPipelineprodDeployCodePipelineActionRoleFAD07544" + } + ] + } + }, + "MyConfigFromPipelineDeploymentStrategyF07EE763": { + "Type": "AWS::AppConfig::DeploymentStrategy", + "Properties": { + "DeploymentDurationInMinutes": 20, + "FinalBakeTimeInMinutes": 10, + "GrowthFactor": 10, + "GrowthType": "EXPONENTIAL", + "Name": "awsappconfigconfiguration-MyPipeline-DeploymentStrategy-5F76004F", + "ReplicateTo": "NONE" + } + }, + "MyConfigFromPipelineEA8471A4": { + "Type": "AWS::AppConfig::ConfigurationProfile", + "Properties": { + "ApplicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "LocationUri": { + "Fn::Join": [ + "", + [ + "codepipeline://", + { + "Ref": "MyPipelineAED38ECF" + } + ] + ] + }, + "Name": "awsappconfigconfiguration-MyConfigFromPipeline-FD2B6B65" + } + } + }, + "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-appconfig/test/integ.configuration.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/cdk.out new file mode 100644 index 0000000000000..1f0068d32659a --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/integ.json new file mode 100644 index 0000000000000..e83486dc65553 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/integ.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.0", + "testCases": { + "appconfig-configuration/DefaultTest": { + "stacks": [ + "aws-appconfig-configuration" + ], + "cdkCommandOptions": { + "destroy": { + "args": { + "force": true + } + } + }, + "assertionStack": "appconfig-configuration/DefaultTest/DeployAssert", + "assertionStackName": "appconfigconfigurationDefaultTestDeployAssert6752CD38" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/manifest.json new file mode 100644 index 0000000000000..13b08d3f38a1c --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/manifest.json @@ -0,0 +1,515 @@ +{ + "version": "36.0.0", + "artifacts": { + "aws-appconfig-configuration.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "aws-appconfig-configuration.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "aws-appconfig-configuration": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "aws-appconfig-configuration.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}/bc60e6498e01ff2afc7280330547559fc0e8c9c15f5ff05fc560ea731f76277e.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "aws-appconfig-configuration.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": [ + "aws-appconfig-configuration.assets" + ], + "metadata": { + "/aws-appconfig-configuration/MyAppConfig/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyAppConfigB4B63E75" + } + ], + "/aws-appconfig-configuration/MyAppConfig/HostedEnv/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyAppConfigHostedEnvF39C847E" + } + ], + "/aws-appconfig-configuration/MyAppConfig/HostedEnvFromJson/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyAppConfigHostedEnvFromJson9E6E36C4" + } + ], + "/aws-appconfig-configuration/MyAppConfig/HostedEnvFromYaml/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyAppConfigHostedEnvFromYaml82D3D1B2" + } + ], + "/aws-appconfig-configuration/MyAppConfig/ParameterEnv/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyAppConfigParameterEnvD769FB19" + } + ], + "/aws-appconfig-configuration/MyAppConfig/DocumentEnv/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyAppConfigDocumentEnv34B10223" + } + ], + "/aws-appconfig-configuration/MyAppConfig/BucketEnv/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyAppConfigBucketEnvCBDFEF45" + } + ], + "/aws-appconfig-configuration/MyAppConfig/SecretEnv/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyAppConfigSecretEnvE1102B63" + } + ], + "/aws-appconfig-configuration/MyAppConfig/SecretEnvWithKey/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyAppConfigSecretEnvWithKey9C93DA23" + } + ], + "/aws-appconfig-configuration/MyDeployStrategy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyDeployStrategy062CAEA2" + } + ], + "/aws-appconfig-configuration/MyHostedConfigFromFile/DeploymentStrategy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfigFromFileDeploymentStrategyCAF37A7C" + } + ], + "/aws-appconfig-configuration/MyHostedConfigFromFile/ConfigurationProfile": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfigFromFileConfigurationProfile32B2D26F" + } + ], + "/aws-appconfig-configuration/MyHostedConfigFromFile/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfigFromFile943CF9F9" + } + ], + "/aws-appconfig-configuration/MyHostedConfig/ConfigurationProfile": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfigConfigurationProfile2E1A2BBC" + } + ], + "/aws-appconfig-configuration/MyHostedConfig/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfig51D3877D" + } + ], + "/aws-appconfig-configuration/MyHostedConfig/Deployment8E5DB": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfigDeployment8E5DB1FCC9183" + } + ], + "/aws-appconfig-configuration/MyHostedConfigFromJson/ConfigurationProfile": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfigFromJsonConfigurationProfile863E1E42" + } + ], + "/aws-appconfig-configuration/MyHostedConfigFromJson/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfigFromJsonD8CF9BE4" + } + ], + "/aws-appconfig-configuration/MyHostedConfigFromJson/Deployment3AC6E": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfigFromJsonDeployment3AC6ED5A2933B" + } + ], + "/aws-appconfig-configuration/MyHostedConfigFromYaml/ConfigurationProfile": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfigFromYamlConfigurationProfile7C77A435" + } + ], + "/aws-appconfig-configuration/MyHostedConfigFromYaml/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfigFromYaml13C5BE35" + } + ], + "/aws-appconfig-configuration/MyHostedConfigFromYaml/DeploymentD93A5": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfigFromYamlDeploymentD93A5BDCCAAB2" + } + ], + "/aws-appconfig-configuration/MyValidatorFunction/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyValidatorFunctionServiceRole5CD02390" + } + ], + "/aws-appconfig-configuration/MyValidatorFunction/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyValidatorFunctionA679CB3C" + } + ], + "/aws-appconfig-configuration/MyValidatorFunction/AppConfigPermission": [ + { + "type": "aws:cdk:logicalId", + "data": "MyValidatorFunctionAppConfigPermission77CD11AC" + } + ], + "/aws-appconfig-configuration/MyParameter/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyParameter18BA547D" + } + ], + "/aws-appconfig-configuration/MyConfigFromParameter/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromParameterRole4E40C8BC" + } + ], + "/aws-appconfig-configuration/MyConfigFromParameter/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromParameterDC204468" + } + ], + "/aws-appconfig-configuration/MyConfigFromParameter/Deployment28051": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromParameterDeployment28051DE6185BF" + } + ], + "/aws-appconfig-configuration/MyDocument": [ + { + "type": "aws:cdk:logicalId", + "data": "MyDocument" + } + ], + "/aws-appconfig-configuration/MyConfigFromDocument/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromDocumentRole29FB4D3D" + } + ], + "/aws-appconfig-configuration/MyConfigFromDocument/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromDocument79E66ABA" + } + ], + "/aws-appconfig-configuration/MyConfigFromDocument/Deployment7A5BA": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromDocumentDeployment7A5BA9D7D69C3" + } + ], + "/aws-appconfig-configuration/MyBucket/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyBucketF68F3FF0" + } + ], + "/aws-appconfig-configuration/DeployConfigInBucket/AwsCliLayer/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "DeployConfigInBucketAwsCliLayerFC57D055" + } + ], + "/aws-appconfig-configuration/DeployConfigInBucket/CustomResource/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "DeployConfigInBucketCustomResource91997C5B" + } + ], + "/aws-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265" + } + ], + "/aws-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/ServiceRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF" + } + ], + "/aws-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536" + } + ], + "/aws-appconfig-configuration/MyConfigFromBucket/DeploymentStrategy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromBucketDeploymentStrategy59D68C4F" + } + ], + "/aws-appconfig-configuration/MyConfigFromBucket/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromBucketRole5749669F" + } + ], + "/aws-appconfig-configuration/MyConfigFromBucket/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromBucket064B5420" + } + ], + "/aws-appconfig-configuration/MySecret/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MySecret8FE80B51" + } + ], + "/aws-appconfig-configuration/MyConfigFromSecret/DeploymentStrategy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromSecretDeploymentStrategy7E7398AA" + } + ], + "/aws-appconfig-configuration/MyConfigFromSecret/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromSecretRole77E11CE7" + } + ], + "/aws-appconfig-configuration/MyConfigFromSecret/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromSecret42EED9DC" + } + ], + "/aws-appconfig-configuration/MyKey/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyKey6AB29FA6" + } + ], + "/aws-appconfig-configuration/MySecretWithKey/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MySecretWithKey1F7B590B" + } + ], + "/aws-appconfig-configuration/MyConfigFromSecretWithKey/DeploymentStrategy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromSecretWithKeyDeploymentStrategy9FAC9F62" + } + ], + "/aws-appconfig-configuration/MyConfigFromSecretWithKey/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromSecretWithKeyRole3C7B494A" + } + ], + "/aws-appconfig-configuration/MyConfigFromSecretWithKey/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromSecretWithKey6F08D343" + } + ], + "/aws-appconfig-configuration/MyPipeline": [ + { + "type": "aws:cdk:warning", + "data": "V1 pipeline type is implicitly selected when `pipelineType` is not set. If you want to use V2 type, set `PipelineType.V2`. [ack: @aws-cdk/aws-codepipeline:unspecifiedPipelineType]" + } + ], + "/aws-appconfig-configuration/MyPipeline/ArtifactsBucketEncryptionKey/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3" + } + ], + "/aws-appconfig-configuration/MyPipeline/ArtifactsBucketEncryptionKeyAlias/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyPipelineArtifactsBucketEncryptionKeyAlias9D4F8C59" + } + ], + "/aws-appconfig-configuration/MyPipeline/ArtifactsBucket/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyPipelineArtifactsBucket727923DD" + } + ], + "/aws-appconfig-configuration/MyPipeline/ArtifactsBucket/Policy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyPipelineArtifactsBucketPolicyDFDA675B" + } + ], + "/aws-appconfig-configuration/MyPipeline/Role/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyPipelineRoleC0D47CA4" + } + ], + "/aws-appconfig-configuration/MyPipeline/Role/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyPipelineRoleDefaultPolicy34F09EFA" + } + ], + "/aws-appconfig-configuration/MyPipeline/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyPipelineAED38ECF" + } + ], + "/aws-appconfig-configuration/MyPipeline/beta/Source/CodePipelineActionRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyPipelinebetaSourceCodePipelineActionRoleA59DCC4C" + } + ], + "/aws-appconfig-configuration/MyPipeline/beta/Source/CodePipelineActionRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyPipelinebetaSourceCodePipelineActionRoleDefaultPolicy4F6DF82E" + } + ], + "/aws-appconfig-configuration/MyPipeline/prod/Deploy/CodePipelineActionRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyPipelineprodDeployCodePipelineActionRoleFAD07544" + } + ], + "/aws-appconfig-configuration/MyPipeline/prod/Deploy/CodePipelineActionRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyPipelineprodDeployCodePipelineActionRoleDefaultPolicyF1913519" + } + ], + "/aws-appconfig-configuration/MyConfigFromPipeline/DeploymentStrategy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromPipelineDeploymentStrategyF07EE763" + } + ], + "/aws-appconfig-configuration/MyConfigFromPipeline/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFromPipelineEA8471A4" + } + ], + "/aws-appconfig-configuration/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-appconfig-configuration/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ], + "MyAppConfigEnvDeployLater26FA1032": [ + { + "type": "aws:cdk:logicalId", + "data": "MyAppConfigEnvDeployLater26FA1032", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "MyHostedConfigFromJsonDeploymentFA00BC528601D": [ + { + "type": "aws:cdk:logicalId", + "data": "MyHostedConfigFromJsonDeploymentFA00BC528601D", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ] + }, + "displayName": "aws-appconfig-configuration" + }, + "appconfigconfigurationDefaultTestDeployAssert6752CD38.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "appconfigconfigurationDefaultTestDeployAssert6752CD38.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "appconfigconfigurationDefaultTestDeployAssert6752CD38": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "appconfigconfigurationDefaultTestDeployAssert6752CD38.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": [ + "appconfigconfigurationDefaultTestDeployAssert6752CD38.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": [ + "appconfigconfigurationDefaultTestDeployAssert6752CD38.assets" + ], + "metadata": { + "/appconfig-configuration/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/appconfig-configuration/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "appconfig-configuration/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/tree.json new file mode 100644 index 0000000000000..47b7b5fd0a7d4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.js.snapshot/tree.json @@ -0,0 +1,3104 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "aws-appconfig-configuration": { + "id": "aws-appconfig-configuration", + "path": "aws-appconfig-configuration", + "children": { + "MyAppConfig": { + "id": "MyAppConfig", + "path": "aws-appconfig-configuration/MyAppConfig", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyAppConfig/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Application", + "aws:cdk:cloudformation:props": { + "name": "AppForConfigTest" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnApplication", + "version": "0.0.0" + } + }, + "HostedEnv": { + "id": "HostedEnv", + "path": "aws-appconfig-configuration/MyAppConfig/HostedEnv", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyAppConfig/HostedEnv/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Environment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "name": "awsappconfigconfiguration-MyAppConfig-HostedEnv-D1EED3BE" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnEnvironment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.Environment", + "version": "0.0.0" + } + }, + "HostedEnvFromJson": { + "id": "HostedEnvFromJson", + "path": "aws-appconfig-configuration/MyAppConfig/HostedEnvFromJson", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyAppConfig/HostedEnvFromJson/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Environment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "name": "awsappconfigconfiguration-MyAppConfig-HostedEnvFromJson-140D2DDD" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnEnvironment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.Environment", + "version": "0.0.0" + } + }, + "HostedEnvFromYaml": { + "id": "HostedEnvFromYaml", + "path": "aws-appconfig-configuration/MyAppConfig/HostedEnvFromYaml", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyAppConfig/HostedEnvFromYaml/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Environment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "name": "awsappconfigconfiguration-MyAppConfig-HostedEnvFromYaml-BB2C802A" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnEnvironment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.Environment", + "version": "0.0.0" + } + }, + "ParameterEnv": { + "id": "ParameterEnv", + "path": "aws-appconfig-configuration/MyAppConfig/ParameterEnv", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyAppConfig/ParameterEnv/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Environment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "name": "awsappconfigconfiguration-MyAppConfig-ParameterEnv-803E803A" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnEnvironment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.Environment", + "version": "0.0.0" + } + }, + "DocumentEnv": { + "id": "DocumentEnv", + "path": "aws-appconfig-configuration/MyAppConfig/DocumentEnv", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyAppConfig/DocumentEnv/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Environment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "name": "awsappconfigconfiguration-MyAppConfig-DocumentEnv-5B0DCEC5" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnEnvironment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.Environment", + "version": "0.0.0" + } + }, + "BucketEnv": { + "id": "BucketEnv", + "path": "aws-appconfig-configuration/MyAppConfig/BucketEnv", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyAppConfig/BucketEnv/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Environment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "name": "awsappconfigconfiguration-MyAppConfig-BucketEnv-1A81B6F5" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnEnvironment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.Environment", + "version": "0.0.0" + } + }, + "SecretEnv": { + "id": "SecretEnv", + "path": "aws-appconfig-configuration/MyAppConfig/SecretEnv", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyAppConfig/SecretEnv/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Environment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "name": "awsappconfigconfiguration-MyAppConfig-SecretEnv-371FF6BB" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnEnvironment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.Environment", + "version": "0.0.0" + } + }, + "SecretEnvWithKey": { + "id": "SecretEnvWithKey", + "path": "aws-appconfig-configuration/MyAppConfig/SecretEnvWithKey", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyAppConfig/SecretEnvWithKey/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Environment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "name": "awsappconfigconfiguration-MyAppConfig-SecretEnvWithKey-8D4A2FFE" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnEnvironment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.Environment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.Application", + "version": "0.0.0" + } + }, + "MyDeployStrategy": { + "id": "MyDeployStrategy", + "path": "aws-appconfig-configuration/MyDeployStrategy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyDeployStrategy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::DeploymentStrategy", + "aws:cdk:cloudformation:props": { + "deploymentDurationInMinutes": 0, + "growthFactor": 100, + "growthType": "LINEAR", + "name": "awsappconfigconfiguration-MyDeployStrategy-91730AE8", + "replicateTo": "NONE" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeploymentStrategy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.DeploymentStrategy", + "version": "0.0.0" + } + }, + "MyHostedConfigFromFile": { + "id": "MyHostedConfigFromFile", + "path": "aws-appconfig-configuration/MyHostedConfigFromFile", + "children": { + "DeploymentStrategy": { + "id": "DeploymentStrategy", + "path": "aws-appconfig-configuration/MyHostedConfigFromFile/DeploymentStrategy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyHostedConfigFromFile/DeploymentStrategy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::DeploymentStrategy", + "aws:cdk:cloudformation:props": { + "deploymentDurationInMinutes": 20, + "finalBakeTimeInMinutes": 10, + "growthFactor": 10, + "growthType": "EXPONENTIAL", + "name": "awsappconfigconfiguration-MyFromFile-DeploymentStrategy-C2367737", + "replicateTo": "NONE" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeploymentStrategy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.DeploymentStrategy", + "version": "0.0.0" + } + }, + "ConfigurationProfile": { + "id": "ConfigurationProfile", + "path": "aws-appconfig-configuration/MyHostedConfigFromFile/ConfigurationProfile", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ConfigurationProfile", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "locationUri": "hosted", + "name": "awsappconfigconfiguration-MyHostedConfigFromFile-8ED1123C" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnConfigurationProfile", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyHostedConfigFromFile/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::HostedConfigurationVersion", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "configurationProfileId": { + "Ref": "MyHostedConfigFromFileConfigurationProfile32B2D26F" + }, + "content": "{\n \"content\": \"This is the configuration content\"\n}", + "contentType": "application/json" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnHostedConfigurationVersion", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.HostedConfiguration", + "version": "0.0.0" + } + }, + "MyHostedConfig": { + "id": "MyHostedConfig", + "path": "aws-appconfig-configuration/MyHostedConfig", + "children": { + "ConfigurationProfile": { + "id": "ConfigurationProfile", + "path": "aws-appconfig-configuration/MyHostedConfig/ConfigurationProfile", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ConfigurationProfile", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "locationUri": "hosted", + "name": "awsappconfigconfiguration-MyHostedConfig-4CF350AE", + "validators": [ + { + "content": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"string\"\n}", + "type": "JSON_SCHEMA" + }, + { + "content": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"string\"\n}", + "type": "JSON_SCHEMA" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnConfigurationProfile", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyHostedConfig/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::HostedConfigurationVersion", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "configurationProfileId": { + "Ref": "MyHostedConfigConfigurationProfile2E1A2BBC" + }, + "content": "This is my configuration content.", + "contentType": "text/plain" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnHostedConfigurationVersion", + "version": "0.0.0" + } + }, + "Deployment8E5DB": { + "id": "Deployment8E5DB", + "path": "aws-appconfig-configuration/MyHostedConfig/Deployment8E5DB", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Deployment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "configurationProfileId": { + "Ref": "MyHostedConfigConfigurationProfile2E1A2BBC" + }, + "configurationVersion": { + "Ref": "MyHostedConfig51D3877D" + }, + "deploymentStrategyId": { + "Ref": "MyDeployStrategy062CAEA2" + }, + "environmentId": { + "Ref": "MyAppConfigHostedEnvF39C847E" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeployment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.HostedConfiguration", + "version": "0.0.0" + } + }, + "MyHostedConfigFromJson": { + "id": "MyHostedConfigFromJson", + "path": "aws-appconfig-configuration/MyHostedConfigFromJson", + "children": { + "ConfigurationProfile": { + "id": "ConfigurationProfile", + "path": "aws-appconfig-configuration/MyHostedConfigFromJson/ConfigurationProfile", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ConfigurationProfile", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "locationUri": "hosted", + "name": "awsappconfigconfiguration-MyHostedConfigFromJson-3E786E81" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnConfigurationProfile", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyHostedConfigFromJson/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::HostedConfigurationVersion", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "configurationProfileId": { + "Ref": "MyHostedConfigFromJsonConfigurationProfile863E1E42" + }, + "content": "This is the configuration content", + "contentType": "text/plain" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnHostedConfigurationVersion", + "version": "0.0.0" + } + }, + "Deployment3AC6E": { + "id": "Deployment3AC6E", + "path": "aws-appconfig-configuration/MyHostedConfigFromJson/Deployment3AC6E", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Deployment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "configurationProfileId": { + "Ref": "MyHostedConfigFromJsonConfigurationProfile863E1E42" + }, + "configurationVersion": { + "Ref": "MyHostedConfigFromJsonD8CF9BE4" + }, + "deploymentStrategyId": { + "Ref": "MyDeployStrategy062CAEA2" + }, + "environmentId": { + "Ref": "MyAppConfigHostedEnvFromJson9E6E36C4" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeployment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.HostedConfiguration", + "version": "0.0.0" + } + }, + "MyHostedConfigFromYaml": { + "id": "MyHostedConfigFromYaml", + "path": "aws-appconfig-configuration/MyHostedConfigFromYaml", + "children": { + "ConfigurationProfile": { + "id": "ConfigurationProfile", + "path": "aws-appconfig-configuration/MyHostedConfigFromYaml/ConfigurationProfile", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ConfigurationProfile", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "locationUri": "hosted", + "name": "awsappconfigconfiguration-MyHostedConfigFromYaml-87E9786A" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnConfigurationProfile", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyHostedConfigFromYaml/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::HostedConfigurationVersion", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "configurationProfileId": { + "Ref": "MyHostedConfigFromYamlConfigurationProfile7C77A435" + }, + "content": "This is the configuration content", + "contentType": "application/x-yaml" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnHostedConfigurationVersion", + "version": "0.0.0" + } + }, + "DeploymentD93A5": { + "id": "DeploymentD93A5", + "path": "aws-appconfig-configuration/MyHostedConfigFromYaml/DeploymentD93A5", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Deployment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "configurationProfileId": { + "Ref": "MyHostedConfigFromYamlConfigurationProfile7C77A435" + }, + "configurationVersion": { + "Ref": "MyHostedConfigFromYaml13C5BE35" + }, + "deploymentStrategyId": { + "Ref": "MyDeployStrategy062CAEA2" + }, + "environmentId": { + "Ref": "MyAppConfigHostedEnvFromYaml82D3D1B2" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeployment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.HostedConfiguration", + "version": "0.0.0" + } + }, + "MyValidatorFunction": { + "id": "MyValidatorFunction", + "path": "aws-appconfig-configuration/MyValidatorFunction", + "children": { + "ServiceRole": { + "id": "ServiceRole", + "path": "aws-appconfig-configuration/MyValidatorFunction/ServiceRole", + "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "aws-appconfig-configuration/MyValidatorFunction/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyValidatorFunction/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" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyValidatorFunction/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Lambda::Function", + "aws:cdk:cloudformation:props": { + "code": { + "zipFile": "\ndef handler(event, context):\n print('This is my dummy validator')\n" + }, + "handler": "index.handler", + "role": { + "Fn::GetAtt": [ + "MyValidatorFunctionServiceRole5CD02390", + "Arn" + ] + }, + "runtime": "python3.8" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", + "version": "0.0.0" + } + }, + "AppConfigPermission": { + "id": "AppConfigPermission", + "path": "aws-appconfig-configuration/MyValidatorFunction/AppConfigPermission", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Lambda::Permission", + "aws:cdk:cloudformation:props": { + "action": "lambda:InvokeFunction", + "functionName": { + "Fn::GetAtt": [ + "MyValidatorFunctionA679CB3C", + "Arn" + ] + }, + "principal": "appconfig.amazonaws.com" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.CfnPermission", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.Function", + "version": "0.0.0" + } + }, + "MyParameter": { + "id": "MyParameter", + "path": "aws-appconfig-configuration/MyParameter", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyParameter/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SSM::Parameter", + "aws:cdk:cloudformation:props": { + "type": "String", + "value": "This is the content stored in ssm parameter" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ssm.CfnParameter", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ssm.StringParameter", + "version": "0.0.0" + } + }, + "MyConfigFromParameter": { + "id": "MyConfigFromParameter", + "path": "aws-appconfig-configuration/MyConfigFromParameter", + "children": { + "Role": { + "id": "Role", + "path": "aws-appconfig-configuration/MyConfigFromParameter/Role", + "children": { + "ImportRole": { + "id": "ImportRole", + "path": "aws-appconfig-configuration/MyConfigFromParameter/Role/ImportRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromParameter/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "policies": [ + { + "policyName": "AllowAppConfigReadFromSourcePolicy", + "policyDocument": { + "Statement": [ + { + "Action": "ssm:GetParameter", + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ssm:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":parameter/", + { + "Ref": "MyParameter18BA547D" + } + ] + ] + } + } + ], + "Version": "2012-10-17" + } + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromParameter/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ConfigurationProfile", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "description": "This is a configuration profile used for integ testing", + "locationUri": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ssm:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":parameter/", + { + "Ref": "MyParameter18BA547D" + } + ] + ] + }, + "name": "TestConfigProfileStoredAsParamater", + "retrievalRoleArn": { + "Fn::GetAtt": [ + "MyConfigFromParameterRole4E40C8BC", + "Arn" + ] + }, + "validators": [ + { + "content": { + "Fn::GetAtt": [ + "MyValidatorFunctionA679CB3C", + "Arn" + ] + }, + "type": "LAMBDA" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnConfigurationProfile", + "version": "0.0.0" + } + }, + "Deployment28051": { + "id": "Deployment28051", + "path": "aws-appconfig-configuration/MyConfigFromParameter/Deployment28051", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Deployment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "configurationProfileId": { + "Ref": "MyConfigFromParameterDC204468" + }, + "configurationVersion": "1", + "deploymentStrategyId": { + "Ref": "MyDeployStrategy062CAEA2" + }, + "description": "This is a configuration profile used for integ testing", + "environmentId": { + "Ref": "MyAppConfigParameterEnvD769FB19" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeployment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.SourcedConfiguration", + "version": "0.0.0" + } + }, + "MyDocument": { + "id": "MyDocument", + "path": "aws-appconfig-configuration/MyDocument", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SSM::Document", + "aws:cdk:cloudformation:props": { + "content": { + "schemaVersion": "2.2", + "description": "Sample SSM Document", + "mainSteps": [ + { + "action": "aws:runShellScript", + "name": "step1", + "inputs": { + "runCommand": [ + "echo \"Hello, World!\"" + ] + } + } + ] + }, + "documentType": "Command", + "name": "TestDocument" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ssm.CfnDocument", + "version": "0.0.0" + } + }, + "MyConfigFromDocument": { + "id": "MyConfigFromDocument", + "path": "aws-appconfig-configuration/MyConfigFromDocument", + "children": { + "Role": { + "id": "Role", + "path": "aws-appconfig-configuration/MyConfigFromDocument/Role", + "children": { + "ImportRole": { + "id": "ImportRole", + "path": "aws-appconfig-configuration/MyConfigFromDocument/Role/ImportRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromDocument/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "policies": [ + { + "policyName": "AllowAppConfigReadFromSourcePolicy", + "policyDocument": { + "Statement": [ + { + "Action": "ssm:GetDocument", + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ssm:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":document/", + { + "Ref": "MyDocument" + } + ] + ] + } + } + ], + "Version": "2012-10-17" + } + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromDocument/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ConfigurationProfile", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "locationUri": { + "Fn::Join": [ + "", + [ + "ssm-document://", + { + "Ref": "MyDocument" + } + ] + ] + }, + "name": "awsappconfigconfiguration-MyConfigFromDocument-A15AC401", + "retrievalRoleArn": { + "Fn::GetAtt": [ + "MyConfigFromDocumentRole29FB4D3D", + "Arn" + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnConfigurationProfile", + "version": "0.0.0" + } + }, + "Deployment7A5BA": { + "id": "Deployment7A5BA", + "path": "aws-appconfig-configuration/MyConfigFromDocument/Deployment7A5BA", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Deployment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "configurationProfileId": { + "Ref": "MyConfigFromDocument79E66ABA" + }, + "configurationVersion": "1", + "deploymentStrategyId": { + "Ref": "MyDeployStrategy062CAEA2" + }, + "environmentId": { + "Ref": "MyAppConfigDocumentEnv34B10223" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeployment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.SourcedConfiguration", + "version": "0.0.0" + } + }, + "MyBucket": { + "id": "MyBucket", + "path": "aws-appconfig-configuration/MyBucket", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyBucket/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::S3::Bucket", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "aws-cdk:cr-owned:2255b7ad", + "value": "true" + } + ], + "versioningConfiguration": { + "status": "Enabled" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.CfnBucket", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.Bucket", + "version": "0.0.0" + } + }, + "DeployConfigInBucket": { + "id": "DeployConfigInBucket", + "path": "aws-appconfig-configuration/DeployConfigInBucket", + "children": { + "AwsCliLayer": { + "id": "AwsCliLayer", + "path": "aws-appconfig-configuration/DeployConfigInBucket/AwsCliLayer", + "children": { + "Code": { + "id": "Code", + "path": "aws-appconfig-configuration/DeployConfigInBucket/AwsCliLayer/Code", + "children": { + "Stage": { + "id": "Stage", + "path": "aws-appconfig-configuration/DeployConfigInBucket/AwsCliLayer/Code/Stage", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "0.0.0" + } + }, + "AssetBucket": { + "id": "AssetBucket", + "path": "aws-appconfig-configuration/DeployConfigInBucket/AwsCliLayer/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": "aws-appconfig-configuration/DeployConfigInBucket/AwsCliLayer/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Lambda::LayerVersion", + "aws:cdk:cloudformation:props": { + "content": { + "s3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "s3Key": "3322b7049fb0ed2b7cbb644a2ada8d1116ff80c32dca89e6ada846b5de26f961.zip" + }, + "description": "/opt/awscli/aws" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.CfnLayerVersion", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.lambda_layer_awscli.AwsCliLayer", + "version": "0.0.0" + } + }, + "CustomResourceHandler": { + "id": "CustomResourceHandler", + "path": "aws-appconfig-configuration/DeployConfigInBucket/CustomResourceHandler", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.SingletonFunction", + "version": "0.0.0" + } + }, + "Asset1": { + "id": "Asset1", + "path": "aws-appconfig-configuration/DeployConfigInBucket/Asset1", + "children": { + "Stage": { + "id": "Stage", + "path": "aws-appconfig-configuration/DeployConfigInBucket/Asset1/Stage", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "0.0.0" + } + }, + "AssetBucket": { + "id": "AssetBucket", + "path": "aws-appconfig-configuration/DeployConfigInBucket/Asset1/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" + } + }, + "CustomResource": { + "id": "CustomResource", + "path": "aws-appconfig-configuration/DeployConfigInBucket/CustomResource", + "children": { + "Default": { + "id": "Default", + "path": "aws-appconfig-configuration/DeployConfigInBucket/CustomResource/Default", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.CustomResource", + "version": "0.0.0" + } + }, + "Asset2": { + "id": "Asset2", + "path": "aws-appconfig-configuration/DeployConfigInBucket/Asset2", + "children": { + "Stage": { + "id": "Stage", + "path": "aws-appconfig-configuration/DeployConfigInBucket/Asset2/Stage", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "0.0.0" + } + }, + "AssetBucket": { + "id": "AssetBucket", + "path": "aws-appconfig-configuration/DeployConfigInBucket/Asset2/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" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3_deployment.BucketDeployment", + "version": "0.0.0" + } + }, + "Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C": { + "id": "Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C", + "path": "aws-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C", + "children": { + "ServiceRole": { + "id": "ServiceRole", + "path": "aws-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/ServiceRole", + "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "aws-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/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-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/ServiceRole/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/ServiceRole/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":s3:::", + { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "/*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":s3:::", + { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + } + ] + ] + } + ] + }, + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF", + "roles": [ + { + "Ref": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265" + } + ] + } + }, + "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.aws_iam.Role", + "version": "0.0.0" + } + }, + "Code": { + "id": "Code", + "path": "aws-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/Code", + "children": { + "Stage": { + "id": "Stage", + "path": "aws-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/Code/Stage", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "0.0.0" + } + }, + "AssetBucket": { + "id": "AssetBucket", + "path": "aws-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/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": "aws-appconfig-configuration/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C/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": "e976a796f036a5efbf44b99e44cfb5a961df08d8dbf7cd37e60bf216fb982a00.zip" + }, + "environment": { + "variables": { + "AWS_CA_BUNDLE": "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem" + } + }, + "handler": "index.handler", + "layers": [ + { + "Ref": "DeployConfigInBucketAwsCliLayerFC57D055" + } + ], + "role": { + "Fn::GetAtt": [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", + "Arn" + ] + }, + "runtime": "python3.9", + "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" + } + }, + "MyConfigFromBucket": { + "id": "MyConfigFromBucket", + "path": "aws-appconfig-configuration/MyConfigFromBucket", + "children": { + "DeploymentStrategy": { + "id": "DeploymentStrategy", + "path": "aws-appconfig-configuration/MyConfigFromBucket/DeploymentStrategy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromBucket/DeploymentStrategy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::DeploymentStrategy", + "aws:cdk:cloudformation:props": { + "deploymentDurationInMinutes": 20, + "finalBakeTimeInMinutes": 10, + "growthFactor": 10, + "growthType": "EXPONENTIAL", + "name": "awsappconfigconfiguration-MyomBucket-DeploymentStrategy-8366DF86", + "replicateTo": "NONE" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeploymentStrategy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.DeploymentStrategy", + "version": "0.0.0" + } + }, + "Role": { + "id": "Role", + "path": "aws-appconfig-configuration/MyConfigFromBucket/Role", + "children": { + "ImportRole": { + "id": "ImportRole", + "path": "aws-appconfig-configuration/MyConfigFromBucket/Role/ImportRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromBucket/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "policies": [ + { + "policyName": "AllowAppConfigReadFromSourcePolicy", + "policyDocument": { + "Statement": [ + { + "Action": [ + "s3:GetObject", + "s3:GetObjectMetadata", + "s3:GetObjectVersion" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":s3:::", + { + "Ref": "MyBucketF68F3FF0" + }, + "/hello/world/file.txt" + ] + ] + } + }, + { + "Action": [ + "s3:GetBucketLocation", + "s3:GetBucketVersioning", + "s3:ListBucket", + "s3:ListBucketVersions" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":s3:::", + { + "Ref": "MyBucketF68F3FF0" + } + ] + ] + } + }, + { + "Action": "s3:ListAllMyBuckets", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + } + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromBucket/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ConfigurationProfile", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "description": { + "Fn::Join": [ + "", + [ + "Sourced from ", + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DeployConfigInBucketCustomResource91997C5B", + "SourceObjectKeys" + ] + } + ] + } + ] + ] + }, + "locationUri": { + "Fn::Join": [ + "", + [ + "s3://", + { + "Ref": "MyBucketF68F3FF0" + }, + "/hello/world/file.txt" + ] + ] + }, + "name": "awsappconfigconfiguration-MyConfigFromBucket-79972829", + "retrievalRoleArn": { + "Fn::GetAtt": [ + "MyConfigFromBucketRole5749669F", + "Arn" + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnConfigurationProfile", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.SourcedConfiguration", + "version": "0.0.0" + } + }, + "MySecret": { + "id": "MySecret", + "path": "aws-appconfig-configuration/MySecret", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MySecret/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SecretsManager::Secret", + "aws:cdk:cloudformation:props": { + "secretString": "This is the content stored in secrets manager" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_secretsmanager.CfnSecret", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_secretsmanager.Secret", + "version": "0.0.0" + } + }, + "MyConfigFromSecret": { + "id": "MyConfigFromSecret", + "path": "aws-appconfig-configuration/MyConfigFromSecret", + "children": { + "DeploymentStrategy": { + "id": "DeploymentStrategy", + "path": "aws-appconfig-configuration/MyConfigFromSecret/DeploymentStrategy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromSecret/DeploymentStrategy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::DeploymentStrategy", + "aws:cdk:cloudformation:props": { + "deploymentDurationInMinutes": 20, + "finalBakeTimeInMinutes": 10, + "growthFactor": 10, + "growthType": "EXPONENTIAL", + "name": "awsappconfigconfiguration-MyomSecret-DeploymentStrategy-2F6D94AB", + "replicateTo": "NONE" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeploymentStrategy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.DeploymentStrategy", + "version": "0.0.0" + } + }, + "Role": { + "id": "Role", + "path": "aws-appconfig-configuration/MyConfigFromSecret/Role", + "children": { + "ImportRole": { + "id": "ImportRole", + "path": "aws-appconfig-configuration/MyConfigFromSecret/Role/ImportRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromSecret/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "policies": [ + { + "policyName": "AllowAppConfigReadFromSourcePolicy", + "policyDocument": { + "Statement": [ + { + "Action": "secretsmanager:GetSecretValue", + "Effect": "Allow", + "Resource": { + "Ref": "MySecret8FE80B51" + } + } + ], + "Version": "2012-10-17" + } + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromSecret/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ConfigurationProfile", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "locationUri": { + "Ref": "MySecret8FE80B51" + }, + "name": "awsappconfigconfiguration-MyConfigFromSecret-3BD4C031", + "retrievalRoleArn": { + "Fn::GetAtt": [ + "MyConfigFromSecretRole77E11CE7", + "Arn" + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnConfigurationProfile", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.SourcedConfiguration", + "version": "0.0.0" + } + }, + "MyKey": { + "id": "MyKey", + "path": "aws-appconfig-configuration/MyKey", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyKey/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::KMS::Key", + "aws:cdk:cloudformation:props": { + "keyPolicy": { + "Statement": [ + { + "Action": "kms:*", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + }, + "Resource": "*" + }, + { + "Action": [ + "kms:CreateGrant", + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:GenerateDataKey*", + "kms:ReEncrypt*" + ], + "Condition": { + "StringEquals": { + "kms:ViaService": { + "Fn::Join": [ + "", + [ + "secretsmanager.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com" + ] + ] + } + } + }, + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + }, + "Resource": "*" + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_kms.CfnKey", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_kms.Key", + "version": "0.0.0" + } + }, + "MySecretWithKey": { + "id": "MySecretWithKey", + "path": "aws-appconfig-configuration/MySecretWithKey", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MySecretWithKey/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SecretsManager::Secret", + "aws:cdk:cloudformation:props": { + "kmsKeyId": { + "Fn::GetAtt": [ + "MyKey6AB29FA6", + "Arn" + ] + }, + "secretString": "This is the content stored in secrets manager" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_secretsmanager.CfnSecret", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_secretsmanager.Secret", + "version": "0.0.0" + } + }, + "MyConfigFromSecretWithKey": { + "id": "MyConfigFromSecretWithKey", + "path": "aws-appconfig-configuration/MyConfigFromSecretWithKey", + "children": { + "DeploymentStrategy": { + "id": "DeploymentStrategy", + "path": "aws-appconfig-configuration/MyConfigFromSecretWithKey/DeploymentStrategy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromSecretWithKey/DeploymentStrategy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::DeploymentStrategy", + "aws:cdk:cloudformation:props": { + "deploymentDurationInMinutes": 20, + "finalBakeTimeInMinutes": 10, + "growthFactor": 10, + "growthType": "EXPONENTIAL", + "name": "awsappconfigconfiguration-MytWithKey-DeploymentStrategy-70C32371", + "replicateTo": "NONE" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeploymentStrategy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.DeploymentStrategy", + "version": "0.0.0" + } + }, + "Role": { + "id": "Role", + "path": "aws-appconfig-configuration/MyConfigFromSecretWithKey/Role", + "children": { + "ImportRole": { + "id": "ImportRole", + "path": "aws-appconfig-configuration/MyConfigFromSecretWithKey/Role/ImportRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromSecretWithKey/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "policies": [ + { + "policyName": "AllowAppConfigReadFromSourcePolicy", + "policyDocument": { + "Statement": [ + { + "Action": "secretsmanager:GetSecretValue", + "Effect": "Allow", + "Resource": { + "Ref": "MySecretWithKey1F7B590B" + } + }, + { + "Action": "kms:Decrypt", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "MyKey6AB29FA6", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + } + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromSecretWithKey/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ConfigurationProfile", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "locationUri": { + "Ref": "MySecretWithKey1F7B590B" + }, + "name": "awsappconfigconfiguration-MyConfigFromSecretWithKey-516D9EB2", + "retrievalRoleArn": { + "Fn::GetAtt": [ + "MyConfigFromSecretWithKeyRole3C7B494A", + "Arn" + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnConfigurationProfile", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.SourcedConfiguration", + "version": "0.0.0" + } + }, + "MyPipeline": { + "id": "MyPipeline", + "path": "aws-appconfig-configuration/MyPipeline", + "children": { + "ArtifactsBucketEncryptionKey": { + "id": "ArtifactsBucketEncryptionKey", + "path": "aws-appconfig-configuration/MyPipeline/ArtifactsBucketEncryptionKey", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyPipeline/ArtifactsBucketEncryptionKey/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::KMS::Key", + "aws:cdk:cloudformation:props": { + "keyPolicy": { + "Statement": [ + { + "Action": "kms:*", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + }, + "Resource": "*" + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_kms.CfnKey", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_kms.Key", + "version": "0.0.0" + } + }, + "ArtifactsBucketEncryptionKeyAlias": { + "id": "ArtifactsBucketEncryptionKeyAlias", + "path": "aws-appconfig-configuration/MyPipeline/ArtifactsBucketEncryptionKeyAlias", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyPipeline/ArtifactsBucketEncryptionKeyAlias/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::KMS::Alias", + "aws:cdk:cloudformation:props": { + "aliasName": "alias/codepipeline-aws-appconfig-configuration-mypipeline-893f29d4", + "targetKeyId": { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3", + "Arn" + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_kms.CfnAlias", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_kms.Alias", + "version": "0.0.0" + } + }, + "ArtifactsBucket": { + "id": "ArtifactsBucket", + "path": "aws-appconfig-configuration/MyPipeline/ArtifactsBucket", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyPipeline/ArtifactsBucket/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::S3::Bucket", + "aws:cdk:cloudformation:props": { + "bucketEncryption": { + "serverSideEncryptionConfiguration": [ + { + "serverSideEncryptionByDefault": { + "sseAlgorithm": "aws:kms", + "kmsMasterKeyId": { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3", + "Arn" + ] + } + } + } + ] + }, + "publicAccessBlockConfiguration": { + "blockPublicAcls": true, + "blockPublicPolicy": true, + "ignorePublicAcls": true, + "restrictPublicBuckets": true + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.CfnBucket", + "version": "0.0.0" + } + }, + "Policy": { + "id": "Policy", + "path": "aws-appconfig-configuration/MyPipeline/ArtifactsBucket/Policy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyPipeline/ArtifactsBucket/Policy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::S3::BucketPolicy", + "aws:cdk:cloudformation:props": { + "bucket": { + "Ref": "MyPipelineArtifactsBucket727923DD" + }, + "policyDocument": { + "Statement": [ + { + "Action": "s3:*", + "Condition": { + "Bool": { + "aws:SecureTransport": "false" + } + }, + "Effect": "Deny", + "Principal": { + "AWS": "*" + }, + "Resource": [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.CfnBucketPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.BucketPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.Bucket", + "version": "0.0.0" + } + }, + "Role": { + "id": "Role", + "path": "aws-appconfig-configuration/MyPipeline/Role", + "children": { + "ImportRole": { + "id": "ImportRole", + "path": "aws-appconfig-configuration/MyPipeline/Role/ImportRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyPipeline/Role/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "codepipeline.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "aws-appconfig-configuration/MyPipeline/Role/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyPipeline/Role/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:GenerateDataKey*", + "kms:ReEncrypt*" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3", + "Arn" + ] + } + }, + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyPipelinebetaSourceCodePipelineActionRoleA59DCC4C", + "Arn" + ] + }, + { + "Fn::GetAtt": [ + "MyPipelineprodDeployCodePipelineActionRoleFAD07544", + "Arn" + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "MyPipelineRoleDefaultPolicy34F09EFA", + "roles": [ + { + "Ref": "MyPipelineRoleC0D47CA4" + } + ] + } + }, + "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.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyPipeline/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CodePipeline::Pipeline", + "aws:cdk:cloudformation:props": { + "artifactStore": { + "type": "S3", + "location": { + "Ref": "MyPipelineArtifactsBucket727923DD" + }, + "encryptionKey": { + "type": "KMS", + "id": { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3", + "Arn" + ] + } + } + }, + "roleArn": { + "Fn::GetAtt": [ + "MyPipelineRoleC0D47CA4", + "Arn" + ] + }, + "stages": [ + { + "name": "beta", + "actions": [ + { + "name": "Source", + "outputArtifacts": [ + { + "name": "SourceOutput" + } + ], + "actionTypeId": { + "category": "Source", + "version": "1", + "owner": "AWS", + "provider": "S3" + }, + "configuration": { + "S3Bucket": { + "Ref": "MyBucketF68F3FF0" + }, + "S3ObjectKey": "hello/world/codepipeline.txt" + }, + "runOrder": 1, + "roleArn": { + "Fn::GetAtt": [ + "MyPipelinebetaSourceCodePipelineActionRoleA59DCC4C", + "Arn" + ] + } + } + ] + }, + { + "name": "prod", + "actions": [ + { + "name": "Deploy", + "inputArtifacts": [ + { + "name": "SourceOutput" + } + ], + "actionTypeId": { + "category": "Deploy", + "version": "1", + "owner": "AWS", + "provider": "S3" + }, + "configuration": { + "BucketName": { + "Ref": "MyBucketF68F3FF0" + }, + "Extract": "true" + }, + "runOrder": 1, + "roleArn": { + "Fn::GetAtt": [ + "MyPipelineprodDeployCodePipelineActionRoleFAD07544", + "Arn" + ] + } + } + ] + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codepipeline.CfnPipeline", + "version": "0.0.0" + } + }, + "beta": { + "id": "beta", + "path": "aws-appconfig-configuration/MyPipeline/beta", + "children": { + "Source": { + "id": "Source", + "path": "aws-appconfig-configuration/MyPipeline/beta/Source", + "children": { + "CodePipelineActionRole": { + "id": "CodePipelineActionRole", + "path": "aws-appconfig-configuration/MyPipeline/beta/Source/CodePipelineActionRole", + "children": { + "ImportCodePipelineActionRole": { + "id": "ImportCodePipelineActionRole", + "path": "aws-appconfig-configuration/MyPipeline/beta/Source/CodePipelineActionRole/ImportCodePipelineActionRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyPipeline/beta/Source/CodePipelineActionRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "aws-appconfig-configuration/MyPipeline/beta/Source/CodePipelineActionRole/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyPipeline/beta/Source/CodePipelineActionRole/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "Arn" + ] + }, + "/hello/world/codepipeline.txt" + ] + ] + } + ] + }, + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": [ + "kms:Decrypt", + "kms:Encrypt", + "kms:GenerateDataKey*", + "kms:ReEncrypt*" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "policyName": "MyPipelinebetaSourceCodePipelineActionRoleDefaultPolicy4F6DF82E", + "roles": [ + { + "Ref": "MyPipelinebetaSourceCodePipelineActionRoleA59DCC4C" + } + ] + } + }, + "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.aws_iam.Role", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + }, + "prod": { + "id": "prod", + "path": "aws-appconfig-configuration/MyPipeline/prod", + "children": { + "Deploy": { + "id": "Deploy", + "path": "aws-appconfig-configuration/MyPipeline/prod/Deploy", + "children": { + "CodePipelineActionRole": { + "id": "CodePipelineActionRole", + "path": "aws-appconfig-configuration/MyPipeline/prod/Deploy/CodePipelineActionRole", + "children": { + "ImportCodePipelineActionRole": { + "id": "ImportCodePipelineActionRole", + "path": "aws-appconfig-configuration/MyPipeline/prod/Deploy/CodePipelineActionRole/ImportCodePipelineActionRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyPipeline/prod/Deploy/CodePipelineActionRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "aws-appconfig-configuration/MyPipeline/prod/Deploy/CodePipelineActionRole/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyPipeline/prod/Deploy/CodePipelineActionRole/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "s3:Abort*", + "s3:DeleteObject*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": [ + "s3:GetBucket*", + "s3:GetObject*", + "s3:List*" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucket727923DD", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": [ + "kms:Decrypt", + "kms:DescribeKey" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "MyPipelineArtifactsBucketEncryptionKey8BF0A7F3", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "policyName": "MyPipelineprodDeployCodePipelineActionRoleDefaultPolicyF1913519", + "roles": [ + { + "Ref": "MyPipelineprodDeployCodePipelineActionRoleFAD07544" + } + ] + } + }, + "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.aws_iam.Role", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_codepipeline.Pipeline", + "version": "0.0.0" + } + }, + "MyConfigFromPipeline": { + "id": "MyConfigFromPipeline", + "path": "aws-appconfig-configuration/MyConfigFromPipeline", + "children": { + "DeploymentStrategy": { + "id": "DeploymentStrategy", + "path": "aws-appconfig-configuration/MyConfigFromPipeline/DeploymentStrategy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromPipeline/DeploymentStrategy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::DeploymentStrategy", + "aws:cdk:cloudformation:props": { + "deploymentDurationInMinutes": 20, + "finalBakeTimeInMinutes": 10, + "growthFactor": 10, + "growthType": "EXPONENTIAL", + "name": "awsappconfigconfiguration-MyPipeline-DeploymentStrategy-5F76004F", + "replicateTo": "NONE" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeploymentStrategy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.DeploymentStrategy", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-configuration/MyConfigFromPipeline/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ConfigurationProfile", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyAppConfigB4B63E75" + }, + "locationUri": { + "Fn::Join": [ + "", + [ + "codepipeline://", + { + "Ref": "MyPipelineAED38ECF" + } + ] + ] + }, + "name": "awsappconfigconfiguration-MyConfigFromPipeline-FD2B6B65" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnConfigurationProfile", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.SourcedConfiguration", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-appconfig-configuration/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-appconfig-configuration/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "appconfig-configuration": { + "id": "appconfig-configuration", + "path": "appconfig-configuration", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "appconfig-configuration/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "appconfig-configuration/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "appconfig-configuration/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "appconfig-configuration/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "appconfig-configuration/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 diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.ts new file mode 100644 index 0000000000000..fff2fb369f76a --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.configuration.ts @@ -0,0 +1,228 @@ +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import { App, Duration, Stack, RemovalPolicy, Fn, SecretValue } from 'aws-cdk-lib'; +import { Artifact, Pipeline } from 'aws-cdk-lib/aws-codepipeline'; +import { S3DeployAction, S3SourceAction } from 'aws-cdk-lib/aws-codepipeline-actions'; +import { Key } from 'aws-cdk-lib/aws-kms'; +import { Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda'; +import { Bucket } from 'aws-cdk-lib/aws-s3'; +import * as s3Deployment from 'aws-cdk-lib/aws-s3-deployment'; +import { Secret } from 'aws-cdk-lib/aws-secretsmanager'; +import { CfnDocument, StringParameter } from 'aws-cdk-lib/aws-ssm'; +import { + Application, + ConfigurationContent, + ConfigurationSource, + DeploymentStrategy, + HostedConfiguration, + JsonSchemaValidator, + LambdaValidator, + RolloutStrategy, + SourcedConfiguration, +} from 'aws-cdk-lib/aws-appconfig'; + +const SCHEMA_STR = +`{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "string" +}`; + +const LAMBDA_CODE = +` +def handler(event, context): + print('This is my dummy validator') +`; + +const app = new App(); + +const stack = new Stack(app, 'aws-appconfig-configuration'); + +// create application for config profile +const appConfigApp = new Application(stack, 'MyAppConfig', { + applicationName: 'AppForConfigTest', +}); + +const deploymentStrategy = new DeploymentStrategy(stack, 'MyDeployStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 100, + deploymentDuration: Duration.minutes(0), + }), +}); + +// hosted config from file +new HostedConfiguration(stack, 'MyHostedConfigFromFile', { + application: appConfigApp, + content: ConfigurationContent.fromFile('config.json'), +}); + +// create basic config profile and add config version +const hostedEnv = appConfigApp.addEnvironment('HostedEnv'); +new HostedConfiguration(stack, 'MyHostedConfig', { + application: appConfigApp, + content: ConfigurationContent.fromInlineText('This is my configuration content.'), + deployTo: [hostedEnv], + validators: [ + JsonSchemaValidator.fromInline(SCHEMA_STR), + JsonSchemaValidator.fromFile('schema.json'), + ], + deploymentStrategy, +}); + +// create basic config profile from add config version from file +const hostedEnvFromJson = appConfigApp.addEnvironment('HostedEnvFromJson'); +new HostedConfiguration(stack, 'MyHostedConfigFromJson', { + application: appConfigApp, + content: ConfigurationContent.fromInlineText('This is the configuration content'), + deployTo: [hostedEnvFromJson], + deploymentStrategy, +}); + +const hostedEnvFromYaml = appConfigApp.addEnvironment('HostedEnvFromYaml'); +new HostedConfiguration(stack, 'MyHostedConfigFromYaml', { + application: appConfigApp, + content: ConfigurationContent.fromInlineYaml('This is the configuration content'), + deployTo: [hostedEnvFromYaml], + deploymentStrategy, +}); + +// ssm paramter as configuration source +const func = new Function(stack, 'MyValidatorFunction', { + runtime: Runtime.PYTHON_3_8, + handler: 'index.handler', + code: Code.fromInline(LAMBDA_CODE), +}); +const parameterEnv = appConfigApp.addEnvironment('ParameterEnv'); +const ssmParameter = new StringParameter(stack, 'MyParameter', { + stringValue: 'This is the content stored in ssm parameter', +}); +new SourcedConfiguration(stack, 'MyConfigFromParameter', { + name: 'TestConfigProfileStoredAsParamater', + application: appConfigApp, + description: 'This is a configuration profile used for integ testing', + location: ConfigurationSource.fromParameter(ssmParameter), + versionNumber: '1', + deployTo: [parameterEnv], + validators: [ + LambdaValidator.fromFunction(func), + ], + deploymentStrategy, +}); + +// ssm document as configuration source +const documentEnv = appConfigApp.addEnvironment('DocumentEnv'); +const ssmDocument = new CfnDocument(stack, 'MyDocument', { + content: { + schemaVersion: '2.2', + description: 'Sample SSM Document', + mainSteps: [ + { + action: 'aws:runShellScript', + name: 'step1', + inputs: { + runCommand: [ + 'echo "Hello, World!"', + ], + }, + }, + ], + }, + documentType: 'Command', + name: 'TestDocument', +}); +new SourcedConfiguration(stack, 'MyConfigFromDocument', { + application: appConfigApp, + location: ConfigurationSource.fromCfnDocument(ssmDocument), + versionNumber: '1', + deployTo: [documentEnv], + deploymentStrategy, +}); + +// S3 as configuration source +const bucketEnv = appConfigApp.addEnvironment('BucketEnv'); +const bucket = new Bucket(stack, 'MyBucket', { + versioned: true, + removalPolicy: RemovalPolicy.DESTROY, +}); +bucket.applyRemovalPolicy(RemovalPolicy.DESTROY); +const deployment = new s3Deployment.BucketDeployment(stack, 'DeployConfigInBucket', { + sources: [s3Deployment.Source.data('hello/world/file.txt', 'This is the content stored in S3')], + destinationBucket: bucket, + retainOnDelete: false, +}); +new SourcedConfiguration(stack, 'MyConfigFromBucket', { + application: appConfigApp, + location: ConfigurationSource.fromBucket(bucket, 'hello/world/file.txt'), + description: `Sourced from ${Fn.select(0, deployment.objectKeys)}`, + deployTo: [bucketEnv], +}); + +// secrets manager as configuration source (without key) +const secretEnv = appConfigApp.addEnvironment('SecretEnv'); +const secret = new Secret(stack, 'MySecret', { + secretStringValue: SecretValue.unsafePlainText('This is the content stored in secrets manager'), +}); +new SourcedConfiguration(stack, 'MyConfigFromSecret', { + application: appConfigApp, + location: ConfigurationSource.fromSecret(secret), + deployTo: [secretEnv], +}); + +// secrets manager as configuration source (with key) +const secretWithKeyEnv = appConfigApp.addEnvironment('SecretEnvWithKey'); +const key = new Key(stack, 'MyKey'); +const secretWithKey = new Secret(stack, 'MySecretWithKey', { + secretStringValue: SecretValue.unsafePlainText('This is the content stored in secrets manager'), + encryptionKey: key, +}); +new SourcedConfiguration(stack, 'MyConfigFromSecretWithKey', { + location: ConfigurationSource.fromSecret(secretWithKey), + deploymentKey: key, + application: appConfigApp, + deployTo: [secretWithKeyEnv], +}); + +// code pipeline as configuration source +deployment.addSource(s3Deployment.Source.data('hello/world/codepipeline.txt', 'This is the content stored in code pipeline')); +const sourceAction = new S3SourceAction({ + actionName: 'Source', + bucket: bucket, + bucketKey: 'hello/world/codepipeline.txt', + output: new Artifact('SourceOutput'), +}); +const deployAction = new S3DeployAction({ + actionName: 'Deploy', + input: Artifact.artifact('SourceOutput'), + bucket: bucket, + extract: true, +}); +const pipeline = new Pipeline(stack, 'MyPipeline', { + crossAccountKeys: true, + stages: [ + { + stageName: 'beta', + actions: [sourceAction], + }, + { + stageName: 'prod', + actions: [deployAction], + }, + ], +}); +new SourcedConfiguration(stack, 'MyConfigFromPipeline', { + application: appConfigApp, + location: ConfigurationSource.fromPipeline(pipeline), +}); + +/* resource deployment alone is sufficient because we already have the + corresponding resource handler tests to assert that resources can be + used after created */ + +new IntegTest(app, 'appconfig-configuration', { + testCases: [stack], + cdkCommandOptions: { + destroy: { + args: { + force: true, + }, + }, + }, +}); \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452.assets.json new file mode 100644 index 0000000000000..22caef8fdee1b --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452.assets.json @@ -0,0 +1,19 @@ +{ + "version": "32.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452.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-appconfig/test/integ.deployment-strategy.js.snapshot/appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452.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-appconfig/test/integ.deployment-strategy.js.snapshot/aws-appconfig-deployment-strategy.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/aws-appconfig-deployment-strategy.assets.json new file mode 100644 index 0000000000000..4c181d5492583 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/aws-appconfig-deployment-strategy.assets.json @@ -0,0 +1,19 @@ +{ + "version": "32.0.0", + "files": { + "cfda20689bf14dbe95332f041046160d462f7705f59c5f25c14b30055c21a10e": { + "source": { + "path": "aws-appconfig-deployment-strategy.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "cfda20689bf14dbe95332f041046160d462f7705f59c5f25c14b30055c21a10e.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-appconfig/test/integ.deployment-strategy.js.snapshot/aws-appconfig-deployment-strategy.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/aws-appconfig-deployment-strategy.template.json new file mode 100644 index 0000000000000..4d3c224d509fb --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/aws-appconfig-deployment-strategy.template.json @@ -0,0 +1,48 @@ +{ + "Resources": { + "MyDeploymentStrategy60D31FB0": { + "Type": "AWS::AppConfig::DeploymentStrategy", + "Properties": { + "DeploymentDurationInMinutes": 5, + "GrowthFactor": 15, + "GrowthType": "LINEAR", + "Name": "awsappconfigdeploymentstrategy-MyDeploymentStrategy-9D0AC356", + "ReplicateTo": "NONE" + } + } + }, + "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-appconfig/test/integ.deployment-strategy.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/cdk.out new file mode 100644 index 0000000000000..f0b901e7c06e5 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"32.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/integ.json new file mode 100644 index 0000000000000..09fba1f5bd925 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "32.0.0", + "testCases": { + "appconfig-deployment-strategy/DefaultTest": { + "stacks": [ + "aws-appconfig-deployment-strategy" + ], + "assertionStack": "appconfig-deployment-strategy/DefaultTest/DeployAssert", + "assertionStackName": "appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/manifest.json new file mode 100644 index 0000000000000..b0d6cfd05eb03 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/manifest.json @@ -0,0 +1,111 @@ +{ + "version": "32.0.0", + "artifacts": { + "aws-appconfig-deployment-strategy.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "aws-appconfig-deployment-strategy.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "aws-appconfig-deployment-strategy": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "aws-appconfig-deployment-strategy.template.json", + "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}/cfda20689bf14dbe95332f041046160d462f7705f59c5f25c14b30055c21a10e.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "aws-appconfig-deployment-strategy.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": [ + "aws-appconfig-deployment-strategy.assets" + ], + "metadata": { + "/aws-appconfig-deployment-strategy/MyDeploymentStrategy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyDeploymentStrategy60D31FB0" + } + ], + "/aws-appconfig-deployment-strategy/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-appconfig-deployment-strategy/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "aws-appconfig-deployment-strategy" + }, + "appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452.template.json", + "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": [ + "appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452.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": [ + "appconfigdeploymentstrategyDefaultTestDeployAssert3CECE452.assets" + ], + "metadata": { + "/appconfig-deployment-strategy/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/appconfig-deployment-strategy/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "appconfig-deployment-strategy/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/tree.json new file mode 100644 index 0000000000000..16d84ca6204f9 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.js.snapshot/tree.json @@ -0,0 +1,129 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "aws-appconfig-deployment-strategy": { + "id": "aws-appconfig-deployment-strategy", + "path": "aws-appconfig-deployment-strategy", + "children": { + "MyDeploymentStrategy": { + "id": "MyDeploymentStrategy", + "path": "aws-appconfig-deployment-strategy/MyDeploymentStrategy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-deployment-strategy/MyDeploymentStrategy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::DeploymentStrategy", + "aws:cdk:cloudformation:props": { + "deploymentDurationInMinutes": 5, + "growthFactor": 15, + "growthType": "LINEAR", + "name": "awsappconfigdeploymentstrategy-MyDeploymentStrategy-9D0AC356", + "replicateTo": "NONE" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeploymentStrategy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-appconfig-deployment-strategy/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-appconfig-deployment-strategy/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "appconfig-deployment-strategy": { + "id": "appconfig-deployment-strategy", + "path": "appconfig-deployment-strategy", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "appconfig-deployment-strategy/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "appconfig-deployment-strategy/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.2.69" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "appconfig-deployment-strategy/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "appconfig-deployment-strategy/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "appconfig-deployment-strategy/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.2.69" + } + } + }, + "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-appconfig/test/integ.deployment-strategy.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.ts new file mode 100644 index 0000000000000..00fbe9154e3a3 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.deployment-strategy.ts @@ -0,0 +1,23 @@ +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import { App, Duration, Stack } from 'aws-cdk-lib'; +import { DeploymentStrategy, RolloutStrategy } from 'aws-cdk-lib/aws-appconfig'; + +const app = new App(); + +const stack = new Stack(app, 'aws-appconfig-deployment-strategy'); + +// create basic deployment strategy +new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: Duration.minutes(5), + }), +}); + +/* resource deployment alone is sufficient because we already have the + corresponding resource handler tests to assert that resources can be + used after created */ + +new IntegTest(app, 'appconfig-deployment-strategy', { + testCases: [stack], +}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/appconfigenvironmentDefaultTestDeployAssert75BD28E7.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/appconfigenvironmentDefaultTestDeployAssert75BD28E7.assets.json new file mode 100644 index 0000000000000..947e7fb4d76ea --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/appconfigenvironmentDefaultTestDeployAssert75BD28E7.assets.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "appconfigenvironmentDefaultTestDeployAssert75BD28E7.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-appconfig/test/integ.environment.js.snapshot/appconfigenvironmentDefaultTestDeployAssert75BD28E7.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/appconfigenvironmentDefaultTestDeployAssert75BD28E7.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/appconfigenvironmentDefaultTestDeployAssert75BD28E7.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-appconfig/test/integ.environment.js.snapshot/aws-appconfig-environment.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/aws-appconfig-environment.assets.json new file mode 100644 index 0000000000000..8ffcd1a6d5b6d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/aws-appconfig-environment.assets.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.0", + "files": { + "6ec3a45c455c20f3072a3622b3e548aa72a4c1b8e5a1fac757962194d9f1c82d": { + "source": { + "path": "aws-appconfig-environment.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "6ec3a45c455c20f3072a3622b3e548aa72a4c1b8e5a1fac757962194d9f1c82d.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-appconfig/test/integ.environment.js.snapshot/aws-appconfig-environment.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/aws-appconfig-environment.template.json new file mode 100644 index 0000000000000..ea327d13d23c1 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/aws-appconfig-environment.template.json @@ -0,0 +1,267 @@ +{ + "Resources": { + "MyApplicationForEnv1F597ED9": { + "Type": "AWS::AppConfig::Application", + "Properties": { + "Name": "AppForEnvTest" + } + }, + "StartDeploymentCallCountAlarm6846E07B": { + "Type": "AWS::CloudWatch::Alarm", + "Properties": { + "ActionsEnabled": false, + "AlarmName": "AppConfigStartDeploymentCallCountAlarm", + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "Dimensions": [ + { + "Name": "Resource", + "Value": "StartDeployment" + }, + { + "Name": "Service", + "Value": "AWS AppConfig" + }, + { + "Name": "Type", + "Value": "API" + } + ], + "EvaluationPeriods": 3, + "MetricName": "CallCount", + "Namespace": "AWS/AppConfig", + "Period": 300, + "Statistic": "Sum", + "Threshold": 300, + "TreatMissingData": "notBreaching" + } + }, + "MyRoleF48FFE04": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Policies": [ + { + "PolicyDocument": { + "Statement": [ + { + "Action": "cloudwatch:DescribeAlarms", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AllowAppConfigMonitorAlarmPolicy" + } + ] + } + }, + "MyCompositeAlarm0F045229": { + "Type": "AWS::CloudWatch::CompositeAlarm", + "Properties": { + "AlarmName": "awsappconfigenvironmentMyCompositeAlarm730A7A48", + "AlarmRule": { + "Fn::Join": [ + "", + [ + "ALARM(\"", + { + "Fn::GetAtt": [ + "StartDeploymentCallCountAlarm6846E07B", + "Arn" + ] + }, + "\")" + ] + ] + } + } + }, + "MyEnvironmentRole1963C404EAE3E": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Policies": [ + { + "PolicyDocument": { + "Statement": [ + { + "Action": "cloudwatch:DescribeAlarms", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AllowAppConfigMonitorAlarmPolicy" + } + ] + } + }, + "MyEnvironment465E4DEA": { + "Type": "AWS::AppConfig::Environment", + "Properties": { + "ApplicationId": { + "Ref": "MyApplicationForEnv1F597ED9" + }, + "Description": "This is the environment for integ testing", + "Monitors": [ + { + "AlarmArn": { + "Fn::GetAtt": [ + "StartDeploymentCallCountAlarm6846E07B", + "Arn" + ] + }, + "AlarmRoleArn": { + "Fn::GetAtt": [ + "MyEnvironmentRole1963C404EAE3E", + "Arn" + ] + } + }, + { + "AlarmArn": { + "Fn::GetAtt": [ + "StartDeploymentCallCountAlarm6846E07B", + "Arn" + ] + }, + "AlarmRoleArn": { + "Fn::GetAtt": [ + "MyRoleF48FFE04", + "Arn" + ] + } + }, + { + "AlarmArn": { + "Fn::GetAtt": [ + "MyCompositeAlarm0F045229", + "Arn" + ] + }, + "AlarmRoleArn": { + "Fn::GetAtt": [ + "MyEnvironmentRole1963C404EAE3E", + "Arn" + ] + } + } + ], + "Name": "awsappconfigenvironment-MyEnvironment-C8813182" + } + }, + "MyDeploymentStrategy60D31FB0": { + "Type": "AWS::AppConfig::DeploymentStrategy", + "Properties": { + "DeploymentDurationInMinutes": 1, + "GrowthFactor": 50, + "GrowthType": "LINEAR", + "Name": "awsappconfigenvironment-MyDeploymentStrategy-28486041", + "ReplicateTo": "NONE" + } + }, + "MyConfigConfigurationProfileCF3951C3": { + "Type": "AWS::AppConfig::ConfigurationProfile", + "Properties": { + "ApplicationId": { + "Ref": "MyApplicationForEnv1F597ED9" + }, + "LocationUri": "hosted", + "Name": "awsappconfigenvironment-MyConfig-24828868" + } + }, + "MyConfigFA92D419": { + "Type": "AWS::AppConfig::HostedConfigurationVersion", + "Properties": { + "ApplicationId": { + "Ref": "MyApplicationForEnv1F597ED9" + }, + "ConfigurationProfileId": { + "Ref": "MyConfigConfigurationProfileCF3951C3" + }, + "Content": "config content", + "ContentType": "application/octet-stream" + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "MyConfigDeployment1963CC374E8A4": { + "Type": "AWS::AppConfig::Deployment", + "Properties": { + "ApplicationId": { + "Ref": "MyApplicationForEnv1F597ED9" + }, + "ConfigurationProfileId": { + "Ref": "MyConfigConfigurationProfileCF3951C3" + }, + "ConfigurationVersion": { + "Ref": "MyConfigFA92D419" + }, + "DeploymentStrategyId": { + "Ref": "MyDeploymentStrategy60D31FB0" + }, + "EnvironmentId": { + "Ref": "MyEnvironment465E4DEA" + } + } + } + }, + "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-appconfig/test/integ.environment.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/cdk.out new file mode 100644 index 0000000000000..1f0068d32659a --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/integ.json new file mode 100644 index 0000000000000..c314a395d9c88 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "36.0.0", + "testCases": { + "appconfig-environment/DefaultTest": { + "stacks": [ + "aws-appconfig-environment" + ], + "assertionStack": "appconfig-environment/DefaultTest/DeployAssert", + "assertionStackName": "appconfigenvironmentDefaultTestDeployAssert75BD28E7" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/manifest.json new file mode 100644 index 0000000000000..e21ade66747e8 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/manifest.json @@ -0,0 +1,176 @@ +{ + "version": "36.0.0", + "artifacts": { + "aws-appconfig-environment.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "aws-appconfig-environment.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "aws-appconfig-environment": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "aws-appconfig-environment.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}/6ec3a45c455c20f3072a3622b3e548aa72a4c1b8e5a1fac757962194d9f1c82d.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "aws-appconfig-environment.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": [ + "aws-appconfig-environment.assets" + ], + "metadata": { + "/aws-appconfig-environment/MyApplicationForEnv/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyApplicationForEnv1F597ED9" + } + ], + "/aws-appconfig-environment/StartDeploymentCallCountAlarm/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "StartDeploymentCallCountAlarm6846E07B" + } + ], + "/aws-appconfig-environment/MyRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyRoleF48FFE04" + } + ], + "/aws-appconfig-environment/MyCompositeAlarm/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyCompositeAlarm0F045229" + } + ], + "/aws-appconfig-environment/MyEnvironment/Role1963C/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyEnvironmentRole1963C404EAE3E" + } + ], + "/aws-appconfig-environment/MyEnvironment/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyEnvironment465E4DEA" + } + ], + "/aws-appconfig-environment/MyDeploymentStrategy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyDeploymentStrategy60D31FB0" + } + ], + "/aws-appconfig-environment/MyConfig/ConfigurationProfile": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigConfigurationProfileCF3951C3" + } + ], + "/aws-appconfig-environment/MyConfig/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigFA92D419" + } + ], + "/aws-appconfig-environment/MyConfig/Deployment1963C": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigDeployment1963CC374E8A4" + } + ], + "/aws-appconfig-environment/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-appconfig-environment/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ], + "MyConfigDeployment36077E0B58611": [ + { + "type": "aws:cdk:logicalId", + "data": "MyConfigDeployment36077E0B58611", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ] + }, + "displayName": "aws-appconfig-environment" + }, + "appconfigenvironmentDefaultTestDeployAssert75BD28E7.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "appconfigenvironmentDefaultTestDeployAssert75BD28E7.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "appconfigenvironmentDefaultTestDeployAssert75BD28E7": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "appconfigenvironmentDefaultTestDeployAssert75BD28E7.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": [ + "appconfigenvironmentDefaultTestDeployAssert75BD28E7.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": [ + "appconfigenvironmentDefaultTestDeployAssert75BD28E7.assets" + ], + "metadata": { + "/appconfig-environment/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/appconfig-environment/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "appconfig-environment/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/tree.json new file mode 100644 index 0000000000000..fd96c532cfa58 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.js.snapshot/tree.json @@ -0,0 +1,504 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "aws-appconfig-environment": { + "id": "aws-appconfig-environment", + "path": "aws-appconfig-environment", + "children": { + "MyApplicationForEnv": { + "id": "MyApplicationForEnv", + "path": "aws-appconfig-environment/MyApplicationForEnv", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-environment/MyApplicationForEnv/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Application", + "aws:cdk:cloudformation:props": { + "name": "AppForEnvTest" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnApplication", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.Application", + "version": "0.0.0" + } + }, + "StartDeploymentCallCountAlarm": { + "id": "StartDeploymentCallCountAlarm", + "path": "aws-appconfig-environment/StartDeploymentCallCountAlarm", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-environment/StartDeploymentCallCountAlarm/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CloudWatch::Alarm", + "aws:cdk:cloudformation:props": { + "actionsEnabled": false, + "alarmName": "AppConfigStartDeploymentCallCountAlarm", + "comparisonOperator": "GreaterThanOrEqualToThreshold", + "dimensions": [ + { + "name": "Resource", + "value": "StartDeployment" + }, + { + "name": "Service", + "value": "AWS AppConfig" + }, + { + "name": "Type", + "value": "API" + } + ], + "evaluationPeriods": 3, + "metricName": "CallCount", + "namespace": "AWS/AppConfig", + "period": 300, + "statistic": "Sum", + "threshold": 300, + "treatMissingData": "notBreaching" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_cloudwatch.CfnAlarm", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_cloudwatch.Alarm", + "version": "0.0.0" + } + }, + "MyRole": { + "id": "MyRole", + "path": "aws-appconfig-environment/MyRole", + "children": { + "ImportMyRole": { + "id": "ImportMyRole", + "path": "aws-appconfig-environment/MyRole/ImportMyRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-environment/MyRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "policies": [ + { + "policyName": "AllowAppConfigMonitorAlarmPolicy", + "policyDocument": { + "Statement": [ + { + "Action": "cloudwatch:DescribeAlarms", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + } + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "MyCompositeAlarm": { + "id": "MyCompositeAlarm", + "path": "aws-appconfig-environment/MyCompositeAlarm", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-environment/MyCompositeAlarm/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CloudWatch::CompositeAlarm", + "aws:cdk:cloudformation:props": { + "alarmName": "awsappconfigenvironmentMyCompositeAlarm730A7A48", + "alarmRule": { + "Fn::Join": [ + "", + [ + "ALARM(\"", + { + "Fn::GetAtt": [ + "StartDeploymentCallCountAlarm6846E07B", + "Arn" + ] + }, + "\")" + ] + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_cloudwatch.CfnCompositeAlarm", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_cloudwatch.CompositeAlarm", + "version": "0.0.0" + } + }, + "MyEnvironment": { + "id": "MyEnvironment", + "path": "aws-appconfig-environment/MyEnvironment", + "children": { + "Role1963C": { + "id": "Role1963C", + "path": "aws-appconfig-environment/MyEnvironment/Role1963C", + "children": { + "ImportRole1963C": { + "id": "ImportRole1963C", + "path": "aws-appconfig-environment/MyEnvironment/Role1963C/ImportRole1963C", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-environment/MyEnvironment/Role1963C/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "policies": [ + { + "policyName": "AllowAppConfigMonitorAlarmPolicy", + "policyDocument": { + "Statement": [ + { + "Action": "cloudwatch:DescribeAlarms", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + } + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-environment/MyEnvironment/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Environment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyApplicationForEnv1F597ED9" + }, + "description": "This is the environment for integ testing", + "monitors": [ + { + "alarmArn": { + "Fn::GetAtt": [ + "StartDeploymentCallCountAlarm6846E07B", + "Arn" + ] + }, + "alarmRoleArn": { + "Fn::GetAtt": [ + "MyEnvironmentRole1963C404EAE3E", + "Arn" + ] + } + }, + { + "alarmArn": { + "Fn::GetAtt": [ + "StartDeploymentCallCountAlarm6846E07B", + "Arn" + ] + }, + "alarmRoleArn": { + "Fn::GetAtt": [ + "MyRoleF48FFE04", + "Arn" + ] + } + }, + { + "alarmArn": { + "Fn::GetAtt": [ + "MyCompositeAlarm0F045229", + "Arn" + ] + }, + "alarmRoleArn": { + "Fn::GetAtt": [ + "MyEnvironmentRole1963C404EAE3E", + "Arn" + ] + } + } + ], + "name": "awsappconfigenvironment-MyEnvironment-C8813182" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnEnvironment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.Environment", + "version": "0.0.0" + } + }, + "MyDeploymentStrategy": { + "id": "MyDeploymentStrategy", + "path": "aws-appconfig-environment/MyDeploymentStrategy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-environment/MyDeploymentStrategy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::DeploymentStrategy", + "aws:cdk:cloudformation:props": { + "deploymentDurationInMinutes": 1, + "growthFactor": 50, + "growthType": "LINEAR", + "name": "awsappconfigenvironment-MyDeploymentStrategy-28486041", + "replicateTo": "NONE" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeploymentStrategy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.DeploymentStrategy", + "version": "0.0.0" + } + }, + "MyConfig": { + "id": "MyConfig", + "path": "aws-appconfig-environment/MyConfig", + "children": { + "ConfigurationProfile": { + "id": "ConfigurationProfile", + "path": "aws-appconfig-environment/MyConfig/ConfigurationProfile", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ConfigurationProfile", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyApplicationForEnv1F597ED9" + }, + "locationUri": "hosted", + "name": "awsappconfigenvironment-MyConfig-24828868" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnConfigurationProfile", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-environment/MyConfig/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::HostedConfigurationVersion", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyApplicationForEnv1F597ED9" + }, + "configurationProfileId": { + "Ref": "MyConfigConfigurationProfileCF3951C3" + }, + "content": "config content", + "contentType": "application/octet-stream" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnHostedConfigurationVersion", + "version": "0.0.0" + } + }, + "Deployment1963C": { + "id": "Deployment1963C", + "path": "aws-appconfig-environment/MyConfig/Deployment1963C", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Deployment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyApplicationForEnv1F597ED9" + }, + "configurationProfileId": { + "Ref": "MyConfigConfigurationProfileCF3951C3" + }, + "configurationVersion": { + "Ref": "MyConfigFA92D419" + }, + "deploymentStrategyId": { + "Ref": "MyDeploymentStrategy60D31FB0" + }, + "environmentId": { + "Ref": "MyEnvironment465E4DEA" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeployment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.HostedConfiguration", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-appconfig-environment/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-appconfig-environment/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "appconfig-environment": { + "id": "appconfig-environment", + "path": "appconfig-environment", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "appconfig-environment/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "appconfig-environment/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "appconfig-environment/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "appconfig-environment/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "appconfig-environment/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 diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.ts new file mode 100644 index 0000000000000..e9c8b1bc81e60 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.environment.ts @@ -0,0 +1,86 @@ +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import { App, Duration, PhysicalName, Stack } from 'aws-cdk-lib'; +import { Alarm, ComparisonOperator, CompositeAlarm, Metric, TreatMissingData } from 'aws-cdk-lib/aws-cloudwatch'; +import { Role, ServicePrincipal, Effect, PolicyStatement, PolicyDocument } from 'aws-cdk-lib/aws-iam'; +import { Application, ConfigurationContent, DeploymentStrategy, Environment, HostedConfiguration, Monitor, RolloutStrategy } from 'aws-cdk-lib/aws-appconfig'; + +const app = new App(); + +const stack = new Stack(app, 'aws-appconfig-environment'); + +// create resources needed for environment +const appForEnv = new Application(stack, 'MyApplicationForEnv', { + applicationName: 'AppForEnvTest', +}); +const alarm = new Alarm(stack, 'StartDeploymentCallCountAlarm', { + alarmName: 'AppConfigStartDeploymentCallCountAlarm', + metric: new Metric({ + namespace: 'AWS/AppConfig', + metricName: 'CallCount', + dimensionsMap: { + Type: 'API', + Resource: 'StartDeployment', + Service: 'AWS AppConfig', + }, + statistic: 'SUM', + period: Duration.minutes(5), + }), + threshold: 300, + comparisonOperator: ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + evaluationPeriods: 3, + treatMissingData: TreatMissingData.NOT_BREACHING, + actionsEnabled: false, +}); +const policy = new PolicyStatement({ + effect: Effect.ALLOW, + actions: ['cloudwatch:DescribeAlarms'], + resources: ['*'], +}); +const document = new PolicyDocument({ + statements: [policy], +}); +const role = new Role(stack, 'MyRole', { + roleName: PhysicalName.GENERATE_IF_NEEDED, + assumedBy: new ServicePrincipal('appconfig.amazonaws.com'), + inlinePolicies: { + ['AllowAppConfigMonitorAlarmPolicy']: document, + }, +}); +const compositeAlarm = new CompositeAlarm(stack, 'MyCompositeAlarm', { + alarmRule: alarm, +}); + +// create environment with all props defined +const env = new Environment(stack, 'MyEnvironment', { + application: appForEnv, + description: 'This is the environment for integ testing', + monitors: [ + Monitor.fromCloudWatchAlarm(alarm), + Monitor.fromCfnMonitorsProperty({ + alarmArn: alarm.alarmArn, + alarmRoleArn: role.roleArn, + }), + Monitor.fromCloudWatchAlarm(compositeAlarm), + ], +}); + +// ensure the service can track the monitors in the environment +new HostedConfiguration(stack, 'MyConfig', { + application: appForEnv, + content: ConfigurationContent.fromInline('config content'), + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + deploymentDuration: Duration.minutes(1), + growthFactor: 50, + }), + }), + deployTo: [env], +}); + +/* resource deployment alone is sufficient because we already have the + corresponding resource handler tests to assert that resources can be + used after created */ + +new IntegTest(app, 'appconfig-environment', { + testCases: [stack], +}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/aws-appconfig-extension.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/aws-appconfig-extension.assets.json new file mode 100644 index 0000000000000..dac0e858ae772 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/aws-appconfig-extension.assets.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.0", + "files": { + "a4f22807b445e94aa9052ebdd44c6cfce2d3479cdede016c64f821562394d574": { + "source": { + "path": "aws-appconfig-extension.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "a4f22807b445e94aa9052ebdd44c6cfce2d3479cdede016c64f821562394d574.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-appconfig/test/integ.extension.js.snapshot/aws-appconfig-extension.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/aws-appconfig-extension.template.json new file mode 100644 index 0000000000000..0c4e85df30557 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/aws-appconfig-extension.template.json @@ -0,0 +1,611 @@ +{ + "Resources": { + "MyFunctionServiceRole3C357FF2": { + "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" + ] + ] + } + ] + } + }, + "MyFunction3BAA72D1": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "def handler(event, context):\n\tprint('The function has been invoked.')" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "MyFunctionServiceRole3C357FF2", + "Arn" + ] + }, + "Runtime": "python3.8" + }, + "DependsOn": [ + "MyFunctionServiceRole3C357FF2" + ] + }, + "MyFunctionAppConfigPermission673BEA35": { + "Type": "AWS::Lambda::Permission", + "Properties": { + "Action": "lambda:InvokeFunction", + "FunctionName": { + "Fn::GetAtt": [ + "MyFunction3BAA72D1", + "Arn" + ] + }, + "Principal": "appconfig.amazonaws.com" + } + }, + "MyApplication5C63EC1D": { + "Type": "AWS::AppConfig::Application", + "Properties": { + "Name": "AppForExtensionTest" + } + }, + "MyApplicationAssociationResource3FA55E02ED1FB": { + "Type": "AWS::AppConfig::ExtensionAssociation", + "Properties": { + "ExtensionIdentifier": { + "Fn::GetAtt": [ + "MyLambdaExtensionAFA1476A", + "Id" + ] + }, + "ExtensionVersionNumber": { + "Fn::GetAtt": [ + "MyLambdaExtensionAFA1476A", + "VersionNumber" + ] + }, + "ResourceIdentifier": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":appconfig:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":application/", + { + "Ref": "MyApplication5C63EC1D" + } + ] + ] + } + } + }, + "MyApplicationAssociationResourceBAC86D18B66DB": { + "Type": "AWS::AppConfig::ExtensionAssociation", + "Properties": { + "ExtensionIdentifier": { + "Fn::GetAtt": [ + "MyQueueExtension872C5D27", + "Id" + ] + }, + "ExtensionVersionNumber": { + "Fn::GetAtt": [ + "MyQueueExtension872C5D27", + "VersionNumber" + ] + }, + "ResourceIdentifier": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":appconfig:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":application/", + { + "Ref": "MyApplication5C63EC1D" + } + ] + ] + } + } + }, + "MyApplicationAssociationResource7F3E1F71FC034": { + "Type": "AWS::AppConfig::ExtensionAssociation", + "Properties": { + "ExtensionIdentifier": { + "Fn::GetAtt": [ + "MyTopicExtension9B6DF691", + "Id" + ] + }, + "ExtensionVersionNumber": { + "Fn::GetAtt": [ + "MyTopicExtension9B6DF691", + "VersionNumber" + ] + }, + "ResourceIdentifier": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":appconfig:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":application/", + { + "Ref": "MyApplication5C63EC1D" + } + ] + ] + } + } + }, + "MyApplicationAssociationResource689DE159F9BFC": { + "Type": "AWS::AppConfig::ExtensionAssociation", + "Properties": { + "ExtensionIdentifier": { + "Fn::GetAtt": [ + "MyEventBusExtensionADFE2273", + "Id" + ] + }, + "ExtensionVersionNumber": { + "Fn::GetAtt": [ + "MyEventBusExtensionADFE2273", + "VersionNumber" + ] + }, + "Parameters": { + "testParam": "true" + }, + "ResourceIdentifier": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":appconfig:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":application/", + { + "Ref": "MyApplication5C63EC1D" + } + ] + ] + } + } + }, + "MyApplicationMyEnv55DE3293": { + "Type": "AWS::AppConfig::Environment", + "Properties": { + "ApplicationId": { + "Ref": "MyApplication5C63EC1D" + }, + "Name": "awsappconfigextension-MyApplication-MyEnv-0FA5092F" + } + }, + "MyLambdaExtensionRoleBC958D3F13B04": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Policies": [ + { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "lambda:InvokeAsync", + "lambda:InvokeFunction" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "MyFunction3BAA72D1", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AllowAppConfigInvokeExtensionEventSourcePolicy" + } + ] + } + }, + "MyLambdaExtensionAFA1476A": { + "Type": "AWS::AppConfig::Extension", + "Properties": { + "Actions": { + "PRE_CREATE_HOSTED_CONFIGURATION_VERSION": [ + { + "Name": "awsappconfigextension-MyLambdaExtension-68C15290-0", + "Uri": { + "Fn::GetAtt": [ + "MyFunction3BAA72D1", + "Arn" + ] + }, + "RoleArn": { + "Fn::GetAtt": [ + "MyLambdaExtensionRoleBC958D3F13B04", + "Arn" + ] + } + } + ], + "ON_DEPLOYMENT_START": [ + { + "Name": "awsappconfigextension-MyLambdaExtension-68C15290-0", + "Uri": { + "Fn::GetAtt": [ + "MyFunction3BAA72D1", + "Arn" + ] + }, + "RoleArn": { + "Fn::GetAtt": [ + "MyLambdaExtensionRoleBC958D3F13B04", + "Arn" + ] + } + } + ] + }, + "Name": "awsappconfigextension-MyLambdaExtension-68C15290" + } + }, + "MyQueueE6CA6235": { + "Type": "AWS::SQS::Queue", + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "MyQueueExtensionRole63F1970B4A7A6": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Policies": [ + { + "PolicyDocument": { + "Statement": [ + { + "Action": "sqs:SendMessage", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "MyQueueE6CA6235", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AllowAppConfigInvokeExtensionEventSourcePolicy" + } + ] + } + }, + "MyQueueExtension872C5D27": { + "Type": "AWS::AppConfig::Extension", + "Properties": { + "Actions": { + "ON_DEPLOYMENT_START": [ + { + "Name": "awsappconfigextension-MyQueueExtension-EF6112FA-0", + "Uri": { + "Fn::GetAtt": [ + "MyQueueE6CA6235", + "Arn" + ] + }, + "RoleArn": { + "Fn::GetAtt": [ + "MyQueueExtensionRole63F1970B4A7A6", + "Arn" + ] + } + } + ] + }, + "Name": "awsappconfigextension-MyQueueExtension-EF6112FA" + } + }, + "MyTopic86869434": { + "Type": "AWS::SNS::Topic" + }, + "MyTopicExtensionRole39BF2474FECA3": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Policies": [ + { + "PolicyDocument": { + "Statement": [ + { + "Action": "sns:Publish", + "Effect": "Allow", + "Resource": { + "Ref": "MyTopic86869434" + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AllowAppConfigInvokeExtensionEventSourcePolicy" + } + ] + } + }, + "MyTopicExtension9B6DF691": { + "Type": "AWS::AppConfig::Extension", + "Properties": { + "Actions": { + "ON_DEPLOYMENT_START": [ + { + "Name": "awsappconfigextension-MyTopicExtension-37440DA2-0", + "Uri": { + "Ref": "MyTopic86869434" + }, + "RoleArn": { + "Fn::GetAtt": [ + "MyTopicExtensionRole39BF2474FECA3", + "Arn" + ] + } + } + ] + }, + "Name": "awsappconfigextension-MyTopicExtension-37440DA2" + } + }, + "MyEventBusExtensionADFE2273": { + "Type": "AWS::AppConfig::Extension", + "Properties": { + "Actions": { + "ON_DEPLOYMENT_START": [ + { + "Name": "MyEventBusPreHostedConfigVersionAction", + "Uri": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":events:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":event-bus/default" + ] + ] + }, + "Description": "My event bus action" + } + ] + }, + "Name": "awsappconfigextension-MyEventBusExtension-39114CFE", + "Parameters": { + "testParam": { + "Required": true + }, + "testNotRequiredParam": { + "Required": false + } + } + } + }, + "MyDeployStrategy062CAEA2": { + "Type": "AWS::AppConfig::DeploymentStrategy", + "Properties": { + "DeploymentDurationInMinutes": 0, + "GrowthFactor": 100, + "GrowthType": "LINEAR", + "Name": "awsappconfigextension-MyDeployStrategy-61F99D9B", + "ReplicateTo": "NONE" + } + }, + "HostedConfigurationConfigurationProfile3AB17BEA": { + "Type": "AWS::AppConfig::ConfigurationProfile", + "Properties": { + "ApplicationId": { + "Ref": "MyApplication5C63EC1D" + }, + "LocationUri": "hosted", + "Name": "awsappconfigextension-HostedConfiguration-15AED6EE" + }, + "DependsOn": [ + "MyEventBusExtensionADFE2273", + "MyLambdaExtensionAFA1476A", + "MyLambdaExtensionRoleBC958D3F13B04", + "MyQueueExtension872C5D27", + "MyQueueExtensionRole63F1970B4A7A6", + "MyTopicExtension9B6DF691", + "MyTopicExtensionRole39BF2474FECA3" + ] + }, + "HostedConfiguration257746B4": { + "Type": "AWS::AppConfig::HostedConfigurationVersion", + "Properties": { + "ApplicationId": { + "Ref": "MyApplication5C63EC1D" + }, + "ConfigurationProfileId": { + "Ref": "HostedConfigurationConfigurationProfile3AB17BEA" + }, + "Content": "This is my configuration content", + "ContentType": "application/json" + }, + "DependsOn": [ + "MyEventBusExtensionADFE2273", + "MyLambdaExtensionAFA1476A", + "MyLambdaExtensionRoleBC958D3F13B04", + "MyQueueExtension872C5D27", + "MyQueueExtensionRole63F1970B4A7A6", + "MyTopicExtension9B6DF691", + "MyTopicExtensionRole39BF2474FECA3" + ], + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "HostedConfigurationDeployment9D5FCC2741866": { + "Type": "AWS::AppConfig::Deployment", + "Properties": { + "ApplicationId": { + "Ref": "MyApplication5C63EC1D" + }, + "ConfigurationProfileId": { + "Ref": "HostedConfigurationConfigurationProfile3AB17BEA" + }, + "ConfigurationVersion": { + "Ref": "HostedConfiguration257746B4" + }, + "DeploymentStrategyId": { + "Ref": "MyDeployStrategy062CAEA2" + }, + "EnvironmentId": { + "Ref": "MyApplicationMyEnv55DE3293" + } + }, + "DependsOn": [ + "MyEventBusExtensionADFE2273", + "MyLambdaExtensionAFA1476A", + "MyLambdaExtensionRoleBC958D3F13B04", + "MyQueueExtension872C5D27", + "MyQueueExtensionRole63F1970B4A7A6", + "MyTopicExtension9B6DF691", + "MyTopicExtensionRole39BF2474FECA3" + ] + } + }, + "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-appconfig/test/integ.extension.js.snapshot/awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E.assets.json new file mode 100644 index 0000000000000..2ff5b1321ea06 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E.assets.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E.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-appconfig/test/integ.extension.js.snapshot/awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E.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-appconfig/test/integ.extension.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/cdk.out new file mode 100644 index 0000000000000..1f0068d32659a --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/integ.json new file mode 100644 index 0000000000000..d86521a772834 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/integ.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.0", + "testCases": { + "aws-appconfig-extension/MyApplication/appconfig-extension/DefaultTest": { + "stacks": [ + "aws-appconfig-extension" + ], + "cdkCommandOptions": { + "destroy": { + "args": { + "force": true + } + } + }, + "assertionStack": "aws-appconfig-extension/MyApplication/appconfig-extension/DefaultTest/DeployAssert", + "assertionStackName": "awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/manifest.json new file mode 100644 index 0000000000000..cfc53f9a90ce6 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/manifest.json @@ -0,0 +1,248 @@ +{ + "version": "36.0.0", + "artifacts": { + "awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E.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": [ + "awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E.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": [ + "awsappconfigextensionMyApplicationappconfigextensionDefaultTestDeployAssert64BA6C4E.assets" + ], + "metadata": { + "/aws-appconfig-extension/MyApplication/appconfig-extension/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-appconfig-extension/MyApplication/appconfig-extension/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "aws-appconfig-extension/MyApplication/appconfig-extension/DefaultTest/DeployAssert" + }, + "aws-appconfig-extension.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "aws-appconfig-extension.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "aws-appconfig-extension": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "aws-appconfig-extension.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}/a4f22807b445e94aa9052ebdd44c6cfce2d3479cdede016c64f821562394d574.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "aws-appconfig-extension.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": [ + "aws-appconfig-extension.assets" + ], + "metadata": { + "/aws-appconfig-extension/MyFunction/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyFunctionServiceRole3C357FF2" + } + ], + "/aws-appconfig-extension/MyFunction/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyFunction3BAA72D1" + } + ], + "/aws-appconfig-extension/MyFunction/AppConfigPermission": [ + { + "type": "aws:cdk:logicalId", + "data": "MyFunctionAppConfigPermission673BEA35" + } + ], + "/aws-appconfig-extension/MyApplication/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyApplication5C63EC1D" + } + ], + "/aws-appconfig-extension/MyApplication/AssociationResource3FA55": [ + { + "type": "aws:cdk:logicalId", + "data": "MyApplicationAssociationResource3FA55E02ED1FB" + } + ], + "/aws-appconfig-extension/MyApplication/AssociationResourceBAC86": [ + { + "type": "aws:cdk:logicalId", + "data": "MyApplicationAssociationResourceBAC86D18B66DB" + } + ], + "/aws-appconfig-extension/MyApplication/AssociationResource7F3E1": [ + { + "type": "aws:cdk:logicalId", + "data": "MyApplicationAssociationResource7F3E1F71FC034" + } + ], + "/aws-appconfig-extension/MyApplication/AssociationResource689DE": [ + { + "type": "aws:cdk:logicalId", + "data": "MyApplicationAssociationResource689DE159F9BFC" + } + ], + "/aws-appconfig-extension/MyApplication/MyEnv/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyApplicationMyEnv55DE3293" + } + ], + "/aws-appconfig-extension/MyLambdaExtension/RoleBC958/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyLambdaExtensionRoleBC958D3F13B04" + } + ], + "/aws-appconfig-extension/MyLambdaExtension/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyLambdaExtensionAFA1476A" + } + ], + "/aws-appconfig-extension/MyQueue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyQueueE6CA6235" + } + ], + "/aws-appconfig-extension/MyQueueExtension/Role63F19/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyQueueExtensionRole63F1970B4A7A6" + } + ], + "/aws-appconfig-extension/MyQueueExtension/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyQueueExtension872C5D27" + } + ], + "/aws-appconfig-extension/MyTopic/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyTopic86869434" + } + ], + "/aws-appconfig-extension/MyTopicExtension/Role39BF2/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyTopicExtensionRole39BF2474FECA3" + } + ], + "/aws-appconfig-extension/MyTopicExtension/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyTopicExtension9B6DF691" + } + ], + "/aws-appconfig-extension/MyEventBusExtension/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyEventBusExtensionADFE2273" + } + ], + "/aws-appconfig-extension/MyDeployStrategy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyDeployStrategy062CAEA2" + } + ], + "/aws-appconfig-extension/HostedConfiguration/ConfigurationProfile": [ + { + "type": "aws:cdk:logicalId", + "data": "HostedConfigurationConfigurationProfile3AB17BEA" + } + ], + "/aws-appconfig-extension/HostedConfiguration/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "HostedConfiguration257746B4" + } + ], + "/aws-appconfig-extension/HostedConfiguration/Deployment9D5FC": [ + { + "type": "aws:cdk:logicalId", + "data": "HostedConfigurationDeployment9D5FCC2741866" + } + ], + "/aws-appconfig-extension/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-appconfig-extension/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ], + "HostedConfigurationDeploymentawsappconfigextensionMyApplicationMyEnv0FA5092F8D4EFA96": [ + { + "type": "aws:cdk:logicalId", + "data": "HostedConfigurationDeploymentawsappconfigextensionMyApplicationMyEnv0FA5092F8D4EFA96", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ] + }, + "displayName": "aws-appconfig-extension" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/tree.json new file mode 100644 index 0000000000000..8dc4a4901b811 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.js.snapshot/tree.json @@ -0,0 +1,1008 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "aws-appconfig-extension": { + "id": "aws-appconfig-extension", + "path": "aws-appconfig-extension", + "children": { + "MyFunction": { + "id": "MyFunction", + "path": "aws-appconfig-extension/MyFunction", + "children": { + "ServiceRole": { + "id": "ServiceRole", + "path": "aws-appconfig-extension/MyFunction/ServiceRole", + "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "aws-appconfig-extension/MyFunction/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyFunction/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" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyFunction/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Lambda::Function", + "aws:cdk:cloudformation:props": { + "code": { + "zipFile": "def handler(event, context):\n\tprint('The function has been invoked.')" + }, + "handler": "index.handler", + "role": { + "Fn::GetAtt": [ + "MyFunctionServiceRole3C357FF2", + "Arn" + ] + }, + "runtime": "python3.8" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", + "version": "0.0.0" + } + }, + "AppConfigPermission": { + "id": "AppConfigPermission", + "path": "aws-appconfig-extension/MyFunction/AppConfigPermission", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Lambda::Permission", + "aws:cdk:cloudformation:props": { + "action": "lambda:InvokeFunction", + "functionName": { + "Fn::GetAtt": [ + "MyFunction3BAA72D1", + "Arn" + ] + }, + "principal": "appconfig.amazonaws.com" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.CfnPermission", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.Function", + "version": "0.0.0" + } + }, + "MyApplication": { + "id": "MyApplication", + "path": "aws-appconfig-extension/MyApplication", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyApplication/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Application", + "aws:cdk:cloudformation:props": { + "name": "AppForExtensionTest" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnApplication", + "version": "0.0.0" + } + }, + "AssociationResource3FA55": { + "id": "AssociationResource3FA55", + "path": "aws-appconfig-extension/MyApplication/AssociationResource3FA55", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ExtensionAssociation", + "aws:cdk:cloudformation:props": { + "extensionIdentifier": { + "Fn::GetAtt": [ + "MyLambdaExtensionAFA1476A", + "Id" + ] + }, + "extensionVersionNumber": { + "Fn::GetAtt": [ + "MyLambdaExtensionAFA1476A", + "VersionNumber" + ] + }, + "resourceIdentifier": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":appconfig:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":application/", + { + "Ref": "MyApplication5C63EC1D" + } + ] + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnExtensionAssociation", + "version": "0.0.0" + } + }, + "AssociationResourceBAC86": { + "id": "AssociationResourceBAC86", + "path": "aws-appconfig-extension/MyApplication/AssociationResourceBAC86", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ExtensionAssociation", + "aws:cdk:cloudformation:props": { + "extensionIdentifier": { + "Fn::GetAtt": [ + "MyQueueExtension872C5D27", + "Id" + ] + }, + "extensionVersionNumber": { + "Fn::GetAtt": [ + "MyQueueExtension872C5D27", + "VersionNumber" + ] + }, + "resourceIdentifier": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":appconfig:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":application/", + { + "Ref": "MyApplication5C63EC1D" + } + ] + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnExtensionAssociation", + "version": "0.0.0" + } + }, + "AssociationResource7F3E1": { + "id": "AssociationResource7F3E1", + "path": "aws-appconfig-extension/MyApplication/AssociationResource7F3E1", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ExtensionAssociation", + "aws:cdk:cloudformation:props": { + "extensionIdentifier": { + "Fn::GetAtt": [ + "MyTopicExtension9B6DF691", + "Id" + ] + }, + "extensionVersionNumber": { + "Fn::GetAtt": [ + "MyTopicExtension9B6DF691", + "VersionNumber" + ] + }, + "resourceIdentifier": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":appconfig:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":application/", + { + "Ref": "MyApplication5C63EC1D" + } + ] + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnExtensionAssociation", + "version": "0.0.0" + } + }, + "AssociationResource689DE": { + "id": "AssociationResource689DE", + "path": "aws-appconfig-extension/MyApplication/AssociationResource689DE", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ExtensionAssociation", + "aws:cdk:cloudformation:props": { + "extensionIdentifier": { + "Fn::GetAtt": [ + "MyEventBusExtensionADFE2273", + "Id" + ] + }, + "extensionVersionNumber": { + "Fn::GetAtt": [ + "MyEventBusExtensionADFE2273", + "VersionNumber" + ] + }, + "parameters": { + "testParam": "true" + }, + "resourceIdentifier": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":appconfig:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":application/", + { + "Ref": "MyApplication5C63EC1D" + } + ] + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnExtensionAssociation", + "version": "0.0.0" + } + }, + "MyEnv": { + "id": "MyEnv", + "path": "aws-appconfig-extension/MyApplication/MyEnv", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyApplication/MyEnv/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Environment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyApplication5C63EC1D" + }, + "name": "awsappconfigextension-MyApplication-MyEnv-0FA5092F" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnEnvironment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.Environment", + "version": "0.0.0" + } + }, + "appconfig-extension": { + "id": "appconfig-extension", + "path": "aws-appconfig-extension/MyApplication/appconfig-extension", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "aws-appconfig-extension/MyApplication/appconfig-extension/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "aws-appconfig-extension/MyApplication/appconfig-extension/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "aws-appconfig-extension/MyApplication/appconfig-extension/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-appconfig-extension/MyApplication/appconfig-extension/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-appconfig-extension/MyApplication/appconfig-extension/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" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.Application", + "version": "0.0.0" + } + }, + "MyLambdaExtension": { + "id": "MyLambdaExtension", + "path": "aws-appconfig-extension/MyLambdaExtension", + "children": { + "RoleBC958": { + "id": "RoleBC958", + "path": "aws-appconfig-extension/MyLambdaExtension/RoleBC958", + "children": { + "ImportRoleBC958": { + "id": "ImportRoleBC958", + "path": "aws-appconfig-extension/MyLambdaExtension/RoleBC958/ImportRoleBC958", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyLambdaExtension/RoleBC958/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "policies": [ + { + "policyName": "AllowAppConfigInvokeExtensionEventSourcePolicy", + "policyDocument": { + "Statement": [ + { + "Action": [ + "lambda:InvokeAsync", + "lambda:InvokeFunction" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "MyFunction3BAA72D1", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + } + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyLambdaExtension/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Extension", + "aws:cdk:cloudformation:props": { + "actions": { + "PRE_CREATE_HOSTED_CONFIGURATION_VERSION": [ + { + "Name": "awsappconfigextension-MyLambdaExtension-68C15290-0", + "Uri": { + "Fn::GetAtt": [ + "MyFunction3BAA72D1", + "Arn" + ] + }, + "RoleArn": { + "Fn::GetAtt": [ + "MyLambdaExtensionRoleBC958D3F13B04", + "Arn" + ] + } + } + ], + "ON_DEPLOYMENT_START": [ + { + "Name": "awsappconfigextension-MyLambdaExtension-68C15290-0", + "Uri": { + "Fn::GetAtt": [ + "MyFunction3BAA72D1", + "Arn" + ] + }, + "RoleArn": { + "Fn::GetAtt": [ + "MyLambdaExtensionRoleBC958D3F13B04", + "Arn" + ] + } + } + ] + }, + "name": "awsappconfigextension-MyLambdaExtension-68C15290" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnExtension", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.Extension", + "version": "0.0.0" + } + }, + "MyQueue": { + "id": "MyQueue", + "path": "aws-appconfig-extension/MyQueue", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyQueue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": {} + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0" + } + }, + "MyQueueExtension": { + "id": "MyQueueExtension", + "path": "aws-appconfig-extension/MyQueueExtension", + "children": { + "Role63F19": { + "id": "Role63F19", + "path": "aws-appconfig-extension/MyQueueExtension/Role63F19", + "children": { + "ImportRole63F19": { + "id": "ImportRole63F19", + "path": "aws-appconfig-extension/MyQueueExtension/Role63F19/ImportRole63F19", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyQueueExtension/Role63F19/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "policies": [ + { + "policyName": "AllowAppConfigInvokeExtensionEventSourcePolicy", + "policyDocument": { + "Statement": [ + { + "Action": "sqs:SendMessage", + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "MyQueueE6CA6235", + "Arn" + ] + } + } + ], + "Version": "2012-10-17" + } + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyQueueExtension/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Extension", + "aws:cdk:cloudformation:props": { + "actions": { + "ON_DEPLOYMENT_START": [ + { + "Name": "awsappconfigextension-MyQueueExtension-EF6112FA-0", + "Uri": { + "Fn::GetAtt": [ + "MyQueueE6CA6235", + "Arn" + ] + }, + "RoleArn": { + "Fn::GetAtt": [ + "MyQueueExtensionRole63F1970B4A7A6", + "Arn" + ] + } + } + ] + }, + "name": "awsappconfigextension-MyQueueExtension-EF6112FA" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnExtension", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.Extension", + "version": "0.0.0" + } + }, + "MyTopic": { + "id": "MyTopic", + "path": "aws-appconfig-extension/MyTopic", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyTopic/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SNS::Topic", + "aws:cdk:cloudformation:props": {} + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sns.CfnTopic", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sns.Topic", + "version": "0.0.0" + } + }, + "MyTopicExtension": { + "id": "MyTopicExtension", + "path": "aws-appconfig-extension/MyTopicExtension", + "children": { + "Role39BF2": { + "id": "Role39BF2", + "path": "aws-appconfig-extension/MyTopicExtension/Role39BF2", + "children": { + "ImportRole39BF2": { + "id": "ImportRole39BF2", + "path": "aws-appconfig-extension/MyTopicExtension/Role39BF2/ImportRole39BF2", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyTopicExtension/Role39BF2/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appconfig.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "policies": [ + { + "policyName": "AllowAppConfigInvokeExtensionEventSourcePolicy", + "policyDocument": { + "Statement": [ + { + "Action": "sns:Publish", + "Effect": "Allow", + "Resource": { + "Ref": "MyTopic86869434" + } + } + ], + "Version": "2012-10-17" + } + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyTopicExtension/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Extension", + "aws:cdk:cloudformation:props": { + "actions": { + "ON_DEPLOYMENT_START": [ + { + "Name": "awsappconfigextension-MyTopicExtension-37440DA2-0", + "Uri": { + "Ref": "MyTopic86869434" + }, + "RoleArn": { + "Fn::GetAtt": [ + "MyTopicExtensionRole39BF2474FECA3", + "Arn" + ] + } + } + ] + }, + "name": "awsappconfigextension-MyTopicExtension-37440DA2" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnExtension", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.Extension", + "version": "0.0.0" + } + }, + "MyEventBus": { + "id": "MyEventBus", + "path": "aws-appconfig-extension/MyEventBus", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "MyEventBusExtension": { + "id": "MyEventBusExtension", + "path": "aws-appconfig-extension/MyEventBusExtension", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyEventBusExtension/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Extension", + "aws:cdk:cloudformation:props": { + "actions": { + "ON_DEPLOYMENT_START": [ + { + "Name": "MyEventBusPreHostedConfigVersionAction", + "Uri": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":events:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":event-bus/default" + ] + ] + }, + "Description": "My event bus action" + } + ] + }, + "name": "awsappconfigextension-MyEventBusExtension-39114CFE", + "parameters": { + "testParam": { + "required": true + }, + "testNotRequiredParam": { + "required": false + } + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnExtension", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.Extension", + "version": "0.0.0" + } + }, + "MyDeployStrategy": { + "id": "MyDeployStrategy", + "path": "aws-appconfig-extension/MyDeployStrategy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/MyDeployStrategy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::DeploymentStrategy", + "aws:cdk:cloudformation:props": { + "deploymentDurationInMinutes": 0, + "growthFactor": 100, + "growthType": "LINEAR", + "name": "awsappconfigextension-MyDeployStrategy-61F99D9B", + "replicateTo": "NONE" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeploymentStrategy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.DeploymentStrategy", + "version": "0.0.0" + } + }, + "HostedConfiguration": { + "id": "HostedConfiguration", + "path": "aws-appconfig-extension/HostedConfiguration", + "children": { + "ConfigurationProfile": { + "id": "ConfigurationProfile", + "path": "aws-appconfig-extension/HostedConfiguration/ConfigurationProfile", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::ConfigurationProfile", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyApplication5C63EC1D" + }, + "locationUri": "hosted", + "name": "awsappconfigextension-HostedConfiguration-15AED6EE" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnConfigurationProfile", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-appconfig-extension/HostedConfiguration/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::HostedConfigurationVersion", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyApplication5C63EC1D" + }, + "configurationProfileId": { + "Ref": "HostedConfigurationConfigurationProfile3AB17BEA" + }, + "content": "This is my configuration content", + "contentType": "application/json" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnHostedConfigurationVersion", + "version": "0.0.0" + } + }, + "Deployment9D5FC": { + "id": "Deployment9D5FC", + "path": "aws-appconfig-extension/HostedConfiguration/Deployment9D5FC", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppConfig::Deployment", + "aws:cdk:cloudformation:props": { + "applicationId": { + "Ref": "MyApplication5C63EC1D" + }, + "configurationProfileId": { + "Ref": "HostedConfigurationConfigurationProfile3AB17BEA" + }, + "configurationVersion": { + "Ref": "HostedConfiguration257746B4" + }, + "deploymentStrategyId": { + "Ref": "MyDeployStrategy062CAEA2" + }, + "environmentId": { + "Ref": "MyApplicationMyEnv55DE3293" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_appconfig.CfnDeployment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appconfig-alpha.HostedConfiguration", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-appconfig-extension/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-appconfig-extension/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 diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.ts new file mode 100755 index 0000000000000..70f033b8e791b --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/integ.extension.ts @@ -0,0 +1,125 @@ +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import { Stack, App, Duration } from 'aws-cdk-lib'; +import { EventBus } from 'aws-cdk-lib/aws-events'; +import { Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda'; +import { Topic } from 'aws-cdk-lib/aws-sns'; +import { Queue } from 'aws-cdk-lib/aws-sqs'; +import { + DeploymentStrategy, + Extension, + Action, + ActionPoint, + Parameter, + Application, + RolloutStrategy, + HostedConfiguration, + ConfigurationContent, + LambdaDestination, + SqsDestination, + SnsDestination, + EventBridgeDestination, +} from 'aws-cdk-lib/aws-appconfig'; + +const cdkApp = new App(); + +const stack = new Stack(cdkApp, 'aws-appconfig-extension'); + +// create extension through lambda +const lambda = new Function(stack, 'MyFunction', { + runtime: Runtime.PYTHON_3_8, + handler: 'index.handler', + code: Code.fromInline('def handler(event, context):\n\tprint(\'The function has been invoked.\')'), +}); +const app = new Application(stack, 'MyApplication', { + applicationName: 'AppForExtensionTest', +}); +const lambdaExtension = new Extension(stack, 'MyLambdaExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.PRE_CREATE_HOSTED_CONFIGURATION_VERSION, + ActionPoint.ON_DEPLOYMENT_START, + ], + eventDestination: new LambdaDestination(lambda), + }), + ], +}); +app.addExtension(lambdaExtension); + +// create extension through sqs queue +const queue = new Queue(stack, 'MyQueue'); +const queueExtension = new Extension(stack, 'MyQueueExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_START, + ], + eventDestination: new SqsDestination(queue), + }), + ], +}); +app.addExtension(queueExtension); + +// create extension through sns topic +const topic = new Topic(stack, 'MyTopic'); +const topicExtension = new Extension(stack, 'MyTopicExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_START, + ], + eventDestination: new SnsDestination(topic), + }), + ], +}); +app.addExtension(topicExtension); + +// create extension through event bus (with parameters) +const bus = EventBus.fromEventBusName(stack, 'MyEventBus', 'default'); +const busExtension = new Extension(stack, 'MyEventBusExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_START, + ], + eventDestination: new EventBridgeDestination(bus), + description: 'My event bus action', + name: 'MyEventBusPreHostedConfigVersionAction', + }), + ], + parameters: [ + Parameter.required('testParam', 'true'), + Parameter.notRequired('testNotRequiredParam'), + ], +}); +app.addExtension(busExtension); + +// invoke the extension actions +const env = app.addEnvironment('MyEnv'); +const hostedConfig = new HostedConfiguration(stack, 'HostedConfiguration', { + application: app, + content: ConfigurationContent.fromInlineJson('This is my configuration content'), + deployTo: [env], + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeployStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 100, + deploymentDuration: Duration.minutes(0), + }), + }), +}); +hostedConfig.node.addDependency(lambdaExtension, topicExtension, busExtension, queueExtension); + +/* resource deployment alone is sufficient because we already have the + corresponding resource handler tests to assert that resources can be + used after created */ + +new IntegTest(app, 'appconfig-extension', { + testCases: [stack], + cdkCommandOptions: { + destroy: { + args: { + force: true, + }, + }, + }, +}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/schema.json b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/schema.json new file mode 100644 index 0000000000000..d6f0bc0b06bb2 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-appconfig/test/schema.json @@ -0,0 +1,4 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "string" +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/DualStackTestingDefaultTestDeployAssert8ACBFB2C.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/DualStackTestingDefaultTestDeployAssert8ACBFB2C.assets.json new file mode 100644 index 0000000000000..1f48cdfd504c4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/DualStackTestingDefaultTestDeployAssert8ACBFB2C.assets.json @@ -0,0 +1,19 @@ +{ + "version": "36.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "DualStackTestingDefaultTestDeployAssert8ACBFB2C.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-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/DualStackTestingDefaultTestDeployAssert8ACBFB2C.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/DualStackTestingDefaultTestDeployAssert8ACBFB2C.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/DualStackTestingDefaultTestDeployAssert8ACBFB2C.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-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/DualStackVpc.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/DualStackVpc.assets.json new file mode 100644 index 0000000000000..5d59dc84428d2 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/DualStackVpc.assets.json @@ -0,0 +1,32 @@ +{ + "version": "36.0.0", + "files": { + "4554b47be6f57b68c6c7a7391dcc73894866d2377fe174883351e7639097f292": { + "source": { + "path": "asset.4554b47be6f57b68c6c7a7391dcc73894866d2377fe174883351e7639097f292", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "4554b47be6f57b68c6c7a7391dcc73894866d2377fe174883351e7639097f292.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "17bdcf840538818bd469e10cd17adc79eabe27fa42a55c094e2642ce192da977": { + "source": { + "path": "DualStackVpc.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "17bdcf840538818bd469e10cd17adc79eabe27fa42a55c094e2642ce192da977.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-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/DualStackVpc.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/DualStackVpc.template.json new file mode 100644 index 0000000000000..93977bc4fe135 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/DualStackVpc.template.json @@ -0,0 +1,1145 @@ +{ + "Resources": { + "DualStackVpcE812233C": { + "Type": "AWS::EC2::VPC", + "Properties": { + "CidrBlock": "10.0.0.0/16", + "EnableDnsHostnames": true, + "EnableDnsSupport": true, + "InstanceTenancy": "default", + "Tags": [ + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc" + } + ] + } + }, + "DualStackVpcipv6cidr0D52F270": { + "Type": "AWS::EC2::VPCCidrBlock", + "Properties": { + "AmazonProvidedIpv6CidrBlock": true, + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "DualStackVpcIpv6Public1Subnet1SubnetC431B310": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AssignIpv6AddressOnCreation": true, + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.0.0/19", + "Ipv6CidrBlock": { + "Fn::Select": [ + 0, + { + "Fn::Cidr": [ + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "Ipv6CidrBlocks" + ] + } + ] + }, + 6, + "64" + ] + } + ] + }, + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Ipv6Public1" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public1Subnet1RouteTable73C65370": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public1Subnet1RouteTableAssociation85711416": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "DualStackVpcIpv6Public1Subnet1RouteTable73C65370" + }, + "SubnetId": { + "Ref": "DualStackVpcIpv6Public1Subnet1SubnetC431B310" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public1Subnet1DefaultRoute57B6CABF": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Public1Subnet1RouteTable73C65370" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270", + "DualStackVpcVPCGW7803C9BB" + ] + }, + "DualStackVpcIpv6Public1Subnet1DefaultRoute63C453094": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationIpv6CidrBlock": "::/0", + "GatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Public1Subnet1RouteTable73C65370" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public1Subnet1EIP4E17F847": { + "Type": "AWS::EC2::EIP", + "Properties": { + "Domain": "vpc", + "Tags": [ + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1" + } + ] + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public1Subnet1NATGateway7D2A0F59": { + "Type": "AWS::EC2::NatGateway", + "Properties": { + "AllocationId": { + "Fn::GetAtt": [ + "DualStackVpcIpv6Public1Subnet1EIP4E17F847", + "AllocationId" + ] + }, + "SubnetId": { + "Ref": "DualStackVpcIpv6Public1Subnet1SubnetC431B310" + }, + "Tags": [ + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1" + } + ] + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270", + "DualStackVpcIpv6Public1Subnet1DefaultRoute57B6CABF", + "DualStackVpcIpv6Public1Subnet1DefaultRoute63C453094", + "DualStackVpcIpv6Public1Subnet1RouteTableAssociation85711416" + ] + }, + "DualStackVpcIpv6Public1Subnet2Subnet9515A153": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AssignIpv6AddressOnCreation": true, + "AvailabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.32.0/19", + "Ipv6CidrBlock": { + "Fn::Select": [ + 1, + { + "Fn::Cidr": [ + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "Ipv6CidrBlocks" + ] + } + ] + }, + 6, + "64" + ] + } + ] + }, + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Ipv6Public1" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public1Subnet2RouteTableC119E52D": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public1Subnet2RouteTableAssociationC35EFFE6": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "DualStackVpcIpv6Public1Subnet2RouteTableC119E52D" + }, + "SubnetId": { + "Ref": "DualStackVpcIpv6Public1Subnet2Subnet9515A153" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public1Subnet2DefaultRoute5C081F90": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Public1Subnet2RouteTableC119E52D" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270", + "DualStackVpcVPCGW7803C9BB" + ] + }, + "DualStackVpcIpv6Public1Subnet2DefaultRoute68F5F8AA5": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationIpv6CidrBlock": "::/0", + "GatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Public1Subnet2RouteTableC119E52D" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public1Subnet2EIP45B7D0DE": { + "Type": "AWS::EC2::EIP", + "Properties": { + "Domain": "vpc", + "Tags": [ + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2" + } + ] + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public1Subnet2NATGateway76C3674B": { + "Type": "AWS::EC2::NatGateway", + "Properties": { + "AllocationId": { + "Fn::GetAtt": [ + "DualStackVpcIpv6Public1Subnet2EIP45B7D0DE", + "AllocationId" + ] + }, + "SubnetId": { + "Ref": "DualStackVpcIpv6Public1Subnet2Subnet9515A153" + }, + "Tags": [ + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2" + } + ] + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270", + "DualStackVpcIpv6Public1Subnet2DefaultRoute5C081F90", + "DualStackVpcIpv6Public1Subnet2DefaultRoute68F5F8AA5", + "DualStackVpcIpv6Public1Subnet2RouteTableAssociationC35EFFE6" + ] + }, + "DualStackVpcIpv6Public2Subnet1Subnet314CDCFE": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AssignIpv6AddressOnCreation": true, + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.64.0/19", + "Ipv6CidrBlock": { + "Fn::Select": [ + 2, + { + "Fn::Cidr": [ + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "Ipv6CidrBlocks" + ] + } + ] + }, + 6, + "64" + ] + } + ] + }, + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Ipv6Public2" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet1" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public2Subnet1RouteTableAFB7D529": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet1" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public2Subnet1RouteTableAssociation14B446E0": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "DualStackVpcIpv6Public2Subnet1RouteTableAFB7D529" + }, + "SubnetId": { + "Ref": "DualStackVpcIpv6Public2Subnet1Subnet314CDCFE" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public2Subnet1DefaultRouteD48C6F58": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Public2Subnet1RouteTableAFB7D529" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270", + "DualStackVpcVPCGW7803C9BB" + ] + }, + "DualStackVpcIpv6Public2Subnet1DefaultRoute6DFD01A58": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationIpv6CidrBlock": "::/0", + "GatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Public2Subnet1RouteTableAFB7D529" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public2Subnet2Subnet509DD3CC": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AssignIpv6AddressOnCreation": true, + "AvailabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.96.0/19", + "Ipv6CidrBlock": { + "Fn::Select": [ + 3, + { + "Fn::Cidr": [ + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "Ipv6CidrBlocks" + ] + } + ] + }, + 6, + "64" + ] + } + ] + }, + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Ipv6Public2" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet2" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public2Subnet2RouteTable2D5742D9": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet2" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public2Subnet2RouteTableAssociation7399CA29": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "DualStackVpcIpv6Public2Subnet2RouteTable2D5742D9" + }, + "SubnetId": { + "Ref": "DualStackVpcIpv6Public2Subnet2Subnet509DD3CC" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Public2Subnet2DefaultRoute3D636DA7": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Public2Subnet2RouteTable2D5742D9" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270", + "DualStackVpcVPCGW7803C9BB" + ] + }, + "DualStackVpcIpv6Public2Subnet2DefaultRoute630FBEA19": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationIpv6CidrBlock": "::/0", + "GatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Public2Subnet2RouteTable2D5742D9" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Private1Subnet1Subnet2C527D85": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AssignIpv6AddressOnCreation": true, + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.128.0/19", + "Ipv6CidrBlock": { + "Fn::Select": [ + 4, + { + "Fn::Cidr": [ + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "Ipv6CidrBlocks" + ] + } + ] + }, + 6, + "64" + ] + } + ] + }, + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Ipv6Private1" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Private" + }, + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet1" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Private1Subnet1RouteTable9CCA0D06": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet1" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Private1Subnet1RouteTableAssociation0B2158D5": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet1RouteTable9CCA0D06" + }, + "SubnetId": { + "Ref": "DualStackVpcIpv6Private1Subnet1Subnet2C527D85" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Private1Subnet1DefaultRoute0F84EAB9": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "NatGatewayId": { + "Ref": "DualStackVpcIpv6Public1Subnet1NATGateway7D2A0F59" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet1RouteTable9CCA0D06" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Private1Subnet1DefaultRoute6D3F9C454": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationIpv6CidrBlock": "::/0", + "EgressOnlyInternetGatewayId": { + "Ref": "DualStackVpcEIGW64639A9F2" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet1RouteTable9CCA0D06" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Private1Subnet1Nat649907016D": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationIpv6CidrBlock": "64:ff9b::/96", + "NatGatewayId": { + "Ref": "DualStackVpcIpv6Public1Subnet1NATGateway7D2A0F59" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet1RouteTable9CCA0D06" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Private1Subnet2Subnet0F013554": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "AssignIpv6AddressOnCreation": true, + "AvailabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.160.0/19", + "Ipv6CidrBlock": { + "Fn::Select": [ + 5, + { + "Fn::Cidr": [ + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "Ipv6CidrBlocks" + ] + } + ] + }, + 6, + "64" + ] + } + ] + }, + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Ipv6Private1" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Private" + }, + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet2" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Private1Subnet2RouteTable18BA0241": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet2" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Private1Subnet2RouteTableAssociationC5571008": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet2RouteTable18BA0241" + }, + "SubnetId": { + "Ref": "DualStackVpcIpv6Private1Subnet2Subnet0F013554" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Private1Subnet2DefaultRouteBADA4821": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationCidrBlock": "0.0.0.0/0", + "NatGatewayId": { + "Ref": "DualStackVpcIpv6Public1Subnet2NATGateway76C3674B" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet2RouteTable18BA0241" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIpv6Private1Subnet2DefaultRoute68619C7A8": { + "Type": "AWS::EC2::Route", + "Properties": { + "DestinationIpv6CidrBlock": "::/0", + "EgressOnlyInternetGatewayId": { + "Ref": "DualStackVpcEIGW64639A9F2" + }, + "RouteTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet2RouteTable18BA0241" + } + }, + "DependsOn": [ + "DualStackVpcipv6cidr0D52F270" + ] + }, + "DualStackVpcIGW08AC356D": { + "Type": "AWS::EC2::InternetGateway", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "DualStackVpc/DualStackVpc" + } + ] + } + }, + "DualStackVpcVPCGW7803C9BB": { + "Type": "AWS::EC2::VPCGatewayAttachment", + "Properties": { + "InternetGatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "DualStackVpcEIGW64639A9F2": { + "Type": "AWS::EC2::EgressOnlyInternetGateway", + "Properties": { + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "DualStackVpcRestrictDefaultSecurityGroupCustomResource5AA79B96": { + "Type": "Custom::VpcRestrictDefaultSG", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E", + "Arn" + ] + }, + "DefaultSecurityGroupId": { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "DefaultSecurityGroup" + ] + }, + "Account": { + "Ref": "AWS::AccountId" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ] + }, + "ManagedPolicyArns": [ + { + "Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + } + ], + "Policies": [ + { + "PolicyName": "Inline", + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "ec2:AuthorizeSecurityGroupIngress", + "ec2:AuthorizeSecurityGroupEgress", + "ec2:RevokeSecurityGroupIngress", + "ec2:RevokeSecurityGroupEgress" + ], + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ec2:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":security-group/", + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "DefaultSecurityGroup" + ] + } + ] + ] + } + ] + } + ] + } + } + ] + } + }, + "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "4554b47be6f57b68c6c7a7391dcc73894866d2377fe174883351e7639097f292.zip" + }, + "Timeout": 900, + "MemorySize": 128, + "Handler": "__entrypoint__.handler", + "Role": { + "Fn::GetAtt": [ + "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0", + "Arn" + ] + }, + "Runtime": "nodejs18.x", + "Description": "Lambda function for removing all inbound/outbound rules from the VPC default security group" + }, + "DependsOn": [ + "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0" + ] + }, + "LambdawithIPv6VPCServiceRoleC3866C85": { + "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" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole" + ] + ] + } + ] + }, + "DependsOn": [ + "DualStackVpcIpv6Private1Subnet1DefaultRoute0F84EAB9", + "DualStackVpcIpv6Private1Subnet1DefaultRoute6D3F9C454", + "DualStackVpcIpv6Private1Subnet1Nat649907016D", + "DualStackVpcIpv6Private1Subnet1RouteTableAssociation0B2158D5", + "DualStackVpcIpv6Private1Subnet2DefaultRouteBADA4821", + "DualStackVpcIpv6Private1Subnet2DefaultRoute68619C7A8", + "DualStackVpcIpv6Private1Subnet2RouteTableAssociationC5571008" + ] + }, + "LambdawithIPv6VPCSecurityGroup1BC5651B": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "Automatic security group for Lambda Function DualStackVpcLambdawithIPv6VPC4667BF31", + "SecurityGroupEgress": [ + { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1" + } + ], + "VpcId": { + "Ref": "DualStackVpcE812233C" + } + }, + "DependsOn": [ + "DualStackVpcIpv6Private1Subnet1DefaultRoute0F84EAB9", + "DualStackVpcIpv6Private1Subnet1DefaultRoute6D3F9C454", + "DualStackVpcIpv6Private1Subnet1Nat649907016D", + "DualStackVpcIpv6Private1Subnet1RouteTableAssociation0B2158D5", + "DualStackVpcIpv6Private1Subnet2DefaultRouteBADA4821", + "DualStackVpcIpv6Private1Subnet2DefaultRoute68619C7A8", + "DualStackVpcIpv6Private1Subnet2RouteTableAssociationC5571008" + ] + }, + "LambdawithIPv6VPCF50054B3": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "def main(event, context): pass" + }, + "Handler": "index.main", + "Role": { + "Fn::GetAtt": [ + "LambdawithIPv6VPCServiceRoleC3866C85", + "Arn" + ] + }, + "Runtime": "python3.9", + "VpcConfig": { + "Ipv6AllowedForDualStack": true, + "SecurityGroupIds": [ + { + "Fn::GetAtt": [ + "LambdawithIPv6VPCSecurityGroup1BC5651B", + "GroupId" + ] + } + ], + "SubnetIds": [ + { + "Ref": "DualStackVpcIpv6Private1Subnet1Subnet2C527D85" + }, + { + "Ref": "DualStackVpcIpv6Private1Subnet2Subnet0F013554" + } + ] + } + }, + "DependsOn": [ + "DualStackVpcIpv6Private1Subnet1DefaultRoute0F84EAB9", + "DualStackVpcIpv6Private1Subnet1DefaultRoute6D3F9C454", + "DualStackVpcIpv6Private1Subnet1Nat649907016D", + "DualStackVpcIpv6Private1Subnet1RouteTableAssociation0B2158D5", + "DualStackVpcIpv6Private1Subnet2DefaultRouteBADA4821", + "DualStackVpcIpv6Private1Subnet2DefaultRoute68619C7A8", + "DualStackVpcIpv6Private1Subnet2RouteTableAssociationC5571008", + "LambdawithIPv6VPCServiceRoleC3866C85" + ] + } + }, + "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-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/asset.4554b47be6f57b68c6c7a7391dcc73894866d2377fe174883351e7639097f292/__entrypoint__.js b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/asset.4554b47be6f57b68c6c7a7391dcc73894866d2377fe174883351e7639097f292/__entrypoint__.js new file mode 100644 index 0000000000000..1e64dba70bdc0 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/asset.4554b47be6f57b68c6c7a7391dcc73894866d2377fe174883351e7639097f292/__entrypoint__.js @@ -0,0 +1,147 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.withRetries = exports.handler = exports.external = void 0; +const https = require("https"); +const url = require("url"); +// for unit tests +exports.external = { + sendHttpRequest: defaultSendHttpRequest, + log: defaultLog, + includeStackTraces: true, + userHandlerIndex: './index', +}; +const CREATE_FAILED_PHYSICAL_ID_MARKER = 'AWSCDK::CustomResourceProviderFramework::CREATE_FAILED'; +const MISSING_PHYSICAL_ID_MARKER = 'AWSCDK::CustomResourceProviderFramework::MISSING_PHYSICAL_ID'; +async function handler(event, context) { + const sanitizedEvent = { ...event, ResponseURL: '...' }; + exports.external.log(JSON.stringify(sanitizedEvent, undefined, 2)); + // 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 === CREATE_FAILED_PHYSICAL_ID_MARKER) { + exports.external.log('ignoring DELETE event caused by a failed CREATE event'); + await submitResponse('SUCCESS', event); + return; + } + try { + // invoke the user handler. this is intentionally inside the try-catch to + // ensure that if there is an error it's reported as a failure to + // cloudformation (otherwise cfn waits). + // eslint-disable-next-line @typescript-eslint/no-require-imports + const userHandler = require(exports.external.userHandlerIndex).handler; + const result = await userHandler(sanitizedEvent, context); + // validate user response and create the combined event + const responseEvent = renderResponse(event, result); + // submit to cfn as success + await submitResponse('SUCCESS', responseEvent); + } + catch (e) { + const resp = { + ...event, + Reason: exports.external.includeStackTraces ? e.stack : e.message, + }; + if (!resp.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') { + exports.external.log('CREATE failed, responding with a marker physical resource id so that the subsequent DELETE will be ignored'); + resp.PhysicalResourceId = CREATE_FAILED_PHYSICAL_ID_MARKER; + } + else { + // otherwise, if PhysicalResourceId is not specified, something is + // terribly wrong because all other events should have an ID. + exports.external.log(`ERROR: Malformed event. "PhysicalResourceId" is required: ${JSON.stringify(event)}`); + } + } + // this is an actual error, fail the activity altogether and exist. + await submitResponse('FAILED', resp); + } +} +exports.handler = handler; +function renderResponse(cfnRequest, handlerResponse = {}) { + // if physical ID is not returned, we have some defaults for you based + // on the request type. + const physicalResourceId = handlerResponse.PhysicalResourceId ?? cfnRequest.PhysicalResourceId ?? cfnRequest.RequestId; + // 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 "${handlerResponse.PhysicalResourceId}" during deletion`); + } + // merge request event and result event (result prevails). + return { + ...cfnRequest, + ...handlerResponse, + PhysicalResourceId: physicalResourceId, + }; +} +async function submitResponse(status, event) { + const json = { + Status: status, + Reason: event.Reason ?? status, + StackId: event.StackId, + RequestId: event.RequestId, + PhysicalResourceId: event.PhysicalResourceId || MISSING_PHYSICAL_ID_MARKER, + LogicalResourceId: event.LogicalResourceId, + NoEcho: event.NoEcho, + Data: event.Data, + }; + exports.external.log('submit response to cloudformation', json); + const responseBody = JSON.stringify(json); + const parsedUrl = url.parse(event.ResponseURL); + const req = { + hostname: parsedUrl.hostname, + path: parsedUrl.path, + method: 'PUT', + headers: { + 'content-type': '', + 'content-length': Buffer.byteLength(responseBody, 'utf8'), + }, + }; + const retryOptions = { + attempts: 5, + sleep: 1000, + }; + await withRetries(retryOptions, exports.external.sendHttpRequest)(req, responseBody); +} +async function defaultSendHttpRequest(options, responseBody) { + return new Promise((resolve, reject) => { + try { + const request = https.request(options, _ => resolve()); + request.on('error', reject); + request.write(responseBody); + request.end(); + } + catch (e) { + reject(e); + } + }); +} +function defaultLog(fmt, ...params) { + // eslint-disable-next-line no-console + console.log(fmt, ...params); +} +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; + } + } + }; +} +exports.withRetries = withRetries; +async function sleep(ms) { + return new Promise((ok) => setTimeout(ok, ms)); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsMkJBQTJCO0FBRTNCLGlCQUFpQjtBQUNKLFFBQUEsUUFBUSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsR0FBRyxFQUFFLFVBQVU7SUFDZixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGdCQUFnQixFQUFFLFNBQVM7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sZ0NBQWdDLEdBQUcsd0RBQXdELENBQUM7QUFDbEcsTUFBTSwwQkFBMEIsR0FBRyw4REFBOEQsQ0FBQztBQVczRixLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWtELEVBQUUsT0FBMEI7SUFDMUcsTUFBTSxjQUFjLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDeEQsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0QsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxhQUFhO0lBQ2IsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssZ0NBQWdDLEVBQUU7UUFDbkcsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUN0RSxNQUFNLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTztLQUNSO0lBRUQsSUFBSTtRQUNGLHlFQUF5RTtRQUN6RSxpRUFBaUU7UUFDakUsd0NBQXdDO1FBQ3hDLGlFQUFpRTtRQUNqRSxNQUFNLFdBQVcsR0FBWSxPQUFPLENBQUMsZ0JBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUQsdURBQXVEO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEQsMkJBQTJCO1FBQzNCLE1BQU0sY0FBYyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUNoRDtJQUFDLE9BQU8sQ0FBTSxFQUFFO1FBQ2YsTUFBTSxJQUFJLEdBQWE7WUFDckIsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLGdCQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLHlFQUF5RTtZQUN6RSxtRUFBbUU7WUFDbkUsd0VBQXdFO1lBQ3hFLHFFQUFxRTtZQUNyRSxnQ0FBZ0M7WUFDaEMsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtnQkFDbEMsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsNEdBQTRHLENBQUMsQ0FBQztnQkFDM0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdDQUFnQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNMLGtFQUFrRTtnQkFDbEUsNkRBQTZEO2dCQUM3RCxnQkFBUSxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDcEc7U0FDRjtRQUVELG1FQUFtRTtRQUNuRSxNQUFNLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDdEM7QUFDSCxDQUFDO0FBbkRELDBCQW1EQztBQUVELFNBQVMsY0FBYyxDQUNyQixVQUF5RixFQUN6RixrQkFBMEMsRUFBRztJQUU3QyxzRUFBc0U7SUFDdEUsdUJBQXVCO0lBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO0lBRXZILGtFQUFrRTtJQUNsRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLGtCQUFrQixLQUFLLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtRQUMvRixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxVQUFVLENBQUMsa0JBQWtCLFNBQVMsZUFBZSxDQUFDLGtCQUFrQixtQkFBbUIsQ0FBQyxDQUFDO0tBQ3RLO0lBRUQsMERBQTBEO0lBQzFELE9BQU87UUFDTCxHQUFHLFVBQVU7UUFDYixHQUFHLGVBQWU7UUFDbEIsa0JBQWtCLEVBQUUsa0JBQWtCO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE0QixFQUFFLEtBQWU7SUFDekUsTUFBTSxJQUFJLEdBQW1EO1FBQzNELE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTTtRQUM5QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSwwQkFBMEI7UUFDMUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtRQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0tBQ2pCLENBQUM7SUFFRixnQkFBUSxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHO1FBQ1YsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1FBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztTQUMxRDtLQUNGLENBQUM7SUFFRixNQUFNLFlBQVksR0FBRztRQUNuQixRQUFRLEVBQUUsQ0FBQztRQUNYLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQztJQUNGLE1BQU0sV0FBVyxDQUFDLFlBQVksRUFBRSxnQkFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQsS0FBSyxVQUFVLHNCQUFzQixDQUFDLE9BQTZCLEVBQUUsWUFBb0I7SUFDdkYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxJQUFJO1lBQ0YsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBVyxFQUFFLEdBQUcsTUFBYTtJQUMvQyxzQ0FBc0M7SUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBU0QsU0FBZ0IsV0FBVyxDQUEwQixPQUFxQixFQUFFLEVBQTRCO0lBQ3RHLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBSyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxFQUFFO1lBQ1gsSUFBSTtnQkFDRixPQUFPLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDeEI7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixJQUFJLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDbkIsTUFBTSxDQUFDLENBQUM7aUJBQ1Q7Z0JBQ0QsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDNUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNUO1NBQ0Y7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDO0FBaEJELGtDQWdCQztBQUVELEtBQUssVUFBVSxLQUFLLENBQUMsRUFBVTtJQUM3QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuXG4vLyBmb3IgdW5pdCB0ZXN0c1xuZXhwb3J0IGNvbnN0IGV4dGVybmFsID0ge1xuICBzZW5kSHR0cFJlcXVlc3Q6IGRlZmF1bHRTZW5kSHR0cFJlcXVlc3QsXG4gIGxvZzogZGVmYXVsdExvZyxcbiAgaW5jbHVkZVN0YWNrVHJhY2VzOiB0cnVlLFxuICB1c2VySGFuZGxlckluZGV4OiAnLi9pbmRleCcsXG59O1xuXG5jb25zdCBDUkVBVEVfRkFJTEVEX1BIWVNJQ0FMX0lEX01BUktFUiA9ICdBV1NDREs6OkN1c3RvbVJlc291cmNlUHJvdmlkZXJGcmFtZXdvcms6OkNSRUFURV9GQUlMRUQnO1xuY29uc3QgTUlTU0lOR19QSFlTSUNBTF9JRF9NQVJLRVIgPSAnQVdTQ0RLOjpDdXN0b21SZXNvdXJjZVByb3ZpZGVyRnJhbWV3b3JrOjpNSVNTSU5HX1BIWVNJQ0FMX0lEJztcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50ICYgSGFuZGxlclJlc3BvbnNlO1xuZXhwb3J0IHR5cGUgSGFuZGxlciA9IChldmVudDogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgY29udGV4dDogQVdTTGFtYmRhLkNvbnRleHQpID0+IFByb21pc2U8SGFuZGxlclJlc3BvbnNlIHwgdm9pZD47XG5leHBvcnQgdHlwZSBIYW5kbGVyUmVzcG9uc2UgPSB1bmRlZmluZWQgfCB7XG4gIERhdGE/OiBhbnk7XG4gIFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZztcbiAgUmVhc29uPzogc3RyaW5nO1xuICBOb0VjaG8/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIGNvbnRleHQ6IEFXU0xhbWJkYS5Db250ZXh0KSB7XG4gIGNvbnN0IHNhbml0aXplZEV2ZW50ID0geyAuLi5ldmVudCwgUmVzcG9uc2VVUkw6ICcuLi4nIH07XG4gIGV4dGVybmFsLmxvZyhKU09OLnN0cmluZ2lmeShzYW5pdGl6ZWRFdmVudCwgdW5kZWZpbmVkLCAyKSk7XG5cbiAgLy8gaWdub3JlIERFTEVURSBldmVudCB3aGVuIHRoZSBwaHlzaWNhbCByZXNvdXJjZSBJRCBpcyB0aGUgbWFya2VyIHRoYXRcbiAgLy8gaW5kaWNhdGVzIHRoYXQgdGhpcyBERUxFVEUgaXMgYSBzdWJzZXF1ZW50IERFTEVURSB0byBhIGZhaWxlZCBDUkVBVEVcbiAgLy8gb3BlcmF0aW9uLlxuICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnICYmIGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCA9PT0gQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVIpIHtcbiAgICBleHRlcm5hbC5sb2coJ2lnbm9yaW5nIERFTEVURSBldmVudCBjYXVzZWQgYnkgYSBmYWlsZWQgQ1JFQVRFIGV2ZW50Jyk7XG4gICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ1NVQ0NFU1MnLCBldmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBpbnZva2UgdGhlIHVzZXIgaGFuZGxlci4gdGhpcyBpcyBpbnRlbnRpb25hbGx5IGluc2lkZSB0aGUgdHJ5LWNhdGNoIHRvXG4gICAgLy8gZW5zdXJlIHRoYXQgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaXQncyByZXBvcnRlZCBhcyBhIGZhaWx1cmUgdG9cbiAgICAvLyBjbG91ZGZvcm1hdGlvbiAob3RoZXJ3aXNlIGNmbiB3YWl0cykuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICBjb25zdCB1c2VySGFuZGxlcjogSGFuZGxlciA9IHJlcXVpcmUoZXh0ZXJuYWwudXNlckhhbmRsZXJJbmRleCkuaGFuZGxlcjtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1c2VySGFuZGxlcihzYW5pdGl6ZWRFdmVudCwgY29udGV4dCk7XG5cbiAgICAvLyB2YWxpZGF0ZSB1c2VyIHJlc3BvbnNlIGFuZCBjcmVhdGUgdGhlIGNvbWJpbmVkIGV2ZW50XG4gICAgY29uc3QgcmVzcG9uc2VFdmVudCA9IHJlbmRlclJlc3BvbnNlKGV2ZW50LCByZXN1bHQpO1xuXG4gICAgLy8gc3VibWl0IHRvIGNmbiBhcyBzdWNjZXNzXG4gICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ1NVQ0NFU1MnLCByZXNwb25zZUV2ZW50KTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgY29uc3QgcmVzcDogUmVzcG9uc2UgPSB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIFJlYXNvbjogZXh0ZXJuYWwuaW5jbHVkZVN0YWNrVHJhY2VzID8gZS5zdGFjayA6IGUubWVzc2FnZSxcbiAgICB9O1xuXG4gICAgaWYgKCFyZXNwLlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgICAgLy8gc3BlY2lhbCBjYXNlOiBpZiBDUkVBVEUgZmFpbHMsIHdoaWNoIHVzdWFsbHkgaW1wbGllcywgd2UgdXN1YWxseSBkb24ndFxuICAgICAgLy8gaGF2ZSBhIHBoeXNpY2FsIHJlc291cmNlIGlkLiBpbiB0aGlzIGNhc2UsIHRoZSBzdWJzZXF1ZW50IERFTEVURVxuICAgICAgLy8gb3BlcmF0aW9uIGRvZXMgbm90IGhhdmUgYW55IG1lYW5pbmcsIGFuZCB3aWxsIGxpa2VseSBmYWlsIGFzIHdlbGwuIHRvXG4gICAgICAvLyBhZGRyZXNzIHRoaXMsIHdlIHVzZSBhIG1hcmtlciBzbyB0aGUgcHJvdmlkZXIgZnJhbWV3b3JrIGNhbiBzaW1wbHlcbiAgICAgIC8vIGlnbm9yZSB0aGUgc3Vic2VxdWVudCBERUxFVEUuXG4gICAgICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdDcmVhdGUnKSB7XG4gICAgICAgIGV4dGVybmFsLmxvZygnQ1JFQVRFIGZhaWxlZCwgcmVzcG9uZGluZyB3aXRoIGEgbWFya2VyIHBoeXNpY2FsIHJlc291cmNlIGlkIHNvIHRoYXQgdGhlIHN1YnNlcXVlbnQgREVMRVRFIHdpbGwgYmUgaWdub3JlZCcpO1xuICAgICAgICByZXNwLlBoeXNpY2FsUmVzb3VyY2VJZCA9IENSRUFURV9GQUlMRURfUEhZU0lDQUxfSURfTUFSS0VSO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBpZiBQaHlzaWNhbFJlc291cmNlSWQgaXMgbm90IHNwZWNpZmllZCwgc29tZXRoaW5nIGlzXG4gICAgICAgIC8vIHRlcnJpYmx5IHdyb25nIGJlY2F1c2UgYWxsIG90aGVyIGV2ZW50cyBzaG91bGQgaGF2ZSBhbiBJRC5cbiAgICAgICAgZXh0ZXJuYWwubG9nKGBFUlJPUjogTWFsZm9ybWVkIGV2ZW50LiBcIlBoeXNpY2FsUmVzb3VyY2VJZFwiIGlzIHJlcXVpcmVkOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50KX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIGFuIGFjdHVhbCBlcnJvciwgZmFpbCB0aGUgYWN0aXZpdHkgYWx0b2dldGhlciBhbmQgZXhpc3QuXG4gICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ0ZBSUxFRCcsIHJlc3ApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJlc3BvbnNlKFxuICBjZm5SZXF1ZXN0OiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50ICYgeyBQaHlzaWNhbFJlc291cmNlSWQ/OiBzdHJpbmcgfSxcbiAgaGFuZGxlclJlc3BvbnNlOiB2b2lkIHwgSGFuZGxlclJlc3BvbnNlID0geyB9KTogUmVzcG9uc2Uge1xuXG4gIC8vIGlmIHBoeXNpY2FsIElEIGlzIG5vdCByZXR1cm5lZCwgd2UgaGF2ZSBzb21lIGRlZmF1bHRzIGZvciB5b3UgYmFzZWRcbiAgLy8gb24gdGhlIHJlcXVlc3QgdHlwZS5cbiAgY29uc3QgcGh5c2ljYWxSZXNvdXJjZUlkID0gaGFuZGxlclJlc3BvbnNlLlBoeXNpY2FsUmVzb3VyY2VJZCA/PyBjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZCA/PyBjZm5SZXF1ZXN0LlJlcXVlc3RJZDtcblxuICAvLyBpZiB3ZSBhcmUgaW4gREVMRVRFIGFuZCBwaHlzaWNhbCBJRCB3YXMgY2hhbmdlZCwgaXQncyBhbiBlcnJvci5cbiAgaWYgKGNmblJlcXVlc3QuUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnICYmIHBoeXNpY2FsUmVzb3VyY2VJZCAhPT0gY2ZuUmVxdWVzdC5QaHlzaWNhbFJlc291cmNlSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERFTEVURTogY2Fubm90IGNoYW5nZSB0aGUgcGh5c2ljYWwgcmVzb3VyY2UgSUQgZnJvbSBcIiR7Y2ZuUmVxdWVzdC5QaHlzaWNhbFJlc291cmNlSWR9XCIgdG8gXCIke2hhbmRsZXJSZXNwb25zZS5QaHlzaWNhbFJlc291cmNlSWR9XCIgZHVyaW5nIGRlbGV0aW9uYCk7XG4gIH1cblxuICAvLyBtZXJnZSByZXF1ZXN0IGV2ZW50IGFuZCByZXN1bHQgZXZlbnQgKHJlc3VsdCBwcmV2YWlscykuXG4gIHJldHVybiB7XG4gICAgLi4uY2ZuUmVxdWVzdCxcbiAgICAuLi5oYW5kbGVyUmVzcG9uc2UsXG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBwaHlzaWNhbFJlc291cmNlSWQsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFJlc3BvbnNlKHN0YXR1czogJ1NVQ0NFU1MnIHwgJ0ZBSUxFRCcsIGV2ZW50OiBSZXNwb25zZSkge1xuICBjb25zdCBqc29uOiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlID0ge1xuICAgIFN0YXR1czogc3RhdHVzLFxuICAgIFJlYXNvbjogZXZlbnQuUmVhc29uID8/IHN0YXR1cyxcbiAgICBTdGFja0lkOiBldmVudC5TdGFja0lkLFxuICAgIFJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkIHx8IE1JU1NJTkdfUEhZU0lDQUxfSURfTUFSS0VSLFxuICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICBOb0VjaG86IGV2ZW50Lk5vRWNobyxcbiAgICBEYXRhOiBldmVudC5EYXRhLFxuICB9O1xuXG4gIGV4dGVybmFsLmxvZygnc3VibWl0IHJlc3BvbnNlIHRvIGNsb3VkZm9ybWF0aW9uJywganNvbik7XG5cbiAgY29uc3QgcmVzcG9uc2VCb2R5ID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG4gIGNvbnN0IHBhcnNlZFVybCA9IHVybC5wYXJzZShldmVudC5SZXNwb25zZVVSTCk7XG4gIGNvbnN0IHJlcSA9IHtcbiAgICBob3N0bmFtZTogcGFyc2VkVXJsLmhvc3RuYW1lLFxuICAgIHBhdGg6IHBhcnNlZFVybC5wYXRoLFxuICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICcnLFxuICAgICAgJ2NvbnRlbnQtbGVuZ3RoJzogQnVmZmVyLmJ5dGVMZW5ndGgocmVzcG9uc2VCb2R5LCAndXRmOCcpLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgcmV0cnlPcHRpb25zID0ge1xuICAgIGF0dGVtcHRzOiA1LFxuICAgIHNsZWVwOiAxMDAwLFxuICB9O1xuICBhd2FpdCB3aXRoUmV0cmllcyhyZXRyeU9wdGlvbnMsIGV4dGVybmFsLnNlbmRIdHRwUmVxdWVzdCkocmVxLCByZXNwb25zZUJvZHkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0U2VuZEh0dHBSZXF1ZXN0KG9wdGlvbnM6IGh0dHBzLlJlcXVlc3RPcHRpb25zLCByZXNwb25zZUJvZHk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gaHR0cHMucmVxdWVzdChvcHRpb25zLCBfID0+IHJlc29sdmUoKSk7XG4gICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICByZXF1ZXN0LndyaXRlKHJlc3BvbnNlQm9keSk7XG4gICAgICByZXF1ZXN0LmVuZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0TG9nKGZtdDogc3RyaW5nLCAuLi5wYXJhbXM6IGFueVtdKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUubG9nKGZtdCwgLi4ucGFyYW1zKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeU9wdGlvbnMge1xuICAvKiogSG93IG1hbnkgcmV0cmllcyAod2lsbCBhdCBsZWFzdCB0cnkgb25jZSkgKi9cbiAgcmVhZG9ubHkgYXR0ZW1wdHM6IG51bWJlcjtcbiAgLyoqIFNsZWVwIGJhc2UsIGluIG1zICovXG4gIHJlYWRvbmx5IHNsZWVwOiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmV0cmllczxBIGV4dGVuZHMgQXJyYXk8YW55PiwgQj4ob3B0aW9uczogUmV0cnlPcHRpb25zLCBmbjogKC4uLnhzOiBBKSA9PiBQcm9taXNlPEI+KTogKC4uLnhzOiBBKSA9PiBQcm9taXNlPEI+IHtcbiAgcmV0dXJuIGFzeW5jICguLi54czogQSkgPT4ge1xuICAgIGxldCBhdHRlbXB0cyA9IG9wdGlvbnMuYXR0ZW1wdHM7XG4gICAgbGV0IG1zID0gb3B0aW9ucy5zbGVlcDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuKC4uLnhzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGF0dGVtcHRzLS0gPD0gMCkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgc2xlZXAoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbXMpKTtcbiAgICAgICAgbXMgKj0gMjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvaykgPT4gc2V0VGltZW91dChvaywgbXMpKTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/asset.4554b47be6f57b68c6c7a7391dcc73894866d2377fe174883351e7639097f292/index.js b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/asset.4554b47be6f57b68c6c7a7391dcc73894866d2377fe174883351e7639097f292/index.js new file mode 100644 index 0000000000000..013bcaffd8fe5 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/asset.4554b47be6f57b68c6c7a7391dcc73894866d2377fe174883351e7639097f292/index.js @@ -0,0 +1 @@ +"use strict";var I=Object.create;var t=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty;var G=(r,e)=>{for(var o in e)t(r,o,{get:e[o],enumerable:!0})},n=(r,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of P(e))!l.call(r,s)&&s!==o&&t(r,s,{get:()=>e[s],enumerable:!(i=y(e,s))||i.enumerable});return r};var R=(r,e,o)=>(o=r!=null?I(g(r)):{},n(e||!r||!r.__esModule?t(o,"default",{value:r,enumerable:!0}):o,r)),S=r=>n(t({},"__esModule",{value:!0}),r);var k={};G(k,{handler:()=>f});module.exports=S(k);var a=R(require("@aws-sdk/client-ec2")),u=new a.EC2({});function c(r,e){return{GroupId:r,IpPermissions:[{UserIdGroupPairs:[{GroupId:r,UserId:e}],IpProtocol:"-1"}]}}function d(r){return{GroupId:r,IpPermissions:[{IpRanges:[{CidrIp:"0.0.0.0/0"}],IpProtocol:"-1"}]}}async function f(r){let e=r.ResourceProperties.DefaultSecurityGroupId,o=r.ResourceProperties.Account;switch(r.RequestType){case"Create":return p(e,o);case"Update":return h(r);case"Delete":return m(e,o)}}async function h(r){let e=r.OldResourceProperties.DefaultSecurityGroupId,o=r.ResourceProperties.DefaultSecurityGroupId;e!==o&&(await m(e,r.ResourceProperties.Account),await p(o,r.ResourceProperties.Account))}async function p(r,e){try{await u.revokeSecurityGroupEgress(d(r))}catch(o){if(o.name!=="InvalidPermission.NotFound")throw o}try{await u.revokeSecurityGroupIngress(c(r,e))}catch(o){if(o.name!=="InvalidPermission.NotFound")throw o}}async function m(r,e){await u.authorizeSecurityGroupIngress(c(r,e)),await u.authorizeSecurityGroupEgress(d(r))}0&&(module.exports={handler}); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/cdk.out new file mode 100644 index 0000000000000..1f0068d32659a --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/integ.json new file mode 100644 index 0000000000000..a0a7b84c46c06 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "36.0.0", + "testCases": { + "DualStackTesting/DefaultTest": { + "stacks": [ + "DualStackVpc" + ], + "assertionStack": "DualStackTesting/DefaultTest/DeployAssert", + "assertionStackName": "DualStackTestingDefaultTestDeployAssert8ACBFB2C" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/manifest.json new file mode 100644 index 0000000000000..32d6529b29210 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/manifest.json @@ -0,0 +1,755 @@ +{ + "version": "36.0.0", + "artifacts": { + "DualStackVpc.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "DualStackVpc.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "DualStackVpc": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "DualStackVpc.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}/17bdcf840538818bd469e10cd17adc79eabe27fa42a55c094e2642ce192da977.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "DualStackVpc.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": [ + "DualStackVpc.assets" + ], + "metadata": { + "/DualStackVpc/DualStackVpc/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcE812233C" + } + ], + "/DualStackVpc/DualStackVpc/ipv6cidr": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcipv6cidr0D52F270" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet1SubnetC431B310" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet1RouteTable73C65370" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet1RouteTableAssociation85711416" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet1DefaultRoute57B6CABF" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/DefaultRoute6": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet1DefaultRoute63C453094" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/EIP": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet1EIP4E17F847" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/NATGateway": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet1NATGateway7D2A0F59" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet2Subnet9515A153" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet2RouteTableC119E52D" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet2RouteTableAssociationC35EFFE6" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet2DefaultRoute5C081F90" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/DefaultRoute6": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet2DefaultRoute68F5F8AA5" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/EIP": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet2EIP45B7D0DE" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/NATGateway": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public1Subnet2NATGateway76C3674B" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public2Subnet1/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public2Subnet1Subnet314CDCFE" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public2Subnet1/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public2Subnet1RouteTableAFB7D529" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public2Subnet1/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public2Subnet1RouteTableAssociation14B446E0" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public2Subnet1/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public2Subnet1DefaultRouteD48C6F58" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public2Subnet1/DefaultRoute6": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public2Subnet1DefaultRoute6DFD01A58" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public2Subnet2/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public2Subnet2Subnet509DD3CC" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public2Subnet2/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public2Subnet2RouteTable2D5742D9" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public2Subnet2/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public2Subnet2RouteTableAssociation7399CA29" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public2Subnet2/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public2Subnet2DefaultRoute3D636DA7" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Public2Subnet2/DefaultRoute6": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Public2Subnet2DefaultRoute630FBEA19" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Private1Subnet1Subnet2C527D85" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Private1Subnet1RouteTable9CCA0D06" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Private1Subnet1RouteTableAssociation0B2158D5" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Private1Subnet1DefaultRoute0F84EAB9" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/DefaultRoute6": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Private1Subnet1DefaultRoute6D3F9C454" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/Nat64": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Private1Subnet1Nat649907016D" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Private1Subnet2/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Private1Subnet2Subnet0F013554" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Private1Subnet2/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Private1Subnet2RouteTable18BA0241" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Private1Subnet2/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Private1Subnet2RouteTableAssociationC5571008" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Private1Subnet2/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Private1Subnet2DefaultRouteBADA4821" + } + ], + "/DualStackVpc/DualStackVpc/Ipv6Private1Subnet2/DefaultRoute6": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIpv6Private1Subnet2DefaultRoute68619C7A8" + } + ], + "/DualStackVpc/DualStackVpc/IGW": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcIGW08AC356D" + } + ], + "/DualStackVpc/DualStackVpc/VPCGW": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcVPCGW7803C9BB" + } + ], + "/DualStackVpc/DualStackVpc/EIGW6": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcEIGW64639A9F2" + } + ], + "/DualStackVpc/DualStackVpc/RestrictDefaultSecurityGroupCustomResource/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackVpcRestrictDefaultSecurityGroupCustomResource5AA79B96" + } + ], + "/DualStackVpc/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role": [ + { + "type": "aws:cdk:logicalId", + "data": "CustomVpcRestrictDefaultSGCustomResourceProviderRole26592FE0" + } + ], + "/DualStackVpc/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler": [ + { + "type": "aws:cdk:logicalId", + "data": "CustomVpcRestrictDefaultSGCustomResourceProviderHandlerDC833E5E" + } + ], + "/DualStackVpc/Lambda_with_IPv6_VPC/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LambdawithIPv6VPCServiceRoleC3866C85" + } + ], + "/DualStackVpc/Lambda_with_IPv6_VPC/SecurityGroup/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LambdawithIPv6VPCSecurityGroup1BC5651B", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_REPLACE" + ] + } + ], + "/DualStackVpc/Lambda_with_IPv6_VPC/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LambdawithIPv6VPCF50054B3" + } + ], + "/DualStackVpc/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/DualStackVpc/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ], + "DualStackProtocolVpc85768F2C": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpc85768F2C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcipv6cidr449C49CD": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcipv6cidr449C49CD", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet1Subnet74CA4B8A": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet1Subnet74CA4B8A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet1RouteTable67D20294": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet1RouteTable67D20294", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet1RouteTableAssociation047F9491": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet1RouteTableAssociation047F9491", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet1DefaultRoute95ED74BD": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet1DefaultRoute95ED74BD", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet1DefaultRoute6C01F89FD": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet1DefaultRoute6C01F89FD", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet1EIP12EDF1FD": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet1EIP12EDF1FD", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet1NATGateway241D9A98": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet1NATGateway241D9A98", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet2Subnet8B1A85E2": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet2Subnet8B1A85E2", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet2RouteTable63549985": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet2RouteTable63549985", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet2RouteTableAssociation12736FE3": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet2RouteTableAssociation12736FE3", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet2DefaultRoute293C2941": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet2DefaultRoute293C2941", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet2DefaultRoute67E6A8DC8": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet2DefaultRoute67E6A8DC8", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet2EIP149FAFF5": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet2EIP149FAFF5", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub1Subnet2NATGateway64DC713B": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub1Subnet2NATGateway64DC713B", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub2Subnet1Subnet483B9827": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub2Subnet1Subnet483B9827", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub2Subnet1RouteTable95379836": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub2Subnet1RouteTable95379836", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub2Subnet1RouteTableAssociation24FAAE7F": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub2Subnet1RouteTableAssociation24FAAE7F", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub2Subnet1DefaultRouteB99615CA": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub2Subnet1DefaultRouteB99615CA", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub2Subnet1DefaultRoute670D1366F": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub2Subnet1DefaultRoute670D1366F", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub2Subnet2SubnetCA5962A0": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub2Subnet2SubnetCA5962A0", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub2Subnet2RouteTable1300ACEE": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub2Subnet2RouteTable1300ACEE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub2Subnet2RouteTableAssociation7E1F73B5": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub2Subnet2RouteTableAssociation7E1F73B5", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub2Subnet2DefaultRoute6B98C127": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub2Subnet2DefaultRoute6B98C127", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPub2Subnet2DefaultRoute60CFFE651": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPub2Subnet2DefaultRoute60CFFE651", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPriv1Subnet1Subnet6E77EDE7": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPriv1Subnet1Subnet6E77EDE7", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPriv1Subnet1RouteTableB9D9FD11": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPriv1Subnet1RouteTableB9D9FD11", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPriv1Subnet1RouteTableAssociation9D52852A": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPriv1Subnet1RouteTableAssociation9D52852A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPriv1Subnet1DefaultRouteEC60BBD4": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPriv1Subnet1DefaultRouteEC60BBD4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPriv1Subnet1DefaultRoute65CC26492": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPriv1Subnet1DefaultRoute65CC26492", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPriv1Subnet1Nat649573F0A7": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPriv1Subnet1Nat649573F0A7", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPriv1Subnet2SubnetBC65773F": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPriv1Subnet2SubnetBC65773F", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPriv1Subnet2RouteTableC8DC5D06": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPriv1Subnet2RouteTableC8DC5D06", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPriv1Subnet2RouteTableAssociation0F224C80": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPriv1Subnet2RouteTableAssociation0F224C80", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPriv1Subnet2DefaultRouteD01D04E1": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPriv1Subnet2DefaultRouteD01D04E1", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcPriv1Subnet2DefaultRoute63F529AA9": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcPriv1Subnet2DefaultRoute63F529AA9", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcIGW0F74732B": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcIGW0F74732B", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcVPCGWADE48B7D": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcVPCGWADE48B7D", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcEIGW64BED696A": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcEIGW64BED696A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "DualStackProtocolVpcRestrictDefaultSecurityGroupCustomResource592699C8": [ + { + "type": "aws:cdk:logicalId", + "data": "DualStackProtocolVpcRestrictDefaultSecurityGroupCustomResource592699C8", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ] + }, + "displayName": "DualStackVpc" + }, + "DualStackTestingDefaultTestDeployAssert8ACBFB2C.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "DualStackTestingDefaultTestDeployAssert8ACBFB2C.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "DualStackTestingDefaultTestDeployAssert8ACBFB2C": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "DualStackTestingDefaultTestDeployAssert8ACBFB2C.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": [ + "DualStackTestingDefaultTestDeployAssert8ACBFB2C.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": [ + "DualStackTestingDefaultTestDeployAssert8ACBFB2C.assets" + ], + "metadata": { + "/DualStackTesting/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/DualStackTesting/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "DualStackTesting/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/tree.json new file mode 100644 index 0000000000000..28308dac0be67 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.js.snapshot/tree.json @@ -0,0 +1,1501 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "DualStackVpc": { + "id": "DualStackVpc", + "path": "DualStackVpc", + "children": { + "DualStackVpc": { + "id": "DualStackVpc", + "path": "DualStackVpc/DualStackVpc", + "children": { + "Resource": { + "id": "Resource", + "path": "DualStackVpc/DualStackVpc/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": "DualStackVpc/DualStackVpc" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnVPC", + "version": "0.0.0" + } + }, + "ipv6cidr": { + "id": "ipv6cidr", + "path": "DualStackVpc/DualStackVpc/ipv6cidr", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::VPCCidrBlock", + "aws:cdk:cloudformation:props": { + "amazonProvidedIpv6CidrBlock": true, + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnVPCCidrBlock", + "version": "0.0.0" + } + }, + "Ipv6Public1Subnet1": { + "id": "Ipv6Public1Subnet1", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1", + "children": { + "Subnet": { + "id": "Subnet", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "assignIpv6AddressOnCreation": true, + "availabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.0.0/19", + "ipv6CidrBlock": { + "Fn::Select": [ + 0, + { + "Fn::Cidr": [ + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "Ipv6CidrBlocks" + ] + } + ] + }, + 6, + "64" + ] + } + ] + }, + "mapPublicIpOnLaunch": false, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Ipv6Public1" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Public" + }, + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "DualStackVpcIpv6Public1Subnet1RouteTable73C65370" + }, + "subnetId": { + "Ref": "DualStackVpcIpv6Public1Subnet1SubnetC431B310" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "gatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Public1Subnet1RouteTable73C65370" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "DefaultRoute6": { + "id": "DefaultRoute6", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/DefaultRoute6", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationIpv6CidrBlock": "::/0", + "gatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Public1Subnet1RouteTable73C65370" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "EIP": { + "id": "EIP", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/EIP", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::EIP", + "aws:cdk:cloudformation:props": { + "domain": "vpc", + "tags": [ + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnEIP", + "version": "0.0.0" + } + }, + "NATGateway": { + "id": "NATGateway", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1/NATGateway", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::NatGateway", + "aws:cdk:cloudformation:props": { + "allocationId": { + "Fn::GetAtt": [ + "DualStackVpcIpv6Public1Subnet1EIP4E17F847", + "AllocationId" + ] + }, + "subnetId": { + "Ref": "DualStackVpcIpv6Public1Subnet1SubnetC431B310" + }, + "tags": [ + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet1" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnNatGateway", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PublicSubnet", + "version": "0.0.0" + } + }, + "Ipv6Public1Subnet2": { + "id": "Ipv6Public1Subnet2", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2", + "children": { + "Subnet": { + "id": "Subnet", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "assignIpv6AddressOnCreation": true, + "availabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.32.0/19", + "ipv6CidrBlock": { + "Fn::Select": [ + 1, + { + "Fn::Cidr": [ + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "Ipv6CidrBlocks" + ] + } + ] + }, + 6, + "64" + ] + } + ] + }, + "mapPublicIpOnLaunch": false, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Ipv6Public1" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Public" + }, + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "DualStackVpcIpv6Public1Subnet2RouteTableC119E52D" + }, + "subnetId": { + "Ref": "DualStackVpcIpv6Public1Subnet2Subnet9515A153" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "gatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Public1Subnet2RouteTableC119E52D" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "DefaultRoute6": { + "id": "DefaultRoute6", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/DefaultRoute6", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationIpv6CidrBlock": "::/0", + "gatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Public1Subnet2RouteTableC119E52D" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "EIP": { + "id": "EIP", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/EIP", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::EIP", + "aws:cdk:cloudformation:props": { + "domain": "vpc", + "tags": [ + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnEIP", + "version": "0.0.0" + } + }, + "NATGateway": { + "id": "NATGateway", + "path": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2/NATGateway", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::NatGateway", + "aws:cdk:cloudformation:props": { + "allocationId": { + "Fn::GetAtt": [ + "DualStackVpcIpv6Public1Subnet2EIP45B7D0DE", + "AllocationId" + ] + }, + "subnetId": { + "Ref": "DualStackVpcIpv6Public1Subnet2Subnet9515A153" + }, + "tags": [ + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Public1Subnet2" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnNatGateway", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PublicSubnet", + "version": "0.0.0" + } + }, + "Ipv6Public2Subnet1": { + "id": "Ipv6Public2Subnet1", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet1", + "children": { + "Subnet": { + "id": "Subnet", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet1/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "assignIpv6AddressOnCreation": true, + "availabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.64.0/19", + "ipv6CidrBlock": { + "Fn::Select": [ + 2, + { + "Fn::Cidr": [ + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "Ipv6CidrBlocks" + ] + } + ] + }, + 6, + "64" + ] + } + ] + }, + "mapPublicIpOnLaunch": false, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Ipv6Public2" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Public" + }, + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet1" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet1/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet1/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet1" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet1/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "DualStackVpcIpv6Public2Subnet1RouteTableAFB7D529" + }, + "subnetId": { + "Ref": "DualStackVpcIpv6Public2Subnet1Subnet314CDCFE" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet1/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "gatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Public2Subnet1RouteTableAFB7D529" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "DefaultRoute6": { + "id": "DefaultRoute6", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet1/DefaultRoute6", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationIpv6CidrBlock": "::/0", + "gatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Public2Subnet1RouteTableAFB7D529" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PublicSubnet", + "version": "0.0.0" + } + }, + "Ipv6Public2Subnet2": { + "id": "Ipv6Public2Subnet2", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet2", + "children": { + "Subnet": { + "id": "Subnet", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet2/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "assignIpv6AddressOnCreation": true, + "availabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.96.0/19", + "ipv6CidrBlock": { + "Fn::Select": [ + 3, + { + "Fn::Cidr": [ + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "Ipv6CidrBlocks" + ] + } + ] + }, + 6, + "64" + ] + } + ] + }, + "mapPublicIpOnLaunch": false, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Ipv6Public2" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Public" + }, + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet2" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet2/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet2/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet2" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet2/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "DualStackVpcIpv6Public2Subnet2RouteTable2D5742D9" + }, + "subnetId": { + "Ref": "DualStackVpcIpv6Public2Subnet2Subnet509DD3CC" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet2/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "gatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Public2Subnet2RouteTable2D5742D9" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "DefaultRoute6": { + "id": "DefaultRoute6", + "path": "DualStackVpc/DualStackVpc/Ipv6Public2Subnet2/DefaultRoute6", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationIpv6CidrBlock": "::/0", + "gatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Public2Subnet2RouteTable2D5742D9" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PublicSubnet", + "version": "0.0.0" + } + }, + "Ipv6Private1Subnet1": { + "id": "Ipv6Private1Subnet1", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet1", + "children": { + "Subnet": { + "id": "Subnet", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "assignIpv6AddressOnCreation": true, + "availabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.128.0/19", + "ipv6CidrBlock": { + "Fn::Select": [ + 4, + { + "Fn::Cidr": [ + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "Ipv6CidrBlocks" + ] + } + ] + }, + 6, + "64" + ] + } + ] + }, + "mapPublicIpOnLaunch": false, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Ipv6Private1" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Private" + }, + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet1" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet1" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet1RouteTable9CCA0D06" + }, + "subnetId": { + "Ref": "DualStackVpcIpv6Private1Subnet1Subnet2C527D85" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "natGatewayId": { + "Ref": "DualStackVpcIpv6Public1Subnet1NATGateway7D2A0F59" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet1RouteTable9CCA0D06" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "DefaultRoute6": { + "id": "DefaultRoute6", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/DefaultRoute6", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationIpv6CidrBlock": "::/0", + "egressOnlyInternetGatewayId": { + "Ref": "DualStackVpcEIGW64639A9F2" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet1RouteTable9CCA0D06" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "Nat64": { + "id": "Nat64", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet1/Nat64", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationIpv6CidrBlock": "64:ff9b::/96", + "natGatewayId": { + "Ref": "DualStackVpcIpv6Public1Subnet1NATGateway7D2A0F59" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet1RouteTable9CCA0D06" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.PrivateSubnet", + "version": "0.0.0" + } + }, + "Ipv6Private1Subnet2": { + "id": "Ipv6Private1Subnet2", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet2", + "children": { + "Subnet": { + "id": "Subnet", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet2/Subnet", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", + "aws:cdk:cloudformation:props": { + "assignIpv6AddressOnCreation": true, + "availabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "cidrBlock": "10.0.160.0/19", + "ipv6CidrBlock": { + "Fn::Select": [ + 5, + { + "Fn::Cidr": [ + { + "Fn::Select": [ + 0, + { + "Fn::GetAtt": [ + "DualStackVpcE812233C", + "Ipv6CidrBlocks" + ] + } + ] + }, + 6, + "64" + ] + } + ] + }, + "mapPublicIpOnLaunch": false, + "tags": [ + { + "key": "aws-cdk:subnet-name", + "value": "Ipv6Private1" + }, + { + "key": "aws-cdk:subnet-type", + "value": "Private" + }, + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet2" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnet", + "version": "0.0.0" + } + }, + "Acl": { + "id": "Acl", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet2/Acl", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "RouteTable": { + "id": "RouteTable", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet2/RouteTable", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet2" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRouteTable", + "version": "0.0.0" + } + }, + "RouteTableAssociation": { + "id": "RouteTableAssociation", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet2/RouteTableAssociation", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SubnetRouteTableAssociation", + "aws:cdk:cloudformation:props": { + "routeTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet2RouteTable18BA0241" + }, + "subnetId": { + "Ref": "DualStackVpcIpv6Private1Subnet2Subnet0F013554" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation", + "version": "0.0.0" + } + }, + "DefaultRoute": { + "id": "DefaultRoute", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet2/DefaultRoute", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationCidrBlock": "0.0.0.0/0", + "natGatewayId": { + "Ref": "DualStackVpcIpv6Public1Subnet2NATGateway76C3674B" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet2RouteTable18BA0241" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnRoute", + "version": "0.0.0" + } + }, + "DefaultRoute6": { + "id": "DefaultRoute6", + "path": "DualStackVpc/DualStackVpc/Ipv6Private1Subnet2/DefaultRoute6", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::Route", + "aws:cdk:cloudformation:props": { + "destinationIpv6CidrBlock": "::/0", + "egressOnlyInternetGatewayId": { + "Ref": "DualStackVpcEIGW64639A9F2" + }, + "routeTableId": { + "Ref": "DualStackVpcIpv6Private1Subnet2RouteTable18BA0241" + } + } + }, + "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": "DualStackVpc/DualStackVpc/IGW", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::InternetGateway", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "Name", + "value": "DualStackVpc/DualStackVpc" + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnInternetGateway", + "version": "0.0.0" + } + }, + "VPCGW": { + "id": "VPCGW", + "path": "DualStackVpc/DualStackVpc/VPCGW", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::VPCGatewayAttachment", + "aws:cdk:cloudformation:props": { + "internetGatewayId": { + "Ref": "DualStackVpcIGW08AC356D" + }, + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnVPCGatewayAttachment", + "version": "0.0.0" + } + }, + "EIGW6": { + "id": "EIGW6", + "path": "DualStackVpc/DualStackVpc/EIGW6", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::EgressOnlyInternetGateway", + "aws:cdk:cloudformation:props": { + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnEgressOnlyInternetGateway", + "version": "0.0.0" + } + }, + "RestrictDefaultSecurityGroupCustomResource": { + "id": "RestrictDefaultSecurityGroupCustomResource", + "path": "DualStackVpc/DualStackVpc/RestrictDefaultSecurityGroupCustomResource", + "children": { + "Default": { + "id": "Default", + "path": "DualStackVpc/DualStackVpc/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" + } + }, + "Custom::VpcRestrictDefaultSGCustomResourceProvider": { + "id": "Custom::VpcRestrictDefaultSGCustomResourceProvider", + "path": "DualStackVpc/Custom::VpcRestrictDefaultSGCustomResourceProvider", + "children": { + "Staging": { + "id": "Staging", + "path": "DualStackVpc/Custom::VpcRestrictDefaultSGCustomResourceProvider/Staging", + "constructInfo": { + "fqn": "aws-cdk-lib.AssetStaging", + "version": "0.0.0" + } + }, + "Role": { + "id": "Role", + "path": "DualStackVpc/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + }, + "Handler": { + "id": "Handler", + "path": "DualStackVpc/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.CustomResourceProviderBase", + "version": "0.0.0" + } + }, + "Lambda_with_IPv6_VPC": { + "id": "Lambda_with_IPv6_VPC", + "path": "DualStackVpc/Lambda_with_IPv6_VPC", + "children": { + "ServiceRole": { + "id": "ServiceRole", + "path": "DualStackVpc/Lambda_with_IPv6_VPC/ServiceRole", + "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "DualStackVpc/Lambda_with_IPv6_VPC/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "DualStackVpc/Lambda_with_IPv6_VPC/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" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole" + ] + ] + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "SecurityGroup": { + "id": "SecurityGroup", + "path": "DualStackVpc/Lambda_with_IPv6_VPC/SecurityGroup", + "children": { + "Resource": { + "id": "Resource", + "path": "DualStackVpc/Lambda_with_IPv6_VPC/SecurityGroup/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::EC2::SecurityGroup", + "aws:cdk:cloudformation:props": { + "groupDescription": "Automatic security group for Lambda Function DualStackVpcLambdawithIPv6VPC4667BF31", + "securityGroupEgress": [ + { + "cidrIp": "0.0.0.0/0", + "description": "Allow all outbound traffic by default", + "ipProtocol": "-1" + } + ], + "vpcId": { + "Ref": "DualStackVpcE812233C" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.CfnSecurityGroup", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_ec2.SecurityGroup", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "DualStackVpc/Lambda_with_IPv6_VPC/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Lambda::Function", + "aws:cdk:cloudformation:props": { + "code": { + "zipFile": "def main(event, context): pass" + }, + "handler": "index.main", + "role": { + "Fn::GetAtt": [ + "LambdawithIPv6VPCServiceRoleC3866C85", + "Arn" + ] + }, + "runtime": "python3.9", + "vpcConfig": { + "ipv6AllowedForDualStack": true, + "subnetIds": [ + { + "Ref": "DualStackVpcIpv6Private1Subnet1Subnet2C527D85" + }, + { + "Ref": "DualStackVpcIpv6Private1Subnet2Subnet0F013554" + } + ], + "securityGroupIds": [ + { + "Fn::GetAtt": [ + "LambdawithIPv6VPCSecurityGroup1BC5651B", + "GroupId" + ] + } + ] + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.Function", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "DualStackVpc/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "DualStackVpc/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "DualStackTesting": { + "id": "DualStackTesting", + "path": "DualStackTesting", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "DualStackTesting/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "DualStackTesting/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "DualStackTesting/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "DualStackTesting/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "DualStackTesting/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 diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.ts new file mode 100644 index 0000000000000..58b627f907f0b --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.lambda_with_dualStack_vpc.ts @@ -0,0 +1,42 @@ +import { App, Stack } from 'aws-cdk-lib/core'; +import * as ec2 from 'aws-cdk-lib/aws-ec2'; +import { IntegTest } from '@aws-cdk/integ-tests-alpha'; +import * as lambda from 'aws-cdk-lib/aws-lambda'; + +const app = new App(); +const stack = new Stack(app, 'DualStackVpc'); + +const natProvider = ec2.NatProvider.gateway(); +const vpc = new ec2.Vpc(stack, 'DualStackVpc', { + ipProtocol: ec2.IpProtocol.DUAL_STACK, + subnetConfiguration: [ + { + name: 'Ipv6Public1', + subnetType: ec2.SubnetType.PUBLIC, + }, + { + name: 'Ipv6Public2', + subnetType: ec2.SubnetType.PUBLIC, + }, + { + name: 'Ipv6Private1', + subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS, + }, + ], + natGatewayProvider: natProvider, +}); + +const natGatewayId = natProvider.configuredGateways[0].gatewayId; +(vpc.privateSubnets[0] as ec2.PrivateSubnet).addIpv6Nat64Route(natGatewayId); + +new lambda.Function(stack, 'Lambda_with_IPv6_VPC', { + code: new lambda.InlineCode('def main(event, context): pass'), + handler: 'index.main', + runtime: lambda.Runtime.PYTHON_3_9, + vpc, + ipv6AllowedForDualStack: true, +}); + +new IntegTest(app, 'DualStackTesting', { + testCases: [stack], +}); \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/PipelineStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/PipelineStack.assets.json index 5e340a13f6bb6..58b1d8bb23408 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/PipelineStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/PipelineStack.assets.json @@ -1,7 +1,7 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { - "89f400a7db76ac169a14192582d534dc488cd97e71a91109a8cb5611063ed995": { + "e23bd00b1363a5d557534802e9abd63d157e93a0069677c4de4f9e55af502204": { "source": { "path": "PipelineStack.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "89f400a7db76ac169a14192582d534dc488cd97e71a91109a8cb5611063ed995.json", + "objectKey": "e23bd00b1363a5d557534802e9abd63d157e93a0069677c4de4f9e55af502204.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/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/PipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/PipelineStack.template.json index 66eefea24034b..16ad33b1ba71a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/PipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/PipelineStack.template.json @@ -232,6 +232,14 @@ "Pipeline9850B417": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { + "ArtifactStore": { + "Location": { + "Ref": "PipelineArtifactsBucketAEA9A052" + }, + "Type": "S3" + }, + "PipelineType": "V1", + "RestartExecutionOnUpdate": true, "RoleArn": { "Fn::GetAtt": [ "PipelineRoleB27FAA37", @@ -1834,14 +1842,7 @@ ], "Name": "Wave2" } - ], - "ArtifactStore": { - "Location": { - "Ref": "PipelineArtifactsBucketAEA9A052" - }, - "Type": "S3" - }, - "RestartExecutionOnUpdate": true + ] }, "DependsOn": [ "PipelineRoleDefaultPolicy7BDC1ABB", @@ -1861,12 +1862,12 @@ "MatchEquals": "refs/heads/{Branch}" } ], + "RegisterWithThirdParty": true, "TargetAction": "colifran_cdk-pipelines-demo", "TargetPipeline": { "Ref": "Pipeline9850B417" }, - "TargetPipelineVersion": 1, - "RegisterWithThirdParty": true + "TargetPipelineVersion": 1 } }, "PipelineBuildSynthCdkBuildProjectRole231EEA2A": { @@ -2101,6 +2102,11 @@ "Artifacts": { "Type": "CODEPIPELINE" }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineStack/Pipeline/Build/Synth", + "EncryptionKey": "alias/aws/s3", "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:7.0", @@ -2108,21 +2114,6 @@ "PrivilegedMode": false, "Type": "LINUX_CONTAINER" }, - "ServiceRole": { - "Fn::GetAtt": [ - "PipelineBuildSynthCdkBuildProjectRole231EEA2A", - "Arn" - ] - }, - "Source": { - "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}", - "Type": "CODEPIPELINE" - }, - "Cache": { - "Type": "NO_CACHE" - }, - "Description": "Pipeline step PipelineStack/Pipeline/Build/Synth", - "EncryptionKey": "alias/aws/s3", "LogsConfig": { "CloudWatchLogs": { "GroupName": "log-group-name", @@ -2132,6 +2123,16 @@ "Location": "bucket-name", "Status": "ENABLED" } + }, + "ServiceRole": { + "Fn::GetAtt": [ + "PipelineBuildSynthCdkBuildProjectRole231EEA2A", + "Arn" + ] + }, + "Source": { + "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}", + "Type": "CODEPIPELINE" } } }, @@ -2453,6 +2454,11 @@ "Artifacts": { "Type": "CODEPIPELINE" }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", + "EncryptionKey": "alias/aws/s3", "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:7.0", @@ -2460,21 +2466,6 @@ "PrivilegedMode": false, "Type": "LINUX_CONTAINER" }, - "ServiceRole": { - "Fn::GetAtt": [ - "PipelineUpdatePipelineSelfMutationRole57E559E8", - "Arn" - ] - }, - "Source": { - "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}", - "Type": "CODEPIPELINE" - }, - "Cache": { - "Type": "NO_CACHE" - }, - "Description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", - "EncryptionKey": "alias/aws/s3", "LogsConfig": { "CloudWatchLogs": { "GroupName": "log-group-name", @@ -2484,6 +2475,16 @@ "Location": "bucket-name", "Status": "ENABLED" } + }, + "ServiceRole": { + "Fn::GetAtt": [ + "PipelineUpdatePipelineSelfMutationRole57E559E8", + "Arn" + ] + }, + "Source": { + "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}", + "Type": "CODEPIPELINE" } } } diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/PipelineWithCustomStepStackOutputTestDefaultTestDeployAssert6C17E8C5.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/PipelineWithCustomStepStackOutputTestDefaultTestDeployAssert6C17E8C5.assets.json index 02aa2335c08a7..165d175024f6c 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/PipelineWithCustomStepStackOutputTestDefaultTestDeployAssert6C17E8C5.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/PipelineWithCustomStepStackOutputTestDefaultTestDeployAssert6C17E8C5.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json index 216c3528dcab8..7fc4c562e1cf4 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "91031b26c04588c38a59e3481d308182b5244c5f5a3af3ee05566e2f4f70ce65": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack2C79AD00A.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack2C79AD00A.assets.json index 9e43ccbe2df62..f561ff3d6824a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack2C79AD00A.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack2C79AD00A.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "e3aa38ca82b00b776ad3834e9ee862d2e529d91c0f0b12fad846884e1e600326": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/manifest.json index 594f450e28ad8..0cb2bbeff469d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Beta/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackBetaStack1E6541489.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackBetaStack1E6541489.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackBetaStack2C79AD00A.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack14013D698.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack14013D698.assets.json index a0f0b275109b1..41c4650124d72 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack14013D698.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack14013D698.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "774f0c3cec814003a4da7d6cab73aec82952a0cb52a221b3f94fae483d9922a3": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack2F0681AFF.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack2F0681AFF.assets.json index a353a3353a451..37f2aaf2e645f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack2F0681AFF.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack2F0681AFF.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "c1cb4eebe68ea920a89e618efa29c36ecc1aa0c6f6ef6b65559efe9c0bba4059": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/manifest.json index 0bcf638cb353d..777d7ec9115af 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod1/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd1Stack14013D698.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd1Stack14013D698.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd1Stack2F0681AFF.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack1FD464162.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack1FD464162.assets.json index b4ba394fe5593..5155e4b3cf662 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack1FD464162.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack1FD464162.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "a595899a57366f015e986ac46c3da09fac75670ea0f4719de8defc67d731fa68": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack2176123EB.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack2176123EB.assets.json index ff7a88294f34b..cc7d250151ebb 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack2176123EB.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack2176123EB.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "364ee9a72c6c371a00c6e41438695af070848a2d625a4c953bfc4666e7ad5ae9": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/manifest.json index c355127a22618..12236c56f42d8 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod2/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd2Stack1FD464162.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd2Stack1FD464162.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd2Stack2176123EB.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack1795F3D43.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack1795F3D43.assets.json index 6ddd60f7ac5d5..cd79e2de35fa8 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack1795F3D43.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack1795F3D43.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "e8c78794529aa32b354a78b7b979165b0cadd9d113a37f537d083f946c0e7bff": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack2DFBBA0B2.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack2DFBBA0B2.assets.json index 15ac86fbb3d1b..c7c434d181218 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack2DFBBA0B2.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack2DFBBA0B2.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "9fee5ad34559e603d3fc184456935445ea09549b147d2cbc2acd8cf6b916dd99": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/manifest.json index 3e5d77e11f064..57863ee9616ab 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod3/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd3Stack1795F3D43.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd3Stack1795F3D43.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd3Stack2DFBBA0B2.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack118F74ADB.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack118F74ADB.assets.json index edc13cf3ff6d4..13964b472f29c 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack118F74ADB.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack118F74ADB.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "7e0ecf5ec563ed47798cfb17d4c3ce0e6c710c075fc53bf8cd15d8fb9a210f78": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack2E2CB4ED3.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack2E2CB4ED3.assets.json index 29af583241fca..39a51c1b850b3 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack2E2CB4ED3.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack2E2CB4ED3.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "a9cddd81a8937cbadd9bf93c6fe07766501a7c137605bb09e6cfa322b2eb09fd": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/manifest.json index d347c675cc6bb..b05d87a145b59 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod4/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd4Stack118F74ADB.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd4Stack118F74ADB.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd4Stack2E2CB4ED3.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack1E7E4E4C6.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack1E7E4E4C6.assets.json index 44bcf91a50021..068375a36962f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack1E7E4E4C6.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack1E7E4E4C6.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "1e0089d5c027ddec49745fce045925aff9342fbffdf989e4ae5263fd87ee50f7": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack2C39BEE5B.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack2C39BEE5B.assets.json index 42799cb0799d2..0552ad095f4ff 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack2C39BEE5B.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack2C39BEE5B.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "48a94145722a5a14816cb87dce62fadba53a03b2c18e0fdfb5107ffabd5d7cd8": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/manifest.json index 1abe7afb824d3..e0adb5639a269 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod5/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd5Stack1E7E4E4C6.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd5Stack1E7E4E4C6.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd5Stack2C39BEE5B.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack1E7C34314.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack1E7C34314.assets.json index 79eb72847d519..7bb9b090216bd 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack1E7C34314.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack1E7C34314.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "26d311d19506235a52c5d093cf5a8360110af6a2b713beda66b33ba3ee5bd813": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack2BED1BBCE.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack2BED1BBCE.assets.json index e9833a6066b2d..fb52667681a5a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack2BED1BBCE.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack2BED1BBCE.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "8f3e16ae3f29a4a50d4ef13026a3bc879e039d80e9fffdefe19d40349ec6bb30": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/manifest.json index f79f20c324fb2..4a5e638a34660 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/assembly-PipelineStack-Prod6/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd6Stack1E7C34314.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd6Stack1E7C34314.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd6Stack2BED1BBCE.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/integ.json index 65534a3962fa5..25d43058d1919 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "testCases": { "PipelineWithCustomStepStackOutputTest/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/manifest.json index b657fbf840e3a..02378c24a1df4 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "assembly-PipelineStack-Beta": { "type": "cdk:cloud-assembly", @@ -63,10 +63,11 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStack.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}/89f400a7db76ac169a14192582d534dc488cd97e71a91109a8cb5611063ed995.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/e23bd00b1363a5d557534802e9abd63d157e93a0069677c4de4f9e55af502204.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -194,6 +195,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineWithCustomStepStackOutputTestDefaultTestDeployAssert6C17E8C5.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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/tree.json index 20afd091b9c5a..a5e2bd6eb4225 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-codebuild-logging.js.snapshot/tree.json @@ -345,6 +345,14 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::CodePipeline::Pipeline", "aws:cdk:cloudformation:props": { + "artifactStore": { + "type": "S3", + "location": { + "Ref": "PipelineArtifactsBucketAEA9A052" + } + }, + "pipelineType": "V1", + "restartExecutionOnUpdate": true, "roleArn": { "Fn::GetAtt": [ "PipelineRoleB27FAA37", @@ -1947,14 +1955,7 @@ } ] } - ], - "artifactStore": { - "type": "S3", - "location": { - "Ref": "PipelineArtifactsBucketAEA9A052" - } - }, - "restartExecutionOnUpdate": true + ] } }, "constructInfo": { @@ -1986,12 +1987,12 @@ "matchEquals": "refs/heads/{Branch}" } ], + "registerWithThirdParty": true, "targetAction": "colifran_cdk-pipelines-demo", "targetPipeline": { "Ref": "Pipeline9850B417" }, - "targetPipelineVersion": 1, - "registerWithThirdParty": true + "targetPipelineVersion": 1 } }, "constructInfo": { @@ -2002,13 +2003,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Build": { @@ -2302,6 +2303,11 @@ "artifacts": { "type": "CODEPIPELINE" }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineStack/Pipeline/Build/Synth", + "encryptionKey": "alias/aws/s3", "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", @@ -2309,21 +2315,6 @@ "privilegedMode": false, "computeType": "BUILD_GENERAL1_SMALL" }, - "serviceRole": { - "Fn::GetAtt": [ - "PipelineBuildSynthCdkBuildProjectRole231EEA2A", - "Arn" - ] - }, - "source": { - "type": "CODEPIPELINE", - "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}" - }, - "cache": { - "type": "NO_CACHE" - }, - "description": "Pipeline step PipelineStack/Pipeline/Build/Synth", - "encryptionKey": "alias/aws/s3", "logsConfig": { "s3Logs": { "status": "ENABLED", @@ -2333,6 +2324,16 @@ "status": "ENABLED", "groupName": "log-group-name" } + }, + "serviceRole": { + "Fn::GetAtt": [ + "PipelineBuildSynthCdkBuildProjectRole231EEA2A", + "Arn" + ] + }, + "source": { + "type": "CODEPIPELINE", + "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}" } } }, @@ -2350,13 +2351,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "UpdatePipeline": { @@ -2368,13 +2369,13 @@ "path": "PipelineStack/Pipeline/Pipeline/UpdatePipeline/SelfMutate", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Beta": { @@ -2386,7 +2387,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Stack1.Deploy": { @@ -2394,7 +2395,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Stack2.Prepare": { @@ -2402,7 +2403,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Stack2.Deploy": { @@ -2410,13 +2411,13 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}": { @@ -2436,7 +2437,7 @@ "path": "PipelineStack/Pipeline/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}/8389e75f-0810-4838-bf64-d6f85a95cf83", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -2470,7 +2471,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod2.Stack1.Prepare": { @@ -2478,7 +2479,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod1.Stack1.Deploy": { @@ -2486,7 +2487,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod2.Stack1.Deploy": { @@ -2494,7 +2495,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod1.Stack2.Prepare": { @@ -2502,7 +2503,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod2.Stack2.Prepare": { @@ -2510,7 +2511,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod1.Stack2.Deploy": { @@ -2518,7 +2519,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod2.Stack2.Deploy": { @@ -2526,13 +2527,13 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Wave2": { @@ -2544,7 +2545,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod4.Stack1.Prepare": { @@ -2552,7 +2553,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod5.Stack1.Prepare": { @@ -2560,7 +2561,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod6.Stack1.Prepare": { @@ -2568,7 +2569,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod3.Stack1.Deploy": { @@ -2576,7 +2577,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod4.Stack1.Deploy": { @@ -2584,7 +2585,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod5.Stack1.Deploy": { @@ -2592,7 +2593,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod6.Stack1.Deploy": { @@ -2600,7 +2601,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod3.Stack2.Prepare": { @@ -2608,7 +2609,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod4.Stack2.Prepare": { @@ -2616,7 +2617,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod5.Stack2.Prepare": { @@ -2624,7 +2625,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod6.Stack2.Prepare": { @@ -2632,7 +2633,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod3.Stack2.Deploy": { @@ -2640,7 +2641,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod4.Stack2.Deploy": { @@ -2648,7 +2649,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod5.Stack2.Deploy": { @@ -2656,7 +2657,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod6.Stack2.Deploy": { @@ -2664,13 +2665,13 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -3096,6 +3097,11 @@ "artifacts": { "type": "CODEPIPELINE" }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", + "encryptionKey": "alias/aws/s3", "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", @@ -3103,21 +3109,6 @@ "privilegedMode": false, "computeType": "BUILD_GENERAL1_SMALL" }, - "serviceRole": { - "Fn::GetAtt": [ - "PipelineUpdatePipelineSelfMutationRole57E559E8", - "Arn" - ] - }, - "source": { - "type": "CODEPIPELINE", - "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}" - }, - "cache": { - "type": "NO_CACHE" - }, - "description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", - "encryptionKey": "alias/aws/s3", "logsConfig": { "s3Logs": { "status": "ENABLED", @@ -3127,6 +3118,16 @@ "status": "ENABLED", "groupName": "log-group-name" } + }, + "serviceRole": { + "Fn::GetAtt": [ + "PipelineUpdatePipelineSelfMutationRole57E559E8", + "Arn" + ] + }, + "source": { + "type": "CODEPIPELINE", + "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}" } } }, @@ -3144,7 +3145,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -3198,7 +3199,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3329,7 +3330,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3460,7 +3461,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3591,7 +3592,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3722,7 +3723,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3853,7 +3854,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3984,7 +3985,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -4105,7 +4106,7 @@ "path": "PipelineWithCustomStepStackOutputTest/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "DeployAssert": { @@ -4151,7 +4152,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/LambdaTestDefaultTestDeployAssert1AF2B360.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/LambdaTestDefaultTestDeployAssert1AF2B360.assets.json index 5e84c5907c2b7..7958eb5375c3b 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/LambdaTestDefaultTestDeployAssert1AF2B360.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/LambdaTestDefaultTestDeployAssert1AF2B360.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.assets.json index 9b84297fe984d..5e7b6613e6930 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.assets.json @@ -1,7 +1,7 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { - "d012d0452ea703b36e1f5a5e8e65093b04658d40d4e28e97b1fca923b2a0b119": { + "8f9101a3927b11ab3c14d96dc01f1fc449edb65eea469ea3b54483806c4633dc": { "source": { "path": "PipelineStack.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "d012d0452ea703b36e1f5a5e8e65093b04658d40d4e28e97b1fca923b2a0b119.json", + "objectKey": "8f9101a3927b11ab3c14d96dc01f1fc449edb65eea469ea3b54483806c4633dc.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/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.template.json index bc3610a87c7cb..a6b70e66103e4 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/PipelineStack.template.json @@ -3,6 +3,7 @@ "PipelineArtifactsBucketEncryptionKeyF5BF0670": { "Type": "AWS::KMS::Key", "Properties": { + "EnableKeyRotation": true, "KeyPolicy": { "Statement": [ { @@ -63,8 +64,7 @@ } ], "Version": "2012-10-17" - }, - "EnableKeyRotation": true + } }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -337,6 +337,23 @@ "Pipeline9850B417": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { + "ArtifactStore": { + "EncryptionKey": { + "Id": { + "Fn::GetAtt": [ + "PipelineArtifactsBucketEncryptionKeyF5BF0670", + "Arn" + ] + }, + "Type": "KMS" + }, + "Location": { + "Ref": "PipelineArtifactsBucketAEA9A052" + }, + "Type": "S3" + }, + "PipelineType": "V1", + "RestartExecutionOnUpdate": true, "RoleArn": { "Fn::GetAtt": [ "PipelineRoleB27FAA37", @@ -1939,23 +1956,7 @@ ], "Name": "Wave2" } - ], - "ArtifactStore": { - "EncryptionKey": { - "Id": { - "Fn::GetAtt": [ - "PipelineArtifactsBucketEncryptionKeyF5BF0670", - "Arn" - ] - }, - "Type": "KMS" - }, - "Location": { - "Ref": "PipelineArtifactsBucketAEA9A052" - }, - "Type": "S3" - }, - "RestartExecutionOnUpdate": true + ] }, "DependsOn": [ "PipelineRoleDefaultPolicy7BDC1ABB", @@ -1975,12 +1976,12 @@ "MatchEquals": "refs/heads/{Branch}" } ], + "RegisterWithThirdParty": true, "TargetAction": "tkglaser_cdk-pipelines-demo", "TargetPipeline": { "Ref": "Pipeline9850B417" }, - "TargetPipelineVersion": 1, - "RegisterWithThirdParty": true + "TargetPipelineVersion": 1 } }, "PipelineBuildSynthCdkBuildProjectRole231EEA2A": { @@ -2166,6 +2167,16 @@ "Artifacts": { "Type": "CODEPIPELINE" }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineStack/Pipeline/Build/Synth", + "EncryptionKey": { + "Fn::GetAtt": [ + "PipelineArtifactsBucketEncryptionKeyF5BF0670", + "Arn" + ] + }, "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:7.0", @@ -2182,16 +2193,6 @@ "Source": { "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}", "Type": "CODEPIPELINE" - }, - "Cache": { - "Type": "NO_CACHE" - }, - "Description": "Pipeline step PipelineStack/Pipeline/Build/Synth", - "EncryptionKey": { - "Fn::GetAtt": [ - "PipelineArtifactsBucketEncryptionKeyF5BF0670", - "Arn" - ] } } }, @@ -2464,6 +2465,16 @@ "Artifacts": { "Type": "CODEPIPELINE" }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", + "EncryptionKey": { + "Fn::GetAtt": [ + "PipelineArtifactsBucketEncryptionKeyF5BF0670", + "Arn" + ] + }, "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:7.0", @@ -2480,16 +2491,6 @@ "Source": { "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}", "Type": "CODEPIPELINE" - }, - "Cache": { - "Type": "NO_CACHE" - }, - "Description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", - "EncryptionKey": { - "Fn::GetAtt": [ - "PipelineArtifactsBucketEncryptionKeyF5BF0670", - "Arn" - ] } } } diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json index 216c3528dcab8..7fc4c562e1cf4 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "91031b26c04588c38a59e3481d308182b5244c5f5a3af3ee05566e2f4f70ce65": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack2C79AD00A.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack2C79AD00A.assets.json index 9e43ccbe2df62..f561ff3d6824a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack2C79AD00A.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack2C79AD00A.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "e3aa38ca82b00b776ad3834e9ee862d2e529d91c0f0b12fad846884e1e600326": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/manifest.json index 594f450e28ad8..0cb2bbeff469d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Beta/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackBetaStack1E6541489.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackBetaStack1E6541489.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackBetaStack2C79AD00A.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack14013D698.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack14013D698.assets.json index a0f0b275109b1..41c4650124d72 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack14013D698.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack14013D698.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "774f0c3cec814003a4da7d6cab73aec82952a0cb52a221b3f94fae483d9922a3": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack2F0681AFF.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack2F0681AFF.assets.json index a353a3353a451..37f2aaf2e645f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack2F0681AFF.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack2F0681AFF.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "c1cb4eebe68ea920a89e618efa29c36ecc1aa0c6f6ef6b65559efe9c0bba4059": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/manifest.json index 0bcf638cb353d..777d7ec9115af 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod1/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd1Stack14013D698.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd1Stack14013D698.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd1Stack2F0681AFF.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack1FD464162.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack1FD464162.assets.json index b4ba394fe5593..5155e4b3cf662 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack1FD464162.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack1FD464162.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "a595899a57366f015e986ac46c3da09fac75670ea0f4719de8defc67d731fa68": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack2176123EB.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack2176123EB.assets.json index ff7a88294f34b..cc7d250151ebb 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack2176123EB.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack2176123EB.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "364ee9a72c6c371a00c6e41438695af070848a2d625a4c953bfc4666e7ad5ae9": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/manifest.json index c355127a22618..12236c56f42d8 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod2/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd2Stack1FD464162.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd2Stack1FD464162.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd2Stack2176123EB.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack1795F3D43.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack1795F3D43.assets.json index 6ddd60f7ac5d5..cd79e2de35fa8 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack1795F3D43.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack1795F3D43.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "e8c78794529aa32b354a78b7b979165b0cadd9d113a37f537d083f946c0e7bff": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack2DFBBA0B2.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack2DFBBA0B2.assets.json index 15ac86fbb3d1b..c7c434d181218 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack2DFBBA0B2.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack2DFBBA0B2.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "9fee5ad34559e603d3fc184456935445ea09549b147d2cbc2acd8cf6b916dd99": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/manifest.json index 3e5d77e11f064..57863ee9616ab 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod3/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd3Stack1795F3D43.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd3Stack1795F3D43.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd3Stack2DFBBA0B2.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack118F74ADB.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack118F74ADB.assets.json index edc13cf3ff6d4..13964b472f29c 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack118F74ADB.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack118F74ADB.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "7e0ecf5ec563ed47798cfb17d4c3ce0e6c710c075fc53bf8cd15d8fb9a210f78": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack2E2CB4ED3.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack2E2CB4ED3.assets.json index 29af583241fca..39a51c1b850b3 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack2E2CB4ED3.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack2E2CB4ED3.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "a9cddd81a8937cbadd9bf93c6fe07766501a7c137605bb09e6cfa322b2eb09fd": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/manifest.json index d347c675cc6bb..b05d87a145b59 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod4/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd4Stack118F74ADB.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd4Stack118F74ADB.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd4Stack2E2CB4ED3.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack1E7E4E4C6.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack1E7E4E4C6.assets.json index 44bcf91a50021..068375a36962f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack1E7E4E4C6.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack1E7E4E4C6.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "1e0089d5c027ddec49745fce045925aff9342fbffdf989e4ae5263fd87ee50f7": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack2C39BEE5B.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack2C39BEE5B.assets.json index 42799cb0799d2..0552ad095f4ff 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack2C39BEE5B.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack2C39BEE5B.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "48a94145722a5a14816cb87dce62fadba53a03b2c18e0fdfb5107ffabd5d7cd8": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/manifest.json index 1abe7afb824d3..e0adb5639a269 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod5/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd5Stack1E7E4E4C6.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd5Stack1E7E4E4C6.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd5Stack2C39BEE5B.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack1E7C34314.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack1E7C34314.assets.json index 79eb72847d519..7bb9b090216bd 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack1E7C34314.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack1E7C34314.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "26d311d19506235a52c5d093cf5a8360110af6a2b713beda66b33ba3ee5bd813": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack2BED1BBCE.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack2BED1BBCE.assets.json index e9833a6066b2d..fb52667681a5a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack2BED1BBCE.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack2BED1BBCE.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "8f3e16ae3f29a4a50d4ef13026a3bc879e039d80e9fffdefe19d40349ec6bb30": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/manifest.json index f79f20c324fb2..4a5e638a34660 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/assembly-PipelineStack-Prod6/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd6Stack1E7C34314.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd6Stack1E7C34314.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd6Stack2BED1BBCE.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/integ.json index 5a0d6b466fbe3..424e8699f0b7f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "testCases": { "LambdaTest/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/manifest.json index 9ccc0a3c0b296..629271c9a6a2e 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "assembly-PipelineStack-Beta": { "type": "cdk:cloud-assembly", @@ -63,10 +63,11 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStack.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}/d012d0452ea703b36e1f5a5e8e65093b04658d40d4e28e97b1fca923b2a0b119.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/8f9101a3927b11ab3c14d96dc01f1fc449edb65eea469ea3b54483806c4633dc.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -206,6 +207,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "LambdaTestDefaultTestDeployAssert1AF2B360.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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/tree.json index cca3e52b34984..20458fc2ae952 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-account-keys.js.snapshot/tree.json @@ -26,6 +26,7 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::KMS::Key", "aws:cdk:cloudformation:props": { + "enableKeyRotation": true, "keyPolicy": { "Statement": [ { @@ -86,8 +87,7 @@ } ], "Version": "2012-10-17" - }, - "enableKeyRotation": true + } } }, "constructInfo": { @@ -466,6 +466,23 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::CodePipeline::Pipeline", "aws:cdk:cloudformation:props": { + "artifactStore": { + "type": "S3", + "location": { + "Ref": "PipelineArtifactsBucketAEA9A052" + }, + "encryptionKey": { + "type": "KMS", + "id": { + "Fn::GetAtt": [ + "PipelineArtifactsBucketEncryptionKeyF5BF0670", + "Arn" + ] + } + } + }, + "pipelineType": "V1", + "restartExecutionOnUpdate": true, "roleArn": { "Fn::GetAtt": [ "PipelineRoleB27FAA37", @@ -2068,23 +2085,7 @@ } ] } - ], - "artifactStore": { - "type": "S3", - "location": { - "Ref": "PipelineArtifactsBucketAEA9A052" - }, - "encryptionKey": { - "type": "KMS", - "id": { - "Fn::GetAtt": [ - "PipelineArtifactsBucketEncryptionKeyF5BF0670", - "Arn" - ] - } - } - }, - "restartExecutionOnUpdate": true + ] } }, "constructInfo": { @@ -2116,12 +2117,12 @@ "matchEquals": "refs/heads/{Branch}" } ], + "registerWithThirdParty": true, "targetAction": "tkglaser_cdk-pipelines-demo", "targetPipeline": { "Ref": "Pipeline9850B417" }, - "targetPipelineVersion": 1, - "registerWithThirdParty": true + "targetPipelineVersion": 1 } }, "constructInfo": { @@ -2132,13 +2133,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Build": { @@ -2383,6 +2384,16 @@ "artifacts": { "type": "CODEPIPELINE" }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineStack/Pipeline/Build/Synth", + "encryptionKey": { + "Fn::GetAtt": [ + "PipelineArtifactsBucketEncryptionKeyF5BF0670", + "Arn" + ] + }, "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", @@ -2399,16 +2410,6 @@ "source": { "type": "CODEPIPELINE", "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}" - }, - "cache": { - "type": "NO_CACHE" - }, - "description": "Pipeline step PipelineStack/Pipeline/Build/Synth", - "encryptionKey": { - "Fn::GetAtt": [ - "PipelineArtifactsBucketEncryptionKeyF5BF0670", - "Arn" - ] } } }, @@ -2426,13 +2427,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "UpdatePipeline": { @@ -2444,13 +2445,13 @@ "path": "PipelineStack/Pipeline/Pipeline/UpdatePipeline/SelfMutate", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Beta": { @@ -2462,7 +2463,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Stack1.Deploy": { @@ -2470,7 +2471,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Stack2.Prepare": { @@ -2478,7 +2479,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Stack2.Deploy": { @@ -2486,13 +2487,13 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}": { @@ -2512,7 +2513,7 @@ "path": "PipelineStack/Pipeline/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}/8389e75f-0810-4838-bf64-d6f85a95cf83", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -2546,7 +2547,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod2.Stack1.Prepare": { @@ -2554,7 +2555,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod1.Stack1.Deploy": { @@ -2562,7 +2563,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod2.Stack1.Deploy": { @@ -2570,7 +2571,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod1.Stack2.Prepare": { @@ -2578,7 +2579,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod2.Stack2.Prepare": { @@ -2586,7 +2587,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod1.Stack2.Deploy": { @@ -2594,7 +2595,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod2.Stack2.Deploy": { @@ -2602,13 +2603,13 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Wave2": { @@ -2620,7 +2621,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod4.Stack1.Prepare": { @@ -2628,7 +2629,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod5.Stack1.Prepare": { @@ -2636,7 +2637,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod6.Stack1.Prepare": { @@ -2644,7 +2645,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod3.Stack1.Deploy": { @@ -2652,7 +2653,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod4.Stack1.Deploy": { @@ -2660,7 +2661,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod5.Stack1.Deploy": { @@ -2668,7 +2669,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod6.Stack1.Deploy": { @@ -2676,7 +2677,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod3.Stack2.Prepare": { @@ -2684,7 +2685,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod4.Stack2.Prepare": { @@ -2692,7 +2693,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod5.Stack2.Prepare": { @@ -2700,7 +2701,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod6.Stack2.Prepare": { @@ -2708,7 +2709,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod3.Stack2.Deploy": { @@ -2716,7 +2717,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod4.Stack2.Deploy": { @@ -2724,7 +2725,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod5.Stack2.Deploy": { @@ -2732,7 +2733,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod6.Stack2.Deploy": { @@ -2740,13 +2741,13 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -3123,6 +3124,16 @@ "artifacts": { "type": "CODEPIPELINE" }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", + "encryptionKey": { + "Fn::GetAtt": [ + "PipelineArtifactsBucketEncryptionKeyF5BF0670", + "Arn" + ] + }, "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", @@ -3139,16 +3150,6 @@ "source": { "type": "CODEPIPELINE", "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}" - }, - "cache": { - "type": "NO_CACHE" - }, - "description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", - "encryptionKey": { - "Fn::GetAtt": [ - "PipelineArtifactsBucketEncryptionKeyF5BF0670", - "Arn" - ] } } }, @@ -3166,7 +3167,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -3220,7 +3221,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3351,7 +3352,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3482,7 +3483,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3613,7 +3614,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3744,7 +3745,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3875,7 +3876,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -4006,7 +4007,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -4127,7 +4128,7 @@ "path": "LambdaTest/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "DeployAssert": { @@ -4173,7 +4174,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/PipelineStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/PipelineStack.assets.json index 81987a6476a91..31d21a73ddba8 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/PipelineStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/PipelineStack.assets.json @@ -1,7 +1,7 @@ { "version": "36.0.0", "files": { - "7ef69b8c181a37746d9dd86efa256698f93bd815bd82571bc18eee7c39ba9436": { + "6a11c4d5361c8eece5e172f0d62861a0215126cee7e79377251b0920254bf7b9": { "source": { "path": "PipelineStack.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-us-east-1": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1", - "objectKey": "7ef69b8c181a37746d9dd86efa256698f93bd815bd82571bc18eee7c39ba9436.json", + "objectKey": "6a11c4d5361c8eece5e172f0d62861a0215126cee7e79377251b0920254bf7b9.json", "region": "us-east-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-us-east-1" } diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/PipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/PipelineStack.template.json index 30d593d002a21..41aa89e88c54f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/PipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/PipelineStack.template.json @@ -139,6 +139,7 @@ "Region": "us-west-2" } ], + "PipelineType": "V1", "RestartExecutionOnUpdate": true, "RoleArn": { "Fn::GetAtt": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/manifest.json index 0a3f70b362a29..5081eb020d1b3 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/manifest.json @@ -200,7 +200,7 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-us-east-1", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-us-east-1", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1/7ef69b8c181a37746d9dd86efa256698f93bd815bd82571bc18eee7c39ba9436.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1/6a11c4d5361c8eece5e172f0d62861a0215126cee7e79377251b0920254bf7b9.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/tree.json index 6647147e9ba1a..dcf7c6e8e4385 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-cross-region-replication-buckets.js.snapshot/tree.json @@ -792,6 +792,7 @@ } } ], + "pipelineType": "V1", "restartExecutionOnUpdate": true, "roleArn": { "Fn::GetAtt": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/PipelinesFileSystemLocations.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/PipelinesFileSystemLocations.assets.json index 331fe3838183e..28f04ea257340 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/PipelinesFileSystemLocations.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/PipelinesFileSystemLocations.assets.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "files": { "2ec8ad9e91dcd6e7ad6a5c84ffc6c9c05c408aca3b26ceb2816d81043e6c4dc3": { "source": { @@ -14,7 +14,7 @@ } } }, - "51658866b60072be3147c9054828abe1d2569dbac4ae842bc746ed1dba4f288e": { + "aced66304dde141e94c279f03a3fc49301c1d80d2e16141a38aab3ee464c2ec0": { "source": { "path": "PipelinesFileSystemLocations.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "51658866b60072be3147c9054828abe1d2569dbac4ae842bc746ed1dba4f288e.json", + "objectKey": "aced66304dde141e94c279f03a3fc49301c1d80d2e16141a38aab3ee464c2ec0.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/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/PipelinesFileSystemLocations.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/PipelinesFileSystemLocations.template.json index f9db4786bc4a3..ddec912fca0eb 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/PipelinesFileSystemLocations.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/PipelinesFileSystemLocations.template.json @@ -777,6 +777,7 @@ }, "Type": "S3" }, + "PipelineType": "V1", "RestartExecutionOnUpdate": true, "RoleArn": { "Fn::GetAtt": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/assembly-PipelinesFileSystemLocations-Beta/PipelinesFileSystemLocationsBetaStack18199ECAE.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/assembly-PipelinesFileSystemLocations-Beta/PipelinesFileSystemLocationsBetaStack18199ECAE.assets.json index 7c6b6e5959832..6addc0ddc487a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/assembly-PipelinesFileSystemLocations-Beta/PipelinesFileSystemLocationsBetaStack18199ECAE.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/assembly-PipelinesFileSystemLocations-Beta/PipelinesFileSystemLocationsBetaStack18199ECAE.assets.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "files": { "8289faf53c7da377bb2b90615999171adef5e1d8f6b88810e5fef75e6ca09ba5": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/assembly-PipelinesFileSystemLocations-Beta/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/assembly-PipelinesFileSystemLocations-Beta/cdk.out index 2313ab5436501..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/assembly-PipelinesFileSystemLocations-Beta/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/assembly-PipelinesFileSystemLocations-Beta/cdk.out @@ -1 +1 @@ -{"version":"34.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/assembly-PipelinesFileSystemLocations-Beta/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/assembly-PipelinesFileSystemLocations-Beta/manifest.json index 1a8df4a9e18b6..99e84da296345 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/assembly-PipelinesFileSystemLocations-Beta/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/assembly-PipelinesFileSystemLocations-Beta/manifest.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "artifacts": { "PipelinesFileSystemLocationsBetaStack18199ECAE.assets": { "type": "cdk:asset-manifest", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/cdk.out index 2313ab5436501..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"34.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/cdkintegcodepipelinewithfilesystemlocationsDefaultTestDeployAssert3E26E748.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/cdkintegcodepipelinewithfilesystemlocationsDefaultTestDeployAssert3E26E748.assets.json index 376efc9b6c449..1b5178da4e150 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/cdkintegcodepipelinewithfilesystemlocationsDefaultTestDeployAssert3E26E748.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/cdkintegcodepipelinewithfilesystemlocationsDefaultTestDeployAssert3E26E748.assets.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/integ.json index eb553162fc0b8..2315c96a256e6 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "testCases": { "cdk-integ-codepipeline-with-file-system-locations/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/manifest.json index 6a3100ec97c7b..d60699cabe539 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "artifacts": { "assembly-PipelinesFileSystemLocations-Beta": { "type": "cdk:cloud-assembly", @@ -25,7 +25,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}/51658866b60072be3147c9054828abe1d2569dbac4ae842bc746ed1dba4f288e.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/aced66304dde141e94c279f03a3fc49301c1d80d2e16141a38aab3ee464c2ec0.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/tree.json index d498ac0223b8d..de7abc4041682 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-file-system-locations.js.snapshot/tree.json @@ -798,7 +798,7 @@ } }, "constructInfo": { - "fqn": "aws-cdk-lib.CustomResourceProvider", + "fqn": "aws-cdk-lib.CustomResourceProviderBase", "version": "0.0.0" } }, @@ -1135,6 +1135,7 @@ "Ref": "PipelineArtifactsBucketAEA9A052" } }, + "pipelineType": "V1", "restartExecutionOnUpdate": true, "roleArn": { "Fn::GetAtt": [ @@ -1491,13 +1492,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "Build": { @@ -1963,13 +1964,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "Assets": { @@ -1981,13 +1982,13 @@ "path": "PipelinesFileSystemLocations/Pipeline/Pipeline/Assets/FileAsset1", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "Beta": { @@ -1999,13 +2000,13 @@ "path": "PipelinesFileSystemLocations/Pipeline/Pipeline/Beta/Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}": { @@ -2025,7 +2026,7 @@ "path": "PipelinesFileSystemLocations/Pipeline/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}/8389e75f-0810-4838-bf64-d6f85a95cf83", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, @@ -2611,7 +2612,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, @@ -2717,7 +2718,7 @@ "path": "cdk-integ-codepipeline-with-file-system-locations/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "DeployAssert": { @@ -2763,7 +2764,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/PipelineStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/PipelineStack.assets.json index b9ba1f721a66f..f2bb5e0a90953 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/PipelineStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/PipelineStack.assets.json @@ -1,7 +1,7 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { - "0a38575278954c57dc2282c4e3007815cca46595cdd0204557102de34dbcc818": { + "d3c329bd55d36ed5a56bdbc0a65fdeb14e452376c9f0ff131a2180c88fc68fe5": { "source": { "path": "PipelineStack.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "0a38575278954c57dc2282c4e3007815cca46595cdd0204557102de34dbcc818.json", + "objectKey": "d3c329bd55d36ed5a56bdbc0a65fdeb14e452376c9f0ff131a2180c88fc68fe5.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/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/PipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/PipelineStack.template.json index 5144b7a84f1a8..9f3e70354b7d8 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/PipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/PipelineStack.template.json @@ -18,9 +18,6 @@ "VpcPublicSubnet1Subnet5C2D37C4": { "Type": "AWS::EC2::Subnet", "Properties": { - "VpcId": { - "Ref": "Vpc8378EB38" - }, "AvailabilityZone": { "Fn::Select": [ 0, @@ -44,21 +41,24 @@ "Key": "Name", "Value": "PipelineStack/Vpc/PublicSubnet1" } - ] + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } } }, "VpcPublicSubnet1RouteTable6C95E38E": { "Type": "AWS::EC2::RouteTable", "Properties": { - "VpcId": { - "Ref": "Vpc8378EB38" - }, "Tags": [ { "Key": "Name", "Value": "PipelineStack/Vpc/PublicSubnet1" } - ] + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } } }, "VpcPublicSubnet1RouteTableAssociation97140677": { @@ -75,12 +75,12 @@ "VpcPublicSubnet1DefaultRoute3DA9E72A": { "Type": "AWS::EC2::Route", "Properties": { - "RouteTableId": { - "Ref": "VpcPublicSubnet1RouteTable6C95E38E" - }, "DestinationCidrBlock": "0.0.0.0/0", "GatewayId": { "Ref": "VpcIGWD7BA715C" + }, + "RouteTableId": { + "Ref": "VpcPublicSubnet1RouteTable6C95E38E" } }, "DependsOn": [ @@ -102,15 +102,15 @@ "VpcPublicSubnet1NATGateway4D7517AA": { "Type": "AWS::EC2::NatGateway", "Properties": { - "SubnetId": { - "Ref": "VpcPublicSubnet1Subnet5C2D37C4" - }, "AllocationId": { "Fn::GetAtt": [ "VpcPublicSubnet1EIPD7E02669", "AllocationId" ] }, + "SubnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + }, "Tags": [ { "Key": "Name", @@ -126,9 +126,6 @@ "VpcPublicSubnet2Subnet691E08A3": { "Type": "AWS::EC2::Subnet", "Properties": { - "VpcId": { - "Ref": "Vpc8378EB38" - }, "AvailabilityZone": { "Fn::Select": [ 1, @@ -152,21 +149,24 @@ "Key": "Name", "Value": "PipelineStack/Vpc/PublicSubnet2" } - ] + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } } }, "VpcPublicSubnet2RouteTable94F7E489": { "Type": "AWS::EC2::RouteTable", "Properties": { - "VpcId": { - "Ref": "Vpc8378EB38" - }, "Tags": [ { "Key": "Name", "Value": "PipelineStack/Vpc/PublicSubnet2" } - ] + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } } }, "VpcPublicSubnet2RouteTableAssociationDD5762D8": { @@ -183,12 +183,12 @@ "VpcPublicSubnet2DefaultRoute97F91067": { "Type": "AWS::EC2::Route", "Properties": { - "RouteTableId": { - "Ref": "VpcPublicSubnet2RouteTable94F7E489" - }, "DestinationCidrBlock": "0.0.0.0/0", "GatewayId": { "Ref": "VpcIGWD7BA715C" + }, + "RouteTableId": { + "Ref": "VpcPublicSubnet2RouteTable94F7E489" } }, "DependsOn": [ @@ -210,15 +210,15 @@ "VpcPublicSubnet2NATGateway9182C01D": { "Type": "AWS::EC2::NatGateway", "Properties": { - "SubnetId": { - "Ref": "VpcPublicSubnet2Subnet691E08A3" - }, "AllocationId": { "Fn::GetAtt": [ "VpcPublicSubnet2EIP3C605A87", "AllocationId" ] }, + "SubnetId": { + "Ref": "VpcPublicSubnet2Subnet691E08A3" + }, "Tags": [ { "Key": "Name", @@ -234,9 +234,6 @@ "VpcPrivateSubnet1Subnet536B997A": { "Type": "AWS::EC2::Subnet", "Properties": { - "VpcId": { - "Ref": "Vpc8378EB38" - }, "AvailabilityZone": { "Fn::Select": [ 0, @@ -260,21 +257,24 @@ "Key": "Name", "Value": "PipelineStack/Vpc/PrivateSubnet1" } - ] + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } } }, "VpcPrivateSubnet1RouteTableB2C5B500": { "Type": "AWS::EC2::RouteTable", "Properties": { - "VpcId": { - "Ref": "Vpc8378EB38" - }, "Tags": [ { "Key": "Name", "Value": "PipelineStack/Vpc/PrivateSubnet1" } - ] + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } } }, "VpcPrivateSubnet1RouteTableAssociation70C59FA6": { @@ -291,21 +291,18 @@ "VpcPrivateSubnet1DefaultRouteBE02A9ED": { "Type": "AWS::EC2::Route", "Properties": { - "RouteTableId": { - "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" - }, "DestinationCidrBlock": "0.0.0.0/0", "NatGatewayId": { "Ref": "VpcPublicSubnet1NATGateway4D7517AA" + }, + "RouteTableId": { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" } } }, "VpcPrivateSubnet2Subnet3788AAA1": { "Type": "AWS::EC2::Subnet", "Properties": { - "VpcId": { - "Ref": "Vpc8378EB38" - }, "AvailabilityZone": { "Fn::Select": [ 1, @@ -329,21 +326,24 @@ "Key": "Name", "Value": "PipelineStack/Vpc/PrivateSubnet2" } - ] + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } } }, "VpcPrivateSubnet2RouteTableA678073B": { "Type": "AWS::EC2::RouteTable", "Properties": { - "VpcId": { - "Ref": "Vpc8378EB38" - }, "Tags": [ { "Key": "Name", "Value": "PipelineStack/Vpc/PrivateSubnet2" } - ] + ], + "VpcId": { + "Ref": "Vpc8378EB38" + } } }, "VpcPrivateSubnet2RouteTableAssociationA89CAD56": { @@ -360,12 +360,12 @@ "VpcPrivateSubnet2DefaultRoute060D2087": { "Type": "AWS::EC2::Route", "Properties": { - "RouteTableId": { - "Ref": "VpcPrivateSubnet2RouteTableA678073B" - }, "DestinationCidrBlock": "0.0.0.0/0", "NatGatewayId": { "Ref": "VpcPublicSubnet2NATGateway9182C01D" + }, + "RouteTableId": { + "Ref": "VpcPrivateSubnet2RouteTableA678073B" } } }, @@ -383,11 +383,11 @@ "VpcVPCGWBF912B6E": { "Type": "AWS::EC2::VPCGatewayAttachment", "Properties": { - "VpcId": { - "Ref": "Vpc8378EB38" - }, "InternetGatewayId": { "Ref": "VpcIGWD7BA715C" + }, + "VpcId": { + "Ref": "Vpc8378EB38" } } }, @@ -623,6 +623,14 @@ "Pipeline9850B417": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { + "ArtifactStore": { + "Location": { + "Ref": "PipelineArtifactsBucketAEA9A052" + }, + "Type": "S3" + }, + "PipelineType": "V1", + "RestartExecutionOnUpdate": true, "RoleArn": { "Fn::GetAtt": [ "PipelineRoleB27FAA37", @@ -894,14 +902,7 @@ ], "Name": "Beta" } - ], - "ArtifactStore": { - "Location": { - "Ref": "PipelineArtifactsBucketAEA9A052" - }, - "Type": "S3" - }, - "RestartExecutionOnUpdate": true + ] }, "DependsOn": [ "PipelineRoleDefaultPolicy7BDC1ABB", @@ -921,12 +922,12 @@ "MatchEquals": "refs/heads/{Branch}" } ], + "RegisterWithThirdParty": true, "TargetAction": "aws_aws-cdk", "TargetPipeline": { "Ref": "Pipeline9850B417" }, - "TargetPipelineVersion": 1, - "RegisterWithThirdParty": true + "TargetPipelineVersion": 1 } }, "PipelineBuildSynthCdkBuildProjectRole231EEA2A": { @@ -1189,6 +1190,11 @@ "Artifacts": { "Type": "CODEPIPELINE" }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineStack/Pipeline/Build/Synth", + "EncryptionKey": "alias/aws/s3", "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:7.0", @@ -1206,11 +1212,6 @@ "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}", "Type": "CODEPIPELINE" }, - "Cache": { - "Type": "NO_CACHE" - }, - "Description": "Pipeline step PipelineStack/Pipeline/Build/Synth", - "EncryptionKey": "alias/aws/s3", "VpcConfig": { "SecurityGroupIds": [ { @@ -1624,6 +1625,11 @@ "Artifacts": { "Type": "CODEPIPELINE" }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", + "EncryptionKey": "alias/aws/s3", "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:7.0", @@ -1641,11 +1647,6 @@ "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}", "Type": "CODEPIPELINE" }, - "Cache": { - "Type": "NO_CACHE" - }, - "Description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", - "EncryptionKey": "alias/aws/s3", "VpcConfig": { "SecurityGroupIds": [ { @@ -1953,6 +1954,11 @@ "Artifacts": { "Type": "CODEPIPELINE" }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineStack/Pipeline/Assets/FileAsset1", + "EncryptionKey": "alias/aws/s3", "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:7.0", @@ -1970,11 +1976,6 @@ "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g cdk-assets@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk-assets --path \\\"assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json\\\" --verbose publish \\\"8289faf53c7da377bb2b90615999171adef5e1d8f6b88810e5fef75e6ca09ba5:current_account-current_region\\\"\"\n ]\n }\n }\n}", "Type": "CODEPIPELINE" }, - "Cache": { - "Type": "NO_CACHE" - }, - "Description": "Pipeline step PipelineStack/Pipeline/Assets/FileAsset1", - "EncryptionKey": "alias/aws/s3", "VpcConfig": { "SecurityGroupIds": [ { @@ -2052,6 +2053,11 @@ "Artifacts": { "Type": "CODEPIPELINE" }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineStack/Pipeline/Assets/FileAsset2", + "EncryptionKey": "alias/aws/s3", "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:7.0", @@ -2069,11 +2075,6 @@ "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g cdk-assets@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk-assets --path \\\"assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json\\\" --verbose publish \\\"ac76997971c3f6ddf37120660003f1ced72b4fc58c498dfd99c78fa77e721e0e:current_account-current_region\\\"\"\n ]\n }\n }\n}", "Type": "CODEPIPELINE" }, - "Cache": { - "Type": "NO_CACHE" - }, - "Description": "Pipeline step PipelineStack/Pipeline/Assets/FileAsset2", - "EncryptionKey": "alias/aws/s3", "VpcConfig": { "SecurityGroupIds": [ { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json index de7703c76b213..1c53d63e86cb7 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "8289faf53c7da377bb2b90615999171adef5e1d8f6b88810e5fef75e6ca09ba5": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/assembly-PipelineStack-Beta/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/assembly-PipelineStack-Beta/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/assembly-PipelineStack-Beta/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/assembly-PipelineStack-Beta/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/assembly-PipelineStack-Beta/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/assembly-PipelineStack-Beta/manifest.json index 2b3f5f3cff2a4..e5131f69213e7 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/assembly-PipelineStack-Beta/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/assembly-PipelineStack-Beta/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackBetaStack1E6541489.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackBetaStack1E6541489.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/integ.json index d89ad922ea702..a8665877c2ad6 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "testCases": { "integ.newpipeline-with-vpc": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/manifest.json index b4ecc9bf3b85d..9cb5bd3f3bf21 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "assembly-PipelineStack-Beta": { "type": "cdk:cloud-assembly", @@ -21,10 +21,11 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStack.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}/0a38575278954c57dc2282c4e3007815cca46595cdd0204557102de34dbcc818.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/d3c329bd55d36ed5a56bdbc0a65fdeb14e452376c9f0ff131a2180c88fc68fe5.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/tree.json index 6326bb75c6308..a16f51e8d0592 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline-with-vpc.js.snapshot/tree.json @@ -45,9 +45,6 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", "aws:cdk:cloudformation:props": { - "vpcId": { - "Ref": "Vpc8378EB38" - }, "availabilityZone": { "Fn::Select": [ 0, @@ -71,7 +68,10 @@ "key": "Name", "value": "PipelineStack/Vpc/PublicSubnet1" } - ] + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } } }, "constructInfo": { @@ -93,15 +93,15 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", "aws:cdk:cloudformation:props": { - "vpcId": { - "Ref": "Vpc8378EB38" - }, "tags": [ { "key": "Name", "value": "PipelineStack/Vpc/PublicSubnet1" } - ] + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } } }, "constructInfo": { @@ -134,12 +134,12 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::Route", "aws:cdk:cloudformation:props": { - "routeTableId": { - "Ref": "VpcPublicSubnet1RouteTable6C95E38E" - }, "destinationCidrBlock": "0.0.0.0/0", "gatewayId": { "Ref": "VpcIGWD7BA715C" + }, + "routeTableId": { + "Ref": "VpcPublicSubnet1RouteTable6C95E38E" } } }, @@ -174,15 +174,15 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::NatGateway", "aws:cdk:cloudformation:props": { - "subnetId": { - "Ref": "VpcPublicSubnet1Subnet5C2D37C4" - }, "allocationId": { "Fn::GetAtt": [ "VpcPublicSubnet1EIPD7E02669", "AllocationId" ] }, + "subnetId": { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" + }, "tags": [ { "key": "Name", @@ -212,9 +212,6 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", "aws:cdk:cloudformation:props": { - "vpcId": { - "Ref": "Vpc8378EB38" - }, "availabilityZone": { "Fn::Select": [ 1, @@ -238,7 +235,10 @@ "key": "Name", "value": "PipelineStack/Vpc/PublicSubnet2" } - ] + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } } }, "constructInfo": { @@ -260,15 +260,15 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", "aws:cdk:cloudformation:props": { - "vpcId": { - "Ref": "Vpc8378EB38" - }, "tags": [ { "key": "Name", "value": "PipelineStack/Vpc/PublicSubnet2" } - ] + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } } }, "constructInfo": { @@ -301,12 +301,12 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::Route", "aws:cdk:cloudformation:props": { - "routeTableId": { - "Ref": "VpcPublicSubnet2RouteTable94F7E489" - }, "destinationCidrBlock": "0.0.0.0/0", "gatewayId": { "Ref": "VpcIGWD7BA715C" + }, + "routeTableId": { + "Ref": "VpcPublicSubnet2RouteTable94F7E489" } } }, @@ -341,15 +341,15 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::NatGateway", "aws:cdk:cloudformation:props": { - "subnetId": { - "Ref": "VpcPublicSubnet2Subnet691E08A3" - }, "allocationId": { "Fn::GetAtt": [ "VpcPublicSubnet2EIP3C605A87", "AllocationId" ] }, + "subnetId": { + "Ref": "VpcPublicSubnet2Subnet691E08A3" + }, "tags": [ { "key": "Name", @@ -379,9 +379,6 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", "aws:cdk:cloudformation:props": { - "vpcId": { - "Ref": "Vpc8378EB38" - }, "availabilityZone": { "Fn::Select": [ 0, @@ -405,7 +402,10 @@ "key": "Name", "value": "PipelineStack/Vpc/PrivateSubnet1" } - ] + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } } }, "constructInfo": { @@ -427,15 +427,15 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", "aws:cdk:cloudformation:props": { - "vpcId": { - "Ref": "Vpc8378EB38" - }, "tags": [ { "key": "Name", "value": "PipelineStack/Vpc/PrivateSubnet1" } - ] + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } } }, "constructInfo": { @@ -468,12 +468,12 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::Route", "aws:cdk:cloudformation:props": { - "routeTableId": { - "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" - }, "destinationCidrBlock": "0.0.0.0/0", "natGatewayId": { "Ref": "VpcPublicSubnet1NATGateway4D7517AA" + }, + "routeTableId": { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" } } }, @@ -498,9 +498,6 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::Subnet", "aws:cdk:cloudformation:props": { - "vpcId": { - "Ref": "Vpc8378EB38" - }, "availabilityZone": { "Fn::Select": [ 1, @@ -524,7 +521,10 @@ "key": "Name", "value": "PipelineStack/Vpc/PrivateSubnet2" } - ] + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } } }, "constructInfo": { @@ -546,15 +546,15 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::RouteTable", "aws:cdk:cloudformation:props": { - "vpcId": { - "Ref": "Vpc8378EB38" - }, "tags": [ { "key": "Name", "value": "PipelineStack/Vpc/PrivateSubnet2" } - ] + ], + "vpcId": { + "Ref": "Vpc8378EB38" + } } }, "constructInfo": { @@ -587,12 +587,12 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::Route", "aws:cdk:cloudformation:props": { - "routeTableId": { - "Ref": "VpcPrivateSubnet2RouteTableA678073B" - }, "destinationCidrBlock": "0.0.0.0/0", "natGatewayId": { "Ref": "VpcPublicSubnet2NATGateway9182C01D" + }, + "routeTableId": { + "Ref": "VpcPrivateSubnet2RouteTableA678073B" } } }, @@ -632,11 +632,11 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::EC2::VPCGatewayAttachment", "aws:cdk:cloudformation:props": { - "vpcId": { - "Ref": "Vpc8378EB38" - }, "internetGatewayId": { "Ref": "VpcIGWD7BA715C" + }, + "vpcId": { + "Ref": "Vpc8378EB38" } } }, @@ -972,6 +972,14 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::CodePipeline::Pipeline", "aws:cdk:cloudformation:props": { + "artifactStore": { + "type": "S3", + "location": { + "Ref": "PipelineArtifactsBucketAEA9A052" + } + }, + "pipelineType": "V1", + "restartExecutionOnUpdate": true, "roleArn": { "Fn::GetAtt": [ "PipelineRoleB27FAA37", @@ -1243,14 +1251,7 @@ } ] } - ], - "artifactStore": { - "type": "S3", - "location": { - "Ref": "PipelineArtifactsBucketAEA9A052" - } - }, - "restartExecutionOnUpdate": true + ] } }, "constructInfo": { @@ -1282,12 +1283,12 @@ "matchEquals": "refs/heads/{Branch}" } ], + "registerWithThirdParty": true, "targetAction": "aws_aws-cdk", "targetPipeline": { "Ref": "Pipeline9850B417" }, - "targetPipelineVersion": 1, - "registerWithThirdParty": true + "targetPipelineVersion": 1 } }, "constructInfo": { @@ -1298,13 +1299,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Build": { @@ -1644,6 +1645,11 @@ "artifacts": { "type": "CODEPIPELINE" }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineStack/Pipeline/Build/Synth", + "encryptionKey": "alias/aws/s3", "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", @@ -1661,11 +1667,6 @@ "type": "CODEPIPELINE", "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}" }, - "cache": { - "type": "NO_CACHE" - }, - "description": "Pipeline step PipelineStack/Pipeline/Build/Synth", - "encryptionKey": "alias/aws/s3", "vpcConfig": { "vpcId": { "Ref": "Vpc8378EB38" @@ -1750,13 +1751,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "UpdatePipeline": { @@ -1768,13 +1769,13 @@ "path": "PipelineStack/Pipeline/Pipeline/UpdatePipeline/SelfMutate", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Assets": { @@ -1786,7 +1787,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Assets/FileAsset1", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "FileAsset2": { @@ -1794,13 +1795,13 @@ "path": "PipelineStack/Pipeline/Pipeline/Assets/FileAsset2", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Beta": { @@ -1812,7 +1813,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Deploy": { @@ -1820,13 +1821,13 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}": { @@ -1846,7 +1847,7 @@ "path": "PipelineStack/Pipeline/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}/8389e75f-0810-4838-bf64-d6f85a95cf83", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -2352,6 +2353,11 @@ "artifacts": { "type": "CODEPIPELINE" }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", + "encryptionKey": "alias/aws/s3", "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", @@ -2369,11 +2375,6 @@ "type": "CODEPIPELINE", "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}" }, - "cache": { - "type": "NO_CACHE" - }, - "description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", - "encryptionKey": "alias/aws/s3", "vpcConfig": { "vpcId": { "Ref": "Vpc8378EB38" @@ -2458,7 +2459,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Assets": { @@ -2786,6 +2787,11 @@ "artifacts": { "type": "CODEPIPELINE" }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineStack/Pipeline/Assets/FileAsset1", + "encryptionKey": "alias/aws/s3", "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", @@ -2803,11 +2809,6 @@ "type": "CODEPIPELINE", "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g cdk-assets@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk-assets --path \\\"assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json\\\" --verbose publish \\\"8289faf53c7da377bb2b90615999171adef5e1d8f6b88810e5fef75e6ca09ba5:current_account-current_region\\\"\"\n ]\n }\n }\n}" }, - "cache": { - "type": "NO_CACHE" - }, - "description": "Pipeline step PipelineStack/Pipeline/Assets/FileAsset1", - "encryptionKey": "alias/aws/s3", "vpcConfig": { "vpcId": { "Ref": "Vpc8378EB38" @@ -2936,6 +2937,11 @@ "artifacts": { "type": "CODEPIPELINE" }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineStack/Pipeline/Assets/FileAsset2", + "encryptionKey": "alias/aws/s3", "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", @@ -2953,11 +2959,6 @@ "type": "CODEPIPELINE", "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g cdk-assets@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk-assets --path \\\"assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json\\\" --verbose publish \\\"ac76997971c3f6ddf37120660003f1ced72b4fc58c498dfd99c78fa77e721e0e:current_account-current_region\\\"\"\n ]\n }\n }\n}" }, - "cache": { - "type": "NO_CACHE" - }, - "description": "Pipeline step PipelineStack/Pipeline/Assets/FileAsset2", - "encryptionKey": "alias/aws/s3", "vpcConfig": { "vpcId": { "Ref": "Vpc8378EB38" @@ -2995,7 +2996,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -3141,7 +3142,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.assets.json index c10a4ae66bc07..b713f55bfa10c 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.assets.json @@ -1,7 +1,7 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { - "09becddcd85b905c424bc20286f676d6139b48124032aa86dd8848e147317752": { + "d3f90d40f5d8c76699dbdce03029caa105a7d2f34e85de7756aa16e9e0b177be": { "source": { "path": "PipelineStack.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "09becddcd85b905c424bc20286f676d6139b48124032aa86dd8848e147317752.json", + "objectKey": "d3f90d40f5d8c76699dbdce03029caa105a7d2f34e85de7756aa16e9e0b177be.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/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.template.json index 476a2b6f3ea0c..2a30d523d289a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/PipelineStack.template.json @@ -232,6 +232,14 @@ "Pipeline9850B417": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { + "ArtifactStore": { + "Location": { + "Ref": "PipelineArtifactsBucketAEA9A052" + }, + "Type": "S3" + }, + "PipelineType": "V1", + "RestartExecutionOnUpdate": true, "RoleArn": { "Fn::GetAtt": [ "PipelineRoleB27FAA37", @@ -1834,14 +1842,7 @@ ], "Name": "Wave2" } - ], - "ArtifactStore": { - "Location": { - "Ref": "PipelineArtifactsBucketAEA9A052" - }, - "Type": "S3" - }, - "RestartExecutionOnUpdate": true + ] }, "DependsOn": [ "PipelineRoleDefaultPolicy7BDC1ABB", @@ -1861,12 +1862,12 @@ "MatchEquals": "refs/heads/{Branch}" } ], + "RegisterWithThirdParty": true, "TargetAction": "rix0rrr_cdk-pipelines-demo", "TargetPipeline": { "Ref": "Pipeline9850B417" }, - "TargetPipelineVersion": 1, - "RegisterWithThirdParty": true + "TargetPipelineVersion": 1 } }, "PipelineBuildSynthCdkBuildProjectRole231EEA2A": { @@ -2036,6 +2037,11 @@ "Artifacts": { "Type": "CODEPIPELINE" }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineStack/Pipeline/Build/Synth", + "EncryptionKey": "alias/aws/s3", "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:7.0", @@ -2052,12 +2058,7 @@ "Source": { "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}", "Type": "CODEPIPELINE" - }, - "Cache": { - "Type": "NO_CACHE" - }, - "Description": "Pipeline step PipelineStack/Pipeline/Build/Synth", - "EncryptionKey": "alias/aws/s3" + } } }, "PipelineCodeBuildActionRole226DB0CB": { @@ -2313,6 +2314,11 @@ "Artifacts": { "Type": "CODEPIPELINE" }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", + "EncryptionKey": "alias/aws/s3", "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:7.0", @@ -2329,12 +2335,7 @@ "Source": { "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}", "Type": "CODEPIPELINE" - }, - "Cache": { - "Type": "NO_CACHE" - }, - "Description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", - "EncryptionKey": "alias/aws/s3" + } } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json index 216c3528dcab8..7fc4c562e1cf4 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "91031b26c04588c38a59e3481d308182b5244c5f5a3af3ee05566e2f4f70ce65": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack2C79AD00A.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack2C79AD00A.assets.json index 9e43ccbe2df62..f561ff3d6824a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack2C79AD00A.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/PipelineStackBetaStack2C79AD00A.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "e3aa38ca82b00b776ad3834e9ee862d2e529d91c0f0b12fad846884e1e600326": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/manifest.json index 594f450e28ad8..0cb2bbeff469d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Beta/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackBetaStack1E6541489.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackBetaStack1E6541489.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackBetaStack2C79AD00A.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack14013D698.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack14013D698.assets.json index a0f0b275109b1..41c4650124d72 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack14013D698.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack14013D698.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "774f0c3cec814003a4da7d6cab73aec82952a0cb52a221b3f94fae483d9922a3": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack2F0681AFF.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack2F0681AFF.assets.json index a353a3353a451..37f2aaf2e645f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack2F0681AFF.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/PipelineStackProd1Stack2F0681AFF.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "c1cb4eebe68ea920a89e618efa29c36ecc1aa0c6f6ef6b65559efe9c0bba4059": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/manifest.json index 0bcf638cb353d..777d7ec9115af 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod1/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd1Stack14013D698.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd1Stack14013D698.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd1Stack2F0681AFF.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack1FD464162.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack1FD464162.assets.json index b4ba394fe5593..5155e4b3cf662 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack1FD464162.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack1FD464162.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "a595899a57366f015e986ac46c3da09fac75670ea0f4719de8defc67d731fa68": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack2176123EB.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack2176123EB.assets.json index ff7a88294f34b..cc7d250151ebb 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack2176123EB.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/PipelineStackProd2Stack2176123EB.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "364ee9a72c6c371a00c6e41438695af070848a2d625a4c953bfc4666e7ad5ae9": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/manifest.json index c355127a22618..12236c56f42d8 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod2/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd2Stack1FD464162.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd2Stack1FD464162.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd2Stack2176123EB.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack1795F3D43.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack1795F3D43.assets.json index 6ddd60f7ac5d5..cd79e2de35fa8 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack1795F3D43.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack1795F3D43.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "e8c78794529aa32b354a78b7b979165b0cadd9d113a37f537d083f946c0e7bff": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack2DFBBA0B2.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack2DFBBA0B2.assets.json index 15ac86fbb3d1b..c7c434d181218 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack2DFBBA0B2.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/PipelineStackProd3Stack2DFBBA0B2.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "9fee5ad34559e603d3fc184456935445ea09549b147d2cbc2acd8cf6b916dd99": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/manifest.json index 3e5d77e11f064..57863ee9616ab 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod3/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd3Stack1795F3D43.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd3Stack1795F3D43.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd3Stack2DFBBA0B2.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack118F74ADB.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack118F74ADB.assets.json index edc13cf3ff6d4..13964b472f29c 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack118F74ADB.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack118F74ADB.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "7e0ecf5ec563ed47798cfb17d4c3ce0e6c710c075fc53bf8cd15d8fb9a210f78": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack2E2CB4ED3.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack2E2CB4ED3.assets.json index 29af583241fca..39a51c1b850b3 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack2E2CB4ED3.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/PipelineStackProd4Stack2E2CB4ED3.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "a9cddd81a8937cbadd9bf93c6fe07766501a7c137605bb09e6cfa322b2eb09fd": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/manifest.json index d347c675cc6bb..b05d87a145b59 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod4/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd4Stack118F74ADB.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd4Stack118F74ADB.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd4Stack2E2CB4ED3.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack1E7E4E4C6.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack1E7E4E4C6.assets.json index 44bcf91a50021..068375a36962f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack1E7E4E4C6.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack1E7E4E4C6.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "1e0089d5c027ddec49745fce045925aff9342fbffdf989e4ae5263fd87ee50f7": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack2C39BEE5B.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack2C39BEE5B.assets.json index 42799cb0799d2..0552ad095f4ff 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack2C39BEE5B.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/PipelineStackProd5Stack2C39BEE5B.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "48a94145722a5a14816cb87dce62fadba53a03b2c18e0fdfb5107ffabd5d7cd8": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/manifest.json index 1abe7afb824d3..e0adb5639a269 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod5/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd5Stack1E7E4E4C6.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd5Stack1E7E4E4C6.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd5Stack2C39BEE5B.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack1E7C34314.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack1E7C34314.assets.json index 79eb72847d519..7bb9b090216bd 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack1E7C34314.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack1E7C34314.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "26d311d19506235a52c5d093cf5a8360110af6a2b713beda66b33ba3ee5bd813": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack2BED1BBCE.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack2BED1BBCE.assets.json index e9833a6066b2d..fb52667681a5a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack2BED1BBCE.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/PipelineStackProd6Stack2BED1BBCE.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "8f3e16ae3f29a4a50d4ef13026a3bc879e039d80e9fffdefe19d40349ec6bb30": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/manifest.json index f79f20c324fb2..4a5e638a34660 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/assembly-PipelineStack-Prod6/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStackProd6Stack1E7C34314.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd6Stack1E7C34314.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", @@ -74,6 +75,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStackProd6Stack2BED1BBCE.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/integ.json index 97241780c845b..ffaf0f90174a5 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "testCases": { "integ.newpipeline": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/manifest.json index 68bf28d39bb5b..7586b5b25124a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "assembly-PipelineStack-Beta": { "type": "cdk:cloud-assembly", @@ -63,10 +63,11 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStack.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}/09becddcd85b905c424bc20286f676d6139b48124032aa86dd8848e147317752.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/d3f90d40f5d8c76699dbdce03029caa105a7d2f34e85de7756aa16e9e0b177be.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/tree.json index 272bfa2e3a87b..5f6d4ddc376cf 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.newpipeline.js.snapshot/tree.json @@ -329,6 +329,14 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::CodePipeline::Pipeline", "aws:cdk:cloudformation:props": { + "artifactStore": { + "type": "S3", + "location": { + "Ref": "PipelineArtifactsBucketAEA9A052" + } + }, + "pipelineType": "V1", + "restartExecutionOnUpdate": true, "roleArn": { "Fn::GetAtt": [ "PipelineRoleB27FAA37", @@ -1931,14 +1939,7 @@ } ] } - ], - "artifactStore": { - "type": "S3", - "location": { - "Ref": "PipelineArtifactsBucketAEA9A052" - } - }, - "restartExecutionOnUpdate": true + ] } }, "constructInfo": { @@ -1970,12 +1971,12 @@ "matchEquals": "refs/heads/{Branch}" } ], + "registerWithThirdParty": true, "targetAction": "rix0rrr_cdk-pipelines-demo", "targetPipeline": { "Ref": "Pipeline9850B417" }, - "targetPipelineVersion": 1, - "registerWithThirdParty": true + "targetPipelineVersion": 1 } }, "constructInfo": { @@ -1986,13 +1987,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Build": { @@ -2221,6 +2222,11 @@ "artifacts": { "type": "CODEPIPELINE" }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineStack/Pipeline/Build/Synth", + "encryptionKey": "alias/aws/s3", "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", @@ -2237,12 +2243,7 @@ "source": { "type": "CODEPIPELINE", "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}" - }, - "cache": { - "type": "NO_CACHE" - }, - "description": "Pipeline step PipelineStack/Pipeline/Build/Synth", - "encryptionKey": "alias/aws/s3" + } } }, "constructInfo": { @@ -2259,13 +2260,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "UpdatePipeline": { @@ -2277,13 +2278,13 @@ "path": "PipelineStack/Pipeline/Pipeline/UpdatePipeline/SelfMutate", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Beta": { @@ -2295,7 +2296,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Stack1.Deploy": { @@ -2303,7 +2304,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Stack2.Prepare": { @@ -2311,7 +2312,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Stack2.Deploy": { @@ -2319,13 +2320,13 @@ "path": "PipelineStack/Pipeline/Pipeline/Beta/Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}": { @@ -2345,7 +2346,7 @@ "path": "PipelineStack/Pipeline/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}/8389e75f-0810-4838-bf64-d6f85a95cf83", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -2379,7 +2380,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod2.Stack1.Prepare": { @@ -2387,7 +2388,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod1.Stack1.Deploy": { @@ -2395,7 +2396,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod2.Stack1.Deploy": { @@ -2403,7 +2404,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod1.Stack2.Prepare": { @@ -2411,7 +2412,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod2.Stack2.Prepare": { @@ -2419,7 +2420,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod1.Stack2.Deploy": { @@ -2427,7 +2428,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod1.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod2.Stack2.Deploy": { @@ -2435,13 +2436,13 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave1/Prod2.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Wave2": { @@ -2453,7 +2454,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod4.Stack1.Prepare": { @@ -2461,7 +2462,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod5.Stack1.Prepare": { @@ -2469,7 +2470,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod6.Stack1.Prepare": { @@ -2477,7 +2478,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack1.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod3.Stack1.Deploy": { @@ -2485,7 +2486,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod4.Stack1.Deploy": { @@ -2493,7 +2494,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod5.Stack1.Deploy": { @@ -2501,7 +2502,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod6.Stack1.Deploy": { @@ -2509,7 +2510,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack1.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod3.Stack2.Prepare": { @@ -2517,7 +2518,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod4.Stack2.Prepare": { @@ -2525,7 +2526,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod5.Stack2.Prepare": { @@ -2533,7 +2534,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod6.Stack2.Prepare": { @@ -2541,7 +2542,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack2.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod3.Stack2.Deploy": { @@ -2549,7 +2550,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod3.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod4.Stack2.Deploy": { @@ -2557,7 +2558,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod4.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod5.Stack2.Deploy": { @@ -2565,7 +2566,7 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod5.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Prod6.Stack2.Deploy": { @@ -2573,13 +2574,13 @@ "path": "PipelineStack/Pipeline/Pipeline/Wave2/Prod6.Stack2.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -2940,6 +2941,11 @@ "artifacts": { "type": "CODEPIPELINE" }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", + "encryptionKey": "alias/aws/s3", "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", @@ -2956,12 +2962,7 @@ "source": { "type": "CODEPIPELINE", "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}" - }, - "cache": { - "type": "NO_CACHE" - }, - "description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", - "encryptionKey": "alias/aws/s3" + } } }, "constructInfo": { @@ -2978,7 +2979,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -3032,7 +3033,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3163,7 +3164,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3294,7 +3295,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3425,7 +3426,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3556,7 +3557,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3687,7 +3688,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3818,7 +3819,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "BootstrapVersion": { @@ -3931,7 +3932,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/ClusterTestDefaultTestDeployAssert6A1BBA9D.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/ClusterTestDefaultTestDeployAssert6A1BBA9D.assets.json index aa136833588e1..1a49d2e15b492 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/ClusterTestDefaultTestDeployAssert6A1BBA9D.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/ClusterTestDefaultTestDeployAssert6A1BBA9D.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/PipelineStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/PipelineStack.assets.json index 4e01de4a84cf5..c47becbaeda4f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/PipelineStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/PipelineStack.assets.json @@ -1,7 +1,7 @@ { - "version": "31.0.0", + "version": "36.0.0", "files": { - "87515e6d5887f98c1eb576e0f8aded9226a77eca5998753bbbc89c972745740b": { + "28ecaf9636edd9017061ee147b7390cb2afbabff472fc03cc09e7fa5938be25c": { "source": { "path": "PipelineStack.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "87515e6d5887f98c1eb576e0f8aded9226a77eca5998753bbbc89c972745740b.json", + "objectKey": "28ecaf9636edd9017061ee147b7390cb2afbabff472fc03cc09e7fa5938be25c.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/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/PipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/PipelineStack.template.json index 1490697d192bd..af10ac824500a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/PipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/PipelineStack.template.json @@ -101,6 +101,14 @@ "Pipeline9850B417": { "Type": "AWS::CodePipeline::Pipeline", "Properties": { + "ArtifactStore": { + "Location": { + "Ref": "CustomArtifact20BDCF79" + }, + "Type": "S3" + }, + "PipelineType": "V1", + "RestartExecutionOnUpdate": true, "RoleArn": { "Fn::GetAtt": [ "PipelineRoleB27FAA37", @@ -211,14 +219,7 @@ ], "Name": "UpdatePipeline" } - ], - "ArtifactStore": { - "Location": { - "Ref": "CustomArtifact20BDCF79" - }, - "Type": "S3" - }, - "RestartExecutionOnUpdate": true + ] }, "DependsOn": [ "PipelineRoleDefaultPolicy7BDC1ABB", @@ -504,6 +505,11 @@ "Artifacts": { "Type": "CODEPIPELINE" }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineStack/Pipeline/Build/Synth", + "EncryptionKey": "alias/aws/s3", "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:7.0", @@ -520,12 +526,7 @@ "Source": { "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}", "Type": "CODEPIPELINE" - }, - "Cache": { - "Type": "NO_CACHE" - }, - "Description": "Pipeline step PipelineStack/Pipeline/Build/Synth", - "EncryptionKey": "alias/aws/s3" + } } }, "PipelineCodeBuildActionRole226DB0CB": { @@ -781,6 +782,11 @@ "Artifacts": { "Type": "CODEPIPELINE" }, + "Cache": { + "Type": "NO_CACHE" + }, + "Description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", + "EncryptionKey": "alias/aws/s3", "Environment": { "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:7.0", @@ -797,12 +803,7 @@ "Source": { "BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}", "Type": "CODEPIPELINE" - }, - "Cache": { - "Type": "NO_CACHE" - }, - "Description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", - "EncryptionKey": "alias/aws/s3" + } } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/cdk.out index 7925065efbcc4..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/integ.json index fec60dfc9d67b..b0087c01c2a19 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "testCases": { "ClusterTest/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/manifest.json index bbfc8f9ede328..ae5b56d74cb70 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "36.0.0", "artifacts": { "PipelineStack.assets": { "type": "cdk:asset-manifest", @@ -14,10 +14,11 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineStack.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}/87515e6d5887f98c1eb576e0f8aded9226a77eca5998753bbbc89c972745740b.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/28ecaf9636edd9017061ee147b7390cb2afbabff472fc03cc09e7fa5938be25c.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -151,6 +152,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "ClusterTestDefaultTestDeployAssert6A1BBA9D.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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/tree.json index e8cbeac404afd..e60bfcae7e65d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-artifact-bucket.js.snapshot/tree.json @@ -198,6 +198,14 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::CodePipeline::Pipeline", "aws:cdk:cloudformation:props": { + "artifactStore": { + "type": "S3", + "location": { + "Ref": "CustomArtifact20BDCF79" + } + }, + "pipelineType": "V1", + "restartExecutionOnUpdate": true, "roleArn": { "Fn::GetAtt": [ "PipelineRoleB27FAA37", @@ -308,14 +316,7 @@ } ] } - ], - "artifactStore": { - "type": "S3", - "location": { - "Ref": "CustomArtifact20BDCF79" - } - }, - "restartExecutionOnUpdate": true + ] } }, "constructInfo": { @@ -490,13 +491,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "Build": { @@ -725,6 +726,11 @@ "artifacts": { "type": "CODEPIPELINE" }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineStack/Pipeline/Build/Synth", + "encryptionKey": "alias/aws/s3", "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", @@ -741,12 +747,7 @@ "source": { "type": "CODEPIPELINE", "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\n \"npm ci\",\n \"npm run build\",\n \"npx cdk synth\"\n ]\n }\n },\n \"artifacts\": {\n \"base-directory\": \"cdk.out\",\n \"files\": \"**/*\"\n }\n}" - }, - "cache": { - "type": "NO_CACHE" - }, - "description": "Pipeline step PipelineStack/Pipeline/Build/Synth", - "encryptionKey": "alias/aws/s3" + } } }, "constructInfo": { @@ -763,13 +764,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "UpdatePipeline": { @@ -781,13 +782,13 @@ "path": "PipelineStack/Pipeline/Pipeline/UpdatePipeline/SelfMutate", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -1148,6 +1149,11 @@ "artifacts": { "type": "CODEPIPELINE" }, + "cache": { + "type": "NO_CACHE" + }, + "description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", + "encryptionKey": "alias/aws/s3", "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:7.0", @@ -1164,12 +1170,7 @@ "source": { "type": "CODEPIPELINE", "buildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@2\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}" - }, - "cache": { - "type": "NO_CACHE" - }, - "description": "Pipeline step PipelineStack/Pipeline/UpdatePipeline/SelfMutate", - "encryptionKey": "alias/aws/s3" + } } }, "constructInfo": { @@ -1186,7 +1187,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, @@ -1230,7 +1231,7 @@ "path": "ClusterTest/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } }, "DeployAssert": { @@ -1276,7 +1277,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.270" + "version": "10.3.0" } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/PipelineWithCustomStepStackOutputTestDefaultTestDeployAssert6C17E8C5.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/PipelineWithCustomStepStackOutputTestDefaultTestDeployAssert6C17E8C5.assets.json index ca622f4c636fa..165d175024f6c 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/PipelineWithCustomStepStackOutputTestDefaultTestDeployAssert6C17E8C5.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/PipelineWithCustomStepStackOutputTestDefaultTestDeployAssert6C17E8C5.assets.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/StackOutputPipelineStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/StackOutputPipelineStack.assets.json index b902434a113ef..48fdea9005b19 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/StackOutputPipelineStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/StackOutputPipelineStack.assets.json @@ -1,7 +1,7 @@ { - "version": "34.0.0", + "version": "36.0.0", "files": { - "35387124a6b1f44dc183a7f9021d4cf744e7060ec6ba626f6febc7d4558c9446": { + "e63d39049c7ed56197529f9507a93449bbde94dd62b1d355685065831df14af2": { "source": { "path": "StackOutputPipelineStack.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "35387124a6b1f44dc183a7f9021d4cf744e7060ec6ba626f6febc7d4558c9446.json", + "objectKey": "e63d39049c7ed56197529f9507a93449bbde94dd62b1d355685065831df14af2.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/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/StackOutputPipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/StackOutputPipelineStack.template.json index a6f1c9de03e0f..086e0f98c02b5 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/StackOutputPipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/StackOutputPipelineStack.template.json @@ -255,6 +255,7 @@ }, "Type": "S3" }, + "PipelineType": "V1", "RestartExecutionOnUpdate": true, "RoleArn": { "Fn::GetAtt": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/assembly-StackOutputPipelineStack-AppStage/StackOutputPipelineStackAppStageStackB810E610.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/assembly-StackOutputPipelineStack-AppStage/StackOutputPipelineStackAppStageStackB810E610.assets.json index accccfe7f3efb..3dd4692f8c1ff 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/assembly-StackOutputPipelineStack-AppStage/StackOutputPipelineStackAppStageStackB810E610.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/assembly-StackOutputPipelineStack-AppStage/StackOutputPipelineStackAppStageStackB810E610.assets.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "files": { "9990535320d190a5d21dd4894139418daf53e1f802d41a8187e5767814212f4f": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/assembly-StackOutputPipelineStack-AppStage/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/assembly-StackOutputPipelineStack-AppStage/cdk.out index 2313ab5436501..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/assembly-StackOutputPipelineStack-AppStage/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/assembly-StackOutputPipelineStack-AppStage/cdk.out @@ -1 +1 @@ -{"version":"34.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/assembly-StackOutputPipelineStack-AppStage/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/assembly-StackOutputPipelineStack-AppStage/manifest.json index 4c378536c85e3..fa30a82a725c9 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/assembly-StackOutputPipelineStack-AppStage/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/assembly-StackOutputPipelineStack-AppStage/manifest.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "artifacts": { "StackOutputPipelineStackAppStageStackB810E610.assets": { "type": "cdk:asset-manifest", @@ -14,6 +14,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "StackOutputPipelineStackAppStageStackB810E610.template.json", + "terminationProtection": false, "validateOnSynth": true, "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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/cdk.out index 2313ab5436501..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"34.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/integ.json index 6bff3e88cbbc2..7a5d27a4deafb 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "testCases": { "PipelineWithCustomStepStackOutputTest/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/manifest.json index 449b5511c8b85..b121f5d37cc5d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "artifacts": { "assembly-StackOutputPipelineStack-AppStage": { "type": "cdk:cloud-assembly", @@ -21,10 +21,11 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "StackOutputPipelineStack.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}/35387124a6b1f44dc183a7f9021d4cf744e7060ec6ba626f6febc7d4558c9446.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/e63d39049c7ed56197529f9507a93449bbde94dd62b1d355685065831df14af2.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -194,6 +195,7 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "PipelineWithCustomStepStackOutputTestDefaultTestDeployAssert6C17E8C5.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}", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/tree.json index 988a9f3bf59a5..04c81c8bd3412 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-stack-outputs-in-custom-step.js.snapshot/tree.json @@ -369,6 +369,7 @@ "Ref": "PipelineArtifactsBucketAEA9A052" } }, + "pipelineType": "V1", "restartExecutionOnUpdate": true, "roleArn": { "Fn::GetAtt": [ @@ -827,13 +828,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "EventsRole": { @@ -1204,13 +1205,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "AppStage": { @@ -1222,7 +1223,7 @@ "path": "StackOutputPipelineStack/Pipeline/Pipeline/AppStage/Stack.Prepare", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "Stack.Deploy": { @@ -1230,7 +1231,7 @@ "path": "StackOutputPipelineStack/Pipeline/Pipeline/AppStage/Stack.Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "CustomFunction": { @@ -1496,13 +1497,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}": { @@ -1522,7 +1523,7 @@ "path": "StackOutputPipelineStack/Pipeline/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}/8389e75f-0810-4838-bf64-d6f85a95cf83", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, @@ -1734,7 +1735,7 @@ "path": "PipelineWithCustomStepStackOutputTest/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "DeployAssert": { @@ -1780,7 +1781,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/VariablePipelineStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/VariablePipelineStack.assets.json index b5a7f057c9b12..ef68a11292595 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/VariablePipelineStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/VariablePipelineStack.assets.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "files": { "2ec8ad9e91dcd6e7ad6a5c84ffc6c9c05c408aca3b26ceb2816d81043e6c4dc3": { "source": { @@ -14,7 +14,7 @@ } } }, - "3564bf835d6d87ccb40518af4b3a233b8656930fe75231ca27aaa348414bcc1e": { + "3028cbfd2f951aea5a3dcd167972a4b83a6ef6149c40ad50e1b131d000a401f8": { "source": { "path": "VariablePipelineStack.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "3564bf835d6d87ccb40518af4b3a233b8656930fe75231ca27aaa348414bcc1e.json", + "objectKey": "3028cbfd2f951aea5a3dcd167972a4b83a6ef6149c40ad50e1b131d000a401f8.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/pipelines/test/integ.pipeline-with-variables.js.snapshot/VariablePipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/VariablePipelineStack.template.json index 811c2f4d1eb6a..e6d446689a1c9 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/VariablePipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/VariablePipelineStack.template.json @@ -308,6 +308,7 @@ }, "Type": "S3" }, + "PipelineType": "V1", "RestartExecutionOnUpdate": true, "RoleArn": { "Fn::GetAtt": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/VariablePipelineTestDefaultTestDeployAssertC1E57581.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/VariablePipelineTestDefaultTestDeployAssertC1E57581.assets.json index a1c2e002b6783..65074093a4309 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/VariablePipelineTestDefaultTestDeployAssertC1E57581.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/VariablePipelineTestDefaultTestDeployAssertC1E57581.assets.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/cdk.out index 2313ab5436501..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"34.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/integ.json index 1ef0a0f1ce454..bb021b5849e1b 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "testCases": { "VariablePipelineTest/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/manifest.json index 35c02b6f0d15a..f3fabc7a3b236 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "artifacts": { "VariablePipelineStack.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}/3564bf835d6d87ccb40518af4b3a233b8656930fe75231ca27aaa348414bcc1e.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/3028cbfd2f951aea5a3dcd167972a4b83a6ef6149c40ad50e1b131d000a401f8.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/tree.json index 5165b9f8bb628..300a91d0e9747 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-with-variables.js.snapshot/tree.json @@ -155,7 +155,7 @@ } }, "constructInfo": { - "fqn": "aws-cdk-lib.CustomResourceProvider", + "fqn": "aws-cdk-lib.CustomResourceProviderBase", "version": "0.0.0" } }, @@ -414,6 +414,7 @@ "Ref": "PipelineArtifactsBucketAEA9A052" } }, + "pipelineType": "V1", "restartExecutionOnUpdate": true, "roleArn": { "Fn::GetAtt": [ @@ -726,13 +727,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "Build": { @@ -999,13 +1000,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "MyWave": { @@ -1315,7 +1316,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "Consume": { @@ -1621,13 +1622,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, @@ -1809,7 +1810,7 @@ "path": "VariablePipelineTest/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "DeployAssert": { @@ -1855,7 +1856,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/PreparelessPipelineStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/PreparelessPipelineStack.assets.json index 138101367dfb6..168ff08903f54 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/PreparelessPipelineStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/PreparelessPipelineStack.assets.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "files": { "2ec8ad9e91dcd6e7ad6a5c84ffc6c9c05c408aca3b26ceb2816d81043e6c4dc3": { "source": { @@ -14,7 +14,7 @@ } } }, - "8907d9c7efbdbe54d0fb0f74017603b1b9c157f6452b8b6b7734f922f90af1de": { + "8e9877b8470c4ea0938e5735c70677223725ce6547f89b8ea04d8af86adb2c6e": { "source": { "path": "PreparelessPipelineStack.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "8907d9c7efbdbe54d0fb0f74017603b1b9c157f6452b8b6b7734f922f90af1de.json", + "objectKey": "8e9877b8470c4ea0938e5735c70677223725ce6547f89b8ea04d8af86adb2c6e.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/pipelines/test/integ.pipeline-without-prepare.js.snapshot/PreparelessPipelineStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/PreparelessPipelineStack.template.json index 90ccb6edb4c14..516d994ff824f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/PreparelessPipelineStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/PreparelessPipelineStack.template.json @@ -386,6 +386,7 @@ }, "Type": "S3" }, + "PipelineType": "V1", "RestartExecutionOnUpdate": true, "RoleArn": { "Fn::GetAtt": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/PreparelessPipelineTestDefaultTestDeployAssert7B7DD2C6.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/PreparelessPipelineTestDefaultTestDeployAssert7B7DD2C6.assets.json index 491cb42f3aefd..64d5c2ee36fb3 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/PreparelessPipelineTestDefaultTestDeployAssert7B7DD2C6.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/PreparelessPipelineTestDefaultTestDeployAssert7B7DD2C6.assets.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/PreparelessPipelineStackMyStageStack3DC192E7.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/PreparelessPipelineStackMyStageStack3DC192E7.assets.json index 29ecd9d58f5aa..e823e6b39874f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/PreparelessPipelineStackMyStageStack3DC192E7.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/PreparelessPipelineStackMyStageStack3DC192E7.assets.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/assembly-PreparelessPipelineStack-MyStage-Stack-MyApp/PreparelessPipelineStackMyStageStackMyAppStack51FBCD39.assets.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/assembly-PreparelessPipelineStack-MyStage-Stack-MyApp/PreparelessPipelineStackMyStageStackMyAppStack51FBCD39.assets.json index d2d3b9c4d4e49..cea23b33703fc 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/assembly-PreparelessPipelineStack-MyStage-Stack-MyApp/PreparelessPipelineStackMyStageStackMyAppStack51FBCD39.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/assembly-PreparelessPipelineStack-MyStage-Stack-MyApp/PreparelessPipelineStackMyStageStackMyAppStack51FBCD39.assets.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "files": { "1fd92c49dfa8050744f5e5169a7c3739923777fad154ba6b7275118191534ffc": { "source": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/assembly-PreparelessPipelineStack-MyStage-Stack-MyApp/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/assembly-PreparelessPipelineStack-MyStage-Stack-MyApp/cdk.out index 2313ab5436501..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/assembly-PreparelessPipelineStack-MyStage-Stack-MyApp/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/assembly-PreparelessPipelineStack-MyStage-Stack-MyApp/cdk.out @@ -1 +1 @@ -{"version":"34.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/assembly-PreparelessPipelineStack-MyStage-Stack-MyApp/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/assembly-PreparelessPipelineStack-MyStage-Stack-MyApp/manifest.json index 77a9ec06b6f99..62eb56eac69b3 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/assembly-PreparelessPipelineStack-MyStage-Stack-MyApp/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/assembly-PreparelessPipelineStack-MyStage-Stack-MyApp/manifest.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "artifacts": { "PreparelessPipelineStackMyStageStackMyAppStack51FBCD39.assets": { "type": "cdk:asset-manifest", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/cdk.out index 2313ab5436501..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/cdk.out @@ -1 +1 @@ -{"version":"34.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/manifest.json index d137c2873427e..c36b6b180cc00 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/assembly-PreparelessPipelineStack-MyStage/manifest.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "artifacts": { "assembly-PreparelessPipelineStack-MyStage-Stack-MyApp": { "type": "cdk:cloud-assembly", diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/cdk.out index 2313ab5436501..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"34.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/integ.json index 2f654810fe33c..50687785f68ff 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "testCases": { "PreparelessPipelineTest/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/manifest.json index 8c92bf759c0d2..9f228cc234736 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "34.0.0", + "version": "36.0.0", "artifacts": { "assembly-PreparelessPipelineStack-MyStage": { "type": "cdk:cloud-assembly", @@ -25,7 +25,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}/8907d9c7efbdbe54d0fb0f74017603b1b9c157f6452b8b6b7734f922f90af1de.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/8e9877b8470c4ea0938e5735c70677223725ce6547f89b8ea04d8af86adb2c6e.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/tree.json index e81dd3e363761..5d745046f5acf 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/pipelines/test/integ.pipeline-without-prepare.js.snapshot/tree.json @@ -155,7 +155,7 @@ } }, "constructInfo": { - "fqn": "aws-cdk-lib.CustomResourceProvider", + "fqn": "aws-cdk-lib.CustomResourceProviderBase", "version": "0.0.0" } }, @@ -492,6 +492,7 @@ "Ref": "PipelineArtifactsBucketAEA9A052" } }, + "pipelineType": "V1", "restartExecutionOnUpdate": true, "roleArn": { "Fn::GetAtt": [ @@ -817,13 +818,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "Build": { @@ -1090,13 +1091,13 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "MyStage": { @@ -1108,13 +1109,13 @@ "path": "PreparelessPipelineStack/Pipeline/Pipeline/MyStage/Deploy", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "MutableRolearn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}": { @@ -1134,7 +1135,7 @@ "path": "PreparelessPipelineStack/Pipeline/Pipeline/arn:${AWS::Partition}:iam::${AWS::AccountId}:role--cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}/8389e75f-0810-4838-bf64-d6f85a95cf83", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, @@ -1396,7 +1397,7 @@ "path": "PreparelessPipelineTest/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } }, "DeployAssert": { @@ -1442,7 +1443,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.70" + "version": "10.3.0" } } }, diff --git a/packages/@aws-cdk/aws-appconfig-alpha/README.md b/packages/@aws-cdk/aws-appconfig-alpha/README.md index 57605ee86f350..f2be2709641fa 100644 --- a/packages/@aws-cdk/aws-appconfig-alpha/README.md +++ b/packages/@aws-cdk/aws-appconfig-alpha/README.md @@ -4,548 +4,12 @@ --- -![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge) +![Deprecated](https://img.shields.io/badge/deprecated-critical.svg?style=for-the-badge) -> The APIs of higher level constructs in this module are experimental and under active development. -> They are subject to non-backward compatible changes or removal in any future version. These are -> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be -> announced in the release notes. This means that while you may use them, you may need to update -> your source code when upgrading to a newer version of this package. +> This API may emit warnings. Backward compatibility is not guaranteed. --- -This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. - -For a high level overview of what AWS AppConfig is and how it works, please take a look here: -[What is AWS AppConfig?](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) - - -## Basic Hosted Configuration Use Case - -> The main way most AWS AppConfig users utilize the service is through hosted configuration, which involves storing -> configuration data directly within AWS AppConfig. - -An example use case: - -```ts -const app = new appconfig.Application(this, 'MyApp'); -const env = new appconfig.Environment(this, 'MyEnv', { - application: app, -}); - -new appconfig.HostedConfiguration(this, 'MyHostedConfig', { - application: app, - deployTo: [env], - content: appconfig.ConfigurationContent.fromInlineText('This is my configuration content.'), -}); -``` - -This will create the application and environment for your configuration and then deploy your configuration to the -specified environment. - -For more information about what these resources are: [Creating feature flags and free form configuration data in AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/creating-feature-flags-and-configuration-data.html). - -For more information about deploying configuration: [Deploying feature flags and configuration data in AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/deploying-feature-flags.html) - -____ - -For an in-depth walkthrough of specific resources and how to use them, please take a look at the following sections. - -## Application - -[AWS AppConfig Application Documentation](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-namespace.html) - -In AWS AppConfig, an application is simply an organizational -construct like a folder. Configurations and environments are -associated with the application. - -When creating an application through CDK, the name and -description of an application are optional. - -Create a simple application: - -```ts -new appconfig.Application(this, 'MyApplication'); -``` - -## Environment - -[AWS AppConfig Environment Documentation](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-environment.html) - -Basic environment with monitors: - -```ts -declare const application: appconfig.Application; -declare const alarm: cloudwatch.Alarm; -declare const compositeAlarm: cloudwatch.CompositeAlarm; - -new appconfig.Environment(this, 'MyEnvironment', { - application, - monitors: [ - appconfig.Monitor.fromCloudWatchAlarm(alarm), - appconfig.Monitor.fromCloudWatchAlarm(compositeAlarm), - ], -}); -``` - -Environment monitors also support L1 `CfnEnvironment.MonitorsProperty` constructs through the `fromCfnMonitorsProperty` method. -However, this is not the recommended approach for CloudWatch alarms because a role will not be auto-generated if not provided. - -## Deployment Strategy - -[AWS AppConfig Deployment Strategy Documentation](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-deployment-strategy.html) - -A deployment strategy defines how a configuration will roll out. The roll out is defined by four parameters: deployment type, -growth factor, deployment duration, and final bake time. - -Deployment strategy with predefined values: - -```ts -new appconfig.DeploymentStrategy(this, 'MyDeploymentStrategy', { - rolloutStrategy: appconfig.RolloutStrategy.CANARY_10_PERCENT_20_MINUTES, -}); -``` - -Deployment strategy with custom values: - -```ts -new appconfig.DeploymentStrategy(this, 'MyDeploymentStrategy', { - rolloutStrategy: appconfig.RolloutStrategy.linear({ - growthFactor: 20, - deploymentDuration: Duration.minutes(30), - finalBakeTime: Duration.minutes(30), - }), -}); -``` - -Referencing a deployment strategy by ID: - -```ts -appconfig.DeploymentStrategy.fromDeploymentStrategyId(this, 'MyImportedDeploymentStrategy', appconfig.DeploymentStrategyId.fromString('abc123')); -``` - -Referencing an AWS AppConfig predefined deployment strategy by ID: - -```ts -appconfig.DeploymentStrategy.fromDeploymentStrategyId( - this, - 'MyImportedPredefinedDeploymentStrategy', - appconfig.DeploymentStrategyId.CANARY_10_PERCENT_20_MINUTES, -); -``` - -## Configuration - -A configuration is a higher-level construct that can either be a `HostedConfiguration` (stored internally through AWS -AppConfig) or a `SourcedConfiguration` (stored in an Amazon S3 bucket, AWS Secrets Manager secrets, Systems Manager (SSM) -Parameter Store parameters, SSM documents, or AWS CodePipeline). This construct manages deployments on creation. - -### HostedConfiguration - -A hosted configuration represents configuration stored in the AWS AppConfig hosted configuration store. A hosted configuration -takes in the configuration content and associated AWS AppConfig application. On construction of a hosted configuration, the -configuration is deployed. - -You can define hosted configuration content using any of the following ConfigurationContent methods: - -* `fromFile` - Defines the hosted configuration content from a file (you can specify a relative path). The content type will -be determined by the file extension unless specified. - -```ts -declare const application: appconfig.Application; - -new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { - application, - content: appconfig.ConfigurationContent.fromFile('config.json'), -}); -``` - -* `fromInlineText` - Defines the hosted configuration from inline text. The content type will be set as `text/plain`. - -```ts -declare const application: appconfig.Application; - -new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { - application, - content: appconfig.ConfigurationContent.fromInlineText('This is my configuration content.'), -}); -``` - -* `fromInlineJson` - Defines the hosted configuration from inline JSON. The content type will be set as `application/json` unless specified. - -```ts -declare const application: appconfig.Application; - -new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { - application, - content: appconfig.ConfigurationContent.fromInlineJson('{}'), -}); -``` - -* `fromInlineYaml` - Defines the hosted configuration from inline YAML. The content type will be set as `application/x-yaml`. - -```ts -declare const application: appconfig.Application; - -new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { - application, - content: appconfig.ConfigurationContent.fromInlineYaml('MyConfig: This is my content.'), -}); -``` - -* `fromInline` - Defines the hosted configuration from user-specified content types. The content type will be set as `application/octet-stream` unless specified. - -```ts -declare const application: appconfig.Application; - -new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { - application, - content: appconfig.ConfigurationContent.fromInline('This is my configuration content.'), -}); -``` - -AWS AppConfig supports the following types of configuration profiles. - -* **[Feature flag](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-and-profile-feature-flags.html)**: Use a feature flag configuration to turn on new features that require a timely deployment, such as a product launch or announcement. -* **[Freeform](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-free-form-configurations-creating.html)**: Use a freeform configuration to carefully introduce changes to your application. - -A hosted configuration with type: - -```ts -declare const application: appconfig.Application; - -new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { - application, - content: appconfig.ConfigurationContent.fromInlineText('This is my configuration content.'), - type: appconfig.ConfigurationType.FEATURE_FLAGS, -}); -``` - -When you create a configuration and configuration profile, you can specify up to two validators. A validator ensures that your -configuration data is syntactically and semantically correct. You can create validators in either JSON Schema or as an AWS -Lambda function. -See [About validators](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-and-profile.html#appconfig-creating-configuration-and-profile-validators) for more information. - -When you import a JSON Schema validator from a file, you can pass in a relative path. - -A hosted configuration with validators: - -```ts -declare const application: appconfig.Application; -declare const fn: lambda.Function; - -new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { - application, - content: appconfig.ConfigurationContent.fromInlineText('This is my configuration content.'), - validators: [ - appconfig.JsonSchemaValidator.fromFile('schema.json'), - appconfig.LambdaValidator.fromFunction(fn), - ], -}); -``` - -You can attach a deployment strategy (as described in the previous section) to your configuration to specify how you want your -configuration to roll out. - -A hosted configuration with a deployment strategy: - -```ts -declare const application: appconfig.Application; - -new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { - application, - content: appconfig.ConfigurationContent.fromInlineText('This is my configuration content.'), - deploymentStrategy: new appconfig.DeploymentStrategy(this, 'MyDeploymentStrategy', { - rolloutStrategy: appconfig.RolloutStrategy.linear({ - growthFactor: 15, - deploymentDuration: Duration.minutes(30), - finalBakeTime: Duration.minutes(15), - }), - }), -}); -``` - -The `deployTo` parameter is used to specify which environments to deploy the configuration to. If this parameter is not -specified, there will not be a deployment. - -A hosted configuration with `deployTo`: - -```ts -declare const application: appconfig.Application; -declare const env: appconfig.Environment; - -new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { - application, - content: appconfig.ConfigurationContent.fromInlineText('This is my configuration content.'), - deployTo: [env], -}); -``` - -### SourcedConfiguration - -A sourced configuration represents configuration stored in any of the following: - -* Amazon S3 bucket -* AWS Secrets Manager secret -* Systems Manager -* (SSM) Parameter Store parameter -* SSM document -* AWS CodePipeline. - -A sourced configuration takes in the location source -construct and optionally a version number to deploy. On construction of a sourced configuration, the configuration is deployed -only if a version number is specified. - -### S3 - -Use an Amazon S3 bucket to store a configuration. - -```ts -declare const application: appconfig.Application; - -const bucket = new s3.Bucket(this, 'MyBucket', { - versioned: true, -}); - -new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { - application, - location: appconfig.ConfigurationSource.fromBucket(bucket, 'path/to/file.json'), -}); -``` - -Use an encrypted bucket: - -```ts -declare const application: appconfig.Application; - -const bucket = new s3.Bucket(this, 'MyBucket', { - versioned: true, - encryption: s3.BucketEncryption.KMS, -}); - -new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { - application, - location: appconfig.ConfigurationSource.fromBucket(bucket, 'path/to/file.json'), -}); -``` - -### AWS Secrets Manager secret - -Use a Secrets Manager secret to store a configuration. - -```ts -declare const application: appconfig.Application; -declare const secret: secrets.Secret; - -new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { - application, - location: appconfig.ConfigurationSource.fromSecret(secret), -}); -``` - -### SSM Parameter Store parameter - -Use an SSM parameter to store a configuration. - -```ts -declare const application: appconfig.Application; -declare const parameter: ssm.StringParameter; - -new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { - application, - location: appconfig.ConfigurationSource.fromParameter(parameter), - versionNumber: '1', -}); -``` - -### SSM document - -Use an SSM document to store a configuration. - -```ts -declare const application: appconfig.Application; -declare const document: ssm.CfnDocument; - -new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { - application, - location: appconfig.ConfigurationSource.fromCfnDocument(document), -}); -``` - -### AWS CodePipeline - -Use an AWS CodePipeline pipeline to store a configuration. - -```ts -declare const application: appconfig.Application; -declare const pipeline: codepipeline.Pipeline; - -new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { - application, - location: appconfig.ConfigurationSource.fromPipeline(pipeline), -}); -``` - -Similar to a hosted configuration, a sourced configuration can optionally take in a type, validators, a `deployTo` parameter, and a deployment strategy. - -A sourced configuration with type: - -```ts -declare const application: appconfig.Application; -declare const bucket: s3.Bucket; - -new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { - application, - location: appconfig.ConfigurationSource.fromBucket(bucket, 'path/to/file.json'), - type: appconfig.ConfigurationType.FEATURE_FLAGS, - name: 'MyConfig', - description: 'This is my sourced configuration from CDK.', -}); -``` - -A sourced configuration with validators: - -```ts -declare const application: appconfig.Application; -declare const bucket: s3.Bucket; -declare const fn: lambda.Function; - -new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { - application, - location: appconfig.ConfigurationSource.fromBucket(bucket, 'path/to/file.json'), - validators: [ - appconfig.JsonSchemaValidator.fromFile('schema.json'), - appconfig.LambdaValidator.fromFunction(fn), - ], -}); -``` - -A sourced configuration with a deployment strategy: - -```ts -declare const application: appconfig.Application; -declare const bucket: s3.Bucket; - -new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { - application, - location: appconfig.ConfigurationSource.fromBucket(bucket, 'path/to/file.json'), - deploymentStrategy: new appconfig.DeploymentStrategy(this, 'MyDeploymentStrategy', { - rolloutStrategy: appconfig.RolloutStrategy.linear({ - growthFactor: 15, - deploymentDuration: Duration.minutes(30), - finalBakeTime: Duration.minutes(15), - }), - }), -}); -``` - -## Extension - -An extension augments your ability to inject logic or behavior at different points during the AWS AppConfig workflow of -creating or deploying a configuration. -See: https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html - -### AWS Lambda destination - -Use an AWS Lambda as the event destination for an extension. - -```ts -declare const fn: lambda.Function; - -new appconfig.Extension(this, 'MyExtension', { - actions: [ - new appconfig.Action({ - actionPoints: [appconfig.ActionPoint.ON_DEPLOYMENT_START], - eventDestination: new appconfig.LambdaDestination(fn), - }), - ], -}); -``` - -Lambda extension with parameters: - -```ts -declare const fn: lambda.Function; - -new appconfig.Extension(this, 'MyExtension', { - actions: [ - new appconfig.Action({ - actionPoints: [appconfig.ActionPoint.ON_DEPLOYMENT_START], - eventDestination: new appconfig.LambdaDestination(fn), - }), - ], - parameters: [ - appconfig.Parameter.required('testParam', 'true'), - appconfig.Parameter.notRequired('testNotRequiredParam'), - ] -}); -``` - - -### Amazon Simple Queue Service (SQS) destination - -Use a queue as the event destination for an extension. - -```ts -declare const queue: sqs.Queue; - -new appconfig.Extension(this, 'MyExtension', { - actions: [ - new appconfig.Action({ - actionPoints: [appconfig.ActionPoint.ON_DEPLOYMENT_START], - eventDestination: new appconfig.SqsDestination(queue), - }), - ], -}); -``` - -### Amazon Simple Notification Service (SNS) destination - -Use an SNS topic as the event destination for an extension. - -```ts -declare const topic: sns.Topic; - -new appconfig.Extension(this, 'MyExtension', { - actions: [ - new appconfig.Action({ - actionPoints: [appconfig.ActionPoint.ON_DEPLOYMENT_START], - eventDestination: new appconfig.SnsDestination(topic), - }), - ], -}); -``` - -### Amazon EventBridge destination - -Use the default event bus as the event destination for an extension. - -```ts -const bus = events.EventBus.fromEventBusName(this, 'MyEventBus', 'default'); - -new appconfig.Extension(this, 'MyExtension', { - actions: [ - new appconfig.Action({ - actionPoints: [appconfig.ActionPoint.ON_DEPLOYMENT_START], - eventDestination: new appconfig.EventBridgeDestination(bus), - }), - ], -}); -``` - -You can also add extensions and their associations directly by calling `onDeploymentComplete()` or any other action point -method on the AWS AppConfig application, configuration, or environment resource. To add an association to an existing -extension, you can call `addExtension()` on the resource. - -Adding an association to an AWS AppConfig application: - -```ts -declare const application: appconfig.Application; -declare const extension: appconfig.Extension; -declare const lambdaDestination: appconfig.LambdaDestination; - -application.addExtension(extension); -application.onDeploymentComplete(lambdaDestination); -``` +All constructs moved to aws-cdk-lib/aws-appconfig. diff --git a/packages/@aws-cdk/aws-appconfig-alpha/package.json b/packages/@aws-cdk/aws-appconfig-alpha/package.json index fc156c39473cf..8b499a59ba22c 100644 --- a/packages/@aws-cdk/aws-appconfig-alpha/package.json +++ b/packages/@aws-cdk/aws-appconfig-alpha/package.json @@ -2,7 +2,7 @@ "name": "@aws-cdk/aws-appconfig-alpha", "private": false, "version": "0.0.0", - "description": "An experimental construct library for AWS AppConfig.", + "description": "This module is deprecated. All constructs are now available under aws-cdk-lib/aws-appconfig", "main": "lib/index.js", "types": "lib/index.d.ts", "jsii": { @@ -98,8 +98,8 @@ "engines": { "node": ">= 14.15.0" }, - "stability": "experimental", - "maturity": "experimental", + "stability": "deprecated", + "maturity": "deprecated", "awscdkio": { "announce": false }, diff --git a/packages/@aws-cdk/cloud-assembly-schema/package.json b/packages/@aws-cdk/cloud-assembly-schema/package.json index d9d1c086e85b1..b42ab501c7689 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/package.json +++ b/packages/@aws-cdk/cloud-assembly-schema/package.json @@ -88,7 +88,7 @@ "aws-cdk-lib": "0.0.0", "jest": "^29.7.0", "mock-fs": "^4.14.0", - "typescript-json-schema": "^0.62.0" + "typescript-json-schema": "^0.63.0" }, "repository": { "url": "https://github.com/aws/aws-cdk.git", diff --git a/packages/@aws-cdk/cloudformation-diff/package.json b/packages/@aws-cdk/cloudformation-diff/package.json index ec19247dbb116..c445e2f5eb072 100644 --- a/packages/@aws-cdk/cloudformation-diff/package.json +++ b/packages/@aws-cdk/cloudformation-diff/package.json @@ -23,8 +23,8 @@ }, "license": "Apache-2.0", "dependencies": { - "@aws-cdk/aws-service-spec": "^0.0.47", - "@aws-cdk/service-spec-types": "^0.0.47", + "@aws-cdk/aws-service-spec": "^0.0.50", + "@aws-cdk/service-spec-types": "^0.0.50", "chalk": "^4", "diff": "^5.2.0", "fast-deep-equal": "^3.1.3", @@ -38,7 +38,7 @@ "@types/string-width": "^4.0.1", "fast-check": "^3.15.1", "jest": "^29.7.0", - "aws-sdk": "2.1557.0", + "aws-sdk": "2.1562.0", "ts-jest": "^29.1.2" }, "repository": { diff --git a/packages/@aws-cdk/custom-resource-handlers/package.json b/packages/@aws-cdk/custom-resource-handlers/package.json index 2bd55dfa67798..591c511989c5e 100644 --- a/packages/@aws-cdk/custom-resource-handlers/package.json +++ b/packages/@aws-cdk/custom-resource-handlers/package.json @@ -53,9 +53,9 @@ "@cdklabs/typewriter": "^0.0.3", "jest": "^29.7.0", "sinon": "^9.2.4", - "nock": "^13.5.1", + "nock": "^13.5.3", "fs-extra": "^11.2.0", - "esbuild": "^0.20.0" + "esbuild": "^0.20.1" }, "dependencies": { "@aws-cdk/asset-node-proxy-agent-v6": "^2.0.1", @@ -63,7 +63,7 @@ "@aws-sdk/client-synthetics": "3.421.0", "@aws-sdk/client-ecr": "3.421.0", "@aws-sdk/client-s3": "3.421.0", - "aws-sdk": "^2.1557.0" + "aws-sdk": "^2.1562.0" }, "repository": { "url": "https://github.com/aws/aws-cdk.git", diff --git a/packages/@aws-cdk/integ-runner/package.json b/packages/@aws-cdk/integ-runner/package.json index 54bab833550c6..092ccdf4456a1 100644 --- a/packages/@aws-cdk/integ-runner/package.json +++ b/packages/@aws-cdk/integ-runner/package.json @@ -74,7 +74,7 @@ "@aws-cdk/cloud-assembly-schema": "0.0.0", "@aws-cdk/cloudformation-diff": "0.0.0", "@aws-cdk/cx-api": "0.0.0", - "@aws-cdk/aws-service-spec": "^0.0.47", + "@aws-cdk/aws-service-spec": "^0.0.50", "cdk-assets": "0.0.0", "@aws-cdk/cdk-cli-wrapper": "0.0.0", "aws-cdk": "0.0.0", diff --git a/packages/@aws-cdk/integ-tests-alpha/package.json b/packages/@aws-cdk/integ-tests-alpha/package.json index 4cd6000d8756a..72f6952a9d9cb 100644 --- a/packages/@aws-cdk/integ-tests-alpha/package.json +++ b/packages/@aws-cdk/integ-tests-alpha/package.json @@ -79,7 +79,7 @@ "aws-sdk-client-mock": "^3.0.1", "aws-sdk-client-mock-jest": "^3.0.1", "jest": "^29.7.0", - "nock": "^13.5.1", + "nock": "^13.5.3", "sinon": "^9.2.4", "aws-cdk-lib": "0.0.0", "node-fetch": "^2.7.0", diff --git a/packages/aws-cdk-lib/NOTICE b/packages/aws-cdk-lib/NOTICE index f1dbff982512f..957947a39aa1e 100644 --- a/packages/aws-cdk-lib/NOTICE +++ b/packages/aws-cdk-lib/NOTICE @@ -22,6 +22,36 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------- +The AWS CDK includes the following third-party software/licensing: + +** mime-db - https://www.npmjs.com/package/mime-db +** mime-types - https://www.npmjs.com/package/mime-types +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015-2022 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------- + ** fs-extra - https://www.npmjs.com/package/fs-extra Copyright (c) 2011-2017 JP Richardson diff --git a/packages/aws-cdk-lib/aws-appconfig/README.md b/packages/aws-cdk-lib/aws-appconfig/README.md index f682ece88395d..40aa40bf39035 100644 --- a/packages/aws-cdk-lib/aws-appconfig/README.md +++ b/packages/aws-cdk-lib/aws-appconfig/README.md @@ -1,27 +1,536 @@ -# AWS::AppConfig Construct Library +# AWS AppConfig Construct Library This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. -```ts nofixture -import * as appconfig from 'aws-cdk-lib/aws-appconfig'; +For a high level overview of what AWS AppConfig is and how it works, please take a look here: +[What is AWS AppConfig?](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) + + +## Basic Hosted Configuration Use Case + +> The main way most AWS AppConfig users utilize the service is through hosted configuration, which involves storing +> configuration data directly within AWS AppConfig. + +An example use case: + +```ts +const app = new appconfig.Application(this, 'MyApp'); +const env = new appconfig.Environment(this, 'MyEnv', { + application: app, +}); + +new appconfig.HostedConfiguration(this, 'MyHostedConfig', { + application: app, + deployTo: [env], + content: appconfig.ConfigurationContent.fromInlineText('This is my configuration content.'), +}); +``` + +This will create the application and environment for your configuration and then deploy your configuration to the +specified environment. + +For more information about what these resources are: [Creating feature flags and free form configuration data in AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/creating-feature-flags-and-configuration-data.html). + +For more information about deploying configuration: [Deploying feature flags and configuration data in AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/deploying-feature-flags.html) + +____ + +For an in-depth walkthrough of specific resources and how to use them, please take a look at the following sections. + +## Application + +[AWS AppConfig Application Documentation](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-namespace.html) + +In AWS AppConfig, an application is simply an organizational +construct like a folder. Configurations and environments are +associated with the application. + +When creating an application through CDK, the name and +description of an application are optional. + +Create a simple application: + +```ts +new appconfig.Application(this, 'MyApplication'); +``` + +## Environment + +[AWS AppConfig Environment Documentation](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-environment.html) + +Basic environment with monitors: + +```ts +declare const application: appconfig.Application; +declare const alarm: cloudwatch.Alarm; +declare const compositeAlarm: cloudwatch.CompositeAlarm; + +new appconfig.Environment(this, 'MyEnvironment', { + application, + monitors: [ + appconfig.Monitor.fromCloudWatchAlarm(alarm), + appconfig.Monitor.fromCloudWatchAlarm(compositeAlarm), + ], +}); +``` + +Environment monitors also support L1 `CfnEnvironment.MonitorsProperty` constructs through the `fromCfnMonitorsProperty` method. +However, this is not the recommended approach for CloudWatch alarms because a role will not be auto-generated if not provided. + +## Deployment Strategy + +[AWS AppConfig Deployment Strategy Documentation](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-deployment-strategy.html) + +A deployment strategy defines how a configuration will roll out. The roll out is defined by four parameters: deployment type, +growth factor, deployment duration, and final bake time. + +Deployment strategy with predefined values: + +```ts +new appconfig.DeploymentStrategy(this, 'MyDeploymentStrategy', { + rolloutStrategy: appconfig.RolloutStrategy.CANARY_10_PERCENT_20_MINUTES, +}); +``` + +Deployment strategy with custom values: + +```ts +new appconfig.DeploymentStrategy(this, 'MyDeploymentStrategy', { + rolloutStrategy: appconfig.RolloutStrategy.linear({ + growthFactor: 20, + deploymentDuration: Duration.minutes(30), + finalBakeTime: Duration.minutes(30), + }), +}); +``` + +Referencing a deployment strategy by ID: + +```ts +appconfig.DeploymentStrategy.fromDeploymentStrategyId(this, 'MyImportedDeploymentStrategy', appconfig.DeploymentStrategyId.fromString('abc123')); +``` + +Referencing an AWS AppConfig predefined deployment strategy by ID: + +```ts +appconfig.DeploymentStrategy.fromDeploymentStrategyId( + this, + 'MyImportedPredefinedDeploymentStrategy', + appconfig.DeploymentStrategyId.CANARY_10_PERCENT_20_MINUTES, +); +``` + +## Configuration + +A configuration is a higher-level construct that can either be a `HostedConfiguration` (stored internally through AWS +AppConfig) or a `SourcedConfiguration` (stored in an Amazon S3 bucket, AWS Secrets Manager secrets, Systems Manager (SSM) +Parameter Store parameters, SSM documents, or AWS CodePipeline). This construct manages deployments on creation. + +### HostedConfiguration + +A hosted configuration represents configuration stored in the AWS AppConfig hosted configuration store. A hosted configuration +takes in the configuration content and associated AWS AppConfig application. On construction of a hosted configuration, the +configuration is deployed. + +You can define hosted configuration content using any of the following ConfigurationContent methods: + +* `fromFile` - Defines the hosted configuration content from a file (you can specify a relative path). The content type will +be determined by the file extension unless specified. + +```ts +declare const application: appconfig.Application; + +new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { + application, + content: appconfig.ConfigurationContent.fromFile('config.json'), +}); +``` + +* `fromInlineText` - Defines the hosted configuration from inline text. The content type will be set as `text/plain`. + +```ts +declare const application: appconfig.Application; + +new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { + application, + content: appconfig.ConfigurationContent.fromInlineText('This is my configuration content.'), +}); +``` + +* `fromInlineJson` - Defines the hosted configuration from inline JSON. The content type will be set as `application/json` unless specified. + +```ts +declare const application: appconfig.Application; + +new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { + application, + content: appconfig.ConfigurationContent.fromInlineJson('{}'), +}); +``` + +* `fromInlineYaml` - Defines the hosted configuration from inline YAML. The content type will be set as `application/x-yaml`. + +```ts +declare const application: appconfig.Application; + +new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { + application, + content: appconfig.ConfigurationContent.fromInlineYaml('MyConfig: This is my content.'), +}); +``` + +* `fromInline` - Defines the hosted configuration from user-specified content types. The content type will be set as `application/octet-stream` unless specified. + +```ts +declare const application: appconfig.Application; + +new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { + application, + content: appconfig.ConfigurationContent.fromInline('This is my configuration content.'), +}); +``` + +AWS AppConfig supports the following types of configuration profiles. + +* **[Feature flag](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-and-profile-feature-flags.html)**: Use a feature flag configuration to turn on new features that require a timely deployment, such as a product launch or announcement. +* **[Freeform](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-free-form-configurations-creating.html)**: Use a freeform configuration to carefully introduce changes to your application. + +A hosted configuration with type: + +```ts +declare const application: appconfig.Application; + +new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { + application, + content: appconfig.ConfigurationContent.fromInlineText('This is my configuration content.'), + type: appconfig.ConfigurationType.FEATURE_FLAGS, +}); +``` + +When you create a configuration and configuration profile, you can specify up to two validators. A validator ensures that your +configuration data is syntactically and semantically correct. You can create validators in either JSON Schema or as an AWS +Lambda function. +See [About validators](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-and-profile.html#appconfig-creating-configuration-and-profile-validators) for more information. + +When you import a JSON Schema validator from a file, you can pass in a relative path. + +A hosted configuration with validators: + +```ts +declare const application: appconfig.Application; +declare const fn: lambda.Function; + +new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { + application, + content: appconfig.ConfigurationContent.fromInlineText('This is my configuration content.'), + validators: [ + appconfig.JsonSchemaValidator.fromFile('schema.json'), + appconfig.LambdaValidator.fromFunction(fn), + ], +}); +``` + +You can attach a deployment strategy (as described in the previous section) to your configuration to specify how you want your +configuration to roll out. + +A hosted configuration with a deployment strategy: + +```ts +declare const application: appconfig.Application; + +new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { + application, + content: appconfig.ConfigurationContent.fromInlineText('This is my configuration content.'), + deploymentStrategy: new appconfig.DeploymentStrategy(this, 'MyDeploymentStrategy', { + rolloutStrategy: appconfig.RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: Duration.minutes(30), + finalBakeTime: Duration.minutes(15), + }), + }), +}); +``` + +The `deployTo` parameter is used to specify which environments to deploy the configuration to. If this parameter is not +specified, there will not be a deployment. + +A hosted configuration with `deployTo`: + +```ts +declare const application: appconfig.Application; +declare const env: appconfig.Environment; + +new appconfig.HostedConfiguration(this, 'MyHostedConfiguration', { + application, + content: appconfig.ConfigurationContent.fromInlineText('This is my configuration content.'), + deployTo: [env], +}); +``` + +### SourcedConfiguration + +A sourced configuration represents configuration stored in any of the following: + +* Amazon S3 bucket +* AWS Secrets Manager secret +* Systems Manager +* (SSM) Parameter Store parameter +* SSM document +* AWS CodePipeline. + +A sourced configuration takes in the location source +construct and optionally a version number to deploy. On construction of a sourced configuration, the configuration is deployed +only if a version number is specified. + +### S3 + +Use an Amazon S3 bucket to store a configuration. + +```ts +declare const application: appconfig.Application; + +const bucket = new s3.Bucket(this, 'MyBucket', { + versioned: true, +}); + +new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { + application, + location: appconfig.ConfigurationSource.fromBucket(bucket, 'path/to/file.json'), +}); +``` + +Use an encrypted bucket: + +```ts +declare const application: appconfig.Application; + +const bucket = new s3.Bucket(this, 'MyBucket', { + versioned: true, + encryption: s3.BucketEncryption.KMS, +}); + +new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { + application, + location: appconfig.ConfigurationSource.fromBucket(bucket, 'path/to/file.json'), +}); +``` + +### AWS Secrets Manager secret + +Use a Secrets Manager secret to store a configuration. + +```ts +declare const application: appconfig.Application; +declare const secret: secrets.Secret; + +new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { + application, + location: appconfig.ConfigurationSource.fromSecret(secret), +}); +``` + +### SSM Parameter Store parameter + +Use an SSM parameter to store a configuration. + +```ts +declare const application: appconfig.Application; +declare const parameter: ssm.StringParameter; + +new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { + application, + location: appconfig.ConfigurationSource.fromParameter(parameter), + versionNumber: '1', +}); +``` + +### SSM document + +Use an SSM document to store a configuration. + +```ts +declare const application: appconfig.Application; +declare const document: ssm.CfnDocument; + +new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { + application, + location: appconfig.ConfigurationSource.fromCfnDocument(document), +}); ``` - +### AWS CodePipeline -There are no official hand-written ([L2](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) constructs for this service yet. Here are some suggestions on how to proceed: +Use an AWS CodePipeline pipeline to store a configuration. -- Search [Construct Hub for AppConfig construct libraries](https://constructs.dev/search?q=appconfig) -- Use the automatically generated [L1](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using) constructs, in the same way you would use [the CloudFormation AWS::AppConfig resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AppConfig.html) directly. +```ts +declare const application: appconfig.Application; +declare const pipeline: codepipeline.Pipeline; +new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { + application, + location: appconfig.ConfigurationSource.fromPipeline(pipeline), +}); +``` - +Similar to a hosted configuration, a sourced configuration can optionally take in a type, validators, a `deployTo` parameter, and a deployment strategy. -There are no hand-written ([L2](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) constructs for this service yet. -However, you can still use the automatically generated [L1](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using) constructs, and use this service exactly as you would using CloudFormation directly. +A sourced configuration with type: -For more information on the resources and properties available for this service, see the [CloudFormation documentation for AWS::AppConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AppConfig.html). +```ts +declare const application: appconfig.Application; +declare const bucket: s3.Bucket; -(Read the [CDK Contributing Guide](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and submit an RFC if you are interested in contributing to this construct library.) +new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { + application, + location: appconfig.ConfigurationSource.fromBucket(bucket, 'path/to/file.json'), + type: appconfig.ConfigurationType.FEATURE_FLAGS, + name: 'MyConfig', + description: 'This is my sourced configuration from CDK.', +}); +``` - +A sourced configuration with validators: + +```ts +declare const application: appconfig.Application; +declare const bucket: s3.Bucket; +declare const fn: lambda.Function; + +new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { + application, + location: appconfig.ConfigurationSource.fromBucket(bucket, 'path/to/file.json'), + validators: [ + appconfig.JsonSchemaValidator.fromFile('schema.json'), + appconfig.LambdaValidator.fromFunction(fn), + ], +}); +``` + +A sourced configuration with a deployment strategy: + +```ts +declare const application: appconfig.Application; +declare const bucket: s3.Bucket; + +new appconfig.SourcedConfiguration(this, 'MySourcedConfiguration', { + application, + location: appconfig.ConfigurationSource.fromBucket(bucket, 'path/to/file.json'), + deploymentStrategy: new appconfig.DeploymentStrategy(this, 'MyDeploymentStrategy', { + rolloutStrategy: appconfig.RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: Duration.minutes(30), + finalBakeTime: Duration.minutes(15), + }), + }), +}); +``` + +## Extension + +An extension augments your ability to inject logic or behavior at different points during the AWS AppConfig workflow of +creating or deploying a configuration. +See: https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html + +### AWS Lambda destination + +Use an AWS Lambda as the event destination for an extension. + +```ts +declare const fn: lambda.Function; + +new appconfig.Extension(this, 'MyExtension', { + actions: [ + new appconfig.Action({ + actionPoints: [appconfig.ActionPoint.ON_DEPLOYMENT_START], + eventDestination: new appconfig.LambdaDestination(fn), + }), + ], +}); +``` + +Lambda extension with parameters: + +```ts +declare const fn: lambda.Function; + +new appconfig.Extension(this, 'MyExtension', { + actions: [ + new appconfig.Action({ + actionPoints: [appconfig.ActionPoint.ON_DEPLOYMENT_START], + eventDestination: new appconfig.LambdaDestination(fn), + }), + ], + parameters: [ + appconfig.Parameter.required('testParam', 'true'), + appconfig.Parameter.notRequired('testNotRequiredParam'), + ] +}); +``` + + +### Amazon Simple Queue Service (SQS) destination + +Use a queue as the event destination for an extension. + +```ts +declare const queue: sqs.Queue; + +new appconfig.Extension(this, 'MyExtension', { + actions: [ + new appconfig.Action({ + actionPoints: [appconfig.ActionPoint.ON_DEPLOYMENT_START], + eventDestination: new appconfig.SqsDestination(queue), + }), + ], +}); +``` + +### Amazon Simple Notification Service (SNS) destination + +Use an SNS topic as the event destination for an extension. + +```ts +declare const topic: sns.Topic; + +new appconfig.Extension(this, 'MyExtension', { + actions: [ + new appconfig.Action({ + actionPoints: [appconfig.ActionPoint.ON_DEPLOYMENT_START], + eventDestination: new appconfig.SnsDestination(topic), + }), + ], +}); +``` + +### Amazon EventBridge destination + +Use the default event bus as the event destination for an extension. + +```ts +const bus = events.EventBus.fromEventBusName(this, 'MyEventBus', 'default'); + +new appconfig.Extension(this, 'MyExtension', { + actions: [ + new appconfig.Action({ + actionPoints: [appconfig.ActionPoint.ON_DEPLOYMENT_START], + eventDestination: new appconfig.EventBridgeDestination(bus), + }), + ], +}); +``` + +You can also add extensions and their associations directly by calling `onDeploymentComplete()` or any other action point +method on the AWS AppConfig application, configuration, or environment resource. To add an association to an existing +extension, you can call `addExtension()` on the resource. + +Adding an association to an AWS AppConfig application: + +```ts +declare const application: appconfig.Application; +declare const extension: appconfig.Extension; +declare const lambdaDestination: appconfig.LambdaDestination; + +application.addExtension(extension); +application.onDeploymentComplete(lambdaDestination); +``` diff --git a/packages/aws-cdk-lib/aws-appconfig/lib/application.ts b/packages/aws-cdk-lib/aws-appconfig/lib/application.ts new file mode 100644 index 0000000000000..440776ac8a0d2 --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/lib/application.ts @@ -0,0 +1,503 @@ +/* eslint-disable @aws-cdk/no-literal-partition */ +import { Construct } from 'constructs'; +import { CfnApplication } from './appconfig.generated'; +import { HostedConfiguration, HostedConfigurationOptions, SourcedConfiguration, SourcedConfigurationOptions } from './configuration'; +import { Environment, EnvironmentOptions, IEnvironment } from './environment'; +import { ActionPoint, IEventDestination, ExtensionOptions, IExtension, IExtensible, ExtensibleBase } from './extension'; +import * as ecs from '../../aws-ecs'; +import * as cdk from '../../core'; + +/** + * Defines the platform for the AWS AppConfig Lambda extension. + */ +export enum Platform { + X86_64 = 'x86-64', + ARM_64 = 'ARM64', +} + +export interface IApplication extends cdk.IResource { + /** + * The description of the application. + */ + readonly description?: string; + + /** + * The name of the application. + */ + readonly name?: string; + + /** + * The ID of the application. + * @attribute + */ + readonly applicationId: string; + + /** + * The Amazon Resource Name (ARN) of the application. + * @attribute + */ + readonly applicationArn: string; + + /** + * Adds an environment. + * + * @param id The name of the environment construct + * @param options The options for the environment construct + */ + addEnvironment(id: string, options?: EnvironmentOptions): IEnvironment; + + /** + * Adds a hosted configuration. + * + * @param id The name of the hosted configuration construct + * @param options The options for the hosted configuration construct + */ + addHostedConfiguration(id: string, options: HostedConfigurationOptions): HostedConfiguration; + + /** + * Adds a sourced configuration. + * + * @param id The name of the sourced configuration construct + * @param options The options for the sourced configuration construct + */ + addSourcedConfiguration(id: string, options: SourcedConfigurationOptions): SourcedConfiguration; + + /** + * Adds an existing environment. + * + * @param environment The environment + */ + addExistingEnvironment(environment: IEnvironment): void; + + /** + * Returns the list of associated environments. + */ + get environments(): IEnvironment[]; + + /** + * Adds an extension defined by the action point and event destination + * and also creates an extension association to an application. + * + * @param actionPoint The action point which triggers the event + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + on(actionPoint: ActionPoint, eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds a PRE_CREATE_HOSTED_CONFIGURATION_VERSION extension with the + * provided event destination and also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + preCreateHostedConfigurationVersion(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds a PRE_START_DEPLOYMENT extension with the provided event destination and + * also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + preStartDeployment(eventDestination: IEventDestination, options?: ExtensionOptions): void; + /** + * Adds an ON_DEPLOYMENT_START extension with the provided event destination and + * also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentStart(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_STEP extension with the provided event destination and + * also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentStep(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_BAKING extension with the provided event destination and + * also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentBaking(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_COMPLETE extension with the provided event destination and + * also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentComplete(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_ROLLED_BACK extension with the provided event destination and + * also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentRolledBack(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an extension association to the application. + * + * @param extension The extension to create an association for + */ + addExtension(extension: IExtension): void; +} + +/** + * Properties for the Application construct + */ +export interface ApplicationProps { + /** + * The name of the application. + * + * @default - A name is generated. + */ + readonly applicationName?: string; + + /** + * The description for the application. + * + * @default - No description. + */ + readonly description?: string; +} + +abstract class ApplicationBase extends cdk.Resource implements IApplication, IExtensible { + public abstract applicationId: string; + public abstract applicationArn: string; + private _environments: IEnvironment[] = []; + protected abstract extensible: ExtensibleBase; + + public addEnvironment(id: string, options: EnvironmentOptions = {}): IEnvironment { + return new Environment(this, id, { + application: this, + ...options, + }); + } + + public addHostedConfiguration(id: string, options: HostedConfigurationOptions): HostedConfiguration { + return new HostedConfiguration(this, id, { + application: this, + ...options, + }); + } + + public addSourcedConfiguration(id: string, options: SourcedConfigurationOptions): SourcedConfiguration { + return new SourcedConfiguration(this, id, { + application: this, + ...options, + }); + } + + public addExistingEnvironment(environment: IEnvironment) { + this._environments.push(environment); + } + + get environments(): IEnvironment[] { + return this._environments; + } + + /** + * Adds an extension defined by the action point and event destination + * and also creates an extension association to an application. + * + * @param actionPoint The action point which triggers the event + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public on(actionPoint: ActionPoint, eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.on(actionPoint, eventDestination, options); + } + + /** + * Adds a PRE_CREATE_HOSTED_CONFIGURATION_VERSION extension with the + * provided event destination and also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public preCreateHostedConfigurationVersion(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.preCreateHostedConfigurationVersion(eventDestination, options); + } + + /** + * Adds a PRE_START_DEPLOYMENT extension with the provided event destination and + * also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public preStartDeployment(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.preStartDeployment(eventDestination, options); + } + + /** + * Adds an ON_DEPLOYMENT_START extension with the provided event destination and + * also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public onDeploymentStart(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentStart(eventDestination, options); + } + + /** + * Adds an ON_DEPLOYMENT_STEP extension with the provided event destination and + * also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public onDeploymentStep(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentStep(eventDestination, options); + } + + /** + * Adds an ON_DEPLOYMENT_BAKING extension with the provided event destination and + * also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public onDeploymentBaking(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentBaking(eventDestination, options); + } + + /** + * Adds an ON_DEPLOYMENT_COMPLETE extension with the provided event destination and + * also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public onDeploymentComplete(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentComplete(eventDestination, options); + } + + /** + * Adds an ON_DEPLOYMENT_ROLLED_BACK extension with the provided event destination and + * also creates an extension association to an application. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public onDeploymentRolledBack(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentRolledBack(eventDestination, options); + } + + /** + * Adds an extension association to the application. + * + * @param extension The extension to create an association for + */ + public addExtension(extension: IExtension) { + this.extensible.addExtension(extension); + } +} + +/** + * An AWS AppConfig application. + * + * @resource AWS::AppConfig::Application + * @see https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-application.html + */ +export class Application extends ApplicationBase { + /** + * Imports an AWS AppConfig application into the CDK using its Amazon Resource Name (ARN). + * + * @param scope The parent construct + * @param id The name of the application construct + * @param applicationArn The Amazon Resource Name (ARN) of the application + */ + public static fromApplicationArn(scope: Construct, id: string, applicationArn: string): IApplication { + const parsedArn = cdk.Stack.of(scope).splitArn(applicationArn, cdk.ArnFormat.SLASH_RESOURCE_NAME); + const applicationId = parsedArn.resourceName; + if (!applicationId) { + throw new Error('Missing required application id from application ARN'); + } + + class Import extends ApplicationBase { + public readonly applicationId = applicationId!; + public readonly applicationArn = applicationArn; + protected readonly extensible = new ExtensibleBase(scope, this.applicationArn); + } + + return new Import(scope, id); + } + + /** + * Imports an AWS AppConfig application into the CDK using its ID. + * + * @param scope The parent construct + * @param id The name of the application construct + * @param applicationId The ID of the application + */ + public static fromApplicationId(scope: Construct, id: string, applicationId: string): IApplication { + const stack = cdk.Stack.of(scope); + const applicationArn = stack.formatArn({ + service: 'appconfig', + resource: 'application', + resourceName: applicationId, + }); + + class Import extends ApplicationBase { + public readonly applicationId = applicationId; + public readonly applicationArn = applicationArn; + protected readonly extensible = new ExtensibleBase(scope, this.applicationArn); + } + + return new Import(scope, id); + } + + /** + * Retrieves the Lambda layer version Amazon Resource Name (ARN) for the AWS AppConfig Lambda extension. + * + * @param region The region for the Lambda layer (for example, 'us-east-1') + * @param platform The platform for the Lambda layer (default is Platform.X86_64) + * @returns Lambda layer version ARN + */ + public static getLambdaLayerVersionArn(region: string, platform?: Platform): string { + return lambdaLayerVersions[platform || Platform.X86_64][region]; + } + + /** + * Adds the AWS AppConfig Agent as a container to the provided ECS task definition. + * + * @param taskDef The ECS task definition [disable-awslint:ref-via-interface] + */ + public static addAgentToEcs(taskDef: ecs.TaskDefinition) { + taskDef.addContainer('AppConfigAgentContainer', { + image: ecs.ContainerImage.fromRegistry('public.ecr.aws/aws-appconfig/aws-appconfig-agent:latest'), + containerName: 'AppConfigAgentContainer', + }); + } + + /** + * The description of the application. + */ + public readonly description?: string; + + /** + * The name of the application. + */ + public readonly name?: string; + + /** + * The ID of the application. + * + * @attribute + */ + public readonly applicationId: string; + + /** + * The Amazon Resource Name (ARN) of the application. + * + * @attribute + */ + public readonly applicationArn: string; + + private _application: CfnApplication; + protected extensible: ExtensibleBase; + + constructor(scope: Construct, id: string, props: ApplicationProps = {}) { + super(scope, id); + + this.description = props.description; + this.name = props.applicationName || cdk.Names.uniqueResourceName(this, { + maxLength: 64, + separator: '-', + }); + + this._application = new CfnApplication(this, 'Resource', { + name: this.name, + description: this.description, + }); + this.applicationId = this._application.ref; + this.applicationArn = cdk.Stack.of(this).formatArn({ + service: 'appconfig', + resource: 'application', + resourceName: this.applicationId, + }); + + this.extensible = new ExtensibleBase(this, this.applicationArn, this.name); + } +} + +const lambdaLayerVersions: {[key: string]: {[key: string]: string}} = { + [Platform.X86_64]: { + 'us-east-1': 'arn:aws:lambda:us-east-1:027255383542:layer:AWS-AppConfig-Extension:128', + 'us-east-2': 'arn:aws:lambda:us-east-2:728743619870:layer:AWS-AppConfig-Extension:93', + 'us-west-1': 'arn:aws:lambda:us-west-1:958113053741:layer:AWS-AppConfig-Extension:141', + 'us-west-2': 'arn:aws:lambda:us-west-2:359756378197:layer:AWS-AppConfig-Extension:161', + 'ca-central-1': 'arn:aws:lambda:ca-central-1:039592058896:layer:AWS-AppConfig-Extension:93', + 'eu-central-1': 'arn:aws:lambda:eu-central-1:066940009817:layer:AWS-AppConfig-Extension:106', + 'eu-central-2': 'arn:aws:lambda:eu-central-2:758369105281:layer:AWS-AppConfig-Extension:47', + 'eu-west-1': 'arn:aws:lambda:eu-west-1:434848589818:layer:AWS-AppConfig-Extension:125', + 'eu-west-2': 'arn:aws:lambda:eu-west-2:282860088358:layer:AWS-AppConfig-Extension:93', + 'eu-west-3': 'arn:aws:lambda:eu-west-3:493207061005:layer:AWS-AppConfig-Extension:98', + 'eu-north-1': 'arn:aws:lambda:eu-north-1:646970417810:layer:AWS-AppConfig-Extension:159', + 'eu-south-1': 'arn:aws:lambda:eu-south-1:203683718741:layer:AWS-AppConfig-Extension:83', + 'eu-south-2': 'arn:aws:lambda:eu-south-2:586093569114:layer:AWS-AppConfig-Extension:44', + 'cn-north-1': 'arn:aws-cn:lambda:cn-north-1:615057806174:layer:AWS-AppConfig-Extension:76', + 'cn-northwest-1': 'arn:aws-cn:lambda:cn-northwest-1:615084187847:layer:AWS-AppConfig-Extension:76', + 'ap-east-1': 'arn:aws:lambda:ap-east-1:630222743974:layer:AWS-AppConfig-Extension:83', + 'ap-northeast-1': 'arn:aws:lambda:ap-northeast-1:980059726660:layer:AWS-AppConfig-Extension:98', + 'ap-northeast-2': 'arn:aws:lambda:ap-northeast-2:826293736237:layer:AWS-AppConfig-Extension:108', + 'ap-northeast-3': 'arn:aws:lambda:ap-northeast-3:706869817123:layer:AWS-AppConfig-Extension:101', + 'ap-southeast-1': 'arn:aws:lambda:ap-southeast-1:421114256042:layer:AWS-AppConfig-Extension:106', + 'ap-southeast-2': 'arn:aws:lambda:ap-southeast-2:080788657173:layer:AWS-AppConfig-Extension:106', + 'ap-southeast-3': 'arn:aws:lambda:ap-southeast-3:418787028745:layer:AWS-AppConfig-Extension:79', + 'ap-southeast-4': 'arn:aws:lambda:ap-southeast-4:307021474294:layer:AWS-AppConfig-Extension:20', + 'ap-south-1': 'arn:aws:lambda:ap-south-1:554480029851:layer:AWS-AppConfig-Extension:107', + 'ap-south-2': 'arn:aws:lambda:ap-south-2:489524808438:layer:AWS-AppConfig-Extension:47', + 'sa-east-1': 'arn:aws:lambda:sa-east-1:000010852771:layer:AWS-AppConfig-Extension:128', + 'af-south-1': 'arn:aws:lambda:af-south-1:574348263942:layer:AWS-AppConfig-Extension:83', + 'il-central-1': 'arn:aws:lambda:il-central-1:895787185223:layer:AWS-AppConfig-Extension:22', + 'me-central-1': 'arn:aws:lambda:me-central-1:662846165436:layer:AWS-AppConfig-Extension:49', + 'me-south-1': 'arn:aws:lambda:me-south-1:559955524753:layer:AWS-AppConfig-Extension:85', + 'us-gov-east-1': 'arn:aws-us-gov:lambda:us-gov-east-1:946561847325:layer:AWS-AppConfig-Extension:54', + 'us-gov-west-1': 'arn:aws-us-gov:lambda:us-gov-west-1:946746059096:layer:AWS-AppConfig-Extension:54', + }, + [Platform.ARM_64]: { + 'us-east-1': 'arn:aws:lambda:us-east-1:027255383542:layer:AWS-AppConfig-Extension-Arm64:61', + 'us-east-2': 'arn:aws:lambda:us-east-2:728743619870:layer:AWS-AppConfig-Extension-Arm64:45', + 'us-west-1': 'arn:aws:lambda:us-west-1:958113053741:layer:AWS-AppConfig-Extension-Arm64:18', + 'us-west-2': 'arn:aws:lambda:us-west-2:359756378197:layer:AWS-AppConfig-Extension-Arm64:63', + 'ca-central-1': 'arn:aws:lambda:ca-central-1:039592058896:layer:AWS-AppConfig-Extension-Arm64:13', + 'eu-central-1': 'arn:aws:lambda:eu-central-1:066940009817:layer:AWS-AppConfig-Extension-Arm64:49', + 'eu-central-2': 'arn:aws:lambda:eu-central-2:758369105281:layer:AWS-AppConfig-Extension-Arm64:5', + 'eu-west-1': 'arn:aws:lambda:eu-west-1:434848589818:layer:AWS-AppConfig-Extension-Arm64:63', + 'eu-west-2': 'arn:aws:lambda:eu-west-2:282860088358:layer:AWS-AppConfig-Extension-Arm64:45', + 'eu-west-3': 'arn:aws:lambda:eu-west-3:493207061005:layer:AWS-AppConfig-Extension-Arm64:17', + 'eu-north-1': 'arn:aws:lambda:eu-north-1:646970417810:layer:AWS-AppConfig-Extension-Arm64:18', + 'eu-south-1': 'arn:aws:lambda:eu-south-1:203683718741:layer:AWS-AppConfig-Extension-Arm64:11', + 'eu-south-2': 'arn:aws:lambda:eu-south-2:586093569114:layer:AWS-AppConfig-Extension-Arm64:5', + 'ap-east-1': 'arn:aws:lambda:ap-east-1:630222743974:layer:AWS-AppConfig-Extension-Arm64:11', + 'ap-northeast-1': 'arn:aws:lambda:ap-northeast-1:980059726660:layer:AWS-AppConfig-Extension-Arm64:51', + 'ap-northeast-2': 'arn:aws:lambda:ap-northeast-2:826293736237:layer:AWS-AppConfig-Extension-Arm64:16', + 'ap-northeast-3': 'arn:aws:lambda:ap-northeast-3:706869817123:layer:AWS-AppConfig-Extension-Arm64:16', + 'ap-southeast-1': 'arn:aws:lambda:ap-southeast-1:421114256042:layer:AWS-AppConfig-Extension-Arm64:58', + 'ap-southeast-2': 'arn:aws:lambda:ap-southeast-2:080788657173:layer:AWS-AppConfig-Extension-Arm64:49', + 'ap-southeast-3': 'arn:aws:lambda:ap-southeast-3:418787028745:layer:AWS-AppConfig-Extension-Arm64:16', + 'ap-southeast-4': 'arn:aws:lambda:ap-southeast-4:307021474294:layer:AWS-AppConfig-Extension-Arm64:5', + 'ap-south-1': 'arn:aws:lambda:ap-south-1:554480029851:layer:AWS-AppConfig-Extension-Arm64:49', + 'ap-south-2': 'arn:aws:lambda:ap-south-2:489524808438:layer:AWS-AppConfig-Extension-Arm64:5', + 'sa-east-1': 'arn:aws:lambda:sa-east-1:000010852771:layer:AWS-AppConfig-Extension-Arm64:16', + 'af-south-1': 'arn:aws:lambda:af-south-1:574348263942:layer:AWS-AppConfig-Extension-Arm64:11', + 'me-central-1': 'arn:aws:lambda:me-central-1:662846165436:layer:AWS-AppConfig-Extension-Arm64:5', + 'me-south-1': 'arn:aws:lambda:me-south-1:559955524753:layer:AWS-AppConfig-Extension-Arm64:13', + 'il-central-1': 'arn:aws:lambda:il-central-1:895787185223:layer:AWS-AppConfig-Extension-Arm64:5', + }, +}; \ No newline at end of file diff --git a/packages/aws-cdk-lib/aws-appconfig/lib/configuration.ts b/packages/aws-cdk-lib/aws-appconfig/lib/configuration.ts new file mode 100644 index 0000000000000..588ea3c28686c --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/lib/configuration.ts @@ -0,0 +1,961 @@ +/* eslint-disable import/order */ +import * as fs from 'fs'; +import * as path from 'path'; +import { Construct, IConstruct } from 'constructs'; +import { CfnConfigurationProfile, CfnDeployment, CfnHostedConfigurationVersion } from './appconfig.generated'; +import { IApplication } from './application'; +import { DeploymentStrategy, IDeploymentStrategy, RolloutStrategy } from './deployment-strategy'; +import { IEnvironment } from './environment'; +import { ActionPoint, IEventDestination, ExtensionOptions, IExtension, IExtensible, ExtensibleBase } from './extension'; +import { getHash } from './private/hash'; +import * as cp from '../../aws-codepipeline'; +import * as iam from '../../aws-iam'; +import * as kms from '../../aws-kms'; +import * as lambda from '../../aws-lambda'; +import * as s3 from '../../aws-s3'; +import * as sm from '../../aws-secretsmanager'; +import * as ssm from '../../aws-ssm'; +import { PhysicalName, Stack, ArnFormat, Names, RemovalPolicy } from '../../core'; +import * as mimeTypes from 'mime-types'; + +/** + * Options for the Configuration construct + */ +export interface ConfigurationOptions { + /** + * The deployment strategy for the configuration. + * + * @default - A deployment strategy with the rollout strategy set to + * RolloutStrategy.CANARY_10_PERCENT_20_MINUTES + */ + readonly deploymentStrategy?: IDeploymentStrategy; + + /** + * The name of the configuration. + * + * @default - A name is generated. + */ + readonly name?: string; + + /** + * The validators for the configuration. + * + * @default - No validators. + */ + readonly validators?: IValidator[]; + + /** + * The description of the configuration. + * + * @default - No description. + */ + readonly description?: string; + + /** + * The type of configuration. + * + * @default ConfigurationType.FREEFORM + */ + readonly type?: ConfigurationType; + + /** + * The list of environments to deploy the configuration to. + * + * If this parameter is not specified, then there will be no + * deployment. + * + * @default - None. + */ + readonly deployTo?: IEnvironment[]; + + /** + * The deployment key of the configuration. + * + * @default - None. + */ + readonly deploymentKey?: kms.IKey; +} + +/** + * Properties for the Configuration construct. + */ +export interface ConfigurationProps extends ConfigurationOptions { + /** + * The application associated with the configuration. + */ + readonly application: IApplication; +} + +export interface IConfiguration extends IConstruct { + /** + * The deployment strategy for the configuration. + */ + readonly deploymentStrategy?: IDeploymentStrategy; + + /** + * The configuration version number. + */ + readonly versionNumber?: string; + + /** + * The application associated with the configuration. + */ + readonly application: IApplication; + + /** + * The name of the configuration. + */ + readonly name?: string; + + /** + * The validators for the configuration. + */ + readonly validators?: IValidator[]; + + /** + * The description of the configuration. + */ + readonly description?: string; + + /** + * The configuration type. + */ + readonly type?: ConfigurationType; + + /** + * The environments to deploy to. + */ + readonly deployTo?: IEnvironment[]; + + /** + * The deployment key for the configuration. + */ + readonly deploymentKey?: kms.IKey; + + /** + * The ID of the configuration profile. + */ + readonly configurationProfileId: string; +} + +abstract class ConfigurationBase extends Construct implements IConfiguration, IExtensible { + public abstract readonly versionNumber?: string; + public abstract readonly configurationProfileId: string; + + /** + * The application associated with the configuration. + */ + public readonly application: IApplication; + + /** + * The environments to deploy to. + */ + public readonly deployTo?: IEnvironment[]; + + /** + * The name of the configuration. + */ + public readonly name?: string; + + /** + * The validators for the configuration. + */ + public readonly validators?: IValidator[]; + + /** + * The description of the configuration. + */ + public readonly description?: string; + + /** + * The configuration type. + */ + public readonly type?: ConfigurationType; + + /** + * The deployment key for the configuration. + */ + public readonly deploymentKey?: kms.IKey; + + /** + * The deployment strategy for the configuration. + */ + readonly deploymentStrategy?: IDeploymentStrategy; + + protected applicationId: string; + protected extensible!: ExtensibleBase; + + constructor(scope: Construct, id: string, props: ConfigurationProps) { + super(scope, id); + + this.name = props.name || Names.uniqueResourceName(this, { + maxLength: 128, + separator: '-', + }); + this.application = props.application; + this.applicationId = this.application.applicationId; + this.type = props.type; + this.validators = props.validators; + this.description = props.description; + this.deployTo = props.deployTo; + this.deploymentKey = props.deploymentKey; + this.deploymentStrategy = props.deploymentStrategy || new DeploymentStrategy(this, 'DeploymentStrategy', { + rolloutStrategy: RolloutStrategy.CANARY_10_PERCENT_20_MINUTES, + }); + } + + /** + * Adds an extension defined by the action point and event destination + * and also creates an extension association to the configuration profile. + * + * @param actionPoint The action point which triggers the event + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public on(actionPoint: ActionPoint, eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.on(actionPoint, eventDestination, options); + } + + /** + * Adds a PRE_CREATE_HOSTED_CONFIGURATION_VERSION extension with the + * provided event destination and also creates an extension association to the configuration profile. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public preCreateHostedConfigurationVersion(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.preCreateHostedConfigurationVersion(eventDestination, options); + } + + /** + * Adds a PRE_START_DEPLOYMENT extension with the provided event destination + * and also creates an extension association to the configuration profile. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public preStartDeployment(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.preStartDeployment(eventDestination, options); + } + + /** + * Adds an ON_DEPLOYMENT_START extension with the provided event destination + * and also creates an extension association to the configuration profile. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public onDeploymentStart(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentStart(eventDestination, options); + } + + /** + * Adds an ON_DEPLOYMENT_STEP extension with the provided event destination + * and also creates an extension association to the configuration profile. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public onDeploymentStep(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentStep(eventDestination, options); + } + + /** + * Adds an ON_DEPLOYMENT_BAKING extension with the provided event destination and + * also creates an extension association to the configuration profile. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public onDeploymentBaking(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentBaking(eventDestination, options); + } + + /** + * Adds an ON_DEPLOYMENT_COMPLETE extension with the provided event destination + * and also creates an extension association to the configuration profile. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public onDeploymentComplete(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentComplete(eventDestination, options); + } + + /** + * Adds an ON_DEPLOYMENT_ROLLED_BACK extension with the provided event destination + * and also creates an extension association to the configuration profile. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + public onDeploymentRolledBack(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentRolledBack(eventDestination, options); + } + + /** + * Adds an extension association to the configuration profile. + * + * @param extension The extension to create an association for + */ + public addExtension(extension: IExtension) { + this.extensible.addExtension(extension); + } + + protected addExistingEnvironmentsToApplication() { + this.deployTo?.forEach((environment) => { + if (!this.application.environments.includes(environment)) { + this.application.addExistingEnvironment(environment); + } + }); + } + + protected deployConfigToEnvironments() { + if (!this.deployTo || !this.versionNumber) { + return; + } + + this.application.environments.forEach((environment) => { + if ((this.deployTo && !this.deployTo.includes(environment))) { + return; + } + new CfnDeployment(this, `Deployment${getHash(environment.name!)}`, { + applicationId: this.application.applicationId, + configurationProfileId: this.configurationProfileId, + deploymentStrategyId: this.deploymentStrategy!.deploymentStrategyId, + environmentId: environment.environmentId, + configurationVersion: this.versionNumber!, + description: this.description, + kmsKeyIdentifier: this.deploymentKey?.keyArn, + }); + }); + } +} + +/** + * Options for HostedConfiguration + */ +export interface HostedConfigurationOptions extends ConfigurationOptions { + /** + * The content of the hosted configuration. + */ + readonly content: ConfigurationContent; + + /** + * The latest version number of the hosted configuration. + * + * @default - None. + */ + readonly latestVersionNumber?: number; + + /** + * The version label of the hosted configuration. + * + * @default - None. + */ + readonly versionLabel?: string; +} + +/** + * Properties for HostedConfiguration + */ +export interface HostedConfigurationProps extends ConfigurationProps { + /** + * The content of the hosted configuration. + */ + readonly content: ConfigurationContent; + + /** + * The latest version number of the hosted configuration. + * + * @default - None. + */ + readonly latestVersionNumber?: number; + + /** + * The version label of the hosted configuration. + * + * @default - None. + */ + readonly versionLabel?: string; +} + +/** + * A hosted configuration represents configuration stored in the AWS AppConfig hosted configuration store. + */ +export class HostedConfiguration extends ConfigurationBase { + /** + * The content of the hosted configuration. + */ + public readonly content: string; + + /** + * The content type of the hosted configuration. + */ + public readonly contentType?: string; + + /** + * The latest version number of the hosted configuration. + */ + public readonly latestVersionNumber?: number; + + /** + * The version label of the hosted configuration. + */ + public readonly versionLabel?: string; + + /** + * The version number of the hosted configuration. + */ + public readonly versionNumber?: string; + + /** + * The Amazon Resource Name (ARN) of the hosted configuration version. + */ + public readonly hostedConfigurationVersionArn: string; + + /** + * The ID of the configuration profile. + */ + public readonly configurationProfileId: string; + + /** + * The Amazon Resource Name (ARN) of the configuration profile. + */ + public readonly configurationProfileArn: string; + + private readonly _cfnConfigurationProfile: CfnConfigurationProfile; + private readonly _cfnHostedConfigurationVersion: CfnHostedConfigurationVersion; + + constructor(scope: Construct, id: string, props: HostedConfigurationProps) { + super(scope, id, props); + + this._cfnConfigurationProfile = new CfnConfigurationProfile(this, 'ConfigurationProfile', { + applicationId: this.applicationId, + locationUri: 'hosted', + name: this.name!, + description: this.description, + type: this.type, + validators: this.validators, + }); + this.configurationProfileId = this._cfnConfigurationProfile.ref; + this.configurationProfileArn = Stack.of(this).formatArn({ + service: 'appconfig', + resource: 'application', + resourceName: `${this.applicationId}/configurationprofile/${this.configurationProfileId}`, + }); + this.extensible = new ExtensibleBase(this, this.configurationProfileArn, this.name); + + this.content = props.content.content; + this.contentType = props.content.contentType; + this.latestVersionNumber = props.latestVersionNumber; + this.versionLabel = props.versionLabel; + this._cfnHostedConfigurationVersion = new CfnHostedConfigurationVersion(this, 'Resource', { + applicationId: this.applicationId, + configurationProfileId: this.configurationProfileId, + content: this.content, + contentType: this.contentType, + description: this.description, + latestVersionNumber: this.latestVersionNumber, + versionLabel: this.versionLabel, + }); + this._cfnHostedConfigurationVersion.applyRemovalPolicy(RemovalPolicy.RETAIN); + + this.versionNumber = this._cfnHostedConfigurationVersion.ref; + this.hostedConfigurationVersionArn = Stack.of(this).formatArn({ + service: 'appconfig', + resource: 'application', + resourceName: `${this.applicationId}/configurationprofile/${this.configurationProfileId}/hostedconfigurationversion/${this.versionNumber}`, + }); + + this.addExistingEnvironmentsToApplication(); + this.deployConfigToEnvironments(); + } +} + +/** + * Options for SourcedConfiguration + */ +export interface SourcedConfigurationOptions extends ConfigurationOptions { + /** + * The location where the configuration is stored. + */ + readonly location: ConfigurationSource; + + /** + * The version number of the sourced configuration to deploy. If this is not specified, + * then there will be no deployment. + * + * @default - None. + */ + readonly versionNumber?: string; + + /** + * The IAM role to retrieve the configuration. + * + * @default - A role is generated. + */ + readonly retrievalRole?: iam.IRole; +} + +/** + * Properties for SourcedConfiguration. + */ +export interface SourcedConfigurationProps extends ConfigurationProps { + /** + * The location where the configuration is stored. + */ + readonly location: ConfigurationSource; + + /** + * The version number of the sourced configuration to deploy. If this is not specified, + * then there will be no deployment. + * + * @default - None. + */ + readonly versionNumber?: string; + + /** + * The IAM role to retrieve the configuration. + * + * @default - A role is generated. + */ + readonly retrievalRole?: iam.IRole; +} + +/** + * A sourced configuration represents configuration stored in an Amazon S3 bucket, AWS Secrets Manager secret, Systems Manager + * (SSM) Parameter Store parameter, SSM document, or AWS CodePipeline. + */ +export class SourcedConfiguration extends ConfigurationBase { + /** + * The location where the configuration is stored. + */ + public readonly location: ConfigurationSource; + + /** + * The version number of the configuration to deploy. + */ + public readonly versionNumber?: string; + + /** + * The IAM role to retrieve the configuration. + */ + public readonly retrievalRole?: iam.IRole; + + /** + * The key to decrypt the configuration if applicable. This key + * can be used when storing configuration in AWS Secrets Manager, Systems Manager Parameter Store, + * or Amazon S3. + */ + public readonly sourceKey?: kms.IKey; + + /** + * The ID of the configuration profile. + */ + public readonly configurationProfileId: string; + + /** + * The Amazon Resource Name (ARN) of the configuration profile. + */ + public readonly configurationProfileArn: string; + + private readonly locationUri: string; + private readonly _cfnConfigurationProfile: CfnConfigurationProfile; + + constructor (scope: Construct, id: string, props: SourcedConfigurationProps) { + super(scope, id, props); + + this.location = props.location; + this.locationUri = this.location.locationUri; + this.versionNumber = props.versionNumber; + this.sourceKey = this.location.key; + this.retrievalRole = props.retrievalRole || this.location.type != ConfigurationSourceType.CODE_PIPELINE + ? new iam.Role(this, 'Role', { + roleName: PhysicalName.GENERATE_IF_NEEDED, + assumedBy: new iam.ServicePrincipal('appconfig.amazonaws.com'), + inlinePolicies: { + ['AllowAppConfigReadFromSourcePolicy']: this.getPolicyForRole(), + }, + }) + : undefined; + + this._cfnConfigurationProfile = new CfnConfigurationProfile(this, 'Resource', { + applicationId: this.applicationId, + locationUri: this.locationUri, + name: this.name!, + description: this.description, + retrievalRoleArn: this.retrievalRole?.roleArn, + type: this.type, + validators: this.validators, + }); + + this.configurationProfileId = this._cfnConfigurationProfile.ref; + this.configurationProfileArn = Stack.of(this).formatArn({ + service: 'appconfig', + resource: 'application', + resourceName: `${this.applicationId}/configurationprofile/${this.configurationProfileId}`, + }); + this.extensible = new ExtensibleBase(this, this.configurationProfileArn, this.name); + + this.addExistingEnvironmentsToApplication(); + this.deployConfigToEnvironments(); + } + + private getPolicyForRole(): iam.PolicyDocument { + const policy = new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + }); + const document = new iam.PolicyDocument({ + statements: [policy], + }); + + if (this.location.type == ConfigurationSourceType.SSM_PARAMETER) { + policy.addActions('ssm:GetParameter'); + policy.addResources(this.locationUri); + } else if (this.location.type == ConfigurationSourceType.SSM_DOCUMENT) { + policy.addActions('ssm:GetDocument'); + policy.addResources(Stack.of(this).formatArn({ + service: 'ssm', + resource: 'document', + resourceName: this.locationUri.split('://')[1], + })); + } else if (this.location.type == ConfigurationSourceType.S3) { + const bucketAndObjectKey = this.locationUri.split('://')[1]; + const sep = bucketAndObjectKey.search('/'); + const bucketName = bucketAndObjectKey.substring(0, sep); + const objectKey = bucketAndObjectKey.substring(sep + 1); + policy.addActions( + 's3:GetObject', + 's3:GetObjectMetadata', + 's3:GetObjectVersion', + ); + policy.addResources(Stack.of(this).formatArn({ + region: '', + account: '', + service: 's3', + arnFormat: ArnFormat.NO_RESOURCE_NAME, + resource: `${bucketName}/${objectKey}`, + })); + const bucketPolicy = new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: [ + 's3:GetBucketLocation', + 's3:GetBucketVersioning', + 's3:ListBucket', + 's3:ListBucketVersions', + ], + resources: [ + Stack.of(this).formatArn({ + region: '', + account: '', + service: 's3', + arnFormat: ArnFormat.NO_RESOURCE_NAME, + resource: bucketName, + }), + ], + }); + const listBucketsPolicy = new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['s3:ListAllMyBuckets'], + resources: ['*'], + }); + document.addStatements(bucketPolicy, listBucketsPolicy); + } else { + policy.addActions('secretsmanager:GetSecretValue'); + policy.addResources(this.locationUri); + } + + if (this.sourceKey) { + const keyPolicy = new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['kms:Decrypt'], + resources: [this.sourceKey.keyArn], + }); + document.addStatements(keyPolicy); + } + + return document; + } +} + +/** + * The configuration type. + */ +export enum ConfigurationType { + /** + * Freeform configuration profile. Allows you to store your data in the AWS AppConfig + * hosted configuration store or another Systems Manager capability or AWS service that integrates + * with AWS AppConfig. + * + * @see https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-free-form-configurations-creating.html + */ + FREEFORM = 'AWS.Freeform', + + /** + * Feature flag configuration profile. This configuration stores its data + * in the AWS AppConfig hosted configuration store and the URI is simply hosted. + */ + FEATURE_FLAGS = 'AWS.AppConfig.FeatureFlags', +} + +/** + * The validator type. + */ +export enum ValidatorType { + /** + * JSON Scema validator. + */ + JSON_SCHEMA = 'JSON_SCHEMA', + + /** + * Validate using a Lambda function. + */ + LAMBDA = 'LAMBDA', +} + +/** + * The configuration source type. + */ +export enum ConfigurationSourceType { + S3 = 'S3', + SECRETS_MANAGER = 'SECRETS_MANAGER', + SSM_PARAMETER = 'SSM_PARAMETER', + SSM_DOCUMENT = 'SSM_DOCUMENT', + CODE_PIPELINE = 'CODE_PIPELINE', +} + +export interface IValidator { + /** + * The content of the validator. + */ + readonly content: string; + + /** + * The type of validator. + */ + readonly type: ValidatorType; +} + +/** + * Defines a JSON Schema validator. + */ +export abstract class JsonSchemaValidator implements IValidator { + /** + * Defines a JSON Schema validator from a file. + * + * @param inputPath The path to the file that defines the validator + */ + public static fromFile(inputPath: string): JsonSchemaValidator { + return { + content: fs.readFileSync(path.resolve(inputPath)).toString(), + type: ValidatorType.JSON_SCHEMA, + }; + } + + /** + * Defines a JSON Schema validator from inline code. + * + * @param code The inline code that defines the validator + */ + public static fromInline(code: string): JsonSchemaValidator { + return { + content: code, + type: ValidatorType.JSON_SCHEMA, + }; + } + + public abstract readonly content: string; + public abstract readonly type: ValidatorType; +} + +/** + * Defines an AWS Lambda validator. + */ +export abstract class LambdaValidator implements IValidator { + /** + * Defines an AWS Lambda validator from a Lambda function. This will call + * `addPermission` to your function to grant AWS AppConfig permissions. + * + * @param func The function that defines the validator + */ + public static fromFunction(func: lambda.Function): LambdaValidator { + if (!func.permissionsNode.tryFindChild('AppConfigPermission')) { + func.addPermission('AppConfigPermission', { + principal: new iam.ServicePrincipal('appconfig.amazonaws.com'), + }); + } + return { + content: func.functionArn, + type: ValidatorType.LAMBDA, + }; + } + + public abstract readonly content: string; + public abstract readonly type: ValidatorType; +} + +/** + * Defines the hosted configuration content. + */ +export abstract class ConfigurationContent { + /** + * Defines the hosted configuration content from a file. + * + * @param inputPath The path to the file that defines configuration content + * @param contentType The content type of the configuration + */ + public static fromFile(inputPath: string, contentType?: string): ConfigurationContent { + return { + content: fs.readFileSync(path.resolve(inputPath)).toString(), + contentType: contentType || mimeTypes.lookup(inputPath) || 'application/json', + }; + } + + /** + * Defines the hosted configuration content from inline code. + * + * @param content The inline code that defines the configuration content + * @param contentType The content type of the configuration + */ + public static fromInline(content: string, contentType?: string): ConfigurationContent { + return { + content, + contentType: contentType || 'application/octet-stream', + }; + } + + /** + * Defines the hosted configuration content as JSON from inline code. + * + * @param content The inline code that defines the configuration content + * @param contentType The content type of the configuration + */ + public static fromInlineJson(content: string, contentType?: string): ConfigurationContent { + return { + content, + contentType: contentType || 'application/json', + }; + } + + /** + * Defines the hosted configuration content as text from inline code. + * + * @param content The inline code that defines the configuration content + */ + public static fromInlineText(content: string): ConfigurationContent { + return { + content, + contentType: 'text/plain', + }; + } + + /** + * Defines the hosted configuration content as YAML from inline code. + * + * @param content The inline code that defines the configuration content + */ + public static fromInlineYaml(content: string): ConfigurationContent { + return { + content, + contentType: 'application/x-yaml', + }; + } + + /** + * The configuration content. + */ + public abstract readonly content: string; + + /** + * The configuration content type. + */ + public abstract readonly contentType: string; +} + +/** + * Defines the integrated configuration sources. + */ +export abstract class ConfigurationSource { + /** + * Defines configuration content from an Amazon S3 bucket. + * + * @param bucket The S3 bucket where the configuration is stored + * @param objectKey The path to the configuration + * @param key The KMS Key that the bucket is encrypted with + */ + public static fromBucket(bucket: s3.IBucket, objectKey: string, key?: kms.IKey): ConfigurationSource { + return { + locationUri: bucket.s3UrlForObject(objectKey), + type: ConfigurationSourceType.S3, + key, + }; + } + + /** + * Defines configuration content from an AWS Secrets Manager secret. + * + * @param secret The secret where the configuration is stored + */ + public static fromSecret(secret: sm.ISecret): ConfigurationSource { + return { + locationUri: secret.secretArn, + type: ConfigurationSourceType.SECRETS_MANAGER, + key: secret.encryptionKey, + }; + } + + /** + * Defines configuration content from a Systems Manager (SSM) Parameter Store parameter. + * + * @param parameter The parameter where the configuration is stored + * @param key The KMS Key that the secure string is encrypted with + */ + public static fromParameter(parameter: ssm.IParameter, key?: kms.IKey): ConfigurationSource { + return { + locationUri: parameter.parameterArn, + type: ConfigurationSourceType.SSM_PARAMETER, + key, + }; + } + + /** + * Defines configuration content from a Systems Manager (SSM) document. + * + * @param document The SSM document where the configuration is stored + */ + public static fromCfnDocument(document: ssm.CfnDocument): ConfigurationSource { + return { + locationUri: `ssm-document://${document.ref}`, + type: ConfigurationSourceType.SSM_DOCUMENT, + }; + } + + /** + * Defines configuration content from AWS CodePipeline. + * + * @param pipeline The pipeline where the configuration is stored + * @returns + */ + public static fromPipeline(pipeline: cp.IPipeline): ConfigurationSource { + return { + locationUri: `codepipeline://${pipeline.pipelineName}`, + type: ConfigurationSourceType.CODE_PIPELINE, + }; + } + + /** + * The URI of the configuration source. + */ + public abstract readonly locationUri: string; + + /** + * The type of the configuration source. + */ + public abstract readonly type: ConfigurationSourceType; + + /** + * The KMS Key that encrypts the configuration. + */ + public abstract readonly key?: kms.IKey; +} diff --git a/packages/aws-cdk-lib/aws-appconfig/lib/deployment-strategy.ts b/packages/aws-cdk-lib/aws-appconfig/lib/deployment-strategy.ts new file mode 100644 index 0000000000000..bcbe715e14e15 --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/lib/deployment-strategy.ts @@ -0,0 +1,400 @@ +import { Construct } from 'constructs'; +import { CfnDeploymentStrategy } from './appconfig.generated'; +import { Resource, IResource, Stack, ArnFormat, Names, Duration } from '../../core'; + +/** + * Properties for DeploymentStrategy. + */ +export interface DeploymentStrategyProps { + /** + * The rollout strategy for the deployment strategy. You can use predefined deployment + * strategies, such as RolloutStrategy.ALL_AT_ONCE, RolloutStrategy.LINEAR_50_PERCENT_EVERY_30_SECONDS, + * or RolloutStrategy.CANARY_10_PERCENT_20_MINUTES. + */ + readonly rolloutStrategy: RolloutStrategy; + + /** + * A name for the deployment strategy. + * + * @default - A name is generated. + */ + readonly deploymentStrategyName?: string; + + /** + * A description of the deployment strategy. + * + * @default - No description. + */ + readonly description?: string; +} + +/** + * An AWS AppConfig deployment strategy. + * + * @resource AWS::AppConfig::DeploymentStrategy + * @see https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-deployment-strategy.html + */ +export class DeploymentStrategy extends Resource implements IDeploymentStrategy { + /** + * Imports a deployment strategy into the CDK using its Amazon Resource Name (ARN). + * + * @param scope The parent construct + * @param id The name of the deployment strategy construct + * @param deploymentStrategyArn The Amazon Resource Name (ARN) of the deployment strategy + */ + public static fromDeploymentStrategyArn(scope: Construct, id: string, deploymentStrategyArn: string): IDeploymentStrategy { + const parsedArn = Stack.of(scope).splitArn(deploymentStrategyArn, ArnFormat.SLASH_RESOURCE_NAME); + const deploymentStrategyId = parsedArn.resourceName; + if (!deploymentStrategyId) { + throw new Error('Missing required deployment strategy id from deployment strategy ARN'); + } + + class Import extends Resource implements IDeploymentStrategy { + public readonly deploymentStrategyId = deploymentStrategyId!; + public readonly deploymentStrategyArn = deploymentStrategyArn; + } + + return new Import(scope, id, { + environmentFromArn: deploymentStrategyArn, + }); + } + + /** + * Imports a deployment strategy into the CDK using its ID. + * + * @param scope The parent construct + * @param id The name of the deployment strategy construct + * @param deploymentStrategyId The ID of the deployment strategy + */ + public static fromDeploymentStrategyId(scope: Construct, id: string, deploymentStrategyId: DeploymentStrategyId): IDeploymentStrategy { + const stack = Stack.of(scope); + const deploymentStrategyArn = stack.formatArn({ + service: 'appconfig', + resource: 'deploymentstrategy', + resourceName: deploymentStrategyId.id, + }); + + class Import extends Resource implements IDeploymentStrategy { + public readonly deploymentStrategyId = deploymentStrategyId.id; + public readonly deploymentStrategyArn = deploymentStrategyArn; + } + + return new Import(scope, id, { + environmentFromArn: deploymentStrategyArn, + }); + } + + /** + * The name of the deployment strategy. + */ + public readonly name?: string; + + /** + * The deployment duration in minutes of the deployment strategy. + */ + public readonly deploymentDurationInMinutes?: number; + + /** + * The growth factor of the deployment strategy. + */ + public readonly growthFactor?: number; + + /** + * The description of the deployment strategy. + */ + public readonly description?: string; + + /** + * The final bake time in minutes of the deployment strategy. + */ + public readonly finalBakeTimeInMinutes?: number; + + /** + * The growth type of the deployment strategy. + */ + public readonly growthType?: GrowthType; + + /** + * The ID of the deployment strategy. + */ + public readonly deploymentStrategyId: string; + + /** + * The Amazon Resource Name (ARN) of the deployment strategy. + * + * @attribute + */ + public readonly deploymentStrategyArn: string; + + private readonly _cfnDeploymentStrategy: CfnDeploymentStrategy; + + constructor(scope: Construct, id: string, props: DeploymentStrategyProps) { + super(scope, id, { + physicalName: props.deploymentStrategyName, + }); + + this.deploymentDurationInMinutes = props.rolloutStrategy.deploymentDuration.toMinutes(); + this.growthFactor = props.rolloutStrategy.growthFactor; + this.description = props.description; + this.finalBakeTimeInMinutes = props.rolloutStrategy.finalBakeTime?.toMinutes(); + this.growthType = props.rolloutStrategy.growthType; + this.name = props.deploymentStrategyName || Names.uniqueResourceName(this, { + maxLength: 64, + separator: '-', + }); + + const resource = new CfnDeploymentStrategy(this, 'Resource', { + name: this.name, + deploymentDurationInMinutes: this.deploymentDurationInMinutes, + growthFactor: this.growthFactor, + replicateTo: 'NONE', + description: this.description, + finalBakeTimeInMinutes: this.finalBakeTimeInMinutes, + growthType: this.growthType, + }); + this._cfnDeploymentStrategy = resource; + + this.deploymentStrategyId = this._cfnDeploymentStrategy.ref; + this.deploymentStrategyArn = this.stack.formatArn({ + service: 'appconfig', + resource: 'deploymentstrategy', + resourceName: this.deploymentStrategyId, + }); + } +} + +/** + * Defines the growth type of the deployment strategy. + */ +export enum GrowthType { + /** + * AWS AppConfig will process the deployment by increments of the growth factor + * evenly distributed over the deployment. + */ + LINEAR = 'LINEAR', + + /** + * AWS AppConfig will process the deployment exponentially using the following formula: + * `G*(2^N)`. In this formula, `G` is the step percentage specified by the user and `N` + * is the number of steps until the configuration is deployed to all targets. + */ + EXPONENTIAL = 'EXPONENTIAL', +} + +/** + * Defines the deployment strategy ID's of AWS AppConfig deployment strategies. + * + * @see https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-deployment-strategy.html + */ +export abstract class DeploymentStrategyId { + /** + * **AWS Recommended**. This strategy processes the deployment exponentially using a 10% growth factor over 20 minutes. + * AWS AppConfig recommends using this strategy for production deployments because it aligns with AWS best practices + * for configuration deployments. + */ + public static readonly CANARY_10_PERCENT_20_MINUTES = DeploymentStrategyId.fromString('AppConfig.Canary10Percent20Minutes'); + + /** + * **Testing/Demonstration**. This strategy deploys the configuration to half of all targets every 30 seconds for a + * one-minute deployment. AWS AppConfig recommends using this strategy only for testing or demonstration purposes because + * it has a short duration and bake time. + */ + public static readonly LINEAR_50_PERCENT_EVERY_30_SECONDS = DeploymentStrategyId.fromString('AppConfig.Linear50PercentEvery30Seconds'); + + /** + * **AWS Recommended**. This strategy deploys the configuration to 20% of all targets every six minutes for a 30 minute deployment. + * AWS AppConfig recommends using this strategy for production deployments because it aligns with AWS best practices + * for configuration deployments. + */ + public static readonly LINEAR_20_PERCENT_EVERY_6_MINUTES = DeploymentStrategyId.fromString('AppConfig.Linear20PercentEvery6Minutes'); + + /** + * **Quick**. This strategy deploys the configuration to all targets immediately. + */ + public static readonly ALL_AT_ONCE = DeploymentStrategyId.fromString('AppConfig.AllAtOnce'); + + /** + * Builds a deployment strategy ID from a string. + * + * @param deploymentStrategyId The deployment strategy ID. + */ + public static fromString(deploymentStrategyId: string): DeploymentStrategyId { + return { + id: deploymentStrategyId, + }; + } + + /** + * The deployment strategy ID. + */ + public abstract readonly id: string; +} + +/** + * Properties for the Rollout Strategy. + */ +export interface RolloutStrategyProps { + /** + * The growth factor of the deployment strategy. This defines + * the percentage of targets to receive a deployed configuration + * during each interval. + */ + readonly growthFactor: number; + + /** + * The deployment duration of the deployment strategy. This defines + * the total amount of time for a deployment to last. + */ + readonly deploymentDuration: Duration; + + /** + * The final bake time of the deployment strategy. + * + * This setting specifies the amount of time AWS AppConfig monitors for Amazon + * CloudWatch alarms after the configuration has been deployed to + * 100% of its targets, before considering the deployment to be complete. + * If an alarm is triggered during this time, AWS AppConfig rolls back + * the deployment. + * + * @default Duration.minutes(0) + */ + readonly finalBakeTime?: Duration; +} + +/** + * Defines the rollout strategy for a deployment strategy and includes the growth factor, + * deployment duration, growth type, and optionally final bake time. + * + * @see https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-deployment-strategy.html + */ +export abstract class RolloutStrategy { + /** + * **AWS Recommended**. This strategy processes the deployment exponentially using a 10% growth factor over 20 minutes. + * AWS AppConfig recommends using this strategy for production deployments because it aligns with AWS best practices + * for configuration deployments. + */ + public static readonly CANARY_10_PERCENT_20_MINUTES = RolloutStrategy.exponential({ + growthFactor: 10, + deploymentDuration: Duration.minutes(20), + finalBakeTime: Duration.minutes(10), + }); + + /** + * **Testing/Demonstration**. This strategy deploys the configuration to half of all targets every 30 seconds for a + * one-minute deployment. AWS AppConfig recommends using this strategy only for testing or demonstration purposes because + * it has a short duration and bake time. + */ + public static readonly LINEAR_50_PERCENT_EVERY_30_SECONDS = RolloutStrategy.linear({ + growthFactor: 50, + deploymentDuration: Duration.minutes(1), + finalBakeTime: Duration.minutes(1), + }); + + /** + * **AWS Recommended**. This strategy deploys the configuration to 20% of all targets every six minutes for a 30 minute deployment. + * AWS AppConfig recommends using this strategy for production deployments because it aligns with AWS best practices + * for configuration deployments. + */ + public static readonly LINEAR_20_PERCENT_EVERY_6_MINUTES = RolloutStrategy.linear({ + growthFactor: 20, + deploymentDuration: Duration.minutes(30), + finalBakeTime: Duration.minutes(30), + }); + + /** + * **Quick**. This strategy deploys the configuration to all targets immediately. + */ + public static readonly ALL_AT_ONCE = RolloutStrategy.linear({ + growthFactor: 100, + deploymentDuration: Duration.minutes(0), + finalBakeTime: Duration.minutes(10), + }); + + /** + * Build your own linear rollout strategy. + */ + public static linear(props: RolloutStrategyProps): RolloutStrategy { + return { + growthFactor: props.growthFactor, + deploymentDuration: props.deploymentDuration, + growthType: GrowthType.LINEAR, + finalBakeTime: props.finalBakeTime, + }; + } + + /** + * Build your own exponential rollout strategy. + */ + public static exponential(props: RolloutStrategyProps): RolloutStrategy { + return { + growthFactor: props.growthFactor, + deploymentDuration: props.deploymentDuration, + growthType: GrowthType.EXPONENTIAL, + finalBakeTime: props.finalBakeTime, + }; + } + + /** + * The growth factor of the rollout strategy. + */ + public abstract readonly growthFactor: number; + + /** + * The deployment duration of the rollout strategy. + */ + public abstract readonly deploymentDuration: Duration; + + /** + * The growth type of the rollout strategy. + */ + public abstract readonly growthType?: GrowthType; + + /** + * The final bake time of the deployment strategy. + */ + public abstract readonly finalBakeTime?: Duration; +} + +export interface IDeploymentStrategy extends IResource { + /** + * The name of the deployment strategy. + */ + readonly name?: string; + + /** + * The deployment duration in minutes. + */ + readonly deploymentDurationInMinutes?: number; + + /** + * The growth factor of the deployment strategy. + */ + readonly growthFactor?: number; + + /** + * The description of the deployment strategy. + */ + readonly description?: string; + + /** + * The final bake time in minutes. + */ + readonly finalBakeTimeInMinutes?: number; + + /** + * The growth type of the deployment strategy. + */ + readonly growthType?: GrowthType; + + /** + * The ID of the deployment strategy. + * @attribute + */ + readonly deploymentStrategyId: string; + + /** + * The Amazon Resource Name (ARN) of the deployment strategy. + * @attribute + */ + readonly deploymentStrategyArn: string; +} diff --git a/packages/aws-cdk-lib/aws-appconfig/lib/environment.ts b/packages/aws-cdk-lib/aws-appconfig/lib/environment.ts new file mode 100644 index 0000000000000..437f267c1b366 --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/lib/environment.ts @@ -0,0 +1,495 @@ +import { Construct } from 'constructs'; +import { CfnEnvironment } from './appconfig.generated'; +import { IApplication } from './application'; +import { ActionPoint, IEventDestination, ExtensionOptions, IExtension, IExtensible, ExtensibleBase } from './extension'; +import { getHash } from './private/hash'; +import * as cloudwatch from '../../aws-cloudwatch'; +import * as iam from '../../aws-iam'; +import { Resource, IResource, Stack, ArnFormat, PhysicalName, Names } from '../../core'; + +/** + * Attributes of an existing AWS AppConfig environment to import it. + */ +export interface EnvironmentAttributes { + /** + * The application associated with the environment. + */ + readonly application: IApplication; + + /** + * The ID of the environment. + */ + readonly environmentId: string; + + /** + * The name of the environment. + * + * @default - None. + */ + readonly name?: string; + + /** + * The description of the environment. + * + * @default - None. + */ + readonly description?: string; + + /** + * The monitors for the environment. + * + * @default - None. + */ + readonly monitors?: Monitor[]; +} + +abstract class EnvironmentBase extends Resource implements IEnvironment, IExtensible { + public abstract applicationId: string; + public abstract environmentId: string; + public abstract environmentArn: string; + protected extensible!: ExtensibleBase; + + public on(actionPoint: ActionPoint, eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.on(actionPoint, eventDestination, options); + } + + public preCreateHostedConfigurationVersion(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.preCreateHostedConfigurationVersion(eventDestination, options); + } + + public preStartDeployment(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.preStartDeployment(eventDestination, options); + } + + public onDeploymentStart(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentStart(eventDestination, options); + } + + public onDeploymentStep(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentStep(eventDestination, options); + } + + public onDeploymentBaking(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentBaking(eventDestination, options); + } + + public onDeploymentComplete(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentComplete(eventDestination, options); + } + + public onDeploymentRolledBack(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.extensible.onDeploymentRolledBack(eventDestination, options); + } + + public addExtension(extension: IExtension) { + this.extensible.addExtension(extension); + } +} + +/** + * Options for the Environment construct. + */ +export interface EnvironmentOptions { + /** + * The name of the environment. + * + * @default - A name is generated. + */ + readonly environmentName?: string; + + /** + * The description of the environment. + * + * @default - No description. + */ + readonly description?: string; + + /** + * The monitors for the environment. + * + * @default - No monitors. + */ + readonly monitors?: Monitor[]; +} + +/** + * Properties for the Environment construct. + */ +export interface EnvironmentProps extends EnvironmentOptions { + /** + * The application to be associated with the environment. + */ + readonly application: IApplication; +} + +/** + * An AWS AppConfig environment. + * + * @resource AWS::AppConfig::Environment + * @see https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-environment.html + */ +export class Environment extends EnvironmentBase { + /** + * Imports an environment into the CDK using its Amazon Resource Name (ARN). + * + * @param scope The parent construct + * @param id The name of the environment construct + * @param environmentArn The Amazon Resource Name (ARN) of the environment + */ + public static fromEnvironmentArn(scope: Construct, id: string, environmentArn: string): IEnvironment { + const parsedArn = Stack.of(scope).splitArn(environmentArn, ArnFormat.SLASH_RESOURCE_NAME); + if (!parsedArn.resourceName) { + throw new Error(`Missing required /$/{applicationId}/environment//$/{environmentId} from environment ARN: ${parsedArn.resourceName}`); + } + + const resourceName = parsedArn.resourceName.split('/'); + if (resourceName.length != 3 || !resourceName[0] || !resourceName[2]) { + throw new Error('Missing required parameters for environment ARN: format should be /$/{applicationId}/environment//$/{environmentId}'); + } + + const applicationId = resourceName[0]; + const environmentId = resourceName[2]; + + class Import extends EnvironmentBase { + public readonly applicationId = applicationId; + public readonly environmentId = environmentId; + public readonly environmentArn = environmentArn; + } + + return new Import(scope, id, { + environmentFromArn: environmentArn, + }); + } + + /** + * Imports an environment into the CDK from its attributes. + * + * @param scope The parent construct + * @param id The name of the environment construct + * @param attrs The attributes of the environment + */ + public static fromEnvironmentAttributes(scope: Construct, id: string, attrs: EnvironmentAttributes): IEnvironment { + const applicationId = attrs.application.applicationId; + const environmentId = attrs.environmentId; + + const stack = Stack.of(scope); + const environmentArn = stack.formatArn({ + service: 'appconfig', + resource: 'application', + resourceName: `${applicationId}/environment/${environmentId}`, + }); + + class Import extends EnvironmentBase { + public readonly application = attrs.application; + public readonly applicationId = attrs.application.applicationId; + public readonly name = attrs.name; + public readonly environmentId = environmentId; + public readonly environmentArn = environmentArn; + public readonly description = attrs.description; + public readonly monitors = attrs.monitors; + } + + return new Import(scope, id, { + environmentFromArn: environmentArn, + }); + } + + /** + * The application associated with the environment. + */ + public readonly application?: IApplication; + + /** + * The name of the environment. + */ + public readonly name?: string; + + /** + * The description of the environment. + */ + public readonly description?: string; + + /** + * The monitors for the environment. + */ + public readonly monitors?: Monitor[]; + + /** + * The ID of the environment. + * + * @attribute + */ + public readonly environmentId: string; + + /** + * The Amazon Resource Name (ARN) of the environment. + * + * @attribute + */ + public readonly environmentArn: string; + + /** + * The ID of the environment. + */ + public readonly applicationId: string; + + private readonly _cfnEnvironment: CfnEnvironment; + + constructor(scope: Construct, id: string, props: EnvironmentProps) { + super(scope, id, { + physicalName: props.environmentName, + }); + + this.name = props.environmentName || Names.uniqueResourceName(this, { + maxLength: 64, + separator: '-', + }); + this.application = props.application; + this.applicationId = this.application.applicationId; + this.description = props.description; + this.monitors = props.monitors; + + const resource = new CfnEnvironment(this, 'Resource', { + applicationId: this.applicationId, + name: this.name, + description: this.description, + monitors: this.monitors?.map((monitor) => { + return { + alarmArn: monitor.alarmArn, + ...(monitor.monitorType === MonitorType.CLOUDWATCH + ? { alarmRoleArn: monitor.alarmRoleArn || this.createOrGetAlarmRole().roleArn } + : { alarmRoleArn: monitor.alarmRoleArn }), + }; + }), + }); + this._cfnEnvironment = resource; + + this.environmentId = this._cfnEnvironment.ref; + this.environmentArn = this.stack.formatArn({ + service: 'appconfig', + resource: 'application', + resourceName: `${this.applicationId}/environment/${this.environmentId}`, + }); + this.extensible = new ExtensibleBase(this, this.environmentArn, this.name); + + this.application.addExistingEnvironment(this); + } + + private createOrGetAlarmRole(): iam.IRole { + // the name is guaranteed to be set in line 243 + const logicalId = `Role${getHash(this.name!)}`; + const existingRole = this.node.tryFindChild(logicalId) as iam.IRole; + if (existingRole) { + return existingRole; + } + // this scope is fine for cloudwatch:DescribeAlarms since it is readonly + // and it is required for composite alarms + // https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_DescribeAlarms.html + const policy = new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['cloudwatch:DescribeAlarms'], + resources: ['*'], + }); + const document = new iam.PolicyDocument({ + statements: [policy], + }); + const role = new iam.Role(this, logicalId, { + roleName: PhysicalName.GENERATE_IF_NEEDED, + assumedBy: new iam.ServicePrincipal('appconfig.amazonaws.com'), + inlinePolicies: { + ['AllowAppConfigMonitorAlarmPolicy']: document, + }, + }); + return role; + } +} + +/** + * The type of Monitor. + */ +export enum MonitorType { + /** + * A Monitor from a CloudWatch alarm. + */ + CLOUDWATCH, + + /** + * A Monitor from a CfnEnvironment.MonitorsProperty construct. + */ + CFN_MONITORS_PROPERTY, +} + +/** + * Defines monitors that will be associated with an AWS AppConfig environment. + */ +export abstract class Monitor { + /** + * Creates a Monitor from a CloudWatch alarm. If the alarm role is not specified, a role will + * be generated. + * + * @param alarm The Amazon CloudWatch alarm. + * @param alarmRole The IAM role for AWS AppConfig to view the alarm state. + */ + public static fromCloudWatchAlarm(alarm: cloudwatch.IAlarm, alarmRole?: iam.IRole): Monitor { + return { + alarmArn: alarm.alarmArn, + alarmRoleArn: alarmRole?.roleArn, + monitorType: MonitorType.CLOUDWATCH, + }; + } + + /** + * Creates a Monitor from a CfnEnvironment.MonitorsProperty construct. + * + * @param monitorsProperty The monitors property. + */ + public static fromCfnMonitorsProperty(monitorsProperty: CfnEnvironment.MonitorsProperty): Monitor { + if (monitorsProperty.alarmArn === undefined) { + throw new Error('You must specify an alarmArn property to use "fromCfnMonitorsProperty".'); + } + return { + alarmArn: monitorsProperty.alarmArn, + alarmRoleArn: monitorsProperty.alarmRoleArn, + monitorType: MonitorType.CFN_MONITORS_PROPERTY, + }; + } + + /** + * The alarm ARN for AWS AppConfig to monitor. + */ + public abstract readonly alarmArn: string; + + /** + * The type of monitor. + */ + public abstract readonly monitorType: MonitorType; + + /** + * The IAM role ARN for AWS AppConfig to view the alarm state. + */ + public abstract readonly alarmRoleArn?: string; + + /** + * Indicates whether a CloudWatch alarm is a composite alarm. + */ + public abstract readonly isCompositeAlarm?: boolean; +} + +export interface IEnvironment extends IResource { + /** + * The application associated with the environment. + */ + readonly application?: IApplication; + + /** + * The ID of the application associated to the environment. + */ + readonly applicationId: string; + + /** + * The name of the environment. + */ + readonly name?: string; + + /** + * The description of the environment. + */ + readonly description?: string; + + /** + * The monitors for the environment. + */ + readonly monitors?: Monitor[]; + + /** + * The ID of the environment. + * @attribute + */ + readonly environmentId: string; + + /** + * The Amazon Resource Name (ARN) of the environment. + * @attribute + */ + readonly environmentArn: string; + + /** + * Adds an extension defined by the action point and event destination and also + * creates an extension association to the environment. + * + * @param actionPoint The action point which triggers the event + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + on(actionPoint: ActionPoint, eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds a PRE_CREATE_HOSTED_CONFIGURATION_VERSION extension with the provided event destination + * and also creates an extension association to the environment. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + preCreateHostedConfigurationVersion(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds a PRE_START_DEPLOYMENT extension with the provided event destination and also creates + * an extension association to the environment. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + preStartDeployment(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_START extension with the provided event destination and also creates + * an extension association to the environment. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentStart(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_STEP extension with the provided event destination and also + * creates an extension association to the environment. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentStep(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_BAKING extension with the provided event destination and + * also creates an extension association to the environment. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentBaking(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_COMPLETE extension with the provided event destination and + * also creates an extension association to the environment. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentComplete(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_ROLLED_BACK extension with the provided event destination and + * also creates an extension association to the environment. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentRolledBack(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an extension association to the environment. + * + * @param extension The extension to create an association for + */ + addExtension(extension: IExtension): void; +} \ No newline at end of file diff --git a/packages/aws-cdk-lib/aws-appconfig/lib/extension.ts b/packages/aws-cdk-lib/aws-appconfig/lib/extension.ts new file mode 100644 index 0000000000000..a39fd2980c85b --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/lib/extension.ts @@ -0,0 +1,802 @@ +import { Construct } from 'constructs'; +import { CfnExtension, CfnExtensionAssociation } from './appconfig.generated'; +import { getHash, stringifyObjects } from './private/hash'; +import * as events from '../../aws-events'; +import * as iam from '../../aws-iam'; +import * as lambda from '../../aws-lambda'; +import * as sns from '../../aws-sns'; +import * as sqs from '../../aws-sqs'; +import { ArnFormat, IResource, Names, PhysicalName, Resource, Stack } from '../../core'; + +/** + * Defines Extension action points. + * + * @see https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about.html#working-with-appconfig-extensions-how-it-works-step-2 + */ +export enum ActionPoint { + PRE_CREATE_HOSTED_CONFIGURATION_VERSION = 'PRE_CREATE_HOSTED_CONFIGURATION_VERSION', + PRE_START_DEPLOYMENT = 'PRE_START_DEPLOYMENT', + ON_DEPLOYMENT_START = 'ON_DEPLOYMENT_START', + ON_DEPLOYMENT_STEP = 'ON_DEPLOYMENT_STEP', + ON_DEPLOYMENT_BAKING = 'ON_DEPLOYMENT_BAKING', + ON_DEPLOYMENT_COMPLETE = 'ON_DEPLOYMENT_COMPLETE', + ON_DEPLOYMENT_ROLLED_BACK = 'ON_DEPLOYMENT_ROLLED_BACK', +} + +/** + * Defines the source type for event destinations. + */ +export enum SourceType { + LAMBDA = 'lambda', + SQS = 'sqs', + SNS = 'sns', + EVENTS = 'events', +} + +/** + * Implemented by allowed extension event destinations. + */ +export interface IEventDestination { + /** + * The URI of the extension event destination. + */ + readonly extensionUri: string; + + /** + * The type of the extension event destination. + */ + readonly type: SourceType; + + /** + * The IAM policy document to invoke the event destination. + */ + readonly policyDocument?: iam.PolicyDocument; +} + +/** + * Use an AWS Lambda function as an event destination. + */ +export class LambdaDestination implements IEventDestination { + public readonly extensionUri: string; + public readonly type: SourceType; + public readonly policyDocument?: iam.PolicyDocument; + + constructor(func: lambda.IFunction) { + this.extensionUri = func.functionArn; + this.type = SourceType.LAMBDA; + const policy = new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + resources: [this.extensionUri], + actions: [ + 'lambda:InvokeFunction', + 'lambda:InvokeAsync', + ], + }); + this.policyDocument = new iam.PolicyDocument({ + statements: [policy], + }); + + if (!func.permissionsNode.tryFindChild('AppConfigPermission')) { + func.addPermission('AppConfigPermission', { + principal: new iam.ServicePrincipal('appconfig.amazonaws.com'), + }); + } + } +} + +/** + * Use an Amazon SQS queue as an event destination. + */ +export class SqsDestination implements IEventDestination { + public readonly extensionUri: string; + public readonly type: SourceType; + public readonly policyDocument?: iam.PolicyDocument; + + constructor(queue: sqs.IQueue) { + this.extensionUri = queue.queueArn; + this.type = SourceType.SQS; + const policy = new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + resources: [this.extensionUri], + actions: ['sqs:SendMessage'], + }); + this.policyDocument = new iam.PolicyDocument({ + statements: [policy], + }); + } +} + +/** + * Use an Amazon SNS topic as an event destination. + */ +export class SnsDestination implements IEventDestination { + public readonly extensionUri: string; + public readonly type: SourceType; + public readonly policyDocument?: iam.PolicyDocument; + + constructor(topic: sns.ITopic) { + this.extensionUri = topic.topicArn; + this.type = SourceType.SNS; + const policy = new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + resources: [this.extensionUri], + actions: ['sns:Publish'], + }); + this.policyDocument = new iam.PolicyDocument({ + statements: [policy], + }); + } +} + +/** + * Use an Amazon EventBridge event bus as an event destination. + */ +export class EventBridgeDestination implements IEventDestination { + public readonly extensionUri: string; + public readonly type: SourceType; + + constructor(bus: events.IEventBus) { + this.extensionUri = bus.eventBusArn; + this.type = SourceType.EVENTS; + } +} + +/** + * Properties for the Action construct + */ +export interface ActionProps { + /** + * The action points that will trigger the extension action. + */ + readonly actionPoints: ActionPoint[]; + + /** + * The event destination for the action. + */ + readonly eventDestination: IEventDestination; + + /** + * The name for the action. + * + * @default - A name is generated. + */ + readonly name?: string; + + /** + * The execution role for the action. + * + * @default - A role is generated. + */ + readonly executionRole?: iam.IRole; + + /** + * The description for the action. + * + * @default - No description. + */ + readonly description?: string; + + /** + * The flag that specifies whether or not to create the execution role. + * + * If set to true, then the role will not be auto-generated under the assumption + * there is already the corresponding resource-based policy attached to the event + * destination. If false, the execution role will be generated if not provided. + * + * @default false + */ + readonly invokeWithoutExecutionRole?: boolean; +} + +/** + * Defines an action for an extension. + */ +export class Action { + /** + * The action points that will trigger the extension action. + */ + public readonly actionPoints: ActionPoint[]; + + /** + * The event destination for the action. + */ + public readonly eventDestination: IEventDestination; + + /** + * The name for the action. + */ + public readonly name?: string; + + /** + * The execution role for the action. + */ + public readonly executionRole?: iam.IRole; + + /** + * The description for the action. + */ + public readonly description?: string; + + /** + * The flag that specifies whether to create the execution role. + */ + readonly invokeWithoutExecutionRole?: boolean; + + public constructor(props: ActionProps) { + this.actionPoints = props.actionPoints; + this.eventDestination = props.eventDestination; + this.name = props.name; + this.executionRole = props.executionRole; + this.description = props.description; + this.invokeWithoutExecutionRole = props.invokeWithoutExecutionRole || false; + } +} + +/** + * Defines a parameter for an extension. + */ +export class Parameter { + /** + * A required parameter for an extension. + * + * @param name The name of the parameter + * @param value The value of the parameter + * @param description A description for the parameter + */ + public static required(name: string, value: string, description?: string): Parameter { + return new Parameter(name, true, value, description); + } + + /** + * An optional parameter for an extension. + * + * @param name The name of the parameter + * @param value The value of the parameter + * @param description A description for the parameter + */ + public static notRequired(name: string, value?: string, description?: string): Parameter { + return new Parameter(name, false, value, description); + } + + /** + * The name of the parameter. + */ + public readonly name: string; + + /** + * A boolean that indicates if the parameter is required or optional. + */ + public readonly isRequired: boolean; + + /** + * The value of the parameter. + */ + public readonly value?: string; + + /** + * The description of the parameter. + */ + public readonly description?: string; + + private constructor(name: string, isRequired: boolean, value?: string, description?: string) { + this.name = name; + this.isRequired = isRequired; + this.value = value; + this.description = description; + } +} + +/** + * Attributes of an existing AWS AppConfig extension to import. + */ +export interface ExtensionAttributes { + /** + * The ID of the extension. + */ + readonly extensionId: string; + + /** + * The version number of the extension. + */ + readonly extensionVersionNumber: number; + + /** + * The Amazon Resource Name (ARN) of the extension. + * + * @default - The extension ARN is generated. + */ + readonly extensionArn?: string; + + /** + * The actions of the extension. + * + * @default - None. + */ + readonly actions?: Action[]; + + /** + * The name of the extension. + * + * @default - None. + */ + readonly name?: string; + + /** + * The description of the extension. + * + * @default - None. + */ + readonly description?: string; +} + +/** + * Options for the Extension construct. + */ +export interface ExtensionOptions { + /** + * The name of the extension. + * + * @default - A name is generated. + */ + readonly extensionName?: string; + + /** + * A description of the extension + * + * @default - No description. + */ + readonly description?: string; + + /** + * The latest version number of the extension. When you create a new version, + * specify the most recent current version number. For example, you create version 3, + * enter 2 for this field. + * + * @default - None. + */ + readonly latestVersionNumber?: number; + + /** + * The parameters accepted for the extension. + * + * @default - None. + */ + readonly parameters?: Parameter[]; +} + +/** + * Properties for the Extension construct. + */ +export interface ExtensionProps extends ExtensionOptions { + /** + * The actions for the extension. + */ + readonly actions: Action[]; +} + +/** + * An AWS AppConfig extension. + * + * @resource AWS::AppConfig::Extension + * @see https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html + */ +export class Extension extends Resource implements IExtension { + /** + * Imports an extension into the CDK using its Amazon Resource Name (ARN). + * + * @param scope The parent construct + * @param id The name of the extension construct + * @param extensionArn The Amazon Resource Name (ARN) of the extension + */ + public static fromExtensionArn(scope: Construct, id: string, extensionArn: string): IExtension { + const parsedArn = Stack.of(scope).splitArn(extensionArn, ArnFormat.SLASH_RESOURCE_NAME); + if (!parsedArn.resourceName) { + throw new Error(`Missing required /$/{extensionId}//$/{extensionVersionNumber} from configuration profile ARN: ${parsedArn.resourceName}`); + } + + const resourceName = parsedArn.resourceName.split('/'); + if (resourceName.length != 2 || !resourceName[0] || !resourceName[1]) { + throw new Error('Missing required parameters for extension ARN: format should be /$/{extensionId}//$/{extensionVersionNumber}'); + } + + const extensionId = resourceName[0]; + const extensionVersionNumber = resourceName[1]; + + class Import extends Resource implements IExtension { + public readonly extensionId = extensionId; + public readonly extensionVersionNumber = parseInt(extensionVersionNumber); + public readonly extensionArn = extensionArn; + } + + return new Import(scope, id, { + environmentFromArn: extensionArn, + }); + } + + /** + * Imports an extension into the CDK using its attributes. + * + * @param scope The parent construct + * @param id The name of the extension construct + * @param attrs The attributes of the extension + */ + public static fromExtensionAttributes(scope: Construct, id: string, attrs: ExtensionAttributes): IExtension { + const stack = Stack.of(scope); + const extensionArn = attrs.extensionArn || stack.formatArn({ + service: 'appconfig', + resource: 'extension', + resourceName: `${attrs.extensionId}/${attrs.extensionVersionNumber}`, + }); + + class Import extends Resource implements IExtension { + public readonly extensionId = attrs.extensionId; + public readonly extensionVersionNumber = attrs.extensionVersionNumber; + public readonly extensionArn = extensionArn; + public readonly name = attrs.name; + public readonly actions = attrs.actions; + public readonly description = attrs.description; + } + + return new Import(scope, id, { + environmentFromArn: extensionArn, + }); + } + + /** + * The actions for the extension. + */ + public readonly actions?: Action[]; + + /** + * The name of the extension. + */ + public readonly name?: string; + + /** + * The description of the extension. + */ + public readonly description?: string; + + /** + * The latest version number of the extension. + */ + public readonly latestVersionNumber?: number; + + /** + * The parameters of the extension. + */ + public readonly parameters?: Parameter[]; + + /** + * The Amazon Resource Name (ARN) of the extension. + * + * @attribute + */ + public readonly extensionArn: string; + + /** + * The ID of the extension. + * + * @attribute + */ + public readonly extensionId: string; + + /** + * The version number of the extension. + * + * @attribute + */ + public readonly extensionVersionNumber: number; + + private readonly _cfnExtension: CfnExtension; + private executionRole?: iam.IRole; + + constructor(scope: Construct, id: string, props: ExtensionProps) { + super(scope, id, { + physicalName: props.extensionName, + }); + + this.actions = props.actions; + this.name = props.extensionName || Names.uniqueResourceName(this, { + maxLength: 64, + separator: '-', + }); + this.description = props.description; + this.latestVersionNumber = props.latestVersionNumber; + this.parameters = props.parameters; + + const resource = new CfnExtension(this, 'Resource', { + actions: this.actions.reduce((acc: {[key: string]: {[key: string]: string}[]}, cur: Action, index: number) => { + const extensionUri = cur.eventDestination.extensionUri; + const sourceType = cur.eventDestination.type; + this.executionRole = cur.executionRole; + const name = cur.name ?? `${this.name}-${index}`; + cur.actionPoints.forEach((actionPoint) => { + acc[actionPoint] = [ + { + Name: name, + Uri: extensionUri, + ...(sourceType === SourceType.EVENTS || cur.invokeWithoutExecutionRole + ? {} + : { RoleArn: this.executionRole?.roleArn || this.getExecutionRole(cur.eventDestination, name).roleArn }), + ...(cur.description ? { Description: cur.description } : {}), + }, + ]; + }); + return acc; + }, {}), + name: this.name, + description: this.description, + latestVersionNumber: this.latestVersionNumber, + parameters: this.parameters?.reduce((acc: {[key: string]: CfnExtension.ParameterProperty}, cur: Parameter) => { + acc[cur.name] = { + required: cur.isRequired, + description: cur.description, + }; + return acc; + }, {}), + }); + this._cfnExtension = resource; + + this.extensionId = this._cfnExtension.attrId; + this.extensionVersionNumber = this._cfnExtension.attrVersionNumber; + this.extensionArn = this.getResourceArnAttribute(this._cfnExtension.attrArn, { + service: 'appconfig', + resource: 'extension', + resourceName: `${this.extensionId}/${this.extensionVersionNumber}`, + }); + } + + private getExecutionRole(eventDestination: IEventDestination, actionName: string): iam.IRole { + const versionNumber = this.latestVersionNumber ? this.latestVersionNumber + 1 : 1; + const combinedObjects = stringifyObjects(this.name, versionNumber, actionName); + this.executionRole = new iam.Role(this, `Role${getHash(combinedObjects)}`, { + roleName: PhysicalName.GENERATE_IF_NEEDED, + assumedBy: new iam.ServicePrincipal('appconfig.amazonaws.com'), + inlinePolicies: { + ['AllowAppConfigInvokeExtensionEventSourcePolicy']: eventDestination.policyDocument!, + }, + }); + + return this.executionRole; + } +} + +export interface IExtension extends IResource { + /** + * The actions for the extension. + */ + readonly actions?: Action[]; + + /** + * The name of the extension. + */ + readonly name?: string; + + /** + * The description of the extension. + */ + readonly description?: string; + + /** + * The latest version number of the extension. + */ + readonly latestVersionNumber?: number; + + /** + * The parameters of the extension. + */ + readonly parameters?: Parameter[]; + + /** + * The Amazon Resource Name (ARN) of the extension. + * @attribute + */ + readonly extensionArn: string; + + /** + * The ID of the extension. + * @attribute + */ + readonly extensionId: string; + + /** + * The version number of the extension. + * @attribute + */ + readonly extensionVersionNumber: number; +} + +/** + * This class is meant to be used by AWS AppConfig resources (application, + * configuration profile, environment) directly. There is currently no use + * for this class outside of the AWS AppConfig construct implementation. It is + * intended to be used with the resources since there is currently no way to + * inherit from two classes (at least within JSII constraints). + */ +export class ExtensibleBase implements IExtensible { + private resourceArn: string; + private resourceName?: string; + private scope: Construct; + + public constructor(scope: Construct, resourceArn: string, resourceName?: string) { + this.resourceArn = resourceArn; + this.resourceName = resourceName; + this.scope = scope; + } + + public on(actionPoint: ActionPoint, eventDestination: IEventDestination, options?: ExtensionOptions) { + this.getExtensionForActionPoint(eventDestination, actionPoint, options); + } + + public preCreateHostedConfigurationVersion(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.getExtensionForActionPoint(eventDestination, ActionPoint.PRE_CREATE_HOSTED_CONFIGURATION_VERSION, options); + } + + public preStartDeployment(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.getExtensionForActionPoint(eventDestination, ActionPoint.PRE_START_DEPLOYMENT, options); + } + + public onDeploymentStart(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.getExtensionForActionPoint(eventDestination, ActionPoint.ON_DEPLOYMENT_START, options); + } + + public onDeploymentStep(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.getExtensionForActionPoint(eventDestination, ActionPoint.ON_DEPLOYMENT_STEP, options); + } + + public onDeploymentBaking(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.getExtensionForActionPoint(eventDestination, ActionPoint.ON_DEPLOYMENT_BAKING, options); + } + + public onDeploymentComplete(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.getExtensionForActionPoint(eventDestination, ActionPoint.ON_DEPLOYMENT_COMPLETE, options); + } + + public onDeploymentRolledBack(eventDestination: IEventDestination, options?: ExtensionOptions) { + this.getExtensionForActionPoint(eventDestination, ActionPoint.ON_DEPLOYMENT_ROLLED_BACK, options); + } + + public addExtension(extension: IExtension) { + this.addExtensionAssociation(extension); + } + + private getExtensionForActionPoint(eventDestination: IEventDestination, actionPoint: ActionPoint, options?: ExtensionOptions) { + const name = options?.extensionName || this.getExtensionDefaultName(); + const versionNumber = options?.latestVersionNumber ? options?.latestVersionNumber + 1 : 1; + const extension = new Extension(this.scope, `Extension${this.getExtensionHash(name, versionNumber)}`, { + actions: [ + new Action({ + eventDestination, + actionPoints: [ + actionPoint, + ], + }), + ], + extensionName: name, + ...(options?.description ? { description: options.description } : {}), + ...(options?.latestVersionNumber ? { latestVersionNumber: options.latestVersionNumber } : {}), + ...(options?.parameters ? { parameters: options.parameters } : {}), + }); + this.addExtensionAssociation(extension); + } + + private addExtensionAssociation(extension: IExtension) { + const versionNumber = extension?.latestVersionNumber ? extension?.latestVersionNumber + 1 : 1; + const name = extension.name ?? this.getExtensionDefaultName(); + new CfnExtensionAssociation(this.scope, `AssociationResource${this.getExtensionAssociationHash(name, versionNumber)}`, { + extensionIdentifier: extension.extensionId, + resourceIdentifier: this.resourceArn, + extensionVersionNumber: extension.extensionVersionNumber, + parameters: extension.parameters?.reduce((acc: {[key: string]: string}, cur: Parameter) => { + if (cur.value) { + acc[cur.name] = cur.value; + } + return acc; + }, {}), + }); + } + + private getExtensionHash(name: string, versionNumber: number) { + const combinedString = stringifyObjects(name, versionNumber); + return getHash(combinedString); + } + + private getExtensionAssociationHash(name: string, versionNumber: number) { + const resourceIdentifier = this.resourceName ?? this.resourceArn; + const combinedString = stringifyObjects(resourceIdentifier, name, versionNumber); + return getHash(combinedString); + } + + private getExtensionDefaultName() { + return Names.uniqueResourceName(this.scope, { + maxLength: 54, + separator: '-', + }) + '-Extension'; + } +} + +/** + * Defines the extensible base implementation for extension association resources. + */ +export interface IExtensible { + /** + * Adds an extension defined by the action point and event destination and + * also creates an extension association to the derived resource. + * + * @param actionPoint The action point which triggers the event + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + on(actionPoint: ActionPoint, eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds a PRE_CREATE_HOSTED_CONFIGURATION_VERSION extension with the provided event + * destination and also creates an extension association to the derived resource. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + preCreateHostedConfigurationVersion(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds a PRE_START_DEPLOYMENT extension with the provided event destination and + * also creates an extension association to the derived resource. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + preStartDeployment(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_START extension with the provided event destination and + * also creates an extension association to the derived resource. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentStart(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_STEP extension with the provided event destination and + * also creates an extension association to the derived resource. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentStep(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_BAKING extension with the provided event destination and + * also creates an extension association to the derived resource. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentBaking(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_COMPLETE extension with the provided event destination and + * also creates an extension association to the derived resource. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentComplete(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an ON_DEPLOYMENT_ROLLED_BACK extension with the provided event destination and + * also creates an extension association to the derived resource. + * + * @param eventDestination The event that occurs during the extension + * @param options Options for the extension + */ + onDeploymentRolledBack(eventDestination: IEventDestination, options?: ExtensionOptions): void; + + /** + * Adds an extension association to the derived resource. + * + * @param extension The extension to create an association for + */ + addExtension(extension: IExtension): void; +} diff --git a/packages/aws-cdk-lib/aws-appconfig/lib/index.ts b/packages/aws-cdk-lib/aws-appconfig/lib/index.ts index 7708199fed61b..9747afb531f4c 100644 --- a/packages/aws-cdk-lib/aws-appconfig/lib/index.ts +++ b/packages/aws-cdk-lib/aws-appconfig/lib/index.ts @@ -1 +1,8 @@ +export * from './environment'; +export * from './deployment-strategy'; +export * from './extension'; +export * from './application'; +export * from './configuration'; + +// AWS::AppConfig CloudFormation Resources: export * from './appconfig.generated'; \ No newline at end of file diff --git a/packages/aws-cdk-lib/aws-appconfig/lib/private/hash.ts b/packages/aws-cdk-lib/aws-appconfig/lib/private/hash.ts new file mode 100644 index 0000000000000..c496ea174cee2 --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/lib/private/hash.ts @@ -0,0 +1,12 @@ +import * as crypto from 'crypto'; + +export function getHash(stringToHash: string): string { + const hash = crypto.createHash('sha256').update(stringToHash).digest('hex'); + const truncatedHash = hash.substring(0, 5).toUpperCase(); + return truncatedHash; +} + +export function stringifyObjects(...objects: any[]): string { + const combinedObject = Object.assign({}, ...objects); + return JSON.stringify(combinedObject); +} \ No newline at end of file diff --git a/packages/aws-cdk-lib/aws-appconfig/test/application.test.ts b/packages/aws-cdk-lib/aws-appconfig/test/application.test.ts new file mode 100644 index 0000000000000..37d0a7c8ea0de --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/test/application.test.ts @@ -0,0 +1,525 @@ +import { Template } from '../../assertions'; +import { FargateTaskDefinition } from '../../aws-ecs'; +import { Code, Function, Runtime } from '../../aws-lambda'; +import * as cdk from '../../core'; +import { + Application, + Platform, + LambdaDestination, + Parameter, + ActionPoint, +} from '../lib'; + +describe('appconfig', () => { + test('basic appconfig', () => { + const stack = new cdk.Stack(); + new Application(stack, 'MyAppConfig'); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Application', { + Name: 'MyAppConfig', + }); + }); + + test('appconfig with name', () => { + const stack = new cdk.Stack(); + new Application(stack, 'MyAppConfig', { + applicationName: 'TestApp', + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Application', { + Name: 'TestApp', + }); + }); + + test('appconfig with description', () => { + const stack = new cdk.Stack(); + new Application(stack, 'MyAppConfig', { + description: 'This is my description', + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Application', { + Name: 'MyAppConfig', + Description: 'This is my description', + }); + }); + + test('get lambda layer arn', () => { + expect(Application.getLambdaLayerVersionArn('us-east-1')).toEqual('arn:aws:lambda:us-east-1:027255383542:layer:AWS-AppConfig-Extension:128'); + expect(Application.getLambdaLayerVersionArn('us-east-1', Platform.ARM_64)).toEqual('arn:aws:lambda:us-east-1:027255383542:layer:AWS-AppConfig-Extension-Arm64:61'); + }); + + test('add agent to ecs', () => { + const stack = new cdk.Stack(); + const taskDef = new FargateTaskDefinition(stack, 'TaskDef'); + Application.addAgentToEcs(taskDef); + + Template.fromStack(stack).hasResourceProperties('AWS::ECS::TaskDefinition', { + ContainerDefinitions: [ + { + Image: 'public.ecr.aws/aws-appconfig/aws-appconfig-agent:latest', + Name: 'AppConfigAgentContainer', + Essential: true, + }, + ], + }); + }); + + test('specifying action point for extensible action on', () => { + const stack = new cdk.Stack(); + const appconfig = new Application(stack, 'MyAppConfig'); + const func = new Function(stack, 'MyFunc', { + handler: 'index.handler', + runtime: Runtime.PYTHON_3_7, + code: Code.fromInline('# this is my code'), + }); + appconfig.on(ActionPoint.ON_DEPLOYMENT_STEP, new LambdaDestination(func)); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyAppConfig-Extension', + Actions: { + ON_DEPLOYMENT_STEP: [ + { + Name: 'MyAppConfig-Extension-0', + RoleArn: { 'Fn::GetAtt': ['MyAppConfigExtensionF845ERole0D30970E5A7E5', 'Arn'] }, + Uri: { 'Fn::GetAtt': ['MyFunc8A243A2C', 'Arn'] }, + }, + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ExtensionAssociation', { + ExtensionIdentifier: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'Id'], + }, + ExtensionVersionNumber: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'VersionNumber'], + }, + ResourceIdentifier: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':appconfig:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':application/', + { Ref: 'MyAppConfigB4B63E75' }, + ], + ], + }, + }); + }); + + test('pre create hosted configuration version', () => { + const stack = new cdk.Stack(); + const appconfig = new Application(stack, 'MyAppConfig'); + const func = new Function(stack, 'MyFunc', { + handler: 'index.handler', + runtime: Runtime.PYTHON_3_7, + code: Code.fromInline('# this is my code'), + }); + appconfig.preCreateHostedConfigurationVersion(new LambdaDestination(func), { + description: 'This is my description', + extensionName: 'MyExtension', + latestVersionNumber: 1, + parameters: [ + Parameter.required('myparam', 'val'), + ], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyExtension', + Description: 'This is my description', + LatestVersionNumber: 1, + Actions: { + PRE_CREATE_HOSTED_CONFIGURATION_VERSION: [ + { + Name: 'MyExtension-0', + RoleArn: { 'Fn::GetAtt': ['MyAppConfigExtensionE4CCERole467D69791333F', 'Arn'] }, + Uri: { 'Fn::GetAtt': ['MyFunc8A243A2C', 'Arn'] }, + }, + ], + }, + Parameters: { + myparam: { Required: true }, + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ExtensionAssociation', { + ExtensionIdentifier: { + 'Fn::GetAtt': ['MyAppConfigExtensionE4CCE34485313', 'Id'], + }, + ExtensionVersionNumber: { + 'Fn::GetAtt': ['MyAppConfigExtensionE4CCE34485313', 'VersionNumber'], + }, + Parameters: { + myparam: 'val', + }, + ResourceIdentifier: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':appconfig:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':application/', + { Ref: 'MyAppConfigB4B63E75' }, + ], + ], + }, + }); + }); + + test('pre start deployment', () => { + const stack = new cdk.Stack(); + const appconfig = new Application(stack, 'MyAppConfig'); + const func = new Function(stack, 'MyFunc', { + handler: 'index.handler', + runtime: Runtime.PYTHON_3_7, + code: Code.fromInline('# this is my code'), + }); + Object.defineProperty(func, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-function', + }); + appconfig.preStartDeployment(new LambdaDestination(func)); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyAppConfig-Extension', + Actions: { + PRE_START_DEPLOYMENT: [ + { + Name: 'MyAppConfig-Extension-0', + RoleArn: { 'Fn::GetAtt': ['MyAppConfigExtensionF845ERole0D30970E5A7E5', 'Arn'] }, + Uri: 'arn:lambda:us-east-1:123456789012:function:my-function', + }, + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ExtensionAssociation', { + ExtensionIdentifier: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'Id'], + }, + ExtensionVersionNumber: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'VersionNumber'], + }, + ResourceIdentifier: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':appconfig:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':application/', + { Ref: 'MyAppConfigB4B63E75' }, + ], + ], + }, + }); + }); + + test('on deployment start', () => { + const stack = new cdk.Stack(); + const appconfig = new Application(stack, 'MyAppConfig'); + Object.defineProperty(appconfig, 'applicationArn', { + value: 'arn:aws:appconfig:us-east-1:123456789012:application/abc123', + }); + const func = new Function(stack, 'MyFunc', { + handler: 'index.handler', + runtime: Runtime.PYTHON_3_7, + code: Code.fromInline('# this is my code'), + }); + Object.defineProperty(func, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-function', + }); + appconfig.onDeploymentStart(new LambdaDestination(func)); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyAppConfig-Extension', + Actions: { + ON_DEPLOYMENT_START: [ + { + Name: 'MyAppConfig-Extension-0', + RoleArn: { 'Fn::GetAtt': ['MyAppConfigExtensionF845ERole0D30970E5A7E5', 'Arn'] }, + Uri: 'arn:lambda:us-east-1:123456789012:function:my-function', + }, + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ExtensionAssociation', { + ExtensionIdentifier: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'Id'], + }, + ExtensionVersionNumber: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'VersionNumber'], + }, + ResourceIdentifier: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':appconfig:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':application/', + { Ref: 'MyAppConfigB4B63E75' }, + ], + ], + }, + }); + }); + + test('on deployment step', () => { + const stack = new cdk.Stack(); + const appconfig = new Application(stack, 'MyAppConfig'); + const func = new Function(stack, 'MyFunc', { + handler: 'index.handler', + runtime: Runtime.PYTHON_3_7, + code: Code.fromInline('# this is my code'), + }); + Object.defineProperty(func, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-function', + }); + appconfig.onDeploymentStep(new LambdaDestination(func)); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyAppConfig-Extension', + Actions: { + ON_DEPLOYMENT_STEP: [ + { + Name: 'MyAppConfig-Extension-0', + RoleArn: { 'Fn::GetAtt': ['MyAppConfigExtensionF845ERole0D30970E5A7E5', 'Arn'] }, + Uri: 'arn:lambda:us-east-1:123456789012:function:my-function', + }, + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ExtensionAssociation', { + ExtensionIdentifier: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'Id'], + }, + ExtensionVersionNumber: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'VersionNumber'], + }, + ResourceIdentifier: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':appconfig:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':application/', + { Ref: 'MyAppConfigB4B63E75' }, + ], + ], + }, + }); + }); + + test('on deployment complete', () => { + const stack = new cdk.Stack(); + const appconfig = new Application(stack, 'MyAppConfig'); + const func = new Function(stack, 'MyFunc', { + handler: 'index.handler', + runtime: Runtime.PYTHON_3_7, + code: Code.fromInline('# this is my code'), + }); + Object.defineProperty(func, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-function', + }); + appconfig.onDeploymentComplete(new LambdaDestination(func)); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyAppConfig-Extension', + Actions: { + ON_DEPLOYMENT_COMPLETE: [ + { + Name: 'MyAppConfig-Extension-0', + RoleArn: { 'Fn::GetAtt': ['MyAppConfigExtensionF845ERole0D30970E5A7E5', 'Arn'] }, + Uri: 'arn:lambda:us-east-1:123456789012:function:my-function', + }, + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ExtensionAssociation', { + ExtensionIdentifier: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'Id'], + }, + ExtensionVersionNumber: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'VersionNumber'], + }, + ResourceIdentifier: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':appconfig:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':application/', + { Ref: 'MyAppConfigB4B63E75' }, + ], + ], + }, + }); + }); + + test('on deployment bake', () => { + const stack = new cdk.Stack(); + const appconfig = new Application(stack, 'MyAppConfig'); + const func = new Function(stack, 'MyFunc', { + handler: 'index.handler', + runtime: Runtime.PYTHON_3_7, + code: Code.fromInline('# this is my code'), + }); + Object.defineProperty(func, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-function', + }); + appconfig.onDeploymentBaking(new LambdaDestination(func)); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyAppConfig-Extension', + Actions: { + ON_DEPLOYMENT_BAKING: [ + { + Name: 'MyAppConfig-Extension-0', + RoleArn: { 'Fn::GetAtt': ['MyAppConfigExtensionF845ERole0D30970E5A7E5', 'Arn'] }, + Uri: 'arn:lambda:us-east-1:123456789012:function:my-function', + }, + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ExtensionAssociation', { + ExtensionIdentifier: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'Id'], + }, + ExtensionVersionNumber: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'VersionNumber'], + }, + ResourceIdentifier: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':appconfig:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':application/', + { Ref: 'MyAppConfigB4B63E75' }, + ], + ], + }, + }); + }); + + test('on deployment rolled back', () => { + const stack = new cdk.Stack(); + const appconfig = new Application(stack, 'MyAppConfig'); + const func = new Function(stack, 'MyFunc', { + handler: 'index.handler', + runtime: Runtime.PYTHON_3_7, + code: Code.fromInline('# this is my code'), + }); + Object.defineProperty(func, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-function', + }); + appconfig.onDeploymentRolledBack(new LambdaDestination(func)); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyAppConfig-Extension', + Actions: { + ON_DEPLOYMENT_ROLLED_BACK: [ + { + Name: 'MyAppConfig-Extension-0', + RoleArn: { 'Fn::GetAtt': ['MyAppConfigExtensionF845ERole0D30970E5A7E5', 'Arn'] }, + Uri: 'arn:lambda:us-east-1:123456789012:function:my-function', + }, + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ExtensionAssociation', { + ExtensionIdentifier: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'Id'], + }, + ExtensionVersionNumber: { + 'Fn::GetAtt': ['MyAppConfigExtensionF845EC11D4079', 'VersionNumber'], + }, + ResourceIdentifier: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':appconfig:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':application/', + { Ref: 'MyAppConfigB4B63E75' }, + ], + ], + }, + }); + }); + + test('create same extension twice', () => { + const stack = new cdk.Stack(); + const appconfig = new Application(stack, 'MyAppConfig'); + const func = new Function(stack, 'MyFunc', { + handler: 'index.handler', + runtime: Runtime.PYTHON_3_7, + code: Code.fromInline('# this is my code'), + }); + Object.defineProperty(func, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-function', + }); + appconfig.preStartDeployment(new LambdaDestination(func)); + + expect(() => { + appconfig.preStartDeployment(new LambdaDestination(func)); + }).toThrow(); + }); + + test('from application arn', () => { + const stack = new cdk.Stack(); + const app = Application.fromApplicationArn(stack, 'Application', + 'arn:aws:appconfig:us-west-2:123456789012:application/abc123'); + + expect(app.applicationId).toEqual('abc123'); + }); + + test('from application arn with no resource name', () => { + const stack = new cdk.Stack(); + expect(() => { + Application.fromApplicationArn(stack, 'Application', + 'arn:aws:appconfig:us-west-2:123456789012:application/'); + }).toThrow('Missing required application id from application ARN'); + }); + + test('from application id', () => { + const cdkApp = new cdk.App(); + const stack = new cdk.Stack(cdkApp, 'Stack', { + env: { + region: 'us-west-2', + account: '123456789012', + }, + }); + const app = Application.fromApplicationId(stack, 'Application', 'abc123'); + + expect(app.applicationId).toEqual('abc123'); + }); +}); \ No newline at end of file diff --git a/packages/aws-cdk-lib/aws-appconfig/test/config.json b/packages/aws-cdk-lib/aws-appconfig/test/config.json new file mode 100644 index 0000000000000..5c2ecbd6e6cf7 --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/test/config.json @@ -0,0 +1,3 @@ +{ + "content": "This is the configuration content" +} \ No newline at end of file diff --git a/packages/aws-cdk-lib/aws-appconfig/test/configuration.test.ts b/packages/aws-cdk-lib/aws-appconfig/test/configuration.test.ts new file mode 100644 index 0000000000000..55a30e584d969 --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/test/configuration.test.ts @@ -0,0 +1,1241 @@ +import { Template } from '../../assertions'; +import { Artifact, Pipeline } from '../../aws-codepipeline'; +import { S3DeployAction, S3SourceAction } from '../../aws-codepipeline-actions'; +import * as iam from '../../aws-iam'; +import { Key } from '../../aws-kms'; +import { Bucket } from '../../aws-s3'; +import { Secret } from '../../aws-secretsmanager'; +import { CfnDocument, StringParameter } from '../../aws-ssm'; +import * as cdk from '../../core'; +import { + Application, + HostedConfiguration, + ConfigurationSource, + SourcedConfiguration, + DeploymentStrategy, + ConfigurationType, + ValidatorType, + JsonSchemaValidator, + ConfigurationContent, + RolloutStrategy, +} from '../lib'; + +describe('configuration', () => { + test('configuration with no environments and no deployTo prop', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + new HostedConfiguration(stack, 'MyHostedConfig', { + content: ConfigurationContent.fromInlineText('This is my content'), + application: app, + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + }); + + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Environment', 0); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'MyHostedConfig', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyHostedConfigConfigurationProfile2E1A2BBC', + }, + Content: 'This is my content', + ContentType: 'text/plain', + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 0); + }); + + test('configuration with environments and no deployTo prop', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig', { + applicationName: 'MyApplication', + }); + app.addEnvironment('MyEnv1'); + app.addEnvironment('MyEnv2'); + new HostedConfiguration(stack, 'MyHostedConfig', { + content: ConfigurationContent.fromInlineText('This is my content'), + application: app, + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'MyHostedConfig', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyHostedConfigConfigurationProfile2E1A2BBC', + }, + Content: 'This is my content', + ContentType: 'text/plain', + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Environment', 2); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 0); + }); + + test('configuration with environments and deployTo prop', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig', { + applicationName: 'MyApplication', + }); + app.addEnvironment('MyEnv1'); + const env = app.addEnvironment('MyEnv2'); + new HostedConfiguration(stack, 'MyHostedConfig', { + content: ConfigurationContent.fromInlineText('This is my content'), + application: app, + deployTo: [env], + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'MyHostedConfig', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyHostedConfigConfigurationProfile2E1A2BBC', + }, + Content: 'This is my content', + ContentType: 'text/plain', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Deployment', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + EnvironmentId: { + Ref: 'MyAppConfigMyEnv2350437D6', + }, + ConfigurationVersion: { + Ref: 'MyHostedConfig51D3877D', + }, + ConfigurationProfileId: { + Ref: 'MyHostedConfigConfigurationProfile2E1A2BBC', + }, + DeploymentStrategyId: { + Ref: 'MyDeploymentStrategy60D31FB0', + }, + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Environment', 2); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 1); + }); + + test('configuration with no environment associated and no deploy method used', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig', { + applicationName: 'MyApplication', + }); + new HostedConfiguration(stack, 'MyHostedConfig', { + content: ConfigurationContent.fromInlineText('This is my content'), + application: app, + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + }); + + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 0); + }); + + test('configuration with two configurations specified', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig', { + applicationName: 'MyApplication', + }); + const env1 = app.addEnvironment('MyEnv1'); + const env2 = app.addEnvironment('MyEnv2'); + const bucket = new Bucket(stack, 'MyBucket'); + new HostedConfiguration(stack, 'MyHostedConfig', { + content: ConfigurationContent.fromInlineText('This is my content'), + application: app, + deployTo: [env1], + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy1', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + }); + new SourcedConfiguration(stack, 'MySourcedConfig', { + versionNumber: '1', + location: ConfigurationSource.fromBucket(bucket, 'path/to/object'), + application: app, + deployTo: [env2], + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy2', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'MyHostedConfig', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: 'hosted', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyHostedConfigConfigurationProfile2E1A2BBC', + }, + Content: 'This is my content', + ContentType: 'text/plain', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'MySourcedConfig', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: { + 'Fn::Join': [ + '', + [ + 's3://', + { Ref: 'MyBucketF68F3FF0' }, + '/path/to/object', + ], + ], + }, + RetrievalRoleArn: { 'Fn::GetAtt': ['MySourcedConfigRole249449B1', 'Arn'] }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'MyDeploymentStrategy1', + DeploymentDurationInMinutes: 30, + GrowthFactor: 15, + ReplicateTo: 'NONE', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'MyDeploymentStrategy2', + DeploymentDurationInMinutes: 30, + GrowthFactor: 15, + ReplicateTo: 'NONE', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Deployment', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + EnvironmentId: { + Ref: 'MyAppConfigMyEnv1B9120FA1', + }, + ConfigurationVersion: { + Ref: 'MyHostedConfig51D3877D', + }, + ConfigurationProfileId: { + Ref: 'MyHostedConfigConfigurationProfile2E1A2BBC', + }, + DeploymentStrategyId: { + Ref: 'MyDeploymentStrategy178099446', + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Deployment', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + EnvironmentId: { + Ref: 'MyAppConfigMyEnv2350437D6', + }, + ConfigurationVersion: '1', + ConfigurationProfileId: { + Ref: 'MySourcedConfig5455C47C', + }, + DeploymentStrategyId: { + Ref: 'MyDeploymentStrategy202B80715', + }, + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::ConfigurationProfile', 2); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Environment', 2); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 2); + }); + + test('configuration with two configurations and no deployment strategy specified', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig', { + applicationName: 'MyApplication', + }); + const bucket = new Bucket(stack, 'MyBucket'); + new HostedConfiguration(stack, 'MyHostedConfig', { + content: ConfigurationContent.fromInlineText('This is my content'), + application: app, + }); + new SourcedConfiguration(stack, 'MySourcedConfig', { + versionNumber: '1', + location: ConfigurationSource.fromBucket(bucket, 'path/to/object'), + application: app, + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'MyHostedConfig-DeploymentStrategy-A5936E60', + DeploymentDurationInMinutes: 20, + GrowthFactor: 10, + ReplicateTo: 'NONE', + FinalBakeTimeInMinutes: 10, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'MySourcedConfig-DeploymentStrategy-7A104657', + DeploymentDurationInMinutes: 20, + GrowthFactor: 10, + ReplicateTo: 'NONE', + FinalBakeTimeInMinutes: 10, + }); + }); + + test('deploy secret with kms key', () => { + const stack = new cdk.Stack(); + const key = new Key(stack, 'MyKey'); + const secret = new Secret(stack, 'MySecret'); + const app = new Application(stack, 'MyAppConfig'); + new SourcedConfiguration(stack, 'MySourcedConfig', { + versionNumber: '1', + location: ConfigurationSource.fromSecret(secret), + deploymentKey: key, + application: app, + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + deployTo: [app.addEnvironment('Environment')], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Deployment', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + EnvironmentId: { + Ref: 'MyAppConfigEnvironment833A9182', + }, + ConfigurationVersion: '1', + ConfigurationProfileId: { + Ref: 'MySourcedConfig5455C47C', + }, + DeploymentStrategyId: { + Ref: 'MyDeploymentStrategy60D31FB0', + }, + KmsKeyIdentifier: { 'Fn::GetAtt': ['MyKey6AB29FA6', 'Arn'] }, + }); + }); + + test('default configuration from inline', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + new HostedConfiguration(stack, 'MyConfiguration', { + application: app, + content: ConfigurationContent.fromInlineText('This is my content'), + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + deployTo: [app.addEnvironment('Environment')], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'MyConfiguration', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: 'hosted', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyConfigurationConfigurationProfileEE0ECA85', + }, + Content: 'This is my content', + ContentType: 'text/plain', + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 1); + }); + + test('default configuration from file', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + new HostedConfiguration(stack, 'MyConfiguration', { + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + application: app, + content: ConfigurationContent.fromFile('aws-appconfig/test/config.json'), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'MyConfiguration', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: 'hosted', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyConfigurationConfigurationProfileEE0ECA85', + }, + Content: '{\n "content": "This is the configuration content"\n}', + ContentType: 'application/json', + }); + }); + + test('default configuration from inline octet', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + new HostedConfiguration(stack, 'MyConfiguration', { + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + application: app, + content: ConfigurationContent.fromInline('This should be of content type application/octet'), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'MyConfiguration', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: 'hosted', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyConfigurationConfigurationProfileEE0ECA85', + }, + Content: 'This should be of content type application/octet', + ContentType: 'application/octet-stream', + }); + }); + + test('default configuration from inline yaml', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + new HostedConfiguration(stack, 'MyConfiguration', { + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + application: app, + content: ConfigurationContent.fromInlineYaml('This should be of content type application/x-yaml'), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'MyConfiguration', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: 'hosted', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyConfigurationConfigurationProfileEE0ECA85', + }, + Content: 'This should be of content type application/x-yaml', + ContentType: 'application/x-yaml', + }); + }); + + test('configuration profile with name', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + new HostedConfiguration(stack, 'MyConfigurationProfile', { + name: 'TestConfigProfile', + application: app, + content: ConfigurationContent.fromInlineText('This is my content'), + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'TestConfigProfile', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: 'hosted', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyConfigurationProfile33A97163', + }, + Content: 'This is my content', + ContentType: 'text/plain', + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 0); + }); + + test('configuration profile with type', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + new HostedConfiguration(stack, 'MyConfigurationProfile', { + name: 'TestConfigProfile', + application: app, + type: ConfigurationType.FEATURE_FLAGS, + content: ConfigurationContent.fromInlineText('This is my content'), + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'TestConfigProfile', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + Type: 'AWS.AppConfig.FeatureFlags', + LocationUri: 'hosted', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyConfigurationProfile33A97163', + }, + Content: 'This is my content', + ContentType: 'text/plain', + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 0); + }); + + test('configuration profile with description', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + new HostedConfiguration(stack, 'MyConfigurationProfile', { + name: 'TestConfigProfile', + application: app, + content: ConfigurationContent.fromInlineText('This is my content'), + description: 'This is my description', + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'TestConfigProfile', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + Description: 'This is my description', + LocationUri: 'hosted', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyConfigurationProfile33A97163', + }, + Content: 'This is my content', + ContentType: 'text/plain', + Description: 'This is my description', + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 0); + }); + + test('configuration profile with validator', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + new HostedConfiguration(stack, 'MyConfigurationProfile', { + name: 'TestConfigProfile', + application: app, + content: ConfigurationContent.fromInlineText('This is my content'), + validators: [ + { + content: 'dummy validator', + type: ValidatorType.JSON_SCHEMA, + }, + ], + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'TestConfigProfile', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + Validators: [ + { + Type: 'JSON_SCHEMA', + Content: 'dummy validator', + }, + ], + LocationUri: 'hosted', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyConfigurationProfile33A97163', + }, + Content: 'This is my content', + ContentType: 'text/plain', + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 0); + }); + + test('configuration profile with inline json schema validator', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + const validatorContent = ` + { + "type": "object", + "properties": { + "computeResource": { + "type": "object", + "properties": { + "ComputeAL1ImageId": { + "type": "object", + "properties": { + "me-south-1": { "type": "string" }, + "ap-east-1": { "type": "string" }, + "ap-northeast-1": { "type": "string" }, + "ap-northeast-2": { "type": "string" }, + "ap-south-1": { "type": "string" }, + "ap-southeast-1": { "type": "string" }, + "ap-southeast-2": { "type": "string" }, + "ca-central-1": { "type": "string" }, + "cn-north-1": { "type": "string" }, + "cn-northwest-1": { "type": "string" }, + "eu-central-1": { "type": "string" }, + "eu-north-1": { "type": "string" }, + "eu-west-1": { "type": "string" }, + "eu-west-2": { "type": "string" }, + "eu-west-3": { "type": "string" }, + "sa-east-1": { "type": "string" }, + "us-east-1": { "type": "string" }, + "us-east-2": { "type": "string" }, + "us-gov-west-1": { "type": "string" }, + "us-gov-east-1": { "type": "string" }, + "us-west-1": { "type": "string" }, + "us-west-2": { "type": "string" }, + "eu-south-1": { "type": "string" }, + "ap-northeast-3": { "type": "string" }, + "af-south-1": { "type": "string" } + } + }, + "GPUImageId": { + "type": "object", + "properties": { + "me-south-1": { "type": "string" }, + "ap-east-1": { "type": "string" }, + "ap-northeast-1": { "type": "string" }, + "ap-northeast-2": { "type": "string" }, + "ap-south-1": { "type": "string" }, + "ap-southeast-1": { "type": "string" }, + "ap-southeast-2": { "type": "string" }, + "ca-central-1": { "type": "string" }, + "cn-north-1": { "type": "string" }, + "cn-northwest-1": { "type": "string" }, + "eu-central-1": { "type": "string" }, + "eu-north-1": { "type": "string" }, + "eu-west-1": { "type": "string" }, + "eu-west-2": { "type": "string" }, + "eu-west-3": { "type": "string" }, + "sa-east-1": { "type": "string" }, + "us-east-1": { "type": "string" }, + "us-east-2": { "type": "string" }, + "us-gov-west-1": { "type": "string" }, + "us-gov-east-1": { "type": "string" }, + "us-west-1": { "type": "string" }, + "us-west-2": { "type": "string" }, + "eu-south-1": { "type": "string" }, + "ap-northeast-3": { "type": "string" }, + "af-south-1": { "type": "string" } + } + }, + "ARMImageId": { + "type": "object", + "properties": { + "me-south-1": { "type": "string" }, + "ap-east-1": { "type": "string" }, + "ap-northeast-1": { "type": "string" }, + "ap-northeast-2": { "type": "string" }, + "ap-south-1": { "type": "string" }, + "ap-southeast-1": { "type": "string" }, + "ap-southeast-2": { "type": "string" }, + "ca-central-1": { "type": "string" }, + "cn-north-1": { "type": "string" }, + "cn-northwest-1": { "type": "string" }, + "eu-central-1": { "type": "string" }, + "eu-north-1": { "type": "string" }, + "eu-west-1": { "type": "string" }, + "eu-west-2": { "type": "string" }, + "eu-west-3": { "type": "string" }, + "sa-east-1": { "type": "string" }, + "us-east-1": { "type": "string" }, + "us-east-2": { "type": "string" }, + "us-gov-west-1": { "type": "string" }, + "us-gov-east-1": { "type": "string" }, + "us-west-1": { "type": "string" }, + "us-west-2": { "type": "string" }, + "eu-south-1": { "type": "string" }, + "ap-northeast-3": { "type": "string" }, + "af-south-1": { "type": "string" } + } + }, + "ComputeAL2ImageId": { + "type": "object", + "properties": { + "me-south-1": { "type": "string" }, + "ap-east-1": { "type": "string" }, + "ap-northeast-1": { "type": "string" }, + "ap-northeast-2": { "type": "string" }, + "ap-south-1": { "type": "string" }, + "ap-southeast-1": { "type": "string" }, + "ap-southeast-2": { "type": "string" }, + "ca-central-1": { "type": "string" }, + "cn-north-1": { "type": "string" }, + "cn-northwest-1": { "type": "string" }, + "eu-central-1": { "type": "string" }, + "eu-north-1": { "type": "string" }, + "eu-west-1": { "type": "string" }, + "eu-west-2": { "type": "string" }, + "eu-west-3": { "type": "string" }, + "sa-east-1": { "type": "string" }, + "us-east-1": { "type": "string" }, + "us-east-2": { "type": "string" }, + "us-gov-west-1": { "type": "string" }, + "us-gov-east-1": { "type": "string" }, + "us-west-1": { "type": "string" }, + "us-west-2": { "type": "string" }, + "eu-south-1": { "type": "string" }, + "ap-northeast-3": { "type": "string" }, + "af-south-1": { "type": "string" } + } + } + } + } + } + }`; + new HostedConfiguration(stack, 'MyConfiguration', { + name: 'TestConfigProfile', + application: app, + validators: [ + JsonSchemaValidator.fromInline(validatorContent), + JsonSchemaValidator.fromFile('aws-appconfig/test/schema.json'), + ], + content: ConfigurationContent.fromInlineText('This is my content'), + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'TestConfigProfile', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + Validators: [ + { + Type: 'JSON_SCHEMA', + Content: '\n {\n \"type\": \"object\",\n \"properties\": {\n \"computeResource\": {\n \"type\": \"object\",\n \"properties\": {\n \"ComputeAL1ImageId\": {\n \"type\": \"object\",\n \"properties\": {\n \"me-south-1\": { \"type\": \"string\" },\n \"ap-east-1\": { \"type\": \"string\" },\n \"ap-northeast-1\": { \"type\": \"string\" },\n \"ap-northeast-2\": { \"type\": \"string\" },\n \"ap-south-1\": { \"type\": \"string\" },\n \"ap-southeast-1\": { \"type\": \"string\" },\n \"ap-southeast-2\": { \"type\": \"string\" },\n \"ca-central-1\": { \"type\": \"string\" },\n \"cn-north-1\": { \"type\": \"string\" },\n \"cn-northwest-1\": { \"type\": \"string\" },\n \"eu-central-1\": { \"type\": \"string\" },\n \"eu-north-1\": { \"type\": \"string\" },\n \"eu-west-1\": { \"type\": \"string\" },\n \"eu-west-2\": { \"type\": \"string\" },\n \"eu-west-3\": { \"type\": \"string\" },\n \"sa-east-1\": { \"type\": \"string\" },\n \"us-east-1\": { \"type\": \"string\" },\n \"us-east-2\": { \"type\": \"string\" },\n \"us-gov-west-1\": { \"type\": \"string\" },\n \"us-gov-east-1\": { \"type\": \"string\" },\n \"us-west-1\": { \"type\": \"string\" },\n \"us-west-2\": { \"type\": \"string\" },\n \"eu-south-1\": { \"type\": \"string\" },\n \"ap-northeast-3\": { \"type\": \"string\" },\n \"af-south-1\": { \"type\": \"string\" }\n }\n },\n \"GPUImageId\": {\n \"type\": \"object\",\n \"properties\": {\n \"me-south-1\": { \"type\": \"string\" },\n \"ap-east-1\": { \"type\": \"string\" },\n \"ap-northeast-1\": { \"type\": \"string\" },\n \"ap-northeast-2\": { \"type\": \"string\" },\n \"ap-south-1\": { \"type\": \"string\" },\n \"ap-southeast-1\": { \"type\": \"string\" },\n \"ap-southeast-2\": { \"type\": \"string\" },\n \"ca-central-1\": { \"type\": \"string\" },\n \"cn-north-1\": { \"type\": \"string\" },\n \"cn-northwest-1\": { \"type\": \"string\" },\n \"eu-central-1\": { \"type\": \"string\" },\n \"eu-north-1\": { \"type\": \"string\" },\n \"eu-west-1\": { \"type\": \"string\" },\n \"eu-west-2\": { \"type\": \"string\" },\n \"eu-west-3\": { \"type\": \"string\" },\n \"sa-east-1\": { \"type\": \"string\" },\n \"us-east-1\": { \"type\": \"string\" },\n \"us-east-2\": { \"type\": \"string\" },\n \"us-gov-west-1\": { \"type\": \"string\" },\n \"us-gov-east-1\": { \"type\": \"string\" },\n \"us-west-1\": { \"type\": \"string\" },\n \"us-west-2\": { \"type\": \"string\" },\n \"eu-south-1\": { \"type\": \"string\" },\n \"ap-northeast-3\": { \"type\": \"string\" },\n \"af-south-1\": { \"type\": \"string\" }\n }\n },\n \"ARMImageId\": {\n \"type\": \"object\",\n \"properties\": {\n \"me-south-1\": { \"type\": \"string\" },\n \"ap-east-1\": { \"type\": \"string\" },\n \"ap-northeast-1\": { \"type\": \"string\" },\n \"ap-northeast-2\": { \"type\": \"string\" },\n \"ap-south-1\": { \"type\": \"string\" },\n \"ap-southeast-1\": { \"type\": \"string\" },\n \"ap-southeast-2\": { \"type\": \"string\" },\n \"ca-central-1\": { \"type\": \"string\" },\n \"cn-north-1\": { \"type\": \"string\" },\n \"cn-northwest-1\": { \"type\": \"string\" },\n \"eu-central-1\": { \"type\": \"string\" },\n \"eu-north-1\": { \"type\": \"string\" },\n \"eu-west-1\": { \"type\": \"string\" },\n \"eu-west-2\": { \"type\": \"string\" },\n \"eu-west-3\": { \"type\": \"string\" },\n \"sa-east-1\": { \"type\": \"string\" },\n \"us-east-1\": { \"type\": \"string\" },\n \"us-east-2\": { \"type\": \"string\" },\n \"us-gov-west-1\": { \"type\": \"string\" },\n \"us-gov-east-1\": { \"type\": \"string\" },\n \"us-west-1\": { \"type\": \"string\" },\n \"us-west-2\": { \"type\": \"string\" },\n \"eu-south-1\": { \"type\": \"string\" },\n \"ap-northeast-3\": { \"type\": \"string\" },\n \"af-south-1\": { \"type\": \"string\" }\n }\n },\n \"ComputeAL2ImageId\": {\n \"type\": \"object\",\n \"properties\": {\n \"me-south-1\": { \"type\": \"string\" },\n \"ap-east-1\": { \"type\": \"string\" },\n \"ap-northeast-1\": { \"type\": \"string\" },\n \"ap-northeast-2\": { \"type\": \"string\" },\n \"ap-south-1\": { \"type\": \"string\" },\n \"ap-southeast-1\": { \"type\": \"string\" },\n \"ap-southeast-2\": { \"type\": \"string\" },\n \"ca-central-1\": { \"type\": \"string\" },\n \"cn-north-1\": { \"type\": \"string\" },\n \"cn-northwest-1\": { \"type\": \"string\" },\n \"eu-central-1\": { \"type\": \"string\" },\n \"eu-north-1\": { \"type\": \"string\" },\n \"eu-west-1\": { \"type\": \"string\" },\n \"eu-west-2\": { \"type\": \"string\" },\n \"eu-west-3\": { \"type\": \"string\" },\n \"sa-east-1\": { \"type\": \"string\" },\n \"us-east-1\": { \"type\": \"string\" },\n \"us-east-2\": { \"type\": \"string\" },\n \"us-gov-west-1\": { \"type\": \"string\" },\n \"us-gov-east-1\": { \"type\": \"string\" },\n \"us-west-1\": { \"type\": \"string\" },\n \"us-west-2\": { \"type\": \"string\" },\n \"eu-south-1\": { \"type\": \"string\" },\n \"ap-northeast-3\": { \"type\": \"string\" },\n \"af-south-1\": { \"type\": \"string\" }\n }\n }\n }\n }\n }\n }', + }, + { + Type: 'JSON_SCHEMA', + Content: '{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"string\"\n}', + }, + ], + LocationUri: 'hosted', + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::HostedConfigurationVersion', { + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + ConfigurationProfileId: { + Ref: 'MyConfigurationConfigurationProfileEE0ECA85', + }, + Content: 'This is my content', + ContentType: 'text/plain', + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 0); + }); + + test('configuration profile with ssm parameter', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + const parameter = new StringParameter(stack, 'MyParameter', { + stringValue: 'This is the content stored in ssm parameter', + parameterName: 'my-parameter', + }); + new SourcedConfiguration(stack, 'MyConfiguration', { + name: 'TestConfigProfile', + location: ConfigurationSource.fromParameter(parameter), + versionNumber: '1', + application: app, + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + deployTo: [app.addEnvironment('Environment')], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'TestConfigProfile', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':ssm:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':parameter/', + { Ref: 'MyParameter18BA547D' }, + ], + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: iam.Effect.ALLOW, + Resource: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':ssm:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':parameter/', + { Ref: 'MyParameter18BA547D' }, + ], + ], + }, + Action: 'ssm:GetParameter', + }, + ], + }, + PolicyName: 'AllowAppConfigReadFromSourcePolicy', + }, + ], + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 1); + }); + + test('configuration profile with ssm document', () => { + const stack = new cdk.Stack(); + const document = new CfnDocument(stack, 'MyDocument', { + content: { + mainSteps: [ + { + action: 'aws:runShellScript', + }, + ], + }, + name: 'TestDocumentName', + }); + const app = new Application(stack, 'MyAppConfig'); + new SourcedConfiguration(stack, 'MyConfiguration', { + name: 'TestConfigProfile', + location: ConfigurationSource.fromCfnDocument(document), + versionNumber: '1', + application: app, + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + deployTo: [app.addEnvironment('Environment')], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'TestConfigProfile', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: { + 'Fn::Join': [ + '', + [ + 'ssm-document://', + { Ref: 'MyDocument' }, + ], + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: iam.Effect.ALLOW, + Resource: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':ssm:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':document/', + { Ref: 'MyDocument' }, + ], + ], + }, + Action: 'ssm:GetDocument', + }, + ], + }, + PolicyName: 'AllowAppConfigReadFromSourcePolicy', + }, + ], + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 1); + }); + + test('configuration profile with s3 object', () => { + const stack = new cdk.Stack(); + const bucket = new Bucket(stack, 'MyBucket', { + bucketName: 'bucket', + }); + const app = new Application(stack, 'MyAppConfig'); + new SourcedConfiguration(stack, 'MyConfiguration', { + name: 'TestConfigProfile', + location: ConfigurationSource.fromBucket(bucket, 'hello/file.txt'), + versionNumber: '1', + application: app, + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + deployTo: [app.addEnvironment('Environment')], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'TestConfigProfile', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: { + 'Fn::Join': [ + '', + [ + 's3://', + { Ref: 'MyBucketF68F3FF0' }, + '/hello/file.txt', + ], + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: iam.Effect.ALLOW, + Resource: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':s3:::', + { Ref: 'MyBucketF68F3FF0' }, + '/hello/file.txt', + ], + ], + }, + Action: [ + 's3:GetObject', + 's3:GetObjectMetadata', + 's3:GetObjectVersion', + ], + }, + { + Effect: iam.Effect.ALLOW, + Resource: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':s3:::', + { Ref: 'MyBucketF68F3FF0' }, + ], + ], + }, + Action: [ + 's3:GetBucketLocation', + 's3:GetBucketVersioning', + 's3:ListBucket', + 's3:ListBucketVersions', + ], + }, + { + Effect: iam.Effect.ALLOW, + Resource: '*', + Action: 's3:ListAllMyBuckets', + }, + ], + }, + PolicyName: 'AllowAppConfigReadFromSourcePolicy', + }, + ], + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 1); + }); + + test('configuration profile with codepipeline', () => { + const stack = new cdk.Stack(); + const bucket = new Bucket(stack, 'MyBucket'); + const sourceAction = new S3SourceAction({ + actionName: 'Source', + bucket: bucket, + bucketKey: 'hello/world/codepipeline.txt', + output: new Artifact('SourceOutput'), + }); + const deployAction = new S3DeployAction({ + actionName: 'Deploy', + input: Artifact.artifact('SourceOutput'), + bucket: bucket, + extract: true, + }); + const pipeline = new Pipeline(stack, 'MyPipeline', { + stages: [ + { + stageName: 'beta', + actions: [sourceAction], + }, + { + stageName: 'prod', + actions: [deployAction], + }, + ], + }); + const app = new Application(stack, 'MyAppConfig'); + new SourcedConfiguration(stack, 'MyConfiguration', { + name: 'TestConfigProfile', + location: ConfigurationSource.fromPipeline(pipeline), + application: app, + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + deployTo: [app.addEnvironment('Environment')], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'TestConfigProfile', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: { + 'Fn::Join': [ + '', + [ + 'codepipeline://', + { Ref: 'MyPipelineAED38ECF' }, + ], + ], + }, + }); + + Template.fromStack(stack).resourceCountIs('AWS::IAM::Role', 3); + Template.fromStack(stack).resourceCountIs('AWS::IAM::Policy', 3); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 0); + }); + + test('configuration profile with secretsmanager', () => { + const stack = new cdk.Stack(); + const secret = new Secret(stack, 'MySecret', { + secretStringValue: cdk.SecretValue.unsafePlainText('This is the content stored in secrets manager'), + secretName: 'secret', + }); + Object.defineProperty(secret, 'secretArn', { + value: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret', + }); + const app = new Application(stack, 'MyAppConfig'); + new SourcedConfiguration(stack, 'MyConfiguration', { + name: 'TestConfigProfile', + location: ConfigurationSource.fromSecret(secret), + versionNumber: '1', + application: app, + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + deployTo: [app.addEnvironment('Environment')], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'TestConfigProfile', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret', + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: iam.Effect.ALLOW, + Resource: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret', + Action: 'secretsmanager:GetSecretValue', + }, + ], + }, + PolicyName: 'AllowAppConfigReadFromSourcePolicy', + }, + ], + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 1); + }); + + test('configuration profile with secretsmanager and kms', () => { + const stack = new cdk.Stack(); + const key = new Key(stack, 'MyKey'); + const secret = new Secret(stack, 'MySecret', { + secretStringValue: cdk.SecretValue.unsafePlainText('This is the content stored in secrets manager'), + secretName: 'secret', + encryptionKey: key, + }); + Object.defineProperty(secret, 'secretArn', { + value: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret', + }); + const app = new Application(stack, 'MyAppConfig'); + new SourcedConfiguration(stack, 'MyConfiguration', { + name: 'TestConfigProfile', + location: ConfigurationSource.fromSecret(secret), + versionNumber: '1', + application: app, + deploymentStrategy: new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 15, + deploymentDuration: cdk.Duration.minutes(30), + }), + }), + deployTo: [app.addEnvironment('Environment')], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ConfigurationProfile', { + Name: 'TestConfigProfile', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + LocationUri: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret', + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: iam.Effect.ALLOW, + Resource: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret', + Action: 'secretsmanager:GetSecretValue', + }, + { + Effect: iam.Effect.ALLOW, + Resource: { + 'Fn::GetAtt': ['MyKey6AB29FA6', 'Arn'], + }, + Action: 'kms:Decrypt', + }, + ], + }, + PolicyName: 'AllowAppConfigReadFromSourcePolicy', + }, + ], + }); + Template.fromStack(stack).resourceCountIs('AWS::AppConfig::Deployment', 1); + }); +}); diff --git a/packages/aws-cdk-lib/aws-appconfig/test/deployment-strategy.test.ts b/packages/aws-cdk-lib/aws-appconfig/test/deployment-strategy.test.ts new file mode 100644 index 0000000000000..0692e0e528e87 --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/test/deployment-strategy.test.ts @@ -0,0 +1,283 @@ +import { Template } from '../../assertions'; +import * as cdk from '../../core'; +import { DeploymentStrategy, DeploymentStrategyId, RolloutStrategy } from '../lib'; + +describe('deployment strategy', () => { + test('default deployment strategy', () => { + const stack = new cdk.Stack(); + new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 10, + deploymentDuration: cdk.Duration.minutes(10), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'MyDeploymentStrategy', + DeploymentDurationInMinutes: 10, + GrowthFactor: 10, + ReplicateTo: 'NONE', + GrowthType: 'LINEAR', + }); + }); + + test('deployment strategy with name', () => { + const stack = new cdk.Stack(); + new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + deploymentStrategyName: 'TestDeploymentStrategy', + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 10, + deploymentDuration: cdk.Duration.minutes(10), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'TestDeploymentStrategy', + DeploymentDurationInMinutes: 10, + GrowthFactor: 10, + ReplicateTo: 'NONE', + GrowthType: 'LINEAR', + }); + }); + + test('deployment strategy duration in seconds', () => { + const stack = new cdk.Stack(); + new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + deploymentStrategyName: 'TestDeploymentStrategy', + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 10, + deploymentDuration: cdk.Duration.seconds(120), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'TestDeploymentStrategy', + DeploymentDurationInMinutes: 2, + GrowthFactor: 10, + ReplicateTo: 'NONE', + GrowthType: 'LINEAR', + }); + }); + + test('deployment strategy with description', () => { + const stack = new cdk.Stack(); + new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + deploymentStrategyName: 'TestDeploymentStrategy', + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 10, + deploymentDuration: cdk.Duration.minutes(10), + }), + description: 'This is my description', + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'TestDeploymentStrategy', + DeploymentDurationInMinutes: 10, + GrowthFactor: 10, + ReplicateTo: 'NONE', + Description: 'This is my description', + GrowthType: 'LINEAR', + }); + }); + + test('deployment strategy with final bake time', () => { + const stack = new cdk.Stack(); + new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + deploymentStrategyName: 'TestDeploymentStrategy', + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 10, + deploymentDuration: cdk.Duration.minutes(10), + finalBakeTime: cdk.Duration.minutes(30), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'TestDeploymentStrategy', + DeploymentDurationInMinutes: 10, + GrowthFactor: 10, + ReplicateTo: 'NONE', + FinalBakeTimeInMinutes: 30, + GrowthType: 'LINEAR', + }); + }); + + test('deployment strategy with growth type', () => { + const stack = new cdk.Stack(); + new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + deploymentStrategyName: 'TestDeploymentStrategy', + rolloutStrategy: RolloutStrategy.exponential({ + growthFactor: 10, + deploymentDuration: cdk.Duration.minutes(10), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'TestDeploymentStrategy', + DeploymentDurationInMinutes: 10, + GrowthFactor: 10, + ReplicateTo: 'NONE', + GrowthType: 'EXPONENTIAL', + }); + }); + + test('deployment strategy with replicate to', () => { + const stack = new cdk.Stack(); + new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + deploymentStrategyName: 'TestDeploymentStrategy', + rolloutStrategy: RolloutStrategy.linear({ + growthFactor: 10, + deploymentDuration: cdk.Duration.minutes(10), + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'TestDeploymentStrategy', + DeploymentDurationInMinutes: 10, + GrowthFactor: 10, + ReplicateTo: 'NONE', + GrowthType: 'LINEAR', + }); + }); + + test('from deployment strategy arn', () => { + const stack = new cdk.Stack(); + const deploymentStrategy = DeploymentStrategy.fromDeploymentStrategyArn(stack, 'MyDeploymentStrategy', + 'arn:aws:appconfig:us-west-2:123456789012:deploymentstrategy/abc123'); + + expect(deploymentStrategy.deploymentStrategyId).toEqual('abc123'); + expect(deploymentStrategy.env.account).toEqual('123456789012'); + expect(deploymentStrategy.env.region).toEqual('us-west-2'); + }); + + test('from deployment strategy arn with no resource name', () => { + const stack = new cdk.Stack(); + expect(() => { + DeploymentStrategy.fromDeploymentStrategyArn(stack, 'MyDeploymentStrategy', + 'arn:aws:appconfig:us-west-2:123456789012:deploymentstrategy/'); + }).toThrow('Missing required deployment strategy id from deployment strategy ARN'); + }); + + test('from deployment strategy id', () => { + const cdkApp = new cdk.App(); + const stack = new cdk.Stack(cdkApp, 'Stack', { + env: { + region: 'us-west-2', + account: '123456789012', + }, + }); + const deploymentStrategy = DeploymentStrategy.fromDeploymentStrategyId(stack, 'MyDeploymentStrategy', DeploymentStrategyId.fromString('abc123')); + + expect(deploymentStrategy.deploymentStrategyId).toEqual('abc123'); + expect(deploymentStrategy.env.account).toEqual('123456789012'); + expect(deploymentStrategy.env.region).toEqual('us-west-2'); + }); + + test('from predefined all at once deployment strategy id', () => { + const cdkApp = new cdk.App(); + const stack = new cdk.Stack(cdkApp, 'Stack', { + env: { + region: 'us-west-2', + account: '123456789012', + }, + }); + const deploymentStrategy = DeploymentStrategy.fromDeploymentStrategyId(stack, 'MyDeploymentStrategy', DeploymentStrategyId.ALL_AT_ONCE); + + expect(deploymentStrategy.deploymentStrategyId).toEqual('AppConfig.AllAtOnce'); + expect(deploymentStrategy.env.account).toEqual('123456789012'); + expect(deploymentStrategy.env.region).toEqual('us-west-2'); + }); + + test('from predefined canary deployment strategy id', () => { + const cdkApp = new cdk.App(); + const stack = new cdk.Stack(cdkApp, 'Stack', { + env: { + region: 'us-west-2', + account: '123456789012', + }, + }); + const deploymentStrategy = DeploymentStrategy.fromDeploymentStrategyId(stack, 'MyDeploymentStrategy', DeploymentStrategyId.CANARY_10_PERCENT_20_MINUTES); + + expect(deploymentStrategy.deploymentStrategyId).toEqual('AppConfig.Canary10Percent20Minutes'); + expect(deploymentStrategy.env.account).toEqual('123456789012'); + expect(deploymentStrategy.env.region).toEqual('us-west-2'); + }); + + test('from predefined linear deployment strategy id', () => { + const cdkApp = new cdk.App(); + const stack = new cdk.Stack(cdkApp, 'Stack', { + env: { + region: 'us-west-2', + account: '123456789012', + }, + }); + const deploymentStrategy = DeploymentStrategy.fromDeploymentStrategyId(stack, 'MyDeploymentStrategy', DeploymentStrategyId.LINEAR_50_PERCENT_EVERY_30_SECONDS); + + expect(deploymentStrategy.deploymentStrategyId).toEqual('AppConfig.Linear50PercentEvery30Seconds'); + expect(deploymentStrategy.env.account).toEqual('123456789012'); + expect(deploymentStrategy.env.region).toEqual('us-west-2'); + }); + + test('all at once deployment strategy with no bake time', () => { + const stack = new cdk.Stack(); + new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.ALL_AT_ONCE, + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'MyDeploymentStrategy', + DeploymentDurationInMinutes: 0, + GrowthFactor: 100, + FinalBakeTimeInMinutes: 10, + ReplicateTo: 'NONE', + GrowthType: 'LINEAR', + }); + }); + + test('all at once deployment strategy with bake time', () => { + const stack = new cdk.Stack(); + new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.ALL_AT_ONCE, + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'MyDeploymentStrategy', + DeploymentDurationInMinutes: 0, + GrowthFactor: 100, + FinalBakeTimeInMinutes: 10, + ReplicateTo: 'NONE', + GrowthType: 'LINEAR', + }); + }); + + test('canary deployment strategy with no bake time', () => { + const stack = new cdk.Stack(); + new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.CANARY_10_PERCENT_20_MINUTES, + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'MyDeploymentStrategy', + DeploymentDurationInMinutes: 20, + GrowthFactor: 10, + FinalBakeTimeInMinutes: 10, + ReplicateTo: 'NONE', + GrowthType: 'EXPONENTIAL', + }); + }); + + test('linear deployment strategy with no bake time', () => { + const stack = new cdk.Stack(); + new DeploymentStrategy(stack, 'MyDeploymentStrategy', { + rolloutStrategy: RolloutStrategy.LINEAR_50_PERCENT_EVERY_30_SECONDS, + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::DeploymentStrategy', { + Name: 'MyDeploymentStrategy', + DeploymentDurationInMinutes: 1, + GrowthFactor: 50, + FinalBakeTimeInMinutes: 1, + ReplicateTo: 'NONE', + GrowthType: 'LINEAR', + }); + }); +}); \ No newline at end of file diff --git a/packages/aws-cdk-lib/aws-appconfig/test/environment.test.ts b/packages/aws-cdk-lib/aws-appconfig/test/environment.test.ts new file mode 100644 index 0000000000000..dd2e5e278482f --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/test/environment.test.ts @@ -0,0 +1,539 @@ +import { Template } from '../../assertions'; +import { Alarm, CompositeAlarm, Metric } from '../../aws-cloudwatch'; +import * as iam from '../../aws-iam'; +import * as cdk from '../../core'; +import { Application, Environment, Monitor } from '../lib'; + +describe('environment', () => { + test('default environment', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + new Environment(stack, 'MyEnvironment', { + application: app, + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Environment', { + Name: 'MyEnvironment', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + }); + }); + + test('environment with name', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + new Environment(stack, 'MyEnvironment', { + environmentName: 'TestEnv', + application: app, + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Environment', { + Name: 'TestEnv', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + }); + }); + + test('environment with description', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + new Environment(stack, 'MyEnvironment', { + environmentName: 'TestEnv', + application: app, + description: 'This is my description', + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Environment', { + Name: 'TestEnv', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + Description: 'This is my description', + }); + }); + + test('environment with monitors with alarm and alarmRole', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + const alarm = new Alarm(stack, 'Alarm', { + threshold: 5, + evaluationPeriods: 5, + metric: new Metric( + { + namespace: 'aws', + metricName: 'myMetric', + }, + ), + }); + const alarmRole = new iam.Role(stack, 'Role', { + assumedBy: new iam.ServicePrincipal('appconfig.amazonaws.com'), + }); + const env = new Environment(stack, 'MyEnvironment', { + environmentName: 'TestEnv', + application: app, + monitors: [Monitor.fromCloudWatchAlarm(alarm, alarmRole)], + }); + + Template.fromStack(stack).resourceCountIs('AWS::CloudWatch::Alarm', 1); + Template.fromStack(stack).resourceCountIs('AWS::IAM::Role', 1); + expect(env).toBeDefined(); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Environment', { + Name: 'TestEnv', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + Monitors: [ + { + AlarmArn: { + 'Fn::GetAtt': [ + 'Alarm7103F465', + 'Arn', + ], + }, + AlarmRoleArn: { + 'Fn::GetAtt': [ + 'Role1ABCC5F0', + 'Arn', + ], + }, + }, + ], + }); + }); + + test('environment with monitors with only alarm', () => { + const stack = new cdk.Stack(); + const alarm = new Alarm(stack, 'Alarm', { + threshold: 5, + evaluationPeriods: 5, + metric: new Metric( + { + namespace: 'aws', + metricName: 'myMetric', + }, + ), + }); + const app = new Application(stack, 'MyAppConfig'); + const env = new Environment(stack, 'MyEnvironment', { + environmentName: 'TestEnv', + application: app, + monitors: [Monitor.fromCloudWatchAlarm(alarm)], + }); + + expect(env).toBeDefined(); + Template.fromStack(stack).resourceCountIs('AWS::CloudWatch::Alarm', 1); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Environment', { + Name: 'TestEnv', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + Monitors: [ + { + AlarmArn: { + 'Fn::GetAtt': [ + 'Alarm7103F465', + 'Arn', + ], + }, + AlarmRoleArn: { + 'Fn::GetAtt': [ + 'MyEnvironmentRole1E6113D2F07A1', + 'Arn', + ], + }, + }, + ], + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: iam.Effect.ALLOW, + Resource: '*', + Action: 'cloudwatch:DescribeAlarms', + }, + ], + }, + PolicyName: 'AllowAppConfigMonitorAlarmPolicy', + }, + ], + }); + }); + + test('environment with CfnMonitorsProperty monitor', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + const env = new Environment(stack, 'MyEnvironment', { + environmentName: 'TestEnv', + application: app, + monitors: [ + Monitor.fromCfnMonitorsProperty({ + alarmArn: 'thisismyalarm', + }), + ], + }); + + expect(env).toBeDefined(); + Template.fromStack(stack).resourceCountIs('AWS::CloudWatch::Alarm', 0); + Template.fromStack(stack).resourceCountIs('AWS::IAM::Role', 0); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Environment', { + Name: 'TestEnv', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + Monitors: [ + { + AlarmArn: 'thisismyalarm', + }, + ], + }); + }); + + test('environment with CfnMonitorsProperty monitor with roleArn', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + const env = new Environment(stack, 'MyEnvironment', { + environmentName: 'TestEnv', + application: app, + monitors: [ + Monitor.fromCfnMonitorsProperty({ + alarmArn: 'thisismyalarm', + alarmRoleArn: 'thisismyalarmrolearn', + }), + ], + }); + + expect(env).toBeDefined(); + Template.fromStack(stack).resourceCountIs('AWS::CloudWatch::Alarm', 0); + Template.fromStack(stack).resourceCountIs('AWS::IAM::Role', 0); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Environment', { + Name: 'TestEnv', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + Monitors: [ + { + AlarmArn: 'thisismyalarm', + AlarmRoleArn: 'thisismyalarmrolearn', + }, + ], + }); + }); + + test('environment with composite alarm', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + const alarm = new Alarm(stack, 'Alarm', { + threshold: 5, + evaluationPeriods: 5, + metric: new Metric( + { + namespace: 'aws', + metricName: 'myMetric', + }, + ), + }); + const compositeAlarm = new CompositeAlarm(stack, 'MyCompositeAlarm', { + alarmRule: alarm, + }); + const env = new Environment(stack, 'MyEnvironment', { + environmentName: 'TestEnv', + application: app, + monitors: [ + Monitor.fromCloudWatchAlarm(compositeAlarm), + ], + }); + + expect(env).toBeDefined(); + Template.fromStack(stack).resourceCountIs('AWS::CloudWatch::Alarm', 1); + Template.fromStack(stack).resourceCountIs('AWS::CloudWatch::CompositeAlarm', 1); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Environment', { + Name: 'TestEnv', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + Monitors: [ + { + AlarmArn: { + 'Fn::GetAtt': [ + 'MyCompositeAlarm0F045229', + 'Arn', + ], + }, + AlarmRoleArn: { + 'Fn::GetAtt': [ + 'MyEnvironmentRole1E6113D2F07A1', + 'Arn', + ], + }, + }, + ], + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: iam.Effect.ALLOW, + Resource: '*', + Action: 'cloudwatch:DescribeAlarms', + }, + ], + }, + PolicyName: 'AllowAppConfigMonitorAlarmPolicy', + }, + ], + }); + }); + + test('environment with two composite alarms', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + const alarm = new Alarm(stack, 'Alarm', { + threshold: 5, + evaluationPeriods: 5, + metric: new Metric( + { + namespace: 'aws', + metricName: 'myMetric', + }, + ), + }); + const compositeAlarm1 = new CompositeAlarm(stack, 'MyCompositeAlarm1', { + alarmRule: alarm, + }); + const compositeAlarm2 = new CompositeAlarm(stack, 'MyCompositeAlarm2', { + alarmRule: alarm, + }); + const env = new Environment(stack, 'MyEnvironment', { + environmentName: 'TestEnv', + application: app, + monitors: [ + Monitor.fromCloudWatchAlarm(compositeAlarm1), + Monitor.fromCloudWatchAlarm(compositeAlarm2), + ], + }); + + expect(env).toBeDefined(); + Template.fromStack(stack).resourceCountIs('AWS::CloudWatch::Alarm', 1); + Template.fromStack(stack).resourceCountIs('AWS::CloudWatch::CompositeAlarm', 2); + Template.fromStack(stack).resourceCountIs('AWS::IAM::Role', 1); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Environment', { + Name: 'TestEnv', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + Monitors: [ + { + AlarmArn: { + 'Fn::GetAtt': [ + 'MyCompositeAlarm159A950D0', + 'Arn', + ], + }, + AlarmRoleArn: { + 'Fn::GetAtt': [ + 'MyEnvironmentRole1E6113D2F07A1', + 'Arn', + ], + }, + }, + { + AlarmArn: { + 'Fn::GetAtt': [ + 'MyCompositeAlarm2195BFA48', + 'Arn', + ], + }, + AlarmRoleArn: { + 'Fn::GetAtt': [ + 'MyEnvironmentRole1E6113D2F07A1', + 'Arn', + ], + }, + }, + ], + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: iam.Effect.ALLOW, + Resource: '*', + Action: 'cloudwatch:DescribeAlarms', + }, + ], + }, + PolicyName: 'AllowAppConfigMonitorAlarmPolicy', + }, + ], + }); + }); + + test('environment with monitors with multiple alarms', () => { + const stack = new cdk.Stack(); + const app = new Application(stack, 'MyAppConfig'); + const alarm1 = new Alarm(stack, 'Alarm1', { + threshold: 5, + evaluationPeriods: 5, + metric: new Metric( + { + namespace: 'aws', + metricName: 'myMetric', + }, + ), + }); + const alarm2 = new Alarm(stack, 'Alarm2', { + threshold: 5, + evaluationPeriods: 5, + metric: new Metric( + { + namespace: 'aws', + metricName: 'myMetric', + }, + ), + }); + const alarm3 = new Alarm(stack, 'Alarm3', { + threshold: 5, + evaluationPeriods: 5, + metric: new Metric( + { + namespace: 'aws', + metricName: 'myMetric', + }, + ), + }); + new Environment(stack, 'MyEnvironment', { + environmentName: 'TestEnv', + application: app, + monitors: [ + Monitor.fromCloudWatchAlarm(alarm1), + Monitor.fromCloudWatchAlarm(alarm2), + Monitor.fromCloudWatchAlarm(alarm3), + ], + }); + + Template.fromStack(stack).resourceCountIs('AWS::CloudWatch::Alarm', 3); + Template.fromStack(stack).resourceCountIs('AWS::IAM::Role', 1); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Environment', { + Name: 'TestEnv', + ApplicationId: { + Ref: 'MyAppConfigB4B63E75', + }, + Monitors: [ + { + AlarmArn: { + 'Fn::GetAtt': [ + 'Alarm1F9009D71', + 'Arn', + ], + }, + AlarmRoleArn: { + 'Fn::GetAtt': [ + 'MyEnvironmentRole1E6113D2F07A1', + 'Arn', + ], + }, + }, + { + AlarmArn: { + 'Fn::GetAtt': [ + 'Alarm2A7122E13', + 'Arn', + ], + }, + AlarmRoleArn: { + 'Fn::GetAtt': [ + 'MyEnvironmentRole1E6113D2F07A1', + 'Arn', + ], + }, + }, + { + AlarmArn: { + 'Fn::GetAtt': [ + 'Alarm32341D8D9', + 'Arn', + ], + }, + AlarmRoleArn: { + 'Fn::GetAtt': [ + 'MyEnvironmentRole1E6113D2F07A1', + 'Arn', + ], + }, + }, + ], + }); + }); + + test('from environment arn', () => { + const stack = new cdk.Stack(); + const env = Environment.fromEnvironmentArn(stack, 'MyEnvironment', + 'arn:aws:appconfig:us-west-2:123456789012:application/abc123/environment/def456'); + + expect(env.applicationId).toEqual('abc123'); + expect(env.environmentId).toEqual('def456'); + expect(env.env.account).toEqual('123456789012'); + expect(env.env.region).toEqual('us-west-2'); + }); + + test('from environment arn with no resource name', () => { + const stack = new cdk.Stack(); + expect(() => { + Environment.fromEnvironmentArn(stack, 'MyEnvironment', + 'arn:aws:appconfig:us-west-2:123456789012:application/'); + }).toThrow('Missing required /$/{applicationId}/environment//$/{environmentId} from environment ARN:'); + }); + + test('from environment arn with missing slash', () => { + const stack = new cdk.Stack(); + expect(() => { + Environment.fromEnvironmentArn(stack, 'MyEnvironment', + 'arn:aws:appconfig:us-west-2:123456789012:application/abc123environment/def456'); + }).toThrow('Missing required parameters for environment ARN: format should be /$/{applicationId}/environment//$/{environmentId}'); + }); + + test('from environment arn with no application id', () => { + const stack = new cdk.Stack(); + expect(() => { + Environment.fromEnvironmentArn(stack, 'MyEnvironment', + 'arn:aws:appconfig:us-west-2:123456789012:application//environment/def456'); + }).toThrow('Missing required parameters for environment ARN: format should be /$/{applicationId}/environment//$/{environmentId}'); + }); + + test('from environment arn with no environment id', () => { + const stack = new cdk.Stack(); + expect(() => { + Environment.fromEnvironmentArn(stack, 'MyEnvironment', + 'arn:aws:appconfig:us-west-2:123456789012:application/abc123/environment/'); + }).toThrow('Missing required parameters for environment ARN: format should be /$/{applicationId}/environment//$/{environmentId}'); + }); + + test('from environment attributes', () => { + const app = new cdk.App(); + const stack = new cdk.Stack(app, 'Stack', { + env: { + region: 'us-west-2', + account: '123456789012', + }, + }); + const appConfigApp = new Application(stack, 'MyAppConfig'); + const env = Environment.fromEnvironmentAttributes(stack, 'MyEnvironment', { + application: appConfigApp, + environmentId: 'def456', + }); + + expect(env.environmentId).toEqual('def456'); + expect(env.applicationId).toBeDefined(); + expect(env.env.account).toEqual('123456789012'); + expect(env.env.region).toEqual('us-west-2'); + }); +}); diff --git a/packages/aws-cdk-lib/aws-appconfig/test/extension.test.ts b/packages/aws-cdk-lib/aws-appconfig/test/extension.test.ts new file mode 100644 index 0000000000000..81e7aea3d68d8 --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/test/extension.test.ts @@ -0,0 +1,663 @@ +import { Template } from '../../assertions'; +import { EventBus } from '../../aws-events'; +import { Effect, Role, ServicePrincipal } from '../../aws-iam'; +import * as lambda from '../../aws-lambda'; +import { Topic } from '../../aws-sns'; +import { Queue } from '../../aws-sqs'; +import * as cdk from '../../core'; +import { + Action, + ActionPoint, + Application, + ConfigurationContent, + Extension, + HostedConfiguration, + Parameter, + LambdaDestination, + SqsDestination, + SnsDestination, + EventBridgeDestination, +} from '../lib'; + +describe('extension', () => { + test('simple extension with lambda', () => { + const stack = new cdk.Stack(); + const func = new lambda.Function(stack, 'MyFunction', { + runtime: lambda.Runtime.PYTHON_3_8, + code: lambda.Code.fromInline('# dummy func'), + handler: 'index.handler', + }); + new Extension(stack, 'MyExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_COMPLETE, + ActionPoint.ON_DEPLOYMENT_ROLLED_BACK, + ], + eventDestination: new LambdaDestination(func), + }), + ], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyExtension', + Actions: { + ON_DEPLOYMENT_COMPLETE: [ + { + Name: 'MyExtension-0', + RoleArn: { 'Fn::GetAtt': ['MyExtensionRole467D6FCDEEFA5', 'Arn'] }, + Uri: { 'Fn::GetAtt': ['MyFunction3BAA72D1', 'Arn'] }, + }, + ], + ON_DEPLOYMENT_ROLLED_BACK: [ + { + Name: 'MyExtension-0', + RoleArn: { 'Fn::GetAtt': ['MyExtensionRole467D6FCDEEFA5', 'Arn'] }, + Uri: { 'Fn::GetAtt': ['MyFunction3BAA72D1', 'Arn'] }, + }, + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: Effect.ALLOW, + Resource: { 'Fn::GetAtt': ['MyFunction3BAA72D1', 'Arn'] }, + Action: [ + 'lambda:InvokeFunction', + 'lambda:InvokeAsync', + ], + }, + ], + }, + PolicyName: 'AllowAppConfigInvokeExtensionEventSourcePolicy', + }, + ], + }); + }); + + test('simple extension with two lambdas', () => { + const stack = new cdk.Stack(); + const func1 = new lambda.Function(stack, 'MyFunction1', { + runtime: lambda.Runtime.PYTHON_3_8, + code: lambda.Code.fromInline('# dummy func'), + handler: 'index.handler', + }); + const func2 = new lambda.Function(stack, 'MyFunction2', { + runtime: lambda.Runtime.PYTHON_3_8, + code: lambda.Code.fromInline('# dummy func'), + handler: 'index.handler', + }); + Object.defineProperty(func1, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-function', + }); + Object.defineProperty(func2, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-diff-function', + }); + new Extension(stack, 'MyExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_COMPLETE, + ], + eventDestination: new LambdaDestination(func1), + }), + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_ROLLED_BACK, + ], + eventDestination: new LambdaDestination(func2), + }), + ], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyExtension', + Actions: { + ON_DEPLOYMENT_COMPLETE: [ + { + Name: 'MyExtension-0', + RoleArn: { 'Fn::GetAtt': ['MyExtensionRole467D6FCDEEFA5', 'Arn'] }, + Uri: 'arn:lambda:us-east-1:123456789012:function:my-function', + }, + ], + ON_DEPLOYMENT_ROLLED_BACK: [ + { + Name: 'MyExtension-1', + RoleArn: { 'Fn::GetAtt': ['MyExtensionRoleBE614F182C70A', 'Arn'] }, + Uri: 'arn:lambda:us-east-1:123456789012:function:my-diff-function', + }, + ], + }, + }); + Template.fromStack(stack).resourcePropertiesCountIs('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: Effect.ALLOW, + Resource: 'arn:lambda:us-east-1:123456789012:function:my-function', + Action: [ + 'lambda:InvokeFunction', + 'lambda:InvokeAsync', + ], + }, + ], + }, + PolicyName: 'AllowAppConfigInvokeExtensionEventSourcePolicy', + }, + ], + }, 1); + Template.fromStack(stack).resourcePropertiesCountIs('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: Effect.ALLOW, + Resource: 'arn:lambda:us-east-1:123456789012:function:my-diff-function', + Action: [ + 'lambda:InvokeFunction', + 'lambda:InvokeAsync', + ], + }, + ], + }, + PolicyName: 'AllowAppConfigInvokeExtensionEventSourcePolicy', + }, + ], + }, 1); + }); + + test('extension with all props using lambda', () => { + const stack = new cdk.Stack(); + const func = new lambda.Function(stack, 'MyFunction', { + runtime: lambda.Runtime.PYTHON_3_8, + code: lambda.Code.fromInline('# dummy func'), + handler: 'index.handler', + }); + Object.defineProperty(func, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-function', + }); + const appconfig = new Application(stack, 'MyApplication', { + applicationName: 'MyApplication', + }); + const ext = new Extension(stack, 'MyExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_COMPLETE, + ], + eventDestination: new LambdaDestination(func), + }), + ], + extensionName: 'TestExtension', + description: 'This is my extension', + parameters: [ + Parameter.required('testVariable', 'hello'), + Parameter.notRequired('testNotRequiredVariable'), + ], + latestVersionNumber: 1, + }); + appconfig.addExtension(ext); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'TestExtension', + Actions: { + ON_DEPLOYMENT_COMPLETE: [ + { + Name: 'TestExtension-0', + RoleArn: { 'Fn::GetAtt': ['MyExtensionRoleCA98491716207', 'Arn'] }, + Uri: 'arn:lambda:us-east-1:123456789012:function:my-function', + }, + ], + }, + Description: 'This is my extension', + Parameters: { + testVariable: { Required: true }, + testNotRequiredVariable: { Required: false }, + }, + LatestVersionNumber: 1, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ExtensionAssociation', { + ExtensionIdentifier: { + 'Fn::GetAtt': ['MyExtension89A915D0', 'Id'], + }, + ExtensionVersionNumber: { + 'Fn::GetAtt': ['MyExtension89A915D0', 'VersionNumber'], + }, + Parameters: { + testVariable: 'hello', + }, + ResourceIdentifier: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':appconfig:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':application/', + { Ref: 'MyApplication5C63EC1D' }, + ], + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: Effect.ALLOW, + Resource: 'arn:lambda:us-east-1:123456789012:function:my-function', + Action: [ + 'lambda:InvokeFunction', + 'lambda:InvokeAsync', + ], + }, + ], + }, + PolicyName: 'AllowAppConfigInvokeExtensionEventSourcePolicy', + }, + ], + }); + }); + + test('extension with queue', () => { + const stack = new cdk.Stack(); + const queue = new Queue(stack, 'MyQueue'); + Object.defineProperty(queue, 'queueArn', { + value: 'arn:sqs:us-east-1:123456789012:my-queue', + }); + new Extension(stack, 'MyExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_ROLLED_BACK, + ], + eventDestination: new SqsDestination(queue), + name: 'ActionTestName', + description: 'This is my action description', + }), + ], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyExtension', + Actions: { + ON_DEPLOYMENT_ROLLED_BACK: [ + { + Description: 'This is my action description', + Name: 'ActionTestName', + RoleArn: { 'Fn::GetAtt': ['MyExtensionRole76B022BC4F2BC', 'Arn'] }, + Uri: 'arn:sqs:us-east-1:123456789012:my-queue', + }, + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: Effect.ALLOW, + Resource: 'arn:sqs:us-east-1:123456789012:my-queue', + Action: 'sqs:SendMessage', + }, + ], + }, + PolicyName: 'AllowAppConfigInvokeExtensionEventSourcePolicy', + }, + ], + }); + }); + + test('extension with topic', () => { + const stack = new cdk.Stack(); + const topic = new Topic(stack, 'MyTopic'); + Object.defineProperty(topic, 'topicArn', { + value: 'arn:sns:us-east-1:123456789012:my-topic', + }); + new Extension(stack, 'MyExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_BAKING, + ], + eventDestination: new SnsDestination(topic), + }), + ], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyExtension', + Actions: { + ON_DEPLOYMENT_BAKING: [ + { + Name: 'MyExtension-0', + RoleArn: { 'Fn::GetAtt': ['MyExtensionRole467D6FCDEEFA5', 'Arn'] }, + Uri: 'arn:sns:us-east-1:123456789012:my-topic', + }, + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: Effect.ALLOW, + Resource: 'arn:sns:us-east-1:123456789012:my-topic', + Action: 'sns:Publish', + }, + ], + }, + PolicyName: 'AllowAppConfigInvokeExtensionEventSourcePolicy', + }, + ], + }); + }); + + test('extension with bus', () => { + const stack = new cdk.Stack(); + const bus = new EventBus(stack, 'MyEventBus'); + Object.defineProperty(bus, 'eventBusArn', { + value: 'arn:aws:events:us-east-1:123456789012:event-bus/aws.partner/PartnerName/acct1/repo1', + }); + new Extension(stack, 'MyExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_BAKING, + ], + eventDestination: new EventBridgeDestination(bus), + }), + ], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyExtension', + Actions: { + ON_DEPLOYMENT_BAKING: [ + { + Name: 'MyExtension-0', + Uri: 'arn:aws:events:us-east-1:123456789012:event-bus/aws.partner/PartnerName/acct1/repo1', + }, + ], + }, + }); + Template.fromStack(stack).resourceCountIs('AWS::IAM::Role', 0); + }); + + test('extension with associated environment', () => { + const stack = new cdk.Stack(); + const func = new lambda.Function(stack, 'MyFunction', { + runtime: lambda.Runtime.PYTHON_3_8, + code: lambda.Code.fromInline('# dummy func'), + handler: 'index.handler', + }); + Object.defineProperty(func, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-function', + }); + const app = new Application(stack, 'MyApplication'); + const env = app.addEnvironment('MyEnvironment'); + const ext = new Extension(stack, 'MyExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_COMPLETE, + ], + eventDestination: new LambdaDestination(func), + }), + ], + }); + env.addExtension(ext); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyExtension', + Actions: { + ON_DEPLOYMENT_COMPLETE: [ + { + Name: 'MyExtension-0', + RoleArn: { 'Fn::GetAtt': ['MyExtensionRole467D6FCDEEFA5', 'Arn'] }, + Uri: 'arn:lambda:us-east-1:123456789012:function:my-function', + }, + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ExtensionAssociation', { + ExtensionIdentifier: { + 'Fn::GetAtt': ['MyExtension89A915D0', 'Id'], + }, + ExtensionVersionNumber: { + 'Fn::GetAtt': ['MyExtension89A915D0', 'VersionNumber'], + }, + ResourceIdentifier: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':appconfig:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':application/', + { Ref: 'MyApplication5C63EC1D' }, + '/environment/', + { Ref: 'MyApplicationMyEnvironment10D94356' }, + ], + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: Effect.ALLOW, + Resource: 'arn:lambda:us-east-1:123456789012:function:my-function', + Action: [ + 'lambda:InvokeFunction', + 'lambda:InvokeAsync', + ], + }, + ], + }, + PolicyName: 'AllowAppConfigInvokeExtensionEventSourcePolicy', + }, + ], + }); + }); + + test('extension with associated configuration profile', () => { + const stack = new cdk.Stack(); + const func = new lambda.Function(stack, 'MyFunction', { + runtime: lambda.Runtime.PYTHON_3_8, + code: lambda.Code.fromInline('# dummy func'), + handler: 'index.handler', + }); + Object.defineProperty(func, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-function', + }); + const app = new Application(stack, 'MyApplication'); + const configProfile = new HostedConfiguration(stack, 'MyConfiguration', { + application: app, + content: ConfigurationContent.fromInlineJson('This is my content.'), + }); + const ext = new Extension(stack, 'MyExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_COMPLETE, + ], + eventDestination: new LambdaDestination(func), + }), + ], + }); + configProfile.addExtension(ext); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyExtension', + Actions: { + ON_DEPLOYMENT_COMPLETE: [ + { + Name: 'MyExtension-0', + RoleArn: { 'Fn::GetAtt': ['MyExtensionRole467D6FCDEEFA5', 'Arn'] }, + Uri: 'arn:lambda:us-east-1:123456789012:function:my-function', + }, + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::ExtensionAssociation', { + ExtensionIdentifier: { + 'Fn::GetAtt': ['MyExtension89A915D0', 'Id'], + }, + ExtensionVersionNumber: { + 'Fn::GetAtt': ['MyExtension89A915D0', 'VersionNumber'], + }, + ResourceIdentifier: { + 'Fn::Join': [ + '', + [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':appconfig:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':application/', + { Ref: 'MyApplication5C63EC1D' }, + '/configurationprofile/', + { Ref: 'MyConfigurationConfigurationProfileEE0ECA85' }, + ], + ], + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::IAM::Role', { + Policies: [ + { + PolicyDocument: { + Statement: [ + { + Effect: Effect.ALLOW, + Resource: 'arn:lambda:us-east-1:123456789012:function:my-function', + Action: [ + 'lambda:InvokeFunction', + 'lambda:InvokeAsync', + ], + }, + ], + }, + PolicyName: 'AllowAppConfigInvokeExtensionEventSourcePolicy', + }, + ], + }); + }); + + test('extension with execution role', () => { + const stack = new cdk.Stack(); + const func = new lambda.Function(stack, 'MyFunction', { + runtime: lambda.Runtime.PYTHON_3_8, + code: lambda.Code.fromInline('# dummy func'), + handler: 'index.handler', + }); + Object.defineProperty(func, 'functionArn', { + value: 'arn:lambda:us-east-1:123456789012:function:my-function', + }); + const role = new Role(stack, 'MyRole', { + assumedBy: new ServicePrincipal('appconfig.amazonaws.com'), + }); + Object.defineProperty(role, 'roleArn', { + value: 'arn:iam::123456789012:role/my-role', + }); + new Extension(stack, 'MyExtension', { + actions: [ + new Action({ + actionPoints: [ + ActionPoint.ON_DEPLOYMENT_COMPLETE, + ], + eventDestination: new LambdaDestination(func), + executionRole: role, + }), + ], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::AppConfig::Extension', { + Name: 'MyExtension', + Actions: { + ON_DEPLOYMENT_COMPLETE: [ + { + Name: 'MyExtension-0', + RoleArn: 'arn:iam::123456789012:role/my-role', + Uri: 'arn:lambda:us-east-1:123456789012:function:my-function', + }, + ], + }, + }); + }); + + test('from extension arn', () => { + const stack = new cdk.Stack(); + const extension = Extension.fromExtensionArn(stack, 'MyExtension', + 'arn:aws:appconfig:us-west-2:123456789012:extension/abc123/1'); + + expect(extension.extensionId).toEqual('abc123'); + expect(extension.extensionVersionNumber).toEqual(1); + expect(extension.env.account).toEqual('123456789012'); + expect(extension.env.region).toEqual('us-west-2'); + }); + + test('from extension arn with no resource name', () => { + const stack = new cdk.Stack(); + expect(() => { + Extension.fromExtensionArn(stack, 'MyExtension', + 'arn:aws:appconfig:us-west-2:123456789012:extension/'); + }).toThrow('Missing required /$/{extensionId}//$/{extensionVersionNumber} from configuration profile ARN:'); + }); + + test('from extension arn with no extension id', () => { + const stack = new cdk.Stack(); + expect(() => { + Extension.fromExtensionArn(stack, 'MyExtension', + 'arn:aws:appconfig:us-west-2:123456789012:extension//1'); + }).toThrow('Missing required parameters for extension ARN: format should be /$/{extensionId}//$/{extensionVersionNumber}'); + }); + + test('from extension arn with no extension version number', () => { + const stack = new cdk.Stack(); + expect(() => { + Extension.fromExtensionArn(stack, 'MyExtension', + 'arn:aws:appconfig:us-west-2:123456789012:extension/abc123/'); + }).toThrow('Missing required parameters for extension ARN: format should be /$/{extensionId}//$/{extensionVersionNumber}'); + }); + + test('from extension id', () => { + const cdkApp = new cdk.App(); + const stack = new cdk.Stack(cdkApp, 'Stack', { + env: { + region: 'us-west-2', + account: '123456789012', + }, + }); + const extension = Extension.fromExtensionAttributes(stack, 'Extension', { + extensionId: 'abc123', + extensionVersionNumber: 1, + }); + + expect(extension.extensionId).toEqual('abc123'); + expect(extension.extensionVersionNumber).toEqual(1); + expect(extension.env.account).toEqual('123456789012'); + expect(extension.env.region).toEqual('us-west-2'); + }); +}); \ No newline at end of file diff --git a/packages/aws-cdk-lib/aws-appconfig/test/schema.json b/packages/aws-cdk-lib/aws-appconfig/test/schema.json new file mode 100644 index 0000000000000..d6f0bc0b06bb2 --- /dev/null +++ b/packages/aws-cdk-lib/aws-appconfig/test/schema.json @@ -0,0 +1,4 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "string" +} \ No newline at end of file diff --git a/packages/aws-cdk-lib/aws-backup/README.md b/packages/aws-cdk-lib/aws-backup/README.md index 120e4ee274a5a..04c0973cd8ea8 100644 --- a/packages/aws-cdk-lib/aws-backup/README.md +++ b/packages/aws-cdk-lib/aws-backup/README.md @@ -39,7 +39,7 @@ const myDatabaseCluster = new rds.DatabaseCluster(this, 'DatabaseCluster', { }); const myServerlessCluster = new rds.ServerlessCluster(this, 'ServerlessCluster', { engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL, - parameterGroup: rds.ParameterGroup.fromParameterGroupName(this, 'ParameterGroup', 'default.aurora-postgresql10'), + parameterGroup: rds.ParameterGroup.fromParameterGroupName(this, 'ParameterGroup', 'default.aurora-postgresql11'), vpc, }); const myCoolConstruct = new Construct(this, 'MyCoolConstruct'); diff --git a/packages/aws-cdk-lib/aws-backup/test/selection.test.ts b/packages/aws-cdk-lib/aws-backup/test/selection.test.ts index 3f0599bed2ed6..1c115c46250d4 100644 --- a/packages/aws-cdk-lib/aws-backup/test/selection.test.ts +++ b/packages/aws-cdk-lib/aws-backup/test/selection.test.ts @@ -176,7 +176,7 @@ test('fromConstruct', () => { new rds.ServerlessCluster(this, 'ServerlessCluster', { engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL, - parameterGroup: rds.ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql10'), + parameterGroup: rds.ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql11'), vpc, }); } @@ -611,7 +611,7 @@ test('fromRdsServerlessCluster', () => { const vpc = new ec2.Vpc(stack, 'Vpc'); const newCluster = new rds.ServerlessCluster(stack, 'New', { engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL, - parameterGroup: rds.ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql10'), + parameterGroup: rds.ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql11'), vpc, }); const existingCluster = rds.ServerlessCluster.fromServerlessClusterAttributes(stack, 'Existing', { diff --git a/packages/aws-cdk-lib/aws-bedrock/lib/foundation-model.ts b/packages/aws-cdk-lib/aws-bedrock/lib/foundation-model.ts index b4e0a31d9c7fc..645a696aa7d56 100644 --- a/packages/aws-cdk-lib/aws-bedrock/lib/foundation-model.ts +++ b/packages/aws-cdk-lib/aws-bedrock/lib/foundation-model.ts @@ -5,7 +5,7 @@ import { ArnFormat, Stack } from '../../core'; /** * The model identifiers for the Bedrock base foundation models. * - * @see https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids-arns.html + * @see https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html */ export class FoundationModelIdentifier { /** Base model "ai21.j2-mid-v1". */ @@ -56,6 +56,12 @@ export class FoundationModelIdentifier { /** Base model "meta.llama2-70b-chat-v1". */ public static readonly META_LLAMA_2_CHAT_70B_V1 = new FoundationModelIdentifier('meta.llama2-70b-chat-v1'); + /** Base model "stability.stable-diffusion-xl-v0". */ + public static readonly STABILITY_STABLE_DIFFUSION_XL_V0 = new FoundationModelIdentifier('stability.stable-diffusion-xl-v0'); + + /** Base model "stability.stable-diffusion-xl-v1". */ + public static readonly STABILITY_STABLE_DIFFUSION_XL_V1 = new FoundationModelIdentifier('stability.stable-diffusion-xl-v1'); + /** * Constructor for foundation model identifier * @param modelId the model identifier diff --git a/packages/aws-cdk-lib/aws-eks/README.md b/packages/aws-cdk-lib/aws-eks/README.md index 949d6cd7dabe4..081743a3d0d75 100644 --- a/packages/aws-cdk-lib/aws-eks/README.md +++ b/packages/aws-cdk-lib/aws-eks/README.md @@ -657,7 +657,7 @@ new eks.Cluster(this, 'HelloEKS', { }); ``` -> Note: Isolated VPCs (i.e with no internet access) are not currently supported. See https://github.com/aws/aws-cdk/issues/12171 +> Note: Isolated VPCs (i.e with no internet access) are not fully supported. See https://github.com/aws/aws-cdk/issues/12171. Check out [this aws-cdk-example](https://github.com/aws-samples/aws-cdk-examples/tree/master/java/eks/private-cluster) for reference. If you do not specify a VPC, one will be created on your behalf, which you can then access via `cluster.vpc`. The cluster VPC will be associated to any EKS managed capacity (i.e Managed Node Groups and Fargate Profiles). diff --git a/packages/aws-cdk-lib/aws-lambda/README.md b/packages/aws-cdk-lib/aws-lambda/README.md index 13b3c319ec7ff..5a876c8ae68eb 100644 --- a/packages/aws-cdk-lib/aws-lambda/README.md +++ b/packages/aws-cdk-lib/aws-lambda/README.md @@ -1075,6 +1075,49 @@ const fn = new lambda.Function(this, 'MyLambda', { }); ``` +## IPv6 support + +You can configure IPv6 connectivity for lambda function by setting `Ipv6AllowedForDualStack` to true. +It allows Lambda functions to specify whether the IPv6 traffic should be allowed when using dual-stack VPCs. +To access IPv6 network using Lambda, Dual-stack VPC is required. Using dual-stack VPC a function communicates with subnet over either of IPv4 or IPv6. + +```ts +import * as ec2 from 'aws-cdk-lib/aws-ec2'; + +const natProvider = ec2.NatProvider.gateway(); + +// create dual-stack VPC +const vpc = new ec2.Vpc(this, 'DualStackVpc', { + ipProtocol: ec2.IpProtocol.DUAL_STACK, + subnetConfiguration: [ + { + name: 'Ipv6Public1', + subnetType: ec2.SubnetType.PUBLIC, + }, + { + name: 'Ipv6Public2', + subnetType: ec2.SubnetType.PUBLIC, + }, + { + name: 'Ipv6Private1', + subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS, + }, + ], + natGatewayProvider: natProvider, +}); + +const natGatewayId = natProvider.configuredGateways[0].gatewayId; +(vpc.privateSubnets[0] as ec2.PrivateSubnet).addIpv6Nat64Route(natGatewayId); + +const fn = new lambda.Function(this, 'Lambda_with_IPv6_VPC', { + code: new lambda.InlineCode('def main(event, context): pass'), + handler: 'index.main', + runtime: lambda.Runtime.PYTHON_3_9, + vpc, + ipv6AllowedForDualStack: true, +}); +``` + ## Ephemeral Storage You can configure ephemeral storage on a function to control the amount of storage it gets for reading diff --git a/packages/aws-cdk-lib/aws-lambda/lib/function.ts b/packages/aws-cdk-lib/aws-lambda/lib/function.ts index 23c6e9b8ff2ef..dba046f447513 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/function.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/function.ts @@ -232,6 +232,15 @@ export interface FunctionOptions extends EventInvokeConfigOptions { */ readonly vpc?: ec2.IVpc; + /** + * Allows outbound IPv6 traffic on VPC functions that are connected to dual-stack subnets. + * + * Only used if 'vpc' is supplied. + * + * @default false + */ + readonly ipv6AllowedForDualStack?: boolean; + /** * Where to place the network interfaces within the VPC. * @@ -1447,6 +1456,9 @@ Environment variables can be marked for removal when used in Lambda@Edge by sett if (props.vpcSubnets) { throw new Error('Cannot configure \'vpcSubnets\' without configuring a VPC'); } + if (props.ipv6AllowedForDualStack) { + throw new Error('Cannot configure \'ipv6AllowedForDualStack\' without configuring a VPC'); + } return undefined; } @@ -1483,6 +1495,7 @@ Environment variables can be marked for removal when used in Lambda@Edge by sett } } + const ipv6AllowedForDualStack = props.ipv6AllowedForDualStack; const allowPublicSubnet = props.allowPublicSubnet ?? false; const selectedSubnets = props.vpc.selectSubnets(props.vpcSubnets); const publicSubnetIds = new Set(props.vpc.publicSubnets.map(s => s.subnetId)); @@ -1497,10 +1510,17 @@ Environment variables can be marked for removal when used in Lambda@Edge by sett // List can't be empty here, if we got this far you intended to put your Lambda // in subnets. We're going to guarantee that we get the nice error message by // making VpcNetwork do the selection again. - - return { - subnetIds: selectedSubnets.subnetIds, - securityGroupIds: securityGroups.map(sg => sg.securityGroupId), + if (props.ipv6AllowedForDualStack !== undefined) { + return { + ipv6AllowedForDualStack: ipv6AllowedForDualStack, + subnetIds: selectedSubnets.subnetIds, + securityGroupIds: securityGroups.map(sg => sg.securityGroupId), + }; + } else { + return { + subnetIds: selectedSubnets.subnetIds, + securityGroupIds: securityGroups.map(sg => sg.securityGroupId), + }; }; } diff --git a/packages/aws-cdk-lib/aws-lambda/test/function.test.ts b/packages/aws-cdk-lib/aws-lambda/test/function.test.ts index 46a79c32acbdd..f4c5382707641 100644 --- a/packages/aws-cdk-lib/aws-lambda/test/function.test.ts +++ b/packages/aws-cdk-lib/aws-lambda/test/function.test.ts @@ -3832,6 +3832,100 @@ describe('VPC configuration', () => { allowAllOutbound: false, })).not.toThrow(); }); + + test('with ipv6AllowedForDualStack and no VPC', () => { + const stack = new cdk.Stack(); + expect(() => new lambda.Function(stack, 'MyLambda', { + code: new lambda.InlineCode('foo'), + handler: 'index.handler', + runtime: lambda.Runtime.PYTHON_3_9, + ipv6AllowedForDualStack: true, + })).toThrow(/Cannot configure 'ipv6AllowedForDualStack' without configuring a VPC/); + }); + + test('set ipv6AllowedForDualStack with VPC', () => { + const stack = new cdk.Stack(); + const vpc = new ec2.Vpc(stack, 'Vpc', { + maxAzs: 3, + natGateways: 1, + }); + const securityGroup = new ec2.SecurityGroup(stack, 'LambdaSG', { + vpc, + allowAllOutbound: true, + allowAllIpv6Outbound: true, + }); + new lambda.Function(stack, 'MyLambda', { + vpc: vpc, + code: new lambda.InlineCode('foo'), + handler: 'index.handler', + runtime: lambda.Runtime.PYTHON_3_9, + ipv6AllowedForDualStack: true, + securityGroups: [securityGroup], + vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }, + }); + + Template.fromStack(stack).hasResource('AWS::Lambda::Function', { + Properties: + { + Code: { ZipFile: 'foo' }, + Handler: 'index.handler', + Runtime: 'python3.9', + Role: { 'Fn::GetAtt': ['MyLambdaServiceRole4539ECB6', 'Arn'] }, + VpcConfig: { + Ipv6AllowedForDualStack: true, + SecurityGroupIds: [ + { 'Fn::GetAtt': ['LambdaSG9DBFCFB7', 'GroupId'] }, + ], + SubnetIds: [ + { Ref: 'VpcPrivateSubnet1Subnet536B997A' }, + { Ref: 'VpcPrivateSubnet2Subnet3788AAA1' }, + ], + }, + }, + }); + }); + + test('set ipv6AllowedForDualStack to False with VPC', () => { + const stack = new cdk.Stack(); + const vpc = new ec2.Vpc(stack, 'Vpc', { + maxAzs: 3, + natGateways: 1, + }); + const securityGroup = new ec2.SecurityGroup(stack, 'LambdaSG', { + vpc, + allowAllOutbound: true, + allowAllIpv6Outbound: true, + }); + new lambda.Function(stack, 'MyLambda', { + vpc: vpc, + code: new lambda.InlineCode('foo'), + handler: 'index.handler', + runtime: lambda.Runtime.PYTHON_3_9, + ipv6AllowedForDualStack: false, + securityGroups: [securityGroup], + vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }, + }); + + Template.fromStack(stack).hasResource('AWS::Lambda::Function', { + Properties: + { + Code: { ZipFile: 'foo' }, + Handler: 'index.handler', + Runtime: 'python3.9', + Role: { 'Fn::GetAtt': ['MyLambdaServiceRole4539ECB6', 'Arn'] }, + VpcConfig: { + Ipv6AllowedForDualStack: false, + SecurityGroupIds: [ + { 'Fn::GetAtt': ['LambdaSG9DBFCFB7', 'GroupId'] }, + ], + SubnetIds: [ + { Ref: 'VpcPrivateSubnet1Subnet536B997A' }, + { Ref: 'VpcPrivateSubnet2Subnet3788AAA1' }, + ], + }, + }, + }); + }); }); function newTestLambda(scope: constructs.Construct) { diff --git a/packages/aws-cdk-lib/aws-opensearchservice/lib/domain.ts b/packages/aws-cdk-lib/aws-opensearchservice/lib/domain.ts index 5187e98cb8540..d9ae89e914459 100644 --- a/packages/aws-cdk-lib/aws-opensearchservice/lib/domain.ts +++ b/packages/aws-cdk-lib/aws-opensearchservice/lib/domain.ts @@ -172,6 +172,7 @@ export interface LoggingOptions { /** * Specify if slow search logging should be set up. * Requires Elasticsearch version 5.1 or later or OpenSearch version 1.0 or later. + * An explicit `false` is required when disabling it from `true`. * * @default - false */ @@ -187,6 +188,7 @@ export interface LoggingOptions { /** * Specify if slow index logging should be set up. * Requires Elasticsearch version 5.1 or later or OpenSearch version 1.0 or later. + * An explicit `false` is required when disabling it from `true`. * * @default - false */ @@ -202,6 +204,7 @@ export interface LoggingOptions { /** * Specify if Amazon OpenSearch Service application logging should be set up. * Requires Elasticsearch version 5.1 or later or OpenSearch version 1.0 or later. + * An explicit `false` is required when disabling it from `true`. * * @default - false */ diff --git a/packages/aws-cdk-lib/aws-rds/README.md b/packages/aws-cdk-lib/aws-rds/README.md index e936a529be876..97d508ad2c297 100644 --- a/packages/aws-cdk-lib/aws-rds/README.md +++ b/packages/aws-cdk-lib/aws-rds/README.md @@ -1122,7 +1122,7 @@ declare const vpc: ec2.Vpc; const cluster = new rds.ServerlessCluster(this, 'AnotherCluster', { engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL, copyTagsToSnapshot: true, // whether to save the cluster tags when creating the snapshot. Default is 'true' - parameterGroup: rds.ParameterGroup.fromParameterGroupName(this, 'ParameterGroup', 'default.aurora-postgresql10'), + parameterGroup: rds.ParameterGroup.fromParameterGroupName(this, 'ParameterGroup', 'default.aurora-postgresql11'), vpc, scaling: { autoPause: Duration.minutes(10), // default is to pause after 5 minutes of idle time diff --git a/packages/aws-cdk-lib/aws-rds/test/database-secretmanager.test.ts b/packages/aws-cdk-lib/aws-rds/test/database-secretmanager.test.ts index 97ef79f06ae81..202491883f5d1 100644 --- a/packages/aws-cdk-lib/aws-rds/test/database-secretmanager.test.ts +++ b/packages/aws-cdk-lib/aws-rds/test/database-secretmanager.test.ts @@ -16,14 +16,14 @@ describe('database secret manager', () => { engine: DatabaseClusterEngine.AURORA_POSTGRESQL, vpc, credentials: Credentials.fromSecret(existingSecret), - parameterGroup: ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql10'), + parameterGroup: ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql11'), }); // THEN Template.fromStack(stack).hasResource('AWS::RDS::DBCluster', { Properties: { Engine: 'aurora-postgresql', - DBClusterParameterGroupName: 'default.aurora-postgresql10', + DBClusterParameterGroupName: 'default.aurora-postgresql11', DBSubnetGroupName: { Ref: 'ServerlessDatabaseSubnets5643CD76', }, diff --git a/packages/aws-cdk-lib/aws-rds/test/serverless-cluster.test.ts b/packages/aws-cdk-lib/aws-rds/test/serverless-cluster.test.ts index 08c57abf25ffc..5382baf85984c 100644 --- a/packages/aws-cdk-lib/aws-rds/test/serverless-cluster.test.ts +++ b/packages/aws-cdk-lib/aws-rds/test/serverless-cluster.test.ts @@ -20,7 +20,7 @@ describe('serverless cluster', () => { username: 'admin', password: cdk.SecretValue.unsafePlainText('tooshort'), }, - parameterGroup: ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql10'), + parameterGroup: ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql11'), }); // THEN @@ -28,7 +28,7 @@ describe('serverless cluster', () => { Properties: { Engine: 'aurora-postgresql', CopyTagsToSnapshot: true, - DBClusterParameterGroupName: 'default.aurora-postgresql10', + DBClusterParameterGroupName: 'default.aurora-postgresql11', DBSubnetGroupName: { Ref: 'ServerlessDatabaseSubnets5643CD76', }, @@ -113,13 +113,13 @@ describe('serverless cluster', () => { engine: DatabaseClusterEngine.AURORA_POSTGRESQL, vpc, securityGroups: [sg], - parameterGroup: ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql10'), + parameterGroup: ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql11'), }); // THEN Template.fromStack(stack).hasResourceProperties('AWS::RDS::DBCluster', { Engine: 'aurora-postgresql', - DBClusterParameterGroupName: 'default.aurora-postgresql10', + DBClusterParameterGroupName: 'default.aurora-postgresql11', EngineMode: 'serverless', DBSubnetGroupName: { Ref: 'DatabaseSubnets56F17B9A' }, MasterUsername: { @@ -892,7 +892,7 @@ describe('serverless cluster', () => { // WHEN new ServerlessCluster(stack, 'Database', { engine: DatabaseClusterEngine.AURORA, - parameterGroup: ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql10'), + parameterGroup: ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql11'), }); // THEN @@ -909,7 +909,7 @@ describe('serverless cluster', () => { new ServerlessCluster(stack, 'Database', { engine: DatabaseClusterEngine.AURORA_POSTGRESQL, copyTagsToSnapshot: false, - parameterGroup: ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql10'), + parameterGroup: ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql11'), }); // THEN @@ -926,7 +926,7 @@ describe('serverless cluster', () => { new ServerlessCluster(stack, 'Database', { engine: DatabaseClusterEngine.AURORA_POSTGRESQL, copyTagsToSnapshot: true, - parameterGroup: ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql10'), + parameterGroup: ParameterGroup.fromParameterGroupName(stack, 'ParameterGroup', 'default.aurora-postgresql11'), }); // THEN diff --git a/packages/aws-cdk-lib/awslint.json b/packages/aws-cdk-lib/awslint.json index 2c108cd3a92da..91782293bdb5f 100644 --- a/packages/aws-cdk-lib/awslint.json +++ b/packages/aws-cdk-lib/awslint.json @@ -899,6 +899,60 @@ "from-method:aws-cdk-lib.aws_apigatewayv2.HttpIntegration", "from-method:aws-cdk-lib.aws_apigatewayv2.HttpRoute", "from-method:aws-cdk-lib.aws_apigatewayv2.WebSocketIntegration", - "from-method:aws-cdk-lib.aws_apigatewayv2.WebSocketRoute" + "from-method:aws-cdk-lib.aws_apigatewayv2.WebSocketRoute", + "docs-public-apis:aws-cdk-lib.aws_appconfig.ConfigurationSourceType.S3", + "docs-public-apis:aws-cdk-lib.aws_appconfig.ConfigurationSourceType.SSM_DOCUMENT", + "docs-public-apis:aws-cdk-lib.aws_appconfig.ConfigurationSourceType.SSM_PARAMETER", + "docs-public-apis:aws-cdk-lib.aws_appconfig.ConfigurationSourceType.SECRETS_MANAGER", + "docs-public-apis:aws-cdk-lib.aws_appconfig.ConfigurationSourceType.CODE_PIPELINE", + "docs-public-apis:aws-cdk-lib.aws_appconfig.SourceType.LAMBDA", + "docs-public-apis:aws-cdk-lib.aws_appconfig.SourceType.SQS", + "docs-public-apis:aws-cdk-lib.aws_appconfig.SourceType.SNS", + "docs-public-apis:aws-cdk-lib.aws_appconfig.SourceType.EVENTS", + "docs-public-apis:aws-cdk-lib.aws_appconfig.Platform.ARM_64", + "docs-public-apis:aws-cdk-lib.aws_appconfig.Platform.X86_64", + "docs-public-apis:aws-cdk-lib.aws_appconfig.ActionPoint.PRE_CREATE_HOSTED_CONFIGURATION_VERSION", + "docs-public-apis:aws-cdk-lib.aws_appconfig.ActionPoint.PRE_START_DEPLOYMENT", + "docs-public-apis:aws-cdk-lib.aws_appconfig.ActionPoint.ON_DEPLOYMENT_START", + "docs-public-apis:aws-cdk-lib.aws_appconfig.ActionPoint.ON_DEPLOYMENT_STEP", + "docs-public-apis:aws-cdk-lib.aws_appconfig.ActionPoint.ON_DEPLOYMENT_BAKING", + "docs-public-apis:aws-cdk-lib.aws_appconfig.ActionPoint.ON_DEPLOYMENT_COMPLETE", + "docs-public-apis:aws-cdk-lib.aws_appconfig.ActionPoint.ON_DEPLOYMENT_ROLLED_BACK", + "docs-public-apis:aws-cdk-lib.aws_appconfig.IValidator", + "docs-public-apis:aws-cdk-lib.aws_appconfig.IExtension", + "docs-public-apis:aws-cdk-lib.aws_appconfig.IEnvironment", + "docs-public-apis:aws-cdk-lib.aws_appconfig.IDeploymentStrategy", + "docs-public-apis:aws-cdk-lib.aws_appconfig.IConfiguration", + "docs-public-apis:aws-cdk-lib.aws_appconfig.IApplication", + + "from-signature:aws-cdk-lib.aws_appconfig.DeploymentStrategy.fromDeploymentStrategyId.params[2]", + "events-method-signature:aws-cdk-lib.aws_appconfig.Application.on", + "events-method-signature:aws-cdk-lib.aws_appconfig.Application.onDeploymentBaking*", + "events-method-signature:aws-cdk-lib.aws_appconfig.Application.onDeploymentComplete*", + "events-method-signature:aws-cdk-lib.aws_appconfig.Application.onDeploymentRolledBack*", + "events-method-signature:aws-cdk-lib.aws_appconfig.Application.onDeploymentStart*", + "events-method-signature:aws-cdk-lib.aws_appconfig.Application.onDeploymentStep*", + "events-method-signature:aws-cdk-lib.aws_appconfig.Environment.on", + "events-method-signature:aws-cdk-lib.aws_appconfig.Environment.onDeploymentBaking*", + "events-method-signature:aws-cdk-lib.aws_appconfig.Environment.onDeploymentComplete*", + "events-method-signature:aws-cdk-lib.aws_appconfig.Environment.onDeploymentRolledBack*", + "events-method-signature:aws-cdk-lib.aws_appconfig.Environment.onDeploymentStart*", + "events-method-signature:aws-cdk-lib.aws_appconfig.Environment.onDeploymentStep*", + "events-method-signature:aws-cdk-lib.aws_appconfig.HostedConfiguration.on", + "events-method-signature:aws-cdk-lib.aws_appconfig.HostedConfiguration.onDeploymentBaking*", + "events-method-signature:aws-cdk-lib.aws_appconfig.HostedConfiguration.onDeploymentComplete*", + "events-method-signature:aws-cdk-lib.aws_appconfig.HostedConfiguration.onDeploymentRolledBack*", + "events-method-signature:aws-cdk-lib.aws_appconfig.HostedConfiguration.onDeploymentStart*", + "events-method-signature:aws-cdk-lib.aws_appconfig.HostedConfiguration.onDeploymentStep*", + "events-method-signature:aws-cdk-lib.aws_appconfig.SourcedConfiguration.on", + "events-method-signature:aws-cdk-lib.aws_appconfig.SourcedConfiguration.onDeploymentBaking*", + "events-method-signature:aws-cdk-lib.aws_appconfig.SourcedConfiguration.onDeploymentComplete*", + "events-method-signature:aws-cdk-lib.aws_appconfig.SourcedConfiguration.onDeploymentRolledBack*", + "events-method-signature:aws-cdk-lib.aws_appconfig.SourcedConfiguration.onDeploymentStart*", + "events-method-signature:aws-cdk-lib.aws_appconfig.SourcedConfiguration.onDeploymentStep*", + "events-generic:aws-cdk-lib.aws_appconfig.Application", + "events-generic:aws-cdk-lib.aws_appconfig.Environment", + "events-generic:aws-cdk-lib.aws_appconfig.HostedConfiguration", + "events-generic:aws-cdk-lib.aws_appconfig.SourcedConfiguration" ] } \ No newline at end of file diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index cd7f05f1b0495..68264b88eebd2 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -115,7 +115,8 @@ "punycode", "semver", "table", - "yaml" + "yaml", + "mime-types" ], "dependencies": { "@aws-cdk/asset-awscli-v1": "^2.2.202", @@ -130,10 +131,11 @@ "punycode": "^2.3.1", "semver": "^7.6.0", "table": "^6.8.1", - "yaml": "1.10.2" + "yaml": "1.10.2", + "mime-types": "^2.1.35" }, "devDependencies": { - "@aws-cdk/aws-service-spec": "^0.0.47", + "@aws-cdk/aws-service-spec": "^0.0.50", "@aws-cdk/cdk-build-tools": "0.0.0", "@aws-cdk/custom-resource-handlers": "0.0.0", "@aws-cdk/pkglint": "0.0.0", @@ -158,30 +160,31 @@ "@aws-sdk/node-http-handler": "^3.370.0", "@aws-sdk/types": "^3.433.0", "@smithy/util-stream": "^2.1.1", - "@types/aws-lambda": "^8.10.133", + "@types/aws-lambda": "^8.10.134", "@types/jest": "^29.5.12", "@types/lodash": "^4.14.202", "@types/punycode": "^2.1.4", + "@types/mime-types": "^2.1.4", "@aws-cdk/lazify": "0.0.0", - "aws-sdk": "^2.1557.0", + "aws-sdk": "^2.1562.0", "aws-sdk-client-mock": "^3.0.1", "aws-sdk-client-mock-jest": "^3.0.1", "aws-sdk-mock": "5.8.0", - "cdk8s": "2.68.37", + "cdk8s": "2.68.40", "constructs": "^10.0.0", "delay": "5.0.0", - "esbuild": "^0.20.0", + "esbuild": "^0.20.1", "fast-check": "^3.15.1", "jest": "^29.7.0", "jest-each": "^29.7.0", "lambda-tester": "^4.0.1", "lodash": "^4.17.21", - "nock": "^13.5.1", + "nock": "^13.5.3", "sinon": "^9.2.4", "ts-mock-imports": "^1.3.8", "ts-node": "^10.9.2", "typescript": "~5.1.6", - "typescript-json-schema": "^0.62.0" + "typescript-json-schema": "^0.63.0" }, "peerDependencies": { "constructs": "^10.0.0" diff --git a/packages/aws-cdk-lib/pipelines/README.md b/packages/aws-cdk-lib/pipelines/README.md index 1e8e0030f9b4c..6f1698cb590c1 100644 --- a/packages/aws-cdk-lib/pipelines/README.md +++ b/packages/aws-cdk-lib/pipelines/README.md @@ -12,8 +12,9 @@ cluster directly: use CDK file assets with CloudFormation Init for instances, or CDK container assets for ECS clusters instead. Give the CDK Pipelines way of doing things a shot first: you might find it does -everything you need. If you want or need more control, we recommend you drop -down to using the `aws-codepipeline` construct library directly. +everything you need. If you need more control, or if you need `v2` support from +`aws-codepipeline`, we recommend you drop down to using the `aws-codepipeline` +construct library directly. > This module contains two sets of APIs: an **original** and a **modern** version of > CDK Pipelines. The *modern* API has been updated to be easier to work with and diff --git a/packages/aws-cdk-lib/pipelines/lib/codepipeline/codepipeline.ts b/packages/aws-cdk-lib/pipelines/lib/codepipeline/codepipeline.ts index d699cd3c45aa1..4c7304e9433e6 100644 --- a/packages/aws-cdk-lib/pipelines/lib/codepipeline/codepipeline.ts +++ b/packages/aws-cdk-lib/pipelines/lib/codepipeline/codepipeline.ts @@ -467,6 +467,7 @@ export class CodePipeline extends PipelineBase { } else { this._pipeline = new cp.Pipeline(this, 'Pipeline', { pipelineName: this.props.pipelineName, + pipelineType: cp.PipelineType.V1, crossAccountKeys: this.props.crossAccountKeys ?? false, crossRegionReplicationBuckets: this.props.crossRegionReplicationBuckets, reuseCrossRegionSupportStacks: this.props.reuseCrossRegionSupportStacks, diff --git a/packages/aws-cdk-lib/pipelines/test/codepipeline/codepipeline.test.ts b/packages/aws-cdk-lib/pipelines/test/codepipeline/codepipeline.test.ts index ac48c3d25351d..739d9ac7ed807 100644 --- a/packages/aws-cdk-lib/pipelines/test/codepipeline/codepipeline.test.ts +++ b/packages/aws-cdk-lib/pipelines/test/codepipeline/codepipeline.test.ts @@ -174,6 +174,8 @@ test('Policy sizes do not exceed the maximum size', () => { // expect template size warning const annotations = Annotations.fromStack(pipelineStack); annotations.hasWarning('*', Match.stringLikeRegexp('^Template size is approaching limit')); + const warnings = annotations.findWarning('*', Match.anyValue()); + expect(warnings.length).toEqual(1); }); test('CodeBuild action role has the right AssumeRolePolicyDocument', () => { diff --git a/packages/aws-cdk-lib/rosetta/aws_appconfig/default.ts-fixture b/packages/aws-cdk-lib/rosetta/aws_appconfig/default.ts-fixture new file mode 100644 index 0000000000000..580ddce5f0bf4 --- /dev/null +++ b/packages/aws-cdk-lib/rosetta/aws_appconfig/default.ts-fixture @@ -0,0 +1,21 @@ +// Fixture with packages imported, but nothing else +import { Construct } from 'constructs'; +import { Stack, Duration } from 'aws-cdk-lib'; +import * as lambda from 'aws-cdk-lib/aws-lambda'; +import * as appconfig from 'aws-cdk-lib/aws-appconfig'; +import * as s3 from 'aws-cdk-lib/aws-s3'; +import * as ssm from 'aws-cdk-lib/aws-ssm'; +import * as secrets from 'aws-cdk-lib/aws-secretsmanager'; +import * as sqs from 'aws-cdk-lib/aws-sqs'; +import * as sns from 'aws-cdk-lib/aws-sns'; +import * as codepipeline from 'aws-cdk-lib/aws-codepipeline'; +import * as events from 'aws-cdk-lib/aws-events'; +import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch'; + +class Fixture extends Stack { + constructor(scope: Construct, id: string) { + super(scope, id); + + /// here + } +} diff --git a/packages/aws-cdk/THIRD_PARTY_LICENSES b/packages/aws-cdk/THIRD_PARTY_LICENSES index bc4ce26e2397c..c947720e91891 100644 --- a/packages/aws-cdk/THIRD_PARTY_LICENSES +++ b/packages/aws-cdk/THIRD_PARTY_LICENSES @@ -264,7 +264,7 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH RE ---------------- -** aws-sdk@2.1557.0 - https://www.npmjs.com/package/aws-sdk/v/2.1557.0 | Apache-2.0 +** aws-sdk@2.1562.0 - https://www.npmjs.com/package/aws-sdk/v/2.1562.0 | Apache-2.0 AWS SDK for JavaScript Copyright 2012-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. @@ -461,7 +461,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ---------------- -** cdk-from-cfn@0.130.0 - https://www.npmjs.com/package/cdk-from-cfn/v/0.130.0 | MIT OR Apache-2.0 +** cdk-from-cfn@0.133.0 - https://www.npmjs.com/package/cdk-from-cfn/v/0.133.0 | MIT OR Apache-2.0 ---------------- @@ -1410,7 +1410,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ---------------- -** http-proxy-agent@7.0.1 - https://www.npmjs.com/package/http-proxy-agent/v/7.0.1 | MIT +** http-proxy-agent@7.0.2 - https://www.npmjs.com/package/http-proxy-agent/v/7.0.2 | MIT (The MIT License) Copyright (c) 2013 Nathan Rajlich @@ -1437,7 +1437,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---------------- -** https-proxy-agent@7.0.3 - https://www.npmjs.com/package/https-proxy-agent/v/7.0.3 | MIT +** https-proxy-agent@7.0.4 - https://www.npmjs.com/package/https-proxy-agent/v/7.0.4 | MIT (The MIT License) Copyright (c) 2013 Nathan Rajlich diff --git a/packages/aws-cdk/lib/init-templates/app/typescript/package.json b/packages/aws-cdk/lib/init-templates/app/typescript/package.json index c5c7c7ffad5f1..049f552f19ef3 100644 --- a/packages/aws-cdk/lib/init-templates/app/typescript/package.json +++ b/packages/aws-cdk/lib/init-templates/app/typescript/package.json @@ -12,7 +12,7 @@ }, "devDependencies": { "@types/jest": "^29.5.12", - "@types/node": "20.11.17", + "@types/node": "20.11.19", "jest": "^29.7.0", "ts-jest": "^29.1.2", "aws-cdk": "%cdk-version%", diff --git a/packages/aws-cdk/lib/init-templates/lib/typescript/package.json b/packages/aws-cdk/lib/init-templates/lib/typescript/package.json index 22c0e698c97a5..288f0a08887b7 100644 --- a/packages/aws-cdk/lib/init-templates/lib/typescript/package.json +++ b/packages/aws-cdk/lib/init-templates/lib/typescript/package.json @@ -10,7 +10,7 @@ }, "devDependencies": { "@types/jest": "^29.5.12", - "@types/node": "20.11.17", + "@types/node": "20.11.19", "aws-cdk-lib": "%cdk-version%", "constructs": "%constructs-version%", "jest": "^29.7.0", diff --git a/packages/aws-cdk/lib/init-templates/sample-app/typescript/package.json b/packages/aws-cdk/lib/init-templates/sample-app/typescript/package.json index 7a8224fd4e53c..62f7fae15e38c 100644 --- a/packages/aws-cdk/lib/init-templates/sample-app/typescript/package.json +++ b/packages/aws-cdk/lib/init-templates/sample-app/typescript/package.json @@ -12,7 +12,7 @@ }, "devDependencies": { "@types/jest": "^29.5.12", - "@types/node": "20.11.17", + "@types/node": "20.11.19", "jest": "^29.7.0", "ts-jest": "^29.1.2", "aws-cdk": "%cdk-version%", diff --git a/packages/aws-cdk/package.json b/packages/aws-cdk/package.json index 282fa6e99891e..9778f4452c8e0 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -89,7 +89,7 @@ "jest-mock": "^29.7.0", "madge": "^5.0.2", "make-runnable": "^1.4.1", - "nock": "^13.5.1", + "nock": "^13.5.3", "sinon": "^9.2.4", "ts-jest": "^29.1.2", "ts-mock-imports": "^1.3.8", @@ -102,10 +102,10 @@ "@aws-cdk/region-info": "0.0.0", "@jsii/check-node": "1.94.0", "archiver": "^5.3.2", - "aws-sdk": "^2.1557.0", + "aws-sdk": "^2.1562.0", "camelcase": "^6.3.0", "cdk-assets": "0.0.0", - "cdk-from-cfn": "^0.130.0", + "cdk-from-cfn": "^0.133.0", "chalk": "^4", "chokidar": "^3.6.0", "decamelize": "^5.0.1", diff --git a/packages/cdk-assets/package.json b/packages/cdk-assets/package.json index f5cacc1a74ec5..060852eed65e2 100644 --- a/packages/cdk-assets/package.json +++ b/packages/cdk-assets/package.json @@ -46,7 +46,7 @@ "@aws-cdk/cloud-assembly-schema": "0.0.0", "@aws-cdk/cx-api": "0.0.0", "archiver": "^5.3.2", - "aws-sdk": "^2.1557.0", + "aws-sdk": "^2.1562.0", "glob": "^7.2.3", "mime": "^2.6.0", "yargs": "^16.2.0" diff --git a/tools/@aws-cdk/cdk-build-tools/package.json b/tools/@aws-cdk/cdk-build-tools/package.json index 76cb1992154f0..8aca835029083 100644 --- a/tools/@aws-cdk/cdk-build-tools/package.json +++ b/tools/@aws-cdk/cdk-build-tools/package.json @@ -60,7 +60,7 @@ "glob": "^7.2.3", "jest": "^29.7.0", "jest-junit": "^13.2.0", - "jsii": "~5.3.18", + "jsii": "~5.3.20", "jsii-pacmak": "1.94.0", "jsii-reflect": "1.94.0", "markdownlint-cli": "^0.39.0", diff --git a/tools/@aws-cdk/lazify/package.json b/tools/@aws-cdk/lazify/package.json index a2fc4da9e95fc..8dc95d0cf4737 100644 --- a/tools/@aws-cdk/lazify/package.json +++ b/tools/@aws-cdk/lazify/package.json @@ -24,7 +24,7 @@ "cjs-module-lexer": "^1.2.3" }, "dependencies": { - "esbuild": "^0.20.0", + "esbuild": "^0.20.1", "fs-extra": "^10.1.0", "yargs": "^17.7.2" }, diff --git a/tools/@aws-cdk/node-bundle/package.json b/tools/@aws-cdk/node-bundle/package.json index 7557624de0d94..3595dff23f68a 100644 --- a/tools/@aws-cdk/node-bundle/package.json +++ b/tools/@aws-cdk/node-bundle/package.json @@ -31,7 +31,7 @@ "typescript": "^4.5.5" }, "dependencies": { - "esbuild": "^0.20.0", + "esbuild": "^0.20.1", "fs-extra": "^10.1.0", "license-checker": "^25.0.1", "madge": "^5.0.2", diff --git a/tools/@aws-cdk/spec2cdk/package.json b/tools/@aws-cdk/spec2cdk/package.json index 6ec22dde70d8f..02aa72adc04fb 100644 --- a/tools/@aws-cdk/spec2cdk/package.json +++ b/tools/@aws-cdk/spec2cdk/package.json @@ -32,9 +32,9 @@ }, "license": "Apache-2.0", "dependencies": { - "@aws-cdk/aws-service-spec": "^0.0.47", - "@aws-cdk/service-spec-importers": "^0.0.20", - "@aws-cdk/service-spec-types": "^0.0.47", + "@aws-cdk/aws-service-spec": "^0.0.50", + "@aws-cdk/service-spec-importers": "^0.0.22", + "@aws-cdk/service-spec-types": "^0.0.50", "@cdklabs/tskb": "^0.0.3", "@cdklabs/typewriter": "^0.0.3", "camelcase": "^6", diff --git a/version.v2.json b/version.v2.json index 32e1df69cccd2..053f9770f5a0b 100644 --- a/version.v2.json +++ b/version.v2.json @@ -1,4 +1,4 @@ { - "version": "2.128.0", - "alphaVersion": "2.128.0-alpha.0" + "version": "2.129.0", + "alphaVersion": "2.129.0-alpha.0" } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index e59abdf8dd30a..5addc62024141 100644 --- a/yarn.lock +++ b/yarn.lock @@ -56,12 +56,12 @@ resolved "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.1.tgz#6dc9b7cdb22ff622a7176141197962360c33e9ac" integrity sha512-DDt4SLdLOwWCjGtltH4VCST7hpOI5DzieuhGZsBpZ+AgJdSI2GCjklCXm0GCTwJG/SolkL5dtQXyUKgg9luBDg== -"@aws-cdk/aws-service-spec@^0.0.47": - version "0.0.47" - resolved "https://registry.npmjs.org/@aws-cdk/aws-service-spec/-/aws-service-spec-0.0.47.tgz#170aa62cd472bc9549c4db355823ba0ad7ea4045" - integrity sha512-Z1J3k9u/kMl0m2p7tLJag+a/8+rJt4qY9CYwmTrl6kSpBFKGYQJ3ZsLxojWbQyUXA9ZvA4p1GY9AXH21MkAfIw== +"@aws-cdk/aws-service-spec@^0.0.50": + version "0.0.50" + resolved "https://registry.npmjs.org/@aws-cdk/aws-service-spec/-/aws-service-spec-0.0.50.tgz#9d2e1218be8982f3cc79ffcd2c268749e6d6d1db" + integrity sha512-uVKv4sJMARQxnHfpiwn+hXq4a2+///vsURP4TdfEF/unrKl8i7s4s5d165au//aNZNOJ4UMTWLohb5UnwDMhzw== dependencies: - "@aws-cdk/service-spec-types" "^0.0.47" + "@aws-cdk/service-spec-types" "^0.0.50" "@cdklabs/tskb" "^0.0.3" "@aws-cdk/lambda-layer-kubectl-v24@^2.0.242": @@ -69,12 +69,12 @@ resolved "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl-v24/-/lambda-layer-kubectl-v24-2.0.242.tgz#4273a5ad7714f933a7eba155eb9280823086db71" integrity sha512-7/wIOo685tmrEe4hh6zqDELhBZh5OQGf3Hd2FU2Vnwy2ZubW8qTmEw5gqJCsCrGKeYDoa1BcVhDRZ/nzjkaqyA== -"@aws-cdk/service-spec-importers@^0.0.20": - version "0.0.20" - resolved "https://registry.npmjs.org/@aws-cdk/service-spec-importers/-/service-spec-importers-0.0.20.tgz#62107342ee1adbeddf080cf84ea072e946657515" - integrity sha512-c+dhPNapnqJFuCva9L4VKW7nd3nNYZtDF60sJP4xEso6omAeCSIDVthUGcKD1xOBfWCxx35uIjm2aGa+2tlaPg== +"@aws-cdk/service-spec-importers@^0.0.22": + version "0.0.22" + resolved "https://registry.npmjs.org/@aws-cdk/service-spec-importers/-/service-spec-importers-0.0.22.tgz#05a3f200e2bcfd59d81fbbd6643930705547419b" + integrity sha512-GWAglOy/9kVNPJtKuDt6RX+uMgszaKBPrRwHKuvUDlYvGBcB7XT1e0e7sPtSArFCALHQuu1fapNpunC5pjEytw== dependencies: - "@aws-cdk/service-spec-types" "^0.0.47" + "@aws-cdk/service-spec-types" "^0.0.49" "@cdklabs/tskb" "^0.0.3" ajv "^6" canonicalize "^2.0.0" @@ -85,10 +85,17 @@ glob "^8" sort-json "^2.0.1" -"@aws-cdk/service-spec-types@^0.0.47": - version "0.0.47" - resolved "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.47.tgz#42d2dcaa920b711d5f091e275756e9738d33bed4" - integrity sha512-Qzv/RWabErhyv255ktR6VBabJyx/aqpVVmqAxiCZROgqpZtNNsFmSgdUVkBRFsc71gwR9UTBUUSf/ux+iQ3VoQ== +"@aws-cdk/service-spec-types@^0.0.49": + version "0.0.49" + resolved "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.49.tgz#1adc059466cd4107b6fd2d424c663bf6964ee1ac" + integrity sha512-j8UZXdWjplG+HcmpejNlJcEHJzkoVdj4hhxa8cTW+PNqqw8j0nAniZbS58qI+dcg7zFB1NA0M76gX2ns7ExgTQ== + dependencies: + "@cdklabs/tskb" "^0.0.3" + +"@aws-cdk/service-spec-types@^0.0.50": + version "0.0.50" + resolved "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.50.tgz#5fd946acc1212bfa51021813fb71d8087c44554a" + integrity sha512-J6XoyihczUWoQvxjKf0EqmdeZ8Djs1LCse49rXyQ8IFUXZIUNNrZ1A1x0tAeU3iZn08yC3KAh+YSPRMScfZ5Lw== dependencies: "@cdklabs/tskb" "^0.0.3" @@ -2322,9 +2329,9 @@ tslib "^2.5.0" "@aws-sdk/types@^3.222.0", "@aws-sdk/types@^3.433.0": - version "3.511.0" - resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.511.0.tgz#b873bcd8d0db1265234a5a8b920a3c43a6ca28ff" - integrity sha512-P03ufufxmkvd7nO46oOeEqYIMPJ8qMCKxAsfJk1JBVPQ1XctVntbail4/UFnrnzij8DTl4Mk/D62uGo7+RolXA== + version "3.515.0" + resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.515.0.tgz#ee97c887293211f1891bc1d8f0aaf354072b6002" + integrity sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w== dependencies: "@smithy/types" "^2.9.1" tslib "^2.5.0" @@ -2454,7 +2461,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.7.5": +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.23.9", "@babel/core@^7.7.5": version "7.23.9" resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== @@ -2911,120 +2918,120 @@ enabled "2.0.x" kuler "^2.0.0" -"@esbuild/aix-ppc64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz#509621cca4e67caf0d18561a0c56f8b70237472f" - integrity sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw== - -"@esbuild/android-arm64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz#109a6fdc4a2783fc26193d2687827045d8fef5ab" - integrity sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q== - -"@esbuild/android-arm@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.0.tgz#1397a2c54c476c4799f9b9073550ede496c94ba5" - integrity sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g== - -"@esbuild/android-x64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.0.tgz#2b615abefb50dc0a70ac313971102f4ce2fdb3ca" - integrity sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ== - -"@esbuild/darwin-arm64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz#5c122ed799eb0c35b9d571097f77254964c276a2" - integrity sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ== - -"@esbuild/darwin-x64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.0.tgz#9561d277002ba8caf1524f209de2b22e93d170c1" - integrity sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw== - -"@esbuild/freebsd-arm64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.0.tgz#84178986a3138e8500d17cc380044868176dd821" - integrity sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ== - -"@esbuild/freebsd-x64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.0.tgz#3f9ce53344af2f08d178551cd475629147324a83" - integrity sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ== - -"@esbuild/linux-arm64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.0.tgz#24efa685515689df4ecbc13031fa0a9dda910a11" - integrity sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw== - -"@esbuild/linux-arm@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.0.tgz#6b586a488e02e9b073a75a957f2952b3b6e87b4c" - integrity sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg== - -"@esbuild/linux-ia32@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.0.tgz#84ce7864f762708dcebc1b123898a397dea13624" - integrity sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w== - -"@esbuild/linux-loong64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.0.tgz#1922f571f4cae1958e3ad29439c563f7d4fd9037" - integrity sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw== - -"@esbuild/linux-mips64el@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.0.tgz#7ca1bd9df3f874d18dbf46af009aebdb881188fe" - integrity sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ== - -"@esbuild/linux-ppc64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.0.tgz#8f95baf05f9486343bceeb683703875d698708a4" - integrity sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw== - -"@esbuild/linux-riscv64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.0.tgz#ca63b921d5fe315e28610deb0c195e79b1a262ca" - integrity sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA== - -"@esbuild/linux-s390x@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.0.tgz#cb3d069f47dc202f785c997175f2307531371ef8" - integrity sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ== - -"@esbuild/linux-x64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.0.tgz#ac617e0dc14e9758d3d7efd70288c14122557dc7" - integrity sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg== - -"@esbuild/netbsd-x64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.0.tgz#6cc778567f1513da6e08060e0aeb41f82eb0f53c" - integrity sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ== - -"@esbuild/openbsd-x64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.0.tgz#76848bcf76b4372574fb4d06cd0ed1fb29ec0fbe" - integrity sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA== - -"@esbuild/sunos-x64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.0.tgz#ea4cd0639bf294ad51bc08ffbb2dac297e9b4706" - integrity sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g== - -"@esbuild/win32-arm64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.0.tgz#a5c171e4a7f7e4e8be0e9947a65812c1535a7cf0" - integrity sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ== - -"@esbuild/win32-ia32@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.0.tgz#f8ac5650c412d33ea62d7551e0caf82da52b7f85" - integrity sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg== - -"@esbuild/win32-x64@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.0.tgz#2efddf82828aac85e64cef62482af61c29561bee" - integrity sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg== +"@esbuild/aix-ppc64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz#eafa8775019b3650a77e8310ba4dbd17ca7af6d5" + integrity sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA== + +"@esbuild/android-arm64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz#68791afa389550736f682c15b963a4f37ec2f5f6" + integrity sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A== + +"@esbuild/android-arm@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz#38c91d8ee8d5196f7fbbdf4f0061415dde3a473a" + integrity sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw== + +"@esbuild/android-x64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz#93f6190ce997b313669c20edbf3645fc6c8d8f22" + integrity sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA== + +"@esbuild/darwin-arm64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz#0d391f2e81fda833fe609182cc2fbb65e03a3c46" + integrity sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA== + +"@esbuild/darwin-x64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz#92504077424584684862f483a2242cfde4055ba2" + integrity sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA== + +"@esbuild/freebsd-arm64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz#a1646fa6ba87029c67ac8a102bb34384b9290774" + integrity sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw== + +"@esbuild/freebsd-x64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz#41c9243ab2b3254ea7fb512f71ffdb341562e951" + integrity sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg== + +"@esbuild/linux-arm64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz#f3c1e1269fbc9eedd9591a5bdd32bf707a883156" + integrity sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w== + +"@esbuild/linux-arm@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz#4503ca7001a8ee99589c072801ce9d7540717a21" + integrity sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw== + +"@esbuild/linux-ia32@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz#98c474e3e0cbb5bcbdd8561a6e65d18f5767ce48" + integrity sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw== + +"@esbuild/linux-loong64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz#a8097d28d14b9165c725fe58fc438f80decd2f33" + integrity sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA== + +"@esbuild/linux-mips64el@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz#c44f6f0d7d017c41ad3bb15bfdb69b690656b5ea" + integrity sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA== + +"@esbuild/linux-ppc64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz#0765a55389a99237b3c84227948c6e47eba96f0d" + integrity sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw== + +"@esbuild/linux-riscv64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz#e4153b032288e3095ddf4c8be07893781b309a7e" + integrity sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg== + +"@esbuild/linux-s390x@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz#b9ab8af6e4b73b26d63c1c426d7669a5d53eb5a7" + integrity sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ== + +"@esbuild/linux-x64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz#0b25da17ac38c3e11cdd06ca3691d4d6bef2755f" + integrity sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA== + +"@esbuild/netbsd-x64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz#3148e48406cd0d4f7ba1e0bf3f4d77d548c98407" + integrity sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg== + +"@esbuild/openbsd-x64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz#7b73e852986a9750192626d377ac96ac2b749b76" + integrity sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw== + +"@esbuild/sunos-x64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz#402a441cdac2eee98d8be378c7bc23e00c1861c5" + integrity sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q== + +"@esbuild/win32-arm64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz#36c4e311085806a6a0c5fc54d1ac4d7b27e94d7b" + integrity sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A== + +"@esbuild/win32-ia32@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz#0cf933be3fb9dc58b45d149559fe03e9e22b54fe" + integrity sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw== + +"@esbuild/win32-x64@0.20.1": + version "0.20.1" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz#77583b6ea54cee7c1410ebbd54051b6a3fcbd8ba" + integrity sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -3154,7 +3161,7 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" -"@istanbuljs/schema@^0.1.2": +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== @@ -3387,9 +3394,9 @@ "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.0.1": version "1.1.2" @@ -4840,10 +4847,10 @@ dependencies: "@types/readdir-glob" "*" -"@types/aws-lambda@^8.10.133": - version "8.10.133" - resolved "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.133.tgz#cc21de2edc623f0fd9a5290674c4b9f30971bc58" - integrity sha512-sr852MAL/79rjDelXP6ZuJ6GwOvXIRrFAoC8a+w91mZ5XR71CuzSgo1d0+pG1qgfPhjFgaibu7SWaoC5BA7pyQ== +"@types/aws-lambda@^8.10.134": + version "8.10.134" + resolved "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.134.tgz#8f65d86736839889194f7892b7bec6b8a7ec6fc3" + integrity sha512-cfv422ivDMO+EeA3N4YcshbTHBL+5lLXe+Uz+4HXvIcsCuWvqNFpOs28ZprL8NA3qRCzt95ETiNAJDn4IcC/PA== "@types/babel__core@^7.1.14": version "7.20.5" @@ -5038,9 +5045,9 @@ form-data "^4.0.0" "@types/node@*": - version "20.11.17" - resolved "https://registry.npmjs.org/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" - integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== + version "20.11.19" + resolved "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195" + integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== dependencies: undici-types "~5.26.4" @@ -5050,14 +5057,14 @@ integrity sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw== "@types/node@^16", "@types/node@^16.9.2": - version "16.18.80" - resolved "https://registry.npmjs.org/@types/node/-/node-16.18.80.tgz#9644e2d8acaf8163d46d23e05ce3822e9379dfc3" - integrity sha512-vFxJ1Iyl7A0+xB0uW1r1v504yItKZLdqg/VZELUZ4H02U0bXAgBisSQ8Erf0DMruNFz9ggoiEv6T8Ll9bTg8Jw== + version "16.18.82" + resolved "https://registry.npmjs.org/@types/node/-/node-16.18.82.tgz#58d734b4acaa5be339864bbec9cd8024dd0b43d5" + integrity sha512-pcDZtkx9z8XYV+ius2P3Ot2VVrcYOfXffBQUBuiszrlUzKSmoDYqo+mV+IoL8iIiIjjtOMvNSmH1hwJ+Q+f96Q== "@types/node@^18": - version "18.19.15" - resolved "https://registry.npmjs.org/@types/node/-/node-18.19.15.tgz#313a9d75435669a57fc28dc8694e7f4c4319f419" - integrity sha512-AMZ2UWx+woHNfM11PyAEQmfSxi05jm9OlkxczuHeEqmvwPkYj6MWv44gbzDPefYOLysTOFyI3ziiy2ONmUZfpA== + version "18.19.17" + resolved "https://registry.npmjs.org/@types/node/-/node-18.19.17.tgz#a581a9fb4b2cfdbc61f008804f4436b2d5c40354" + integrity sha512-SzyGKgwPzuWp2SHhlpXKzCX0pIOfcI4V2eF37nNBJOhwlegQ83omtVQ1XxZpDE06V/d6AQvfQdPfnw0tRC//Ng== dependencies: undici-types "~5.26.4" @@ -5788,10 +5795,12 @@ at-least-node@^1.0.0: resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" - integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== +available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" aws-sdk-client-mock-jest@^3.0.1: version "3.0.1" @@ -5835,10 +5844,10 @@ aws-sdk-mock@5.8.0: sinon "^14.0.1" traverse "^0.6.6" -aws-sdk@2.1557.0, aws-sdk@^2.1231.0, aws-sdk@^2.1557.0, aws-sdk@^2.928.0: - version "2.1557.0" - resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1557.0.tgz#e5f15b05b10b13f1397f066b1ac5bcb5ac2845d6" - integrity sha512-625JNSUXC/t+iz8GCfzR+gBfi1mB/7W3OnmDag5SG+za76u19wSIMzUQBKPh82YJny6jhU0XVV3KfN3trI8mUg== +aws-sdk@2.1562.0, aws-sdk@^2.1231.0, aws-sdk@^2.1562.0, aws-sdk@^2.928.0: + version "2.1562.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1562.0.tgz#7e5d42c7857e943edd233e282cdb85a882f08edc" + integrity sha512-HsdlDRfVamH4tv+M+d0lnEYdtx+yEpqWA4T2XuJCjtV5JjjHDUQTKm+9C+EoTxLWtuw+SYSVWyuclwETv6CmHQ== dependencies: buffer "4.9.2" events "1.1.1" @@ -6051,12 +6060,12 @@ braces@^3.0.2, braces@~3.0.2: fill-range "^7.0.1" browserslist@^4.22.2: - version "4.22.3" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" - integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== + version "4.23.0" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001580" - electron-to-chromium "^1.4.648" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" node-releases "^2.0.14" update-browserslist-db "^1.0.13" @@ -6236,10 +6245,10 @@ camelcase@^7.0.1: resolved "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== -caniuse-lite@^1.0.30001580: - version "1.0.30001587" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz#a0bce920155fa56a1885a69c74e1163fc34b4881" - integrity sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA== +caniuse-lite@^1.0.30001587: + version "1.0.30001588" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz#07f16b65a7f95dba82377096923947fb25bce6e3" + integrity sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ== canonicalize@^2.0.0: version "2.0.0" @@ -6260,15 +6269,15 @@ case@1.6.3, case@^1.6.3: resolved "https://registry.npmjs.org/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== -cdk-from-cfn@^0.130.0: - version "0.130.0" - resolved "https://registry.npmjs.org/cdk-from-cfn/-/cdk-from-cfn-0.130.0.tgz#d610f7d8ea2ea9b104a1723f776f4930fab45149" - integrity sha512-+sYgM3SljM73dU/faCV2kIciEOZDif+CiIzOQjAF1Zl+SiIclEHFJQSD/8AR5FFSX0DGvjLhQGoJ6mVa/DPgOw== +cdk-from-cfn@^0.133.0: + version "0.133.0" + resolved "https://registry.npmjs.org/cdk-from-cfn/-/cdk-from-cfn-0.133.0.tgz#a18dd2c505c8fc0b7f4947f6d6afb3e7fea5b391" + integrity sha512-Yj0kE+GixlSGLNTodCaZEcIeyxzNQonZAykmsSP7wRSm3yYNfg/2XX1tRWi9hzUGMwqYuQr5GsCBymukU0GKsA== -cdk-generate-synthetic-examples@^0.1.303: - version "0.1.303" - resolved "https://registry.npmjs.org/cdk-generate-synthetic-examples/-/cdk-generate-synthetic-examples-0.1.303.tgz#7ef6b7bbb3f9fd8ae174e7f35da73e1753d043e6" - integrity sha512-8Se/jbGVwbuksmWkTXMQEnhqvOwSgiQquHfMBC1OBH7S1rfajd9zyqst/vI7HZ7HCQaORzwiwByf798FIOWhGQ== +cdk-generate-synthetic-examples@^0.1.304: + version "0.1.304" + resolved "https://registry.npmjs.org/cdk-generate-synthetic-examples/-/cdk-generate-synthetic-examples-0.1.304.tgz#ee8cc61ebd1bd8ad1cf79441819682625ee0841b" + integrity sha512-hKD7vAlJtccmIW1CkK4QrWP6ap532jV4PO7RVyGQ3zz6aaU/OZPbcX3UrJyq6xWZOyZfgCUaY/6IoXT0HhYSjQ== dependencies: "@jsii/spec" "^1.94.0" fs-extra "^10.1.0" @@ -6277,19 +6286,19 @@ cdk-generate-synthetic-examples@^0.1.303: jsii-rosetta "^1.94.0" yargs "^17.7.2" -cdk8s-plus-27@2.7.77: - version "2.7.77" - resolved "https://registry.npmjs.org/cdk8s-plus-27/-/cdk8s-plus-27-2.7.77.tgz#a6c33362d69d0d56aa0ef5c9b17c6b7c0e1df66b" - integrity sha512-Q+Iqb13ZdMRuYcI8mbLvjoYqy7bxFUSv6Qdkp8XnP9q4LKpzcil5j23/UwYLnc4aPS/xDxZj0heN32jkHmbShA== +cdk8s-plus-27@2.7.80: + version "2.7.80" + resolved "https://registry.npmjs.org/cdk8s-plus-27/-/cdk8s-plus-27-2.7.80.tgz#0884e12508db795fcacb7da8a59130a1b4534a07" + integrity sha512-YL+63CEGxQ9YIioal3kk6yGGxOB7PqBdzrmF4Gfu+gIGRTJgXp/1PqOF7Sdt5QucpAu8YOGKZA4gukU05bfIqQ== dependencies: minimatch "^3.1.2" optionalDependencies: backport "8.5.0" -cdk8s@2.68.37: - version "2.68.37" - resolved "https://registry.npmjs.org/cdk8s/-/cdk8s-2.68.37.tgz#2710553e072e372bbe01ec419107ecbe9cc18c74" - integrity sha512-7wGgsdK28S0Qms2FQ1dxe+zVRprYiCgT24QVsnZYrrOU9xJHjMX2NyW4qRVdruyJBClKw14jPfPKiDCdiGyjBg== +cdk8s@2.68.40: + version "2.68.40" + resolved "https://registry.npmjs.org/cdk8s/-/cdk8s-2.68.40.tgz#7aa8459ba264d473bd0fc51b2794cdc16f7e16e8" + integrity sha512-hZfQImgHAW4z6T2q5Blv+CKT1EouGeygXl355W9KqQ438byCeKeK+nQvNx1gFp3rdbjODbQq2C8/kTE3wVzEQQ== dependencies: fast-json-patch "^3.1.1" follow-redirects "^1.15.2" @@ -7214,7 +7223,7 @@ defer-to-connect@^2.0.1: resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-data-property@^1.0.1, define-data-property@^1.1.2: +define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -7484,9 +7493,9 @@ dotenv-json@^1.0.0: integrity sha512-jAssr+6r4nKhKRudQ0HOzMskOFFi9+ubXWwmrSGJFgTvpjyPXCXsCsYbjif6mXp7uxA7xY3/LGaiTQukZzSbOQ== dotenv@^16.0.1: - version "16.4.4" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.4.tgz#a26e7bb95ebd36272ebb56edb80b826aecf224c1" - integrity sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg== + version "16.4.5" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== dotenv@^8.0.0: version "8.6.0" @@ -7534,10 +7543,10 @@ ejs@^3.1.7: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.648: - version "1.4.668" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.668.tgz#5cfed14f3240cdc70a359a49790cb295b1f097f1" - integrity sha512-ZOBocMYCehr9W31+GpMclR+KBaDZOoAEabLdhpZ8oU1JFDwIaFY0UDbpXVEUFc0BIP2O2Qn3rkfCjQmMR4T/bQ== +electron-to-chromium@^1.4.668: + version "1.4.677" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.677.tgz#49ee77713516740bdde32ac2d1443c444f0dafe7" + integrity sha512-erDa3CaDzwJOpyvfKhOiJjBVNnMM0qxHq47RheVVwsSQrgBA9ZSGV9kdaOfZDPXcHzhG7lBxhj6A7KvfLJBd6Q== emittery@^0.13.1: version "0.13.1" @@ -7693,13 +7702,13 @@ es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-set-tostringtag@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + version "2.0.3" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" @@ -7758,34 +7767,34 @@ es6-weak-map@^2.0.3: es6-iterator "^2.0.3" es6-symbol "^3.1.1" -esbuild@^0.20.0: - version "0.20.0" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.20.0.tgz#a7170b63447286cd2ff1f01579f09970e6965da4" - integrity sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA== +esbuild@^0.20.1: + version "0.20.1" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz#1e4cbb380ad1959db7609cb9573ee77257724a3e" + integrity sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA== optionalDependencies: - "@esbuild/aix-ppc64" "0.20.0" - "@esbuild/android-arm" "0.20.0" - "@esbuild/android-arm64" "0.20.0" - "@esbuild/android-x64" "0.20.0" - "@esbuild/darwin-arm64" "0.20.0" - "@esbuild/darwin-x64" "0.20.0" - "@esbuild/freebsd-arm64" "0.20.0" - "@esbuild/freebsd-x64" "0.20.0" - "@esbuild/linux-arm" "0.20.0" - "@esbuild/linux-arm64" "0.20.0" - "@esbuild/linux-ia32" "0.20.0" - "@esbuild/linux-loong64" "0.20.0" - "@esbuild/linux-mips64el" "0.20.0" - "@esbuild/linux-ppc64" "0.20.0" - "@esbuild/linux-riscv64" "0.20.0" - "@esbuild/linux-s390x" "0.20.0" - "@esbuild/linux-x64" "0.20.0" - "@esbuild/netbsd-x64" "0.20.0" - "@esbuild/openbsd-x64" "0.20.0" - "@esbuild/sunos-x64" "0.20.0" - "@esbuild/win32-arm64" "0.20.0" - "@esbuild/win32-ia32" "0.20.0" - "@esbuild/win32-x64" "0.20.0" + "@esbuild/aix-ppc64" "0.20.1" + "@esbuild/android-arm" "0.20.1" + "@esbuild/android-arm64" "0.20.1" + "@esbuild/android-x64" "0.20.1" + "@esbuild/darwin-arm64" "0.20.1" + "@esbuild/darwin-x64" "0.20.1" + "@esbuild/freebsd-arm64" "0.20.1" + "@esbuild/freebsd-x64" "0.20.1" + "@esbuild/linux-arm" "0.20.1" + "@esbuild/linux-arm64" "0.20.1" + "@esbuild/linux-ia32" "0.20.1" + "@esbuild/linux-loong64" "0.20.1" + "@esbuild/linux-mips64el" "0.20.1" + "@esbuild/linux-ppc64" "0.20.1" + "@esbuild/linux-riscv64" "0.20.1" + "@esbuild/linux-s390x" "0.20.1" + "@esbuild/linux-x64" "0.20.1" + "@esbuild/netbsd-x64" "0.20.1" + "@esbuild/openbsd-x64" "0.20.1" + "@esbuild/sunos-x64" "0.20.1" + "@esbuild/win32-arm64" "0.20.1" + "@esbuild/win32-ia32" "0.20.1" + "@esbuild/win32-x64" "0.20.1" escalade@^3.1.1: version "3.1.2" @@ -8354,9 +8363,9 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.7, flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== flatten@^1.0.2: version "1.0.3" @@ -8364,9 +8373,9 @@ flatten@^1.0.2: integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== flow-parser@0.*: - version "0.228.0" - resolved "https://registry.npmjs.org/flow-parser/-/flow-parser-0.228.0.tgz#0b801507c8cf44257338596b49bd0904caea2026" - integrity sha512-xPWkzCO07AnS8X+fQFpWm+tJ+C7aeaiVzJ+rSepbkCXUvUJ6l6squEl63axoMcixyH4wLjmypOzq/+zTD0O93w== + version "0.229.0" + resolved "https://registry.npmjs.org/flow-parser/-/flow-parser-0.229.0.tgz#054b60d6f6a9fab76cd89dc6ca662fd32d910163" + integrity sha512-mOYmMuvJwAo/CvnMFEq4SHftq7E5188hYMTTxJyQOXk2nh+sgslRdYMw3wTthH+FMcFaZLtmBPuMu6IwztdoUQ== fn.name@1.x.x: version "1.1.0" @@ -8915,17 +8924,17 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-d dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -9023,9 +9032,9 @@ http-proxy-agent@^5.0.0: debug "4" http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.1.tgz#f1c7df4bd6c30ba90f2c713fd4b60d3989d4b3d9" - integrity sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ== + version "7.0.2" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== dependencies: agent-base "^7.1.0" debug "^4.3.4" @@ -9047,9 +9056,9 @@ https-proxy-agent@^5.0.0: debug "4" https-proxy-agent@^7.0.2, https-proxy-agent@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.3.tgz#93f115f0f106a746faf364d1301b2e561cdf70de" - integrity sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w== + version "7.0.4" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== dependencies: agent-base "^7.0.2" debug "4" @@ -9416,9 +9425,9 @@ is-nan@^1.3.2: define-properties "^1.1.3" is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + version "2.0.3" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-npm@^6.0.0: version "6.0.0" @@ -9503,11 +9512,11 @@ is-relative-path@^1.0.2: integrity sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA== is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + version "1.0.3" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-ssh@^1.4.0: version "1.4.0" @@ -9547,7 +9556,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.13, is-typed-array@^1.1.3, is-typed-array@^1.1.9: +is-typed-array@^1.1.13, is-typed-array@^1.1.3: version "1.1.13" resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== @@ -9657,13 +9666,13 @@ istanbul-lib-instrument@^5.0.4: semver "^6.3.0" istanbul-lib-instrument@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" - integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + version "6.0.2" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" + integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" istanbul-lib-coverage "^3.2.0" semver "^7.5.4" @@ -9698,9 +9707,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.0.2, istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -10290,10 +10299,10 @@ jsii-rosetta@^1.94.0: workerpool "^6.5.1" yargs "^16.2.0" -jsii-rosetta@~5.3.15: - version "5.3.15" - resolved "https://registry.npmjs.org/jsii-rosetta/-/jsii-rosetta-5.3.15.tgz#56257131db9de69a7daaaed09369a93bb3d612a7" - integrity sha512-RP0jCHdp3M1FbInr1dVB3Q/WKLTupR7KHTNlmWuVURcURK6LKgRrXIwwo/k+fEmB+9WoQs/WUvNpq9bKUrsu8A== +jsii-rosetta@~5.3.18: + version "5.3.18" + resolved "https://registry.npmjs.org/jsii-rosetta/-/jsii-rosetta-5.3.18.tgz#9eb326ea7e730203b5e25f17292215b1859e6b66" + integrity sha512-GgjN7rLwMmEoU5ZJLZC25ccpDV2MLAIzlK7mS/cTY4hBsY7/uLeEp31a+c5UO98v328M4LCHkxdsdL0YQrdJAQ== dependencies: "@jsii/check-node" "1.94.0" "@jsii/spec" "^1.94.0" @@ -10302,7 +10311,7 @@ jsii-rosetta@~5.3.15: commonmark "^0.31.0" fast-glob "^3.3.2" jsii "~5.3.0" - semver "^7.5.4" + semver "^7.6.0" semver-intersect "^1.5.0" stream-json "^1.8.0" typescript "~5.3" @@ -10328,10 +10337,10 @@ jsii@1.94.0, jsii@^1.94.0: typescript "~3.9.10" yargs "^16.2.0" -jsii@~5.3.0, jsii@~5.3.18: - version "5.3.18" - resolved "https://registry.npmjs.org/jsii/-/jsii-5.3.18.tgz#21e963355d7b5ee0a72ae8d27529d598f0ba366f" - integrity sha512-1BQT5rMDNiyZp7u5461EQQuEOnPJv0UEFlTHgDZJqqCeh1OquTpB0fYFfpJnsvl4C1aleBYo3f0QMzvV7wLVjw== +jsii@~5.3.0, jsii@~5.3.20: + version "5.3.20" + resolved "https://registry.npmjs.org/jsii/-/jsii-5.3.20.tgz#7de79228c1d8f86336c33b47dc56d85b2d8b69f0" + integrity sha512-OPoEpEvD943+fx6ruoUTpmFJoY55wiuUl64ELeQ4CQ6mUfx31YczvacqDYrrbSwoEe8Ea9a7sQOUXo3b3Oi8PQ== dependencies: "@jsii/check-node" "1.94.0" "@jsii/spec" "^1.94.0" @@ -11569,10 +11578,10 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -nock@^13.5.1: - version "13.5.1" - resolved "https://registry.npmjs.org/nock/-/nock-13.5.1.tgz#4e40f9877ad0d43b7cdb474261c190f3715dd806" - integrity sha512-+s7b73fzj5KnxbKH4Oaqz07tQ8degcMilU4rrmnKvI//b0JMBU4wEXFQ8zqr+3+L4eWSfU3H/UoIVGUV0tue1Q== +nock@^13.5.3: + version "13.5.3" + resolved "https://registry.npmjs.org/nock/-/nock-13.5.3.tgz#9858adf5b840696a410baf98bda720d5fad4f075" + integrity sha512-2NlGmHIK2rTeyy7UaY1ZNg0YZfEJMxghXgZi0b4DBsUyoDNTTxZeCSG1nmirAWF44RkkoV8NnegLVQijgVapNQ== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" @@ -12732,6 +12741,11 @@ pluralize@^8.0.0: resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-selector-parser@^6.0.10: version "6.0.15" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" @@ -13552,13 +13566,14 @@ set-function-length@^1.2.1: has-property-descriptors "^1.0.1" set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + version "2.0.2" + resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" setimmediate@^1.0.5: version "1.0.5" @@ -13850,9 +13865,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.4.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" - integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== + version "2.5.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -14539,43 +14554,48 @@ type@^2.7.2: integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== typed-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" - integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== + version "1.0.2" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.7" es-errors "^1.3.0" is-typed-array "^1.1.13" typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + version "1.0.1" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + version "1.0.2" + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + version "1.0.5" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -14589,10 +14609,10 @@ typedarray@^0.0.6: resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript-json-schema@^0.62.0: - version "0.62.0" - resolved "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.62.0.tgz#774b06b0c9d86d7f3580ea9136363a6eafae1470" - integrity sha512-qRO6pCgyjKJ230QYdOxDRpdQrBeeino4v5p2rYmSD72Jf4rD3O+cJcROv46sQukm46CLWoeusqvBgKpynEv25g== +typescript-json-schema@^0.63.0: + version "0.63.0" + resolved "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.63.0.tgz#55ef6c4dde71625425b169d37e0de3d2ea14e093" + integrity sha512-vBfMBq4U/rZ5FIRi7u4o/YAdeRHsSabdGHogUlCPi0cYU0CGvS4Bdu8bSzyUsF+Kf5PTQUGh2TictJuQTDK6eQ== dependencies: "@types/json-schema" "^7.0.9" "@types/node" "^16.9.2" @@ -14619,9 +14639,9 @@ typescript@^4.5.5: integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typescript@next: - version "5.4.0-dev.20240214" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.0-dev.20240214.tgz#7412fc712e698c6c3bd36d2d336d75eb7ef2c614" - integrity sha512-JXOvFnlY/tw/adrzpfOUIrdf8PeIsfW7ljice9bP7dK/dBo/F0VcHr98QA5KtPG1ECsYi2Sl/d9AnucpUCgAaw== + version "5.5.0-dev.20240221" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.5.0-dev.20240221.tgz#13ef0c4cb7a620881530b1753658689bf24c7522" + integrity sha512-zAZKYmbJjrjtMiLRDk2y6cDrzziF/ahV0u2ISZ/ZyInDBy/XFIC4R9baJphn6iC004KhdSEKGwy9s+HheBwUlA== typescript@~5.1.0, typescript@~5.1.6: version "5.1.6"