diff --git a/.github/workflows/yarn-upgrade.yml b/.github/workflows/yarn-upgrade.yml index df9615a68c650..c662783a4108d 100644 --- a/.github/workflows/yarn-upgrade.yml +++ b/.github/workflows/yarn-upgrade.yml @@ -24,7 +24,7 @@ jobs: - name: Locate Yarn cache id: yarn-cache - run: echo "::set-output name=dir::$(yarn cache dir)" + run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT - name: Restore Yarn cache uses: actions/cache@v3 @@ -45,7 +45,7 @@ jobs: # These need to be ignored from the `ncu` runs! run: |- echo -n "::set-output name=list::" - node -p "$(lerna ls --all --json 2>/dev/null).map(item => item.name).join(',')" + echo "list=$(lerna ls --all --json 2>/dev/null | jq -r 'map(.name) | join(",")')" >> $GITHUB_OUTPUT - name: Run "ncu -u" # We special-case @types/node because we want to stay on the current major (minimum supported node release) # We special-case @types/fs-extra because the current major (9.x) is broken with @types/node >= 10 @@ -65,10 +65,10 @@ jobs: lerna exec --parallel ncu -- --upgrade --reject='@types/node,@types/prettier,@types/fs-extra,constructs,typescript,aws-sdk,aws-sdk-mock,${{ steps.list-packages.outputs.list }}' --target=minor # Upgrade package.jsons in init templates for pj in $(find packages/aws-cdk/lib/init-templates -name package.json); do - (cd $(dirname $pj) && ncu --upgrade --reject='@types/babel__traverse,@types/jest,@types/node,@types/prettier,@types/fs-extra,constructs,typescript,aws-sdk,aws-sdk-mock,ts-jest,jest,${{ steps.list-packages.outputs.list }}') + (cd $(dirname $pj) && ncu --upgrade --reject='constructs,${{ steps.list-packages.outputs.list }}') done # Upgrade dependencies at an aws-eks integ test docker image - cd packages/@aws-cdk/aws-eks/test/sdk-call-integ-test-docker-app/app/ && ncu --upgrade --reject='@types/jest,@types/node,@types/prettier,@types/fs-extra,constructs,typescript,aws-sdk,aws-sdk-mock,ts-jest,jest,${{ steps.list-packages.outputs.list }}' + cd packages/@aws-cdk/aws-eks/test/sdk-call-integ-test-docker-app/app/ && ncu --upgrade --reject='aws-sdk,${{ steps.list-packages.outputs.list }}' # This will ensure the current lockfile is up-to-date with the dependency specifications (necessary for "yarn update" to run) - name: Run "yarn install" diff --git a/CHANGELOG.v2.alpha.md b/CHANGELOG.v2.alpha.md index d62b02727a6f3..a29633a145120 100644 --- a/CHANGELOG.v2.alpha.md +++ b/CHANGELOG.v2.alpha.md @@ -2,6 +2,71 @@ 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.55.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.54.0-alpha.0...v2.55.0-alpha.0) (2022-12-14) + + +### ⚠ BREAKING CHANGES TO EXPERIMENTAL FEATURES + +* **appsync:** `DataSource.createResolver`, +`DataSource.createFunction`, and `GraphQlApi.createResolver` now require +2 arguments instead of 1. +* **appsync:** Renames `Schema` to `SchemaFile` that implements `ISchema`. Removes all `addXxx` type methods from `GraphQlApi`. + +### Features + +* **aws-lambda-python:** add command hooks for bundling to allow for execution of custom commands in the build container ([#23330](https://github.com/aws/aws-cdk/issues/23330)) ([d3d071f](https://github.com/aws/aws-cdk/commit/d3d071f51fab61ae0e484f143e68e698bba48537)) +* **gamelift:** add GameSessionQueue L2 Construct for GameLift ([#23266](https://github.com/aws/aws-cdk/issues/23266)) ([1ded644](https://github.com/aws/aws-cdk/commit/1ded64430d8258f6666743e245ef5ac31ed4bf0b)) + + +### Bug Fixes + +* **appsync:** unexpected resolver replacement ([#23322](https://github.com/aws/aws-cdk/issues/23322)) ([6dc15d4](https://github.com/aws/aws-cdk/commit/6dc15d40764dc71fe6a3b70691f586e96cdcf730)), closes [#13269](https://github.com/aws/aws-cdk/issues/13269) +* **servicecatalogappregistry:** synth error when associating a nested stack ([#23248](https://github.com/aws/aws-cdk/issues/23248)) ([30301d9](https://github.com/aws/aws-cdk/commit/30301d9e5ab4af86c5e48a5ad47013924acdfed7)) + + +### Miscellaneous Chores + +* **appsync:** removes codefirst schema generation ([#23250](https://github.com/aws/aws-cdk/issues/23250)) ([2bd1e41](https://github.com/aws/aws-cdk/commit/2bd1e4184aea054766f7872b300b960b2b83ef06)) + +## [2.54.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.53.0-alpha.0...v2.54.0-alpha.0) (2022-12-07) + + +### ⚠ BREAKING CHANGES TO EXPERIMENTAL FEATURES + +* **servicecatalogappregistry:** Stack inside ApplicationAssociator is no longer is created inside ApplicationAssociator Construct scope. The stack will now get created inside cdk.App scope. +* ** servicecatalogappregistry:** stackId will no longer have ApplicationAssociator Construct scope. + +### All Submissions: + +* [ X] Have you followed the guidelines in our [Contributing guide?](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) + +### Adding new Unconventional Dependencies: + +* [ ] This PR adds new unconventional dependencies following the process described [here](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md/#adding-new-unconventional-dependencies) + +### New Features + +* [ ] Have you added the new feature to an [integration test](https://github.com/aws/aws-cdk/blob/main/INTEGRATION_TESTS.md)? + * [ ] Did you use `yarn integ` to deploy the infrastructure and generate the snapshot (i.e. `yarn integ` without `--dry-run`)? + +*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* + +### Features + +* **gamelift:** add Alias L2 Construct for GameLift ([#23042](https://github.com/aws/aws-cdk/issues/23042)) ([49d5c3a](https://github.com/aws/aws-cdk/commit/49d5c3a21ae1fa15bf1be4c6b81194800b016372)) +* **gamelift:** add MatchmakingRuleSet L2 Construct for GameLift ([#23091](https://github.com/aws/aws-cdk/issues/23091)) ([ad8a704](https://github.com/aws/aws-cdk/commit/ad8a704cce7c09bf51f6ee4d688d00fcb2c86472)) +* **gamelift:** add support for buildArn output attribute ([#23070](https://github.com/aws/aws-cdk/issues/23070)) ([08f2995](https://github.com/aws/aws-cdk/commit/08f2995784cdc0fd43ec10af534c49a8466b5351)) +* **glue:** support glue version 4.0 ([#23223](https://github.com/aws/aws-cdk/issues/23223)) ([fe08aa9](https://github.com/aws/aws-cdk/commit/fe08aa900103f93ca5ea4c3fc3cdc6b31d4b52d9)), closes [#23220](https://github.com/aws/aws-cdk/issues/23220) +* **lambda-go:** allow configuration of GOPROXY ([#23171](https://github.com/aws/aws-cdk/issues/23171)) ([d189161](https://github.com/aws/aws-cdk/commit/d189161964f7169f1c0918cdec0fca9cacec4d61)) +* **location:** `PlaceIndex` ([#22853](https://github.com/aws/aws-cdk/issues/22853)) ([50422df](https://github.com/aws/aws-cdk/commit/50422df24f00b10a5487aa56bdf7220846ebbeaa)) +* **sagemaker:** add Endpoint L2 construct ([#22886](https://github.com/aws/aws-cdk/issues/22886)) ([bf7586b](https://github.com/aws/aws-cdk/commit/bf7586b16a6f7706d8d7da3a6e0aed955f159e15)), closes [#2809](https://github.com/aws/aws-cdk/issues/2809) + + +### Bug Fixes + +* **appsync:** fully qualify service principal ([#23054](https://github.com/aws/aws-cdk/issues/23054)) ([0bfce89](https://github.com/aws/aws-cdk/commit/0bfce8965ee50ab79054e6f5a4c6bbecb0955e19)) +* **servicecatalogappregistry:** creating ApplicationStack in AppScope to give user more control over the passed stackId ([#22977](https://github.com/aws/aws-cdk/issues/22977)) ([85fe047](https://github.com/aws/aws-cdk/commit/85fe047a94494794afc1ef6c1c788219af3eb0cb)), closes [#22973](https://github.com/aws/aws-cdk/issues/22973) + ## [2.53.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.52.1-alpha.0...v2.53.0-alpha.0) (2022-11-29) ## [2.52.1-alpha.0](https://github.com/aws/aws-cdk/compare/v2.52.0-alpha.0...v2.52.1-alpha.0) (2022-11-28) diff --git a/CHANGELOG.v2.md b/CHANGELOG.v2.md index c0ac09c92f3f0..749c6d22c522f 100644 --- a/CHANGELOG.v2.md +++ b/CHANGELOG.v2.md @@ -2,6 +2,85 @@ 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.55.0](https://github.com/aws/aws-cdk/compare/v2.54.0...v2.55.0) (2022-12-14) + + +### Features + +* **autoscaling:** support default instance warmup for Auto Scaling groups ([#23285](https://github.com/aws/aws-cdk/issues/23285)) ([3f706e2](https://github.com/aws/aws-cdk/commit/3f706e2210fb1ffe2b70e27862a17594c3337800)) +* **cfnspec:** cloudformation spec v101.0.0 ([#23294](https://github.com/aws/aws-cdk/issues/23294)) ([3951f09](https://github.com/aws/aws-cdk/commit/3951f09fb370b74936f3fb45e7188ac6c7343b67)) +* **cognito:** add new AdvancedSecurityMode property ([#23261](https://github.com/aws/aws-cdk/issues/23261)) ([9cc9bd3](https://github.com/aws/aws-cdk/commit/9cc9bd34a9d67e7e072292e20aeb9e003e55f158)) +* **core:** add volumes-from option to docker run command for bundling ([#22829](https://github.com/aws/aws-cdk/issues/22829)) ([813c2f1](https://github.com/aws/aws-cdk/commit/813c2f17b6c0f1056ed43a8a93f4cffbe9ae9736)), closes [#8799](https://github.com/aws/aws-cdk/issues/8799) [#21660](https://github.com/aws/aws-cdk/issues/21660) +* **s3:** update runtime of notifications-handler to python3.9 ([#23209](https://github.com/aws/aws-cdk/issues/23209)) ([b2d293d](https://github.com/aws/aws-cdk/commit/b2d293d3f8d36547d8cfd7ff3957428718c3827f)) +* **s3-deployment:** add additional sources with `addSource` ([#23321](https://github.com/aws/aws-cdk/issues/23321)) ([b34d0b7](https://github.com/aws/aws-cdk/commit/b34d0b7b0152dc5edb2f963054c6af273119006e)), closes [#22857](https://github.com/aws/aws-cdk/issues/22857) + + +### Bug Fixes + +* **cloudwatch:** math expressions incorrectly warn about metricsinsights variable names ([#23316](https://github.com/aws/aws-cdk/issues/23316)) ([55108b9](https://github.com/aws/aws-cdk/commit/55108b969a94f671a492b4536d2ad9d13d11cf9d)) +* **core:** cross stack references to string lists break ([#22873](https://github.com/aws/aws-cdk/issues/22873)) ([3ddb8cf](https://github.com/aws/aws-cdk/commit/3ddb8cf44f1e7a285b767f4f4540924a728083c4)), closes [/docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#aws-resource-ec2](https://github.com/aws//docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html/issues/aws-resource-ec2) [#21682](https://github.com/aws/aws-cdk/issues/21682) +* **custom-resources:** inactive lambda functions fail on invoke ([#22612](https://github.com/aws/aws-cdk/issues/22612)) ([def2971](https://github.com/aws/aws-cdk/commit/def2971d91eedbd327d3acec201d902376129f25)), closes [#20123](https://github.com/aws/aws-cdk/issues/20123) +* **ec2:** Invalid security group ID ([#22859](https://github.com/aws/aws-cdk/issues/22859)) ([c2043c8](https://github.com/aws/aws-cdk/commit/c2043c8dfaaa3189f625dd93c94ee9139e5505e6)), closes [aws-cdk/aws-ec2/lib/peer.ts#L224](https://github.com/aws-cdk/aws-ec2/lib/peer.ts/issues/L224) +* **ecr:** grants for cross-account principals result in failed deployments ([#16376](https://github.com/aws/aws-cdk/issues/16376)) ([84e20f8](https://github.com/aws/aws-cdk/commit/84e20f8da37c22639c033f51c89ef608260e7578)), closes [#15070](https://github.com/aws/aws-cdk/issues/15070) +* **opensearch:** Don't throw a Az count mismatch for imported VPCs ([#22654](https://github.com/aws/aws-cdk/issues/22654)) ([6a28b7f](https://github.com/aws/aws-cdk/commit/6a28b7f0aecf0bc9c5876bf4c7df87d69f0af836)), closes [#22651](https://github.com/aws/aws-cdk/issues/22651) + + +### Reverts + +* "chore: save exclusion rules when bumping the CFN spec ([#22788](https://github.com/aws/aws-cdk/issues/22788))" ([#23282](https://github.com/aws/aws-cdk/issues/23282)) ([cc76cfb](https://github.com/aws/aws-cdk/commit/cc76cfb124a59131996d75d05a82b7985c787ae0)) + +## [2.54.0](https://github.com/aws/aws-cdk/compare/v2.53.0...v2.54.0) (2022-12-07) + + +### Features + +* **autoscaling:** support for throughput on GP3 volumes ([#22441](https://github.com/aws/aws-cdk/issues/22441)) ([d13b64a](https://github.com/aws/aws-cdk/commit/d13b64af178579ae57ddc6da8d1fb53f26ac9777)), closes [aws-cdk/aws-autoscaling/lib/volume.ts#L1](https://github.com/aws-cdk/aws-autoscaling/lib/volume.ts/issues/L1) +* **aws-cloudwatch:** add missing cloudwatch statistics in exported enum (`p`, `tm`, `iqm`, `wm`, `tc`, `ts`) ([#23074](https://github.com/aws/aws-cdk/issues/23074)) ([47943d2](https://github.com/aws/aws-cdk/commit/47943d206c8ff28923e19028acd5991d8e387ac9)), closes [#21666](https://github.com/aws/aws-cdk/issues/21666) [#14688](https://github.com/aws/aws-cdk/issues/14688) +* **aws-lambda:** Generates a version when currentVersionOptions is set ([#23225](https://github.com/aws/aws-cdk/issues/23225)) ([65eca47](https://github.com/aws/aws-cdk/commit/65eca47e31ad9f9efaf1fbc1753a2460566062e6)), closes [#23002](https://github.com/aws/aws-cdk/issues/23002) +* **cfnspec:** cloudformation spec v100.0.0 ([#23240](https://github.com/aws/aws-cdk/issues/23240)) ([7882e0e](https://github.com/aws/aws-cdk/commit/7882e0e8c935fff682fea8dd1ad2379a54bfe8a2)) +* **cfnspec:** cloudformation spec v98.0.0 ([#22971](https://github.com/aws/aws-cdk/issues/22971)) ([2c61405](https://github.com/aws/aws-cdk/commit/2c614059c44939e00c93c924ff2f0aa7a22a2a6e)) +* **cfnspec:** cloudformation spec v99.0.0 ([#23007](https://github.com/aws/aws-cdk/issues/23007)) ([d7e0647](https://github.com/aws/aws-cdk/commit/d7e0647fc6fc21710a965efbaa26066328d74795)) +* **cli:** show stack progress info in cdk deploy/destroy commands ([#22883](https://github.com/aws/aws-cdk/issues/22883)) ([62c82d7](https://github.com/aws/aws-cdk/commit/62c82d78fcf2255eef9337b6b788086aff93b8e6)), closes [#22879](https://github.com/aws/aws-cdk/issues/22879) +* **cli:** use up-to-date dependencies in init templates ([#23124](https://github.com/aws/aws-cdk/issues/23124)) ([c9fdc8a](https://github.com/aws/aws-cdk/commit/c9fdc8ad992669ac907e21e26bd8d197cfbc86c7)) +* **cloudfront:** add convenience grant methods to IDistribution ([#22709](https://github.com/aws/aws-cdk/issues/22709)) ([2eb7d73](https://github.com/aws/aws-cdk/commit/2eb7d73d8647d1b3a9e698bfbdabcad95809eb61)), closes [#13159](https://github.com/aws/aws-cdk/issues/13159) +* **cloudtrail:** enable CloudTrail Insights on Trail ([#23099](https://github.com/aws/aws-cdk/issues/23099)) ([8a1460e](https://github.com/aws/aws-cdk/commit/8a1460e62ce58183a12ecb22c21c49f9b1504d20)), closes [#8335](https://github.com/aws/aws-cdk/issues/8335) +* **cloudwatch:** `Stats` factory class for metric strings ([#23172](https://github.com/aws/aws-cdk/issues/23172)) ([0c9c4b4](https://github.com/aws/aws-cdk/commit/0c9c4b494b489646c9ab1d1fefb59f50c851f774)), closes [#23074](https://github.com/aws/aws-cdk/issues/23074) +* **CloudWatch:** Dashboard TextWidget background support ([#23169](https://github.com/aws/aws-cdk/issues/23169)) ([2506a01](https://github.com/aws/aws-cdk/commit/2506a019aba914db78acd3016356480826e9f510)), closes [#23114](https://github.com/aws/aws-cdk/issues/23114) +* **efs:** support for new `elastic` throughputmode ([#23200](https://github.com/aws/aws-cdk/issues/23200)) ([d7ae159](https://github.com/aws/aws-cdk/commit/d7ae159a1ce3e332b39a6006a7f54683f2559938)) +* **eks:** support for Kubernetes version 1.24 ([#22945](https://github.com/aws/aws-cdk/issues/22945)) ([cc957d6](https://github.com/aws/aws-cdk/commit/cc957d619c776244b068fdc19bfa15194192fa32)) +* **elbv2:** add desyncMitigationMode for elbv2 ([#22730](https://github.com/aws/aws-cdk/issues/22730)) ([1a11938](https://github.com/aws/aws-cdk/commit/1a11938ce001bb4eb1d455e83d64e2011be2dbef)) +* **events:** EventBus policy ([#23243](https://github.com/aws/aws-cdk/issues/23243)) ([7a3de0a](https://github.com/aws/aws-cdk/commit/7a3de0ae89d49ba61d05cf3255da88d31d9474c7)) +* **events:** new filtering capabilities ([#23075](https://github.com/aws/aws-cdk/issues/23075)) ([680a755](https://github.com/aws/aws-cdk/commit/680a75534e24598b4ca1faabb3db394a3e131d84)) +* **iam:** apply permissions boundary to a `Stage` ([#22913](https://github.com/aws/aws-cdk/issues/22913)) ([ba4896a](https://github.com/aws/aws-cdk/commit/ba4896a4140a5a0fd5665d81db79480f4a52b670)), closes [#22745](https://github.com/aws/aws-cdk/issues/22745) +* **rds:** General Purpose gp3 storage volumes for database instance ([#22864](https://github.com/aws/aws-cdk/issues/22864)) ([82c3646](https://github.com/aws/aws-cdk/commit/82c364631f4680ab701c9edc7ed514bb3097d3ee)), closes [#23036](https://github.com/aws/aws-cdk/issues/23036) +* **rds:** use user-defined security group for db user rotation function ([#23087](https://github.com/aws/aws-cdk/issues/23087)) ([9d8f69e](https://github.com/aws/aws-cdk/commit/9d8f69e69250561fbe45a9f59cedfac402b13f1e)), closes [#23086](https://github.com/aws/aws-cdk/issues/23086) +* **ses:** Virtual Deliverability Manager ([#22908](https://github.com/aws/aws-cdk/issues/22908)) ([41aa72c](https://github.com/aws/aws-cdk/commit/41aa72c005787fa758eabc55658f4db2a02aa1e5)) +* **stepfunctions:** support cross-account task invocations ([#23012](https://github.com/aws/aws-cdk/issues/23012)) ([df163ec](https://github.com/aws/aws-cdk/commit/df163ec72c61b521ce6f8d7555872c1342a70745)), closes [#22994](https://github.com/aws/aws-cdk/issues/22994) +* bootstrap arguments for permissions boundary ([#22792](https://github.com/aws/aws-cdk/issues/22792)) ([6224b6d](https://github.com/aws/aws-cdk/commit/6224b6d850ad1e019e60e905b1799baa071cf269)), closes [#22913](https://github.com/aws/aws-cdk/issues/22913) + + +### Bug Fixes + +* **cli:** typescript init templates fails with error in build step ([#23125](https://github.com/aws/aws-cdk/issues/23125)) ([247d0f3](https://github.com/aws/aws-cdk/commit/247d0f3f0a0f208391d4ed1480f9269c6941ae6b)), closes [#23126](https://github.com/aws/aws-cdk/issues/23126) +* **core:** the string 'undefined' is recognized as a valid partition when looking up for fact values ([#23023](https://github.com/aws/aws-cdk/issues/23023)) ([6f4dcfd](https://github.com/aws/aws-cdk/commit/6f4dcfd74a33dcf04d15e3c5a1c1b53bcfe0dbde)) +* **integ-test:** limit api response to avoid 4k limit ([#23102](https://github.com/aws/aws-cdk/issues/23102)) ([437c21f](https://github.com/aws/aws-cdk/commit/437c21f39c8ba179ac21e4a98632cfd37500c686)) +* **kinesis:** read permissions for stream do not include `kinesis:DescribeStreamConsumer` ([#22794](https://github.com/aws/aws-cdk/issues/22794)) ([e53352d](https://github.com/aws/aws-cdk/commit/e53352d233910acaeaaf4c8d9255043e3bf80665)) +* **lambda:** allow tokens in kafka consumer group id ([#22993](https://github.com/aws/aws-cdk/issues/22993)) ([320cc25](https://github.com/aws/aws-cdk/commit/320cc2595c482884089331eea437c80064642539)), closes [#22932](https://github.com/aws/aws-cdk/issues/22932) +* **lambda-nodejs:** AWS SDK v2 is not available for node18.x runtime ([#22989](https://github.com/aws/aws-cdk/issues/22989)) ([55bca78](https://github.com/aws/aws-cdk/commit/55bca78605995bab0fe0e5ae7e8926e0342aa636)) +* **logs:** Cannot set log `removalPolicy: destroy` to more than one LogRetention resources ([#22755](https://github.com/aws/aws-cdk/issues/22755)) ([fee2fa2](https://github.com/aws/aws-cdk/commit/fee2fa268dfaa3d20a345f9dcf6076f690409620)) +* **route53:** cross-account delegation broken in opt-in regions ([#23082](https://github.com/aws/aws-cdk/issues/23082)) ([5ba35e4](https://github.com/aws/aws-cdk/commit/5ba35e41b0b5f885e72b3f75c6d2f695d2f8808a)), closes [#23081](https://github.com/aws/aws-cdk/issues/23081) +* **toolkit:** endless wait if CDKToolkit stack is `REVIEW_IN_PROGRESS` ([#23230](https://github.com/aws/aws-cdk/issues/23230)) ([477fa85](https://github.com/aws/aws-cdk/commit/477fa851b35954b62917e8319a13d01b446ddeae)) +* **triggers:** unable to trigger two lambda functions ([#22124](https://github.com/aws/aws-cdk/issues/22124)) ([a96d69c](https://github.com/aws/aws-cdk/commit/a96d69c0524268e7b642ca1f5e943e4a160b3a1f)), closes [#22110](https://github.com/aws/aws-cdk/issues/22110) +* bootstrapping.integtest.ts ([#23084](https://github.com/aws/aws-cdk/issues/23084)) ([c594918](https://github.com/aws/aws-cdk/commit/c594918729ccecab4e5bee1e48bda1fec10f6761)) +* ECS service replacement regression ([#22978](https://github.com/aws/aws-cdk/issues/22978)) ([0292d3f](https://github.com/aws/aws-cdk/commit/0292d3f85b8624ad378347da285eb2f3a9e59f14)), closes [#22467](https://github.com/aws/aws-cdk/issues/22467) + + +### Reverts + +* "chore(deps): Bump aws-actions/stale-issue-cleanup from 5 to 6" ([#23024](https://github.com/aws/aws-cdk/issues/23024)) ([ec8ce8b](https://github.com/aws/aws-cdk/commit/ec8ce8becd4d670f0fec3e6f9901e4a9487dc7ea)), closes [aws/aws-cdk#23008](https://github.com/aws/aws-cdk/issues/23008) +* "chore(deps): Bump aws-actions/stale-issue-cleanup from 5 to 6" ([#23197](https://github.com/aws/aws-cdk/issues/23197)) ([f5fe69a](https://github.com/aws/aws-cdk/commit/f5fe69aadfcf092d3b0c465558ba6e1b23a0912f)), closes [aws/aws-cdk#23111](https://github.com/aws/aws-cdk/issues/23111) [#23199](https://github.com/aws/aws-cdk/issues/23199) +* "refactor(apigateway): Enclose getaway response parameters within single quotes" ([#23037](https://github.com/aws/aws-cdk/issues/23037)) ([dc8f87a](https://github.com/aws/aws-cdk/commit/dc8f87a97d242e7ef798513937a31f39df84ab7d)), closes [aws/aws-cdk#22637](https://github.com/aws/aws-cdk/issues/22637) + ## [2.53.0](https://github.com/aws/aws-cdk/compare/v2.52.1...v2.53.0) (2022-11-29) diff --git a/allowed-breaking-changes.txt b/allowed-breaking-changes.txt index 98a9d94c8b7a6..e6ec703f4b4e2 100644 --- a/allowed-breaking-changes.txt +++ b/allowed-breaking-changes.txt @@ -148,3 +148,5 @@ incompatible-argument:@aws-cdk/aws-route53-targets.InterfaceVpcEndpointTarget. This method allows for reusability and modularity, ideal for larger projects. - For example, imagine moving all Object Type definition outside the stack. - - `object-types.ts` - a file for object type definitions - - ```ts nofixture - import * as appsync from '@aws-cdk/aws-appsync'; - export const demo = new appsync.ObjectType('Demo', { - definition: { - id: appsync.GraphqlType.string({ isRequired: true }), - version: appsync.GraphqlType.string({ isRequired: true }), - }, - }); - ``` - - `cdk-stack.ts` - a file containing our cdk stack - - ```ts fixture=with-objects - declare const api: appsync.GraphqlApi; - api.addType(demo); - ``` - -2. Object Types can be created ***externally*** from an Interface Type. - - ```ts - const node = new appsync.InterfaceType('Node', { - definition: { - id: appsync.GraphqlType.string({ isRequired: true }), - }, - }); - const demo = new appsync.ObjectType('Demo', { - interfaceTypes: [ node ], - definition: { - version: appsync.GraphqlType.string({ isRequired: true }), - }, - }); - ``` - - > This method allows for reusability and modularity, ideal for reducing code duplication. - -To learn more about **Object Types**, read the docs [here](https://graphql.org/learn/schema/#object-types-and-fields). - -#### Enum Types - -**Enum Types** are a special type of Intermediate Type. They restrict a particular -set of allowed values for other Intermediate Types. - -```gql -enum Episode { - NEWHOPE - EMPIRE - JEDI -} -``` - -> This means that wherever we use the type Episode in our schema, we expect it to -> be exactly one of NEWHOPE, EMPIRE, or JEDI. - -The above GraphQL Enumeration Type can be expressed in CDK as the following: - -```ts -declare const api: appsync.GraphqlApi; -const episode = new appsync.EnumType('Episode', { - definition: [ - 'NEWHOPE', - 'EMPIRE', - 'JEDI', - ], -}); -api.addType(episode); -``` - -To learn more about **Enum Types**, read the docs [here](https://graphql.org/learn/schema/#enumeration-types). - -#### Input Types - -**Input Types** are special types of Intermediate Types. They give users an -easy way to pass complex objects for top level Mutation and Queries. - -```gql -input Review { - stars: Int! - commentary: String -} -``` - -The above GraphQL Input Type can be expressed in CDK as the following: - -```ts -declare const api: appsync.GraphqlApi; -const review = new appsync.InputType('Review', { - definition: { - stars: appsync.GraphqlType.int({ isRequired: true }), - commentary: appsync.GraphqlType.string(), - }, -}); -api.addType(review); -``` - -To learn more about **Input Types**, read the docs [here](https://graphql.org/learn/schema/#input-types). - -#### Union Types - -**Union Types** are a special type of Intermediate Type. They are similar to -Interface Types, but they cannot specify any common fields between types. - -**Note:** the fields of a union type need to be `Object Types`. In other words, you -can't create a union type out of interfaces, other unions, or inputs. - -```gql -union Search = Human | Droid | Starship -``` - -The above GraphQL Union Type encompasses the Object Types of Human, Droid and Starship. It -can be expressed in CDK as the following: - -```ts -declare const api: appsync.GraphqlApi; -const string = appsync.GraphqlType.string(); -const human = new appsync.ObjectType('Human', { definition: { name: string } }); -const droid = new appsync.ObjectType('Droid', { definition: { name: string } }); -const starship = new appsync.ObjectType('Starship', { definition: { name: string } });); -const search = new appsync.UnionType('Search', { - definition: [ human, droid, starship ], -}); -api.addType(search); -``` - -To learn more about **Union Types**, read the docs [here](https://graphql.org/learn/schema/#union-types). - -### Query - -Every schema requires a top level Query type. By default, the schema will look -for the `Object Type` named `Query`. The top level `Query` is the **only** exposed -type that users can access to perform `GET` operations on your Api. - -To add fields for these queries, we can simply run the `addQuery` function to add -to the schema's `Query` type. - -```ts -declare const api: appsync.GraphqlApi; -declare const filmConnection: appsync.InterfaceType; -declare const dummyRequest: appsync.MappingTemplate; -declare const dummyResponse: appsync.MappingTemplate; - -const string = appsync.GraphqlType.string(); -const int = appsync.GraphqlType.int(); -api.addQuery('allFilms', new appsync.ResolvableField({ - returnType: filmConnection.attribute(), - args: { after: string, first: int, before: string, last: int}, - dataSource: api.addNoneDataSource('none'), - requestMappingTemplate: dummyRequest, - responseMappingTemplate: dummyResponse, -})); -``` - -To learn more about top level operations, check out the docs [here](https://docs.aws.amazon.com/appsync/latest/devguide/graphql-overview.html). - -### Mutation - -Every schema **can** have a top level Mutation type. By default, the schema will look -for the `ObjectType` named `Mutation`. The top level `Mutation` Type is the only exposed -type that users can access to perform `mutable` operations on your Api. - -To add fields for these mutations, we can simply run the `addMutation` function to add -to the schema's `Mutation` type. - -```ts -declare const api: appsync.GraphqlApi; -declare const filmNode: appsync.ObjectType; -declare const dummyRequest: appsync.MappingTemplate; -declare const dummyResponse: appsync.MappingTemplate; - -const string = appsync.GraphqlType.string(); -const int = appsync.GraphqlType.int(); -api.addMutation('addFilm', new appsync.ResolvableField({ - returnType: filmNode.attribute(), - args: { name: string, film_number: int }, - dataSource: api.addNoneDataSource('none'), - requestMappingTemplate: dummyRequest, - responseMappingTemplate: dummyResponse, -})); -``` - -To learn more about top level operations, check out the docs [here](https://docs.aws.amazon.com/appsync/latest/devguide/graphql-overview.html). - -### Subscription - -Every schema **can** have a top level Subscription type. The top level `Subscription` Type -is the only exposed type that users can access to invoke a response to a mutation. `Subscriptions` -notify users when a mutation specific mutation is called. This means you can make any data source -real time by specify a GraphQL Schema directive on a mutation. - -**Note**: The AWS AppSync client SDK automatically handles subscription connection management. - -To add fields for these subscriptions, we can simply run the `addSubscription` function to add -to the schema's `Subscription` type. - -```ts -declare const api: appsync.GraphqlApi; -declare const film: appsync.InterfaceType; - -api.addSubscription('addedFilm', new appsync.Field({ - returnType: film.attribute(), - args: { id: appsync.GraphqlType.id({ isRequired: true }) }, - directives: [appsync.Directive.subscribe('addFilm')], -})); -``` - -To learn more about top level operations, check out the docs [here](https://docs.aws.amazon.com/appsync/latest/devguide/real-time-data.html). diff --git a/packages/@aws-cdk/aws-appsync/lib/data-source.ts b/packages/@aws-cdk/aws-appsync/lib/data-source.ts index 05268cb469bbc..8a1cb6390a505 100644 --- a/packages/@aws-cdk/aws-appsync/lib/data-source.ts +++ b/packages/@aws-cdk/aws-appsync/lib/data-source.ts @@ -132,8 +132,8 @@ export abstract class BaseDataSource extends Construct { /** * creates a new resolver for this datasource and API using the given properties */ - public createResolver(props: BaseResolverProps): Resolver { - return new Resolver(this, `${props.typeName}${props.fieldName}Resolver`, { + public createResolver(id: string, props: BaseResolverProps): Resolver { + return new Resolver(this.api, id, { api: this.api, dataSource: this, ...props, @@ -143,8 +143,8 @@ export abstract class BaseDataSource extends Construct { /** * creates a new appsync function for this datasource and API using the given properties */ - public createFunction(props: BaseAppsyncFunctionProps): AppsyncFunction { - return new AppsyncFunction(this, `${props.name}Function`, { + public createFunction(id: string, props: BaseAppsyncFunctionProps): AppsyncFunction { + return new AppsyncFunction(this.api, id, { api: this.api, dataSource: this, ...props, diff --git a/packages/@aws-cdk/aws-appsync/lib/graphqlapi-base.ts b/packages/@aws-cdk/aws-appsync/lib/graphqlapi-base.ts index 0737be10c8fc3..4823837757883 100644 --- a/packages/@aws-cdk/aws-appsync/lib/graphqlapi-base.ts +++ b/packages/@aws-cdk/aws-appsync/lib/graphqlapi-base.ts @@ -134,7 +134,7 @@ export interface IGraphqlApi extends IResource { /** * creates a new resolver for this datasource and API using the given properties */ - createResolver(props: ExtendedResolverProps): Resolver; + createResolver(id: string, props: ExtendedResolverProps): Resolver; /** * Add schema dependency if not imported @@ -285,8 +285,8 @@ export abstract class GraphqlApiBase extends Resource implements IGraphqlApi { /** * creates a new resolver for this datasource and API using the given properties */ - public createResolver(props: ExtendedResolverProps): Resolver { - return new Resolver(this, `${props.typeName}${props.fieldName}Resolver`, { + public createResolver(id: string, props: ExtendedResolverProps): Resolver { + return new Resolver(this, id, { api: this, ...props, }); diff --git a/packages/@aws-cdk/aws-appsync/lib/graphqlapi.ts b/packages/@aws-cdk/aws-appsync/lib/graphqlapi.ts index 5736f888fbf73..83027eafd5603 100644 --- a/packages/@aws-cdk/aws-appsync/lib/graphqlapi.ts +++ b/packages/@aws-cdk/aws-appsync/lib/graphqlapi.ts @@ -7,10 +7,7 @@ import { ArnFormat, CfnResource, Duration, Expiration, IResolvable, Stack } from import { Construct } from 'constructs'; import { CfnApiKey, CfnGraphQLApi, CfnGraphQLSchema, CfnDomainName, CfnDomainNameApiAssociation } from './appsync.generated'; import { IGraphqlApi, GraphqlApiBase } from './graphqlapi-base'; -import { Schema } from './schema'; -import { IIntermediateType } from './schema-base'; -import { ResolvableField } from './schema-field'; -import { ObjectType } from './schema-intermediate'; +import { ISchema } from './schema'; /** * enum with all possible values for AppSync authorization type @@ -307,7 +304,7 @@ export interface GraphqlApiProps { * @default - schema will be generated code-first (i.e. addType, addObjectType, etc.) * */ - readonly schema?: Schema; + readonly schema: ISchema; /** * A flag indicating whether or not X-Ray tracing is enabled for the GraphQL API. * @@ -456,7 +453,7 @@ export class GraphqlApi extends GraphqlApiBase { /** * the schema attached to this api */ - public readonly schema: Schema; + public readonly schema: ISchema; /** * The Authorization Types for this GraphQL Api @@ -507,8 +504,8 @@ export class GraphqlApi extends GraphqlApiBase { this.arn = this.api.attrArn; this.graphqlUrl = this.api.attrGraphQlUrl; this.name = this.api.name; - this.schema = props.schema ?? new Schema(); - this.schemaResource = this.schema.bind(this); + this.schema = props.schema; + this.schemaResource = new CfnGraphQLSchema(this, 'Schema', this.schema.bind(this)); if (props.domainName) { this.domainNameResource = new CfnDomainName(this, 'DomainName', { @@ -707,75 +704,6 @@ export class GraphqlApi extends GraphqlApiBase { }); } - /** - * Escape hatch to append to Schema as desired. Will always result - * in a newline. - * - * @param addition the addition to add to schema - * @param delimiter the delimiter between schema and addition - * @default - '' - * - */ - public addToSchema(addition: string, delimiter?: string): void { - this.schema.addToSchema(addition, delimiter); - } - - /** - * Add type to the schema - * - * @param type the intermediate type to add to the schema - * - */ - public addType(type: IIntermediateType): IIntermediateType { - return this.schema.addType(type); - } - - /** - * Add a query field to the schema's Query. CDK will create an - * Object Type called 'Query'. For example, - * - * type Query { - * fieldName: Field.returnType - * } - * - * @param fieldName the name of the query - * @param field the resolvable field to for this query - */ - public addQuery(fieldName: string, field: ResolvableField): ObjectType { - return this.schema.addQuery(fieldName, field); - } - - /** - * Add a mutation field to the schema's Mutation. CDK will create an - * Object Type called 'Mutation'. For example, - * - * type Mutation { - * fieldName: Field.returnType - * } - * - * @param fieldName the name of the Mutation - * @param field the resolvable field to for this Mutation - */ - public addMutation(fieldName: string, field: ResolvableField): ObjectType { - return this.schema.addMutation(fieldName, field); - } - - /** - * Add a subscription field to the schema's Subscription. CDK will create an - * Object Type called 'Subscription'. For example, - * - * type Subscription { - * fieldName: Field.returnType - * } - * - * @param fieldName the name of the Subscription - * @param field the resolvable field to for this Subscription - */ - public addSubscription(fieldName: string, field: ResolvableField): ObjectType { - return this.schema.addSubscription(fieldName, field); - } - - /** * The AppSyncDomainName of the associated custom domain */ diff --git a/packages/@aws-cdk/aws-appsync/lib/index.ts b/packages/@aws-cdk/aws-appsync/lib/index.ts index a102b16ac37a1..70286a0e72748 100644 --- a/packages/@aws-cdk/aws-appsync/lib/index.ts +++ b/packages/@aws-cdk/aws-appsync/lib/index.ts @@ -8,8 +8,5 @@ export * from './data-source'; export * from './mapping-template'; export * from './resolver'; export * from './schema'; -export * from './schema-intermediate'; -export * from './schema-field'; -export * from './schema-base'; export * from './graphqlapi'; export * from './graphqlapi-base'; diff --git a/packages/@aws-cdk/aws-appsync/lib/private.ts b/packages/@aws-cdk/aws-appsync/lib/private.ts index 9e2bd335bed1e..23d04967b7297 100644 --- a/packages/@aws-cdk/aws-appsync/lib/private.ts +++ b/packages/@aws-cdk/aws-appsync/lib/private.ts @@ -1,85 +1,3 @@ -import { AuthorizationType } from './graphqlapi'; -import { Directive } from './schema-base'; -import { InterfaceType } from './schema-intermediate'; - -/** - * Utility enum for Schema class - */ -export enum SchemaMode { - FILE = 'FILE', - CODE = 'CODE', -}; - -/** - * Generates an addition to the schema - * - * ``` - * prefix name interfaces directives { - * field - * field - * ... - * } - * ``` - */ -export interface SchemaAdditionOptions { - /** - * the prefix for this additon (type, interface, enum, input, schema) - */ - readonly prefix: string; - /** - * the name for this addition (some additions dont need this [i.e. schema]) - * - * @default - no name - */ - readonly name?: string; - /** - * the interface types if this is creating an object type - * - * @default - no interfaces - */ - readonly interfaceTypes?: InterfaceType[]; - /** - * the directives for this type - * - * @default - no directives - */ - readonly directives?: Directive[]; - /** - * the fields to reduce onto the addition - */ - readonly fields: string[]; - /** - * the authorization modes for this graphql type - */ - readonly modes?: AuthorizationType[]; -} - -/** - * Generates an addition to the schema - * - * @param options the options to produced a stringfied addition - * - * @returns the following shape: - * - * ``` - * prefix name interfaces directives { - * field - * field - * ... - * } - * ``` - */ -export function shapeAddition(options: SchemaAdditionOptions): string { - const typeName = (): string => { return options.name ? ` ${options.name}` : ''; }; - const interfaces = generateInterfaces(options.interfaceTypes); - const directives = generateDirectives({ - directives: options.directives, - modes: options.modes, - }); - return options.fields.reduce((acc, field) => - `${acc} ${field}\n`, `${options.prefix}${typeName()}${interfaces}${directives} {\n`) + '}'; -} - /** * Utility class to represent DynamoDB key conditions. */ @@ -193,45 +111,3 @@ function concatAndDedup(left: T[], right: T[]): T[] { return index === self.indexOf(elem); }); } - -/** - * Utility function to generate interfaces for object types - * - * @param interfaceTypes the interfaces this object type implements - */ -function generateInterfaces(interfaceTypes?: InterfaceType[]): string { - if (!interfaceTypes || interfaceTypes.length === 0) return ''; - return interfaceTypes.reduce((acc, interfaceType) => - `${acc} ${interfaceType.name} &`, ' implements').slice(0, -2); -} - -/** - * options to generate directives - */ -interface generateDirectivesOptions { - /** - * the directives of a given type - */ - readonly directives?: Directive[]; - /** - * thee separator betweeen directives - * - * @default - a space - */ - readonly delimiter?: string; - /** - * the authorization modes - */ - readonly modes?: AuthorizationType[]; -} - -/** - * Utility function to generate directives - */ -function generateDirectives(options: generateDirectivesOptions): string { - if (!options.directives || options.directives.length === 0) return ''; - // reduce over all directives and get string version of the directive - // pass in the auth modes for checks to happen on compile time - return options.directives.reduce((acc, directive) => - `${acc}${directive._bindToAuthModes(options.modes).toString()}${options.delimiter ?? ' '}`, ' ').slice(0, -1); -} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/lib/schema-base.ts b/packages/@aws-cdk/aws-appsync/lib/schema-base.ts deleted file mode 100644 index fa876c395bc25..0000000000000 --- a/packages/@aws-cdk/aws-appsync/lib/schema-base.ts +++ /dev/null @@ -1,396 +0,0 @@ -import { AuthorizationType, GraphqlApi } from './graphqlapi'; -import { Resolver } from './resolver'; -import { ResolvableFieldOptions, BaseTypeOptions, GraphqlType } from './schema-field'; -import { InterfaceType } from './schema-intermediate'; - -/** - * A Graphql Field - */ -export interface IField { - /** - * the type of attribute - */ - readonly type: Type; - - /** - * property determining if this attribute is a list - * i.e. if true, attribute would be `[Type]` - * - * @default false - */ - readonly isList: boolean; - - /** - * property determining if this attribute is non-nullable - * i.e. if true, attribute would be `Type!` and this attribute - * must always have a value - * - * @default false - */ - readonly isRequired: boolean; - - /** - * property determining if this attribute is a non-nullable list - * i.e. if true, attribute would be `[ Type ]!` and this attribute's - * list must always have a value - * - * @default false - */ - readonly isRequiredList: boolean; - - /** - * The options to make this field resolvable - * - * @default - not a resolvable field - */ - readonly fieldOptions?: ResolvableFieldOptions; - - /** - * the intermediate type linked to this attribute - * (i.e. an interface or an object) - * - * @default - no intermediate type - */ - readonly intermediateType?: IIntermediateType; - - /** - * Generate the string for this attribute - */ - toString(): string; - - /** - * Generate the arguments for this field - */ - argsToString(): string; - - /** - * Generate the directives for this field - * - * @param modes the authorization modes of the graphql api - * - * @default - no authorization modes - */ - directivesToString(modes?: AuthorizationType[]): string -} - -/** - * The options to add a field to an Intermediate Type - */ -export interface AddFieldOptions { - /** - * The name of the field - * - * This option must be configured for Object, Interface, - * Input and Enum Types. - * - * @default - no fieldName - */ - readonly fieldName?: string; - /** - * The resolvable field to add - * - * This option must be configured for Object, Interface, - * Input and Union Types. - * - * @default - no IField - */ - readonly field?: IField; -} - -/** - * Intermediate Types are types that includes a certain set of fields - * that define the entirety of your schema - */ -export interface IIntermediateType { - /** - * the name of this type - */ - readonly name: string; - - /** - * the attributes of this type - */ - readonly definition: { [key: string]: IField }; - - /** - * The Interface Types this Intermediate Type implements - * - * @default - no interface types - */ - readonly interfaceTypes?: InterfaceType[]; - - /** - * the directives for this object type - * - * @default - no directives - */ - readonly directives?: Directive[]; - - /** - * The resolvers linked to this data source - */ - resolvers?: Resolver[]; - - /** - * the intermediate type linked to this attribute - * (i.e. an interface or an object) - * - * @default - no intermediate type - */ - readonly intermediateType?: IIntermediateType; - - /** - * Method called when the stringifying Intermediate Types for schema generation - * - * @param api The binding GraphQL Api - * - * @internal - */ - _bindToGraphqlApi(api: GraphqlApi): IIntermediateType; - - /** - * Create an GraphQL Type representing this Intermediate Type - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - attribute(options?: BaseTypeOptions): GraphqlType; - - /** - * Generate the string of this object type - */ - toString(): string; - - /** - * Add a field to this Intermediate Type - */ - addField(options: AddFieldOptions): void; -} - -interface DirectiveOptions { - /** - * The authorization type of this directive - */ - readonly mode?: AuthorizationType; - - /** - * Mutation fields for a subscription directive - */ - readonly mutationFields?: string[]; -} - -/** - * Directives for types - * - * i.e. @aws_iam or @aws_subscribe - * - */ -export class Directive { - /** - * Add the @aws_iam directive - */ - public static iam(): Directive { - return new Directive('@aws_iam', { mode: AuthorizationType.IAM }); - } - - /** - * Add the @aws_oidc directive - */ - public static oidc(): Directive { - return new Directive('@aws_oidc', { mode: AuthorizationType.OIDC }); - } - - /** - * Add the @aws_api_key directive - */ - public static apiKey(): Directive { - return new Directive('@aws_api_key', { mode: AuthorizationType.API_KEY }); - } - - /** - * Add the @aws_auth or @aws_cognito_user_pools directive - * - * @param groups the groups to allow access to - */ - public static cognito(...groups: string[]): Directive { - if (groups.length === 0) { - throw new Error(`Cognito authorization requires at least one Cognito group to be supplied. Received: ${groups.length}`); - } - // this function creates the cognito groups as a string (i.e. ["group1", "group2", "group3"]) - const stringify = (array: string[]): string => { - return array.reduce((acc, element) => `${acc}"${element}", `, '').slice(0, -2); - }; - return new Directive(`@aws_auth(cognito_groups: [${stringify(groups)}])`, { mode: AuthorizationType.USER_POOL }); - } - - /** - * Add the @aws_subscribe directive. Only use for top level Subscription type. - * - * @param mutations the mutation fields to link to - */ - public static subscribe(...mutations: string[]): Directive { - if (mutations.length === 0) { - throw new Error(`Subscribe directive requires at least one mutation field to be supplied. Received: ${mutations.length}`); - } - // this function creates the subscribe directive as a string (i.e. ["mutation_field_1", "mutation_field_2"]) - const stringify = (array: string[]): string => { - return array.reduce((acc, mutation) => `${acc}"${mutation}", `, '').slice(0, -2); - }; - return new Directive(`@aws_subscribe(mutations: [${stringify(mutations)}])`, { mutationFields: mutations }); - } - - /** - * Add a custom directive - * - * @param statement - the directive statement to append - */ - public static custom(statement: string): Directive { - return new Directive(statement); - } - - /** - * The authorization type of this directive - * - * @default - not an authorization directive - */ - public readonly mode?: AuthorizationType; - - /** - * Mutation fields for a subscription directive - * - * @default - not a subscription directive - */ - public readonly mutationFields?: string[]; - - /** - * the directive statement - */ - private statement: string; - - /** - * the authorization modes for this intermediate type - */ - protected modes?: AuthorizationType[]; - - private constructor(statement: string, options?: DirectiveOptions) { - this.statement = statement; - this.mode = options?.mode; - this.mutationFields = options?.mutationFields; - } - - /** - * Method called when the stringifying Directive for schema generation - * - * @param modes the authorization modes - * - * @internal - */ - public _bindToAuthModes(modes?: AuthorizationType[]): Directive { - this.modes = modes; - return this; - } - - /** - * Generate the directive statement - */ - public toString(): string { - if (this.modes && this.mode && !this.modes.some((mode) => mode === this.mode)) { - throw new Error(`No Authorization Type ${this.mode} declared in GraphQL Api.`); - } - if (this.mode === AuthorizationType.USER_POOL && this.modes && this.modes.length > 1) { - this.statement = this.statement.replace('@aws_auth', '@aws_cognito_user_pools'); - } - return this.statement; - } -} - -/** - * Enum containing the Types that can be used to define ObjectTypes - */ -export enum Type { - /** - * `ID` scalar type is a unique identifier. `ID` type is serialized similar to `String`. - * - * Often used as a key for a cache and not intended to be human-readable. - */ - ID = 'ID', - /** - * `String` scalar type is a free-form human-readable text. - */ - STRING = 'String', - /** - * `Int` scalar type is a signed non-fractional numerical value. - */ - INT = 'Int', - /** - * `Float` scalar type is a signed double-precision fractional value. - */ - FLOAT = 'Float', - /** - * `Boolean` scalar type is a boolean value: true or false. - */ - BOOLEAN = 'Boolean', - - /** - * `AWSDate` scalar type represents a valid extended `ISO 8601 Date` string. - * - * In other words, accepts date strings in the form of `YYYY-MM-DD`. It accepts time zone offsets. - * - * @see https://en.wikipedia.org/wiki/ISO_8601#Calendar_dates - */ - AWS_DATE = 'AWSDate', - /** - * `AWSTime` scalar type represents a valid extended `ISO 8601 Time` string. - * - * In other words, accepts date strings in the form of `hh:mm:ss.sss`. It accepts time zone offsets. - * - * @see https://en.wikipedia.org/wiki/ISO_8601#Times - */ - AWS_TIME = 'AWSTime', - /** - * `AWSDateTime` scalar type represents a valid extended `ISO 8601 DateTime` string. - * - * In other words, accepts date strings in the form of `YYYY-MM-DDThh:mm:ss.sssZ`. It accepts time zone offsets. - * - * @see https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations - */ - AWS_DATE_TIME = 'AWSDateTime', - /** - * `AWSTimestamp` scalar type represents the number of seconds since `1970-01-01T00:00Z`. - * - * Timestamps are serialized and deserialized as numbers. - */ - AWS_TIMESTAMP = 'AWSTimestamp', - /** - * `AWSEmail` scalar type represents an email address string (i.e.`username@example.com`) - */ - AWS_EMAIL = 'AWSEmail', - /** - * `AWSJson` scalar type represents a JSON string. - */ - AWS_JSON = 'AWSJSON', - /** - * `AWSURL` scalar type represetns a valid URL string. - * - * URLs wihtout schemes or contain double slashes are considered invalid. - */ - AWS_URL = 'AWSURL', - /** - * `AWSPhone` scalar type represents a valid phone number. Phone numbers maybe be whitespace delimited or hyphenated. - * - * The number can specify a country code at the beginning, but is not required for US phone numbers. - */ - AWS_PHONE = 'AWSPhone', - /** - * `AWSIPAddress` scalar type respresents a valid `IPv4` of `IPv6` address string. - */ - AWS_IP_ADDRESS = 'AWSIPAddress', - - /** - * Type used for Intermediate Types - * (i.e. an interface or an object type) - */ - INTERMEDIATE = 'INTERMEDIATE', -} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/lib/schema-field.ts b/packages/@aws-cdk/aws-appsync/lib/schema-field.ts deleted file mode 100644 index f8cf13a698878..0000000000000 --- a/packages/@aws-cdk/aws-appsync/lib/schema-field.ts +++ /dev/null @@ -1,460 +0,0 @@ -import { IAppsyncFunction } from './appsync-function'; -import { BaseDataSource } from './data-source'; -import { AuthorizationType } from './graphqlapi'; -import { MappingTemplate } from './mapping-template'; -import { Type, IField, IIntermediateType, Directive } from './schema-base'; - -/** - * Base options for GraphQL Types - * - * @option isList - is this attribute a list - * @option isRequired - is this attribute non-nullable - * @option isRequiredList - is this attribute a non-nullable list - * - */ -export interface BaseTypeOptions { - /** - * property determining if this attribute is a list - * i.e. if true, attribute would be [Type] - * - * @default - false - */ - readonly isList?: boolean; - - /** - * property determining if this attribute is non-nullable - * i.e. if true, attribute would be Type! - * - * @default - false - */ - readonly isRequired?: boolean; - - /** - * property determining if this attribute is a non-nullable list - * i.e. if true, attribute would be [ Type ]! - * or if isRequired true, attribe would be [ Type! ]! - * - * @default - false - */ - readonly isRequiredList?: boolean; -} - -/** - * Options for GraphQL Types - * - * @option isList - is this attribute a list - * @option isRequired - is this attribute non-nullable - * @option isRequiredList - is this attribute a non-nullable list - * @option objectType - the object type linked to this attribute - * - */ -export interface GraphqlTypeOptions extends BaseTypeOptions { - /** - * the intermediate type linked to this attribute - * @default - no intermediate type - */ - readonly intermediateType?: IIntermediateType; -} - -/** - * The GraphQL Types in AppSync's GraphQL. GraphQL Types are the - * building blocks for object types, queries, mutations, etc. They are - * types like String, Int, Id or even Object Types you create. - * - * i.e. `String`, `String!`, `[String]`, `[String!]`, `[String]!` - * - * GraphQL Types are used to define the entirety of schema. - */ -export class GraphqlType implements IField { - /** - * `ID` scalar type is a unique identifier. `ID` type is serialized similar to `String`. - * - * Often used as a key for a cache and not intended to be human-readable. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static id(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.ID, options); - } - /** - * `String` scalar type is a free-form human-readable text. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static string(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.STRING, options); - } - /** - * `Int` scalar type is a signed non-fractional numerical value. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static int(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.INT, options); - } - /** - * `Float` scalar type is a signed double-precision fractional value. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static float(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.FLOAT, options); - } - /** - * `Boolean` scalar type is a boolean value: true or false. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static boolean(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.BOOLEAN, options); - } - - /** - * `AWSDate` scalar type represents a valid extended `ISO 8601 Date` string. - * - * In other words, accepts date strings in the form of `YYYY-MM-DD`. It accepts time zone offsets. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static awsDate(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.AWS_DATE, options); - } - /** - * `AWSTime` scalar type represents a valid extended `ISO 8601 Time` string. - * - * In other words, accepts date strings in the form of `hh:mm:ss.sss`. It accepts time zone offsets. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static awsTime(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.AWS_TIME, options); - } - /** - * `AWSDateTime` scalar type represents a valid extended `ISO 8601 DateTime` string. - * - * In other words, accepts date strings in the form of `YYYY-MM-DDThh:mm:ss.sssZ`. It accepts time zone offsets. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static awsDateTime(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.AWS_DATE_TIME, options); - } - /** - * `AWSTimestamp` scalar type represents the number of seconds since `1970-01-01T00:00Z`. - * - * Timestamps are serialized and deserialized as numbers. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static awsTimestamp(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.AWS_TIMESTAMP, options); - } - /** - * `AWSEmail` scalar type represents an email address string (i.e.`username@example.com`) - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static awsEmail(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.AWS_EMAIL, options); - } - /** - * `AWSJson` scalar type represents a JSON string. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static awsJson(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.AWS_JSON, options); - } - /** - * `AWSURL` scalar type represetns a valid URL string. - * - * URLs wihtout schemes or contain double slashes are considered invalid. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static awsUrl(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.AWS_URL, options); - } - /** - * `AWSPhone` scalar type represents a valid phone number. Phone numbers maybe be whitespace delimited or hyphenated. - * - * The number can specify a country code at the beginning, but is not required for US phone numbers. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static awsPhone(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.AWS_PHONE, options); - } - /** - * `AWSIPAddress` scalar type respresents a valid `IPv4` of `IPv6` address string. - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - */ - public static awsIpAddress(options?: BaseTypeOptions): GraphqlType { - return new GraphqlType(Type.AWS_IP_ADDRESS, options); - } - - /** - * an intermediate type to be added as an attribute - * (i.e. an interface or an object type) - * - * @param options the options to configure this attribute - * - isList - * - isRequired - * - isRequiredList - * - intermediateType - */ - public static intermediate(options?: GraphqlTypeOptions): GraphqlType { - if (!options?.intermediateType) { - throw new Error('GraphQL Type of interface must be configured with corresponding Intermediate Type'); - } - return new GraphqlType(Type.INTERMEDIATE, options); - } - - /** - * the type of attribute - */ - public readonly type: Type; - - /** - * property determining if this attribute is a list - * i.e. if true, attribute would be `[Type]` - * - * @default - false - */ - public readonly isList: boolean; - - /** - * property determining if this attribute is non-nullable - * i.e. if true, attribute would be `Type!` and this attribute - * must always have a value - * - * @default - false - */ - public readonly isRequired: boolean; - - /** - * property determining if this attribute is a non-nullable list - * i.e. if true, attribute would be `[ Type ]!` and this attribute's - * list must always have a value - * - * @default - false - */ - public readonly isRequiredList: boolean; - - /** - * the intermediate type linked to this attribute - * (i.e. an interface or an object) - * - * @default - no intermediate type - */ - public readonly intermediateType?: IIntermediateType; - - protected constructor(type: Type, options?: GraphqlTypeOptions) { - this.type = type; - this.isList = options?.isList ?? false; - this.isRequired = options?.isRequired ?? false; - this.isRequiredList = options?.isRequiredList ?? false; - this.intermediateType = options?.intermediateType; - } - - /** - * Generate the string for this attribute - */ - public toString(): string { - // If an Object Type, we use the name of the Object Type - let type = this.intermediateType ? this.intermediateType?.name : this.type; - // If configured as required, the GraphQL Type becomes required - type = this.isRequired ? `${type}!` : type; - // If configured with isXxxList, the GraphQL Type becomes a list - type = this.isList || this.isRequiredList ? `[${type}]` : type; - // If configured with isRequiredList, the list becomes required - type = this.isRequiredList ? `${type}!` : type; - return type; - } - - /** - * Generate the arguments for this field - */ - public argsToString(): string { - return ''; - } - - /** - * Generate the directives for this field - */ - public directivesToString(_modes?: AuthorizationType[]): string { - return ''; - } -} - -/** - * Properties for configuring a field - * - * @options args - the variables and types that define the arguments - * - * i.e. { string: GraphqlType, string: GraphqlType } - */ -export interface FieldOptions { - /** - * The return type for this field - */ - readonly returnType: GraphqlType; - /** - * The arguments for this field. - * - * i.e. type Example (first: String second: String) {} - * - where 'first' and 'second' are key values for args - * and 'String' is the GraphqlType - * - * @default - no arguments - */ - readonly args?: { [key: string]: GraphqlType }; - /** - * the directives for this field - * - * @default - no directives - */ - readonly directives?: Directive[]; -} - -/** - * Fields build upon Graphql Types and provide typing - * and arguments. - */ -export class Field extends GraphqlType implements IField { - /** - * The options for this field - * - * @default - no arguments - */ - public readonly fieldOptions?: ResolvableFieldOptions; - - public constructor(options: FieldOptions) { - const props = { - isList: options.returnType.isList, - isRequired: options.returnType.isRequired, - isRequiredList: options.returnType.isRequiredList, - intermediateType: options.returnType.intermediateType, - }; - super(options.returnType.type, props); - this.fieldOptions = options; - } - - /** - * Generate the args string of this resolvable field - */ - public argsToString(): string { - if (!this.fieldOptions || !this.fieldOptions.args) { return ''; } - return Object.keys(this.fieldOptions.args).reduce((acc, key) => - `${acc}${key}: ${this.fieldOptions?.args?.[key].toString()} `, '(').slice(0, -1) + ')'; - } - - /** - * Generate the directives for this field - */ - public directivesToString(modes?: AuthorizationType[]): string { - if (!this.fieldOptions || !this.fieldOptions.directives) { return ''; } - return this.fieldOptions.directives.reduce((acc, directive) => - `${acc}${directive._bindToAuthModes(modes).toString()} `, '\n ').slice(0, -1); - } -} - -/** - * Properties for configuring a resolvable field - * - * @options dataSource - the data source linked to this resolvable field - * @options requestMappingTemplate - the mapping template for requests to this resolver - * @options responseMappingTemplate - the mapping template for responses from this resolver - */ -export interface ResolvableFieldOptions extends FieldOptions { - /** - * The data source creating linked to this resolvable field - * - * @default - no data source - */ - readonly dataSource?: BaseDataSource; - /** - * configuration of the pipeline resolver - * - * @default - no pipeline resolver configuration - * An empty array or undefined prop will set resolver to be of type unit - */ - readonly pipelineConfig?: IAppsyncFunction[]; - /** - * The request mapping template for this resolver - * - * @default - No mapping template - */ - readonly requestMappingTemplate?: MappingTemplate; - /** - * The response mapping template for this resolver - * - * @default - No mapping template - */ - readonly responseMappingTemplate?: MappingTemplate; -} - -/** - * Resolvable Fields build upon Graphql Types and provide fields - * that can resolve into operations on a data source. - */ -export class ResolvableField extends Field implements IField { - /** - * The options to make this field resolvable - * - * @default - not a resolvable field - */ - public readonly fieldOptions?: ResolvableFieldOptions; - - public constructor(options: ResolvableFieldOptions) { - const props = { - returnType: options.returnType, - args: options.args, - }; - super(props); - this.fieldOptions = options; - } -} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/lib/schema-intermediate.ts b/packages/@aws-cdk/aws-appsync/lib/schema-intermediate.ts deleted file mode 100644 index a661d4e4baf61..0000000000000 --- a/packages/@aws-cdk/aws-appsync/lib/schema-intermediate.ts +++ /dev/null @@ -1,488 +0,0 @@ -import { AuthorizationType, GraphqlApi } from './graphqlapi'; -import { IGraphqlApi } from './graphqlapi-base'; -import { shapeAddition } from './private'; -import { Resolver } from './resolver'; -import { Directive, IField, IIntermediateType, AddFieldOptions } from './schema-base'; -import { BaseTypeOptions, GraphqlType, ResolvableFieldOptions, ResolvableField } from './schema-field'; - -/** - * Properties for configuring an Intermediate Type - * - * @param definition - the variables and types that define this type - * i.e. { string: GraphqlType, string: GraphqlType } - * @param directives - the directives for this object type - * - */ -export interface IntermediateTypeOptions { - /** - * the attributes of this type - */ - readonly definition: { [key: string]: IField }; - /** - * the directives for this object type - * - * @default - no directives - */ - readonly directives?: Directive[]; -} - -/** - * Interface Types are abstract types that includes a certain set of fields - * that other types must include if they implement the interface. - * - */ -export class InterfaceType implements IIntermediateType { - /** - * the name of this type - */ - public readonly name: string; - /** - * the attributes of this type - */ - public readonly definition: { [key: string]: IField }; - /** - * the directives for this object type - * - * @default - no directives - */ - public readonly directives?: Directive[]; - /** - * the authorization modes for this intermediate type - */ - protected modes?: AuthorizationType[]; - - public constructor(name: string, props: IntermediateTypeOptions) { - this.name = name; - this.definition = props.definition; - this.directives = props.directives; - } - - /** - * Create a GraphQL Type representing this Intermediate Type - * - * @param options the options to configure this attribute - */ - public attribute(options?: BaseTypeOptions): GraphqlType { - return GraphqlType.intermediate({ - isList: options?.isList, - isRequired: options?.isRequired, - isRequiredList: options?.isRequiredList, - intermediateType: this, - }); - } - - /** - * Generate the string of this object type - */ - public toString(): string { - return shapeAddition({ - prefix: 'interface', - name: this.name, - directives: this.directives, - fields: Object.keys(this.definition).map((key) => { - const field = this.definition[key]; - return `${key}${field.argsToString()}: ${field.toString()}${field.directivesToString(this.modes)}`; - }), - modes: this.modes, - }); - } - - /** - * Add a field to this Interface Type. - * - * Interface Types must have both fieldName and field options. - * - * @param options the options to add a field - */ - public addField(options: AddFieldOptions): void { - if (!options.fieldName || !options.field) { - throw new Error('Interface Types must have both fieldName and field options.'); - } - this.definition[options.fieldName] = options.field; - } - - /** - * Method called when the stringifying Intermediate Types for schema generation - * - * @internal - */ - public _bindToGraphqlApi(api: GraphqlApi): IIntermediateType { - this.modes = api.modes; - return this; - } -} - -/** - * Properties for configuring an Object Type - * - * @param definition - the variables and types that define this type - * i.e. { string: GraphqlType, string: GraphqlType } - * @param interfaceTypes - the interfaces that this object type implements - * @param directives - the directives for this object type - * - */ -export interface ObjectTypeOptions extends IntermediateTypeOptions { - /** - * The Interface Types this Object Type implements - * - * @default - no interface types - */ - readonly interfaceTypes?: InterfaceType[]; -} - -/** - * Object Types are types declared by you. - * - */ -export class ObjectType extends InterfaceType implements IIntermediateType { - /** - * The Interface Types this Object Type implements - * - * @default - no interface types - */ - public readonly interfaceTypes?: InterfaceType[]; - /** - * The resolvers linked to this data source - */ - public resolvers?: Resolver[]; - - public constructor(name: string, props: ObjectTypeOptions) { - const options = { - definition: props.interfaceTypes?.reduce((def, interfaceType) => { - return Object.assign({}, def, interfaceType.definition); - }, props.definition) ?? props.definition, - directives: props.directives, - }; - super(name, options); - this.interfaceTypes = props.interfaceTypes; - this.resolvers = []; - } - - /** - * Method called when the stringifying Intermediate Types for schema generation - * - * @internal - */ - public _bindToGraphqlApi(api: GraphqlApi): IIntermediateType { - this.modes = api.modes; - // If the resolvers have been generated, skip the bind - if (this.resolvers && this.resolvers.length > 0) { - return this; - } - Object.keys(this.definition).forEach((fieldName) => { - const field = this.definition[fieldName]; - if (field instanceof ResolvableField) { - if (!this.resolvers) this.resolvers = []; - this.resolvers.push(this.generateResolver(api, fieldName, field.fieldOptions)); - } - }); - return this; - } - - /** - * Add a field to this Object Type. - * - * Object Types must have both fieldName and field options. - * - * @param options the options to add a field - */ - public addField(options: AddFieldOptions): void { - if (!options.fieldName || !options.field) { - throw new Error('Object Types must have both fieldName and field options.'); - } - this.definition[options.fieldName] = options.field; - } - - /** - * Generate the string of this object type - */ - public toString(): string { - return shapeAddition({ - prefix: 'type', - name: this.name, - interfaceTypes: this.interfaceTypes, - directives: this.directives, - fields: Object.keys(this.definition).map((key) => { - const field = this.definition[key]; - return `${key}${field.argsToString()}: ${field.toString()}${field.directivesToString(this.modes)}`; - }), - modes: this.modes, - }); - } - - /** - * Generate the resolvers linked to this Object Type - */ - protected generateResolver(api: IGraphqlApi, fieldName: string, options?: ResolvableFieldOptions): Resolver { - return api.createResolver({ - typeName: this.name, - fieldName: fieldName, - dataSource: options?.dataSource, - pipelineConfig: options?.pipelineConfig, - requestMappingTemplate: options?.requestMappingTemplate, - responseMappingTemplate: options?.responseMappingTemplate, - }); - } -} - -/** - * Input Types are abstract types that define complex objects. - * They are used in arguments to represent - * - */ -export class InputType implements IIntermediateType { - /** - * the name of this type - */ - public readonly name: string; - /** - * the attributes of this type - */ - public readonly definition: { [key: string]: IField }; - /** - * the authorization modes for this intermediate type - */ - protected modes?: AuthorizationType[]; - - public constructor(name: string, props: IntermediateTypeOptions) { - this.name = name; - this.definition = props.definition; - } - - /** - * Create a GraphQL Type representing this Input Type - * - * @param options the options to configure this attribute - */ - public attribute(options?: BaseTypeOptions): GraphqlType { - return GraphqlType.intermediate({ - isList: options?.isList, - isRequired: options?.isRequired, - isRequiredList: options?.isRequiredList, - intermediateType: this, - }); - } - - /** - * Generate the string of this input type - */ - public toString(): string { - return shapeAddition({ - prefix: 'input', - name: this.name, - fields: Object.keys(this.definition).map((key) => - `${key}${this.definition[key].argsToString()}: ${this.definition[key].toString()}`), - modes: this.modes, - }); - } - - /** - * Add a field to this Input Type. - * - * Input Types must have both fieldName and field options. - * - * @param options the options to add a field - */ - public addField(options: AddFieldOptions): void { - if (!options.fieldName || !options.field) { - throw new Error('Input Types must have both fieldName and field options.'); - } - this.definition[options.fieldName] = options.field; - } - - /** - * Method called when the stringifying Intermediate Types for schema generation - * - * @internal - */ - public _bindToGraphqlApi(api: GraphqlApi): IIntermediateType { - this.modes = api.modes; - return this; - } -} - -/** - * Properties for configuring an Union Type - * - */ -export interface UnionTypeOptions { - /** - * the object types for this union type - */ - readonly definition: IIntermediateType[]; -} - -/** - * Union Types are abstract types that are similar to Interface Types, - * but they cannot to specify any common fields between types. - * - * Note that fields of a union type need to be object types. In other words, - * you can't create a union type out of interfaces, other unions, or inputs. - * - */ -export class UnionType implements IIntermediateType { - /** - * the name of this type - */ - public readonly name: string; - /** - * the attributes of this type - */ - public readonly definition: { [key: string]: IField }; - /** - * the authorization modes supported by this intermediate type - */ - protected modes?: AuthorizationType[]; - - public constructor(name: string, options: UnionTypeOptions) { - this.name = name; - this.definition = {}; - options.definition.map((def) => this.addField({ field: def.attribute() })); - } - - /** - * Create a GraphQL Type representing this Union Type - * - * @param options the options to configure this attribute - */ - public attribute(options?: BaseTypeOptions): GraphqlType { - return GraphqlType.intermediate({ - isList: options?.isList, - isRequired: options?.isRequired, - isRequiredList: options?.isRequiredList, - intermediateType: this, - }); - } - - /** - * Generate the string of this Union type - */ - public toString(): string { - // Return a string that appends all Object Types for this Union Type - // i.e. 'union Example = example1 | example2' - return Object.values(this.definition).reduce((acc, field) => - `${acc} ${field.toString()} |`, `union ${this.name} =`).slice(0, -2); - } - - /** - * Add a field to this Union Type - * - * Input Types must have field options and the IField must be an Object Type. - * - * @param options the options to add a field - */ - public addField(options: AddFieldOptions): void { - if (options.fieldName) { - throw new Error('Union Types cannot be configured with the fieldName option. Use the field option instead.'); - } - if (!options.field) { - throw new Error('Union Types must be configured with the field option.'); - } - if (options.field && !(options.field.intermediateType instanceof ObjectType)) { - throw new Error('Fields for Union Types must be Object Types.'); - } - this.definition[options.field.toString()] = options.field; - } - - /** - * Method called when the stringifying Intermediate Types for schema generation - * - * @internal - */ - public _bindToGraphqlApi(api: GraphqlApi): IIntermediateType { - this.modes = api.modes; - return this; - } -} - -/** - * Properties for configuring an Enum Type - * - */ -export interface EnumTypeOptions { - /** - * the attributes of this type - */ - readonly definition: string[]; -} - -/** - * Enum Types are abstract types that includes a set of fields - * that represent the strings this type can create. - * - */ -export class EnumType implements IIntermediateType { - /** - * the name of this type - */ - public readonly name: string; - /** - * the attributes of this type - */ - public readonly definition: { [key: string]: IField }; - /** - * the authorization modes for this intermediate type - */ - protected modes?: AuthorizationType[]; - - public constructor(name: string, options: EnumTypeOptions) { - this.name = name; - this.definition = {}; - options.definition.map((fieldName: string) => this.addField({ fieldName })); - } - - /** - * Create an GraphQL Type representing this Enum Type - */ - public attribute(options?: BaseTypeOptions): GraphqlType { - return GraphqlType.intermediate({ - isList: options?.isList, - isRequired: options?.isRequired, - isRequiredList: options?.isRequiredList, - intermediateType: this, - }); - } - - /** - * Generate the string of this enum type - */ - public toString(): string { - return shapeAddition({ - prefix: 'enum', - name: this.name, - fields: Object.keys(this.definition), - modes: this.modes, - }); - } - - /** - * Add a field to this Enum Type - * - * To add a field to this Enum Type, you must only configure - * addField with the fieldName options. - * - * @param options the options to add a field - */ - public addField(options: AddFieldOptions): void { - if (options.field) { - throw new Error('Enum Type fields consist of strings. Use the fieldName option instead of the field option.'); - } - if (!options.fieldName) { - throw new Error('When adding a field to an Enum Type, you must configure the fieldName option.'); - } - if (options.fieldName.indexOf(' ') > -1) { - throw new Error(`Enum Type values cannot have whitespace. Received: ${options.fieldName}`); - } - this.definition[options.fieldName] = GraphqlType.string(); - } - - /** - * Method called when the stringifying Intermediate Types for schema generation - * - * @internal - */ - public _bindToGraphqlApi(api: GraphqlApi): IIntermediateType { - this.modes = api.modes; - return this; - } -} diff --git a/packages/@aws-cdk/aws-appsync/lib/schema.ts b/packages/@aws-cdk/aws-appsync/lib/schema.ts index ad94da1610532..2cfd0a927dc74 100644 --- a/packages/@aws-cdk/aws-appsync/lib/schema.ts +++ b/packages/@aws-cdk/aws-appsync/lib/schema.ts @@ -1,27 +1,57 @@ import { readFileSync } from 'fs'; -import { Lazy } from '@aws-cdk/core'; -import { CfnGraphQLSchema } from './appsync.generated'; -import { GraphqlApi } from './graphqlapi'; -import { SchemaMode, shapeAddition } from './private'; -import { IIntermediateType } from './schema-base'; -import { Field, ResolvableField } from './schema-field'; -import { ObjectType } from './schema-intermediate'; +import { IGraphqlApi } from './graphqlapi-base'; /** - * The options for configuring a schema + * Configuration for bound graphql schema + * + * Returned from ISchema.bind allowing late binding of schemas to graphqlapi-base + */ +export interface ISchemaConfig { + /** + * The ID of the api the schema is bound to + */ + apiId: string; + + /** + * The schema definition string + */ + definition: string; +} + +/** + * Used for configuring schema bind behavior. * - * If no options are specified, then the schema will - * be generated code-first. + * This is intended to prevent breaking changes to implementors of ISchema + * if needing to add new behavior. + */ +export interface SchemaBindOptions {} + +/** + * Interface for implementing your own schema + * + * Useful for providing schema's from sources other than assets + */ +export interface ISchema { + /** + * Binds a schema string to a GraphQlApi + * + * @returns ISchemaConfig with apiId and schema definition string + * @param api the api to bind the schema to + * @param options configuration for bind behavior + */ + bind(api: IGraphqlApi, options?: SchemaBindOptions): ISchemaConfig; +} + +/** + * The options for configuring a schema from an existing file */ -export interface SchemaOptions { +export interface SchemaProps { /** * The file path for the schema. When this option is * configured, then the schema will be generated from an * existing file from disk. - * - * @default - schema not configured through disk asset */ - readonly filePath?: string, + readonly filePath: string, }; /** @@ -30,15 +60,15 @@ export interface SchemaOptions { * If no options are configured, schema will be generated * code-first. */ -export class Schema { +export class SchemaFile implements ISchema { /** * Generate a Schema from file * * @returns `SchemaAsset` with immutable schema defintion * @param filePath the file path of the schema file */ - public static fromAsset(filePath: string): Schema { - return new Schema({ filePath }); + public static fromAsset(filePath: string): SchemaFile { + return new SchemaFile({ filePath }); } /** @@ -46,27 +76,8 @@ export class Schema { */ public definition: string; - private query?: ObjectType; - - private mutation?: ObjectType; - - private subscription?: ObjectType; - - private schema?: CfnGraphQLSchema; - - private mode: SchemaMode; - - private types: IIntermediateType[]; - - public constructor(options?: SchemaOptions) { - if (options?.filePath) { - this.mode = SchemaMode.FILE; - this.definition = readFileSync(options.filePath).toString('utf-8'); - } else { - this.mode = SchemaMode.CODE; - this.definition = ''; - } - this.types = []; + public constructor(options: SchemaProps) { + this.definition = readFileSync(options.filePath).toString('utf-8'); } /** @@ -75,145 +86,10 @@ export class Schema { * * @param api The binding GraphQL Api */ - public bind(api: GraphqlApi): CfnGraphQLSchema { - if (!this.schema) { - this.schema = new CfnGraphQLSchema(api, 'Schema', { - apiId: api.apiId, - definition: this.mode === SchemaMode.CODE ? - Lazy.string({ - produce: () => this.types.reduce((acc, type) => `${acc}${type._bindToGraphqlApi(api).toString()}\n`, - `${this.declareSchema()}${this.definition}`), - }) - : this.definition, - }); - } - return this.schema; - } - - /** - * Escape hatch to add to Schema as desired. Will always result - * in a newline. - * - * @param addition the addition to add to schema - * @param delimiter the delimiter between schema and addition - * @default - '' - * - */ - public addToSchema(addition: string, delimiter?: string): void { - if (this.mode !== SchemaMode.CODE) { - throw new Error('API cannot append to schema because schema definition mode is not configured as CODE.'); - } - const sep = delimiter ?? ''; - this.definition = `${this.definition}${sep}${addition}\n`; - } - - /** - * Add a query field to the schema's Query. CDK will create an - * Object Type called 'Query'. For example, - * - * type Query { - * fieldName: Field.returnType - * } - * - * @param fieldName the name of the query - * @param field the resolvable field to for this query - */ - public addQuery(fieldName: string, field: ResolvableField): ObjectType { - if (this.mode !== SchemaMode.CODE) { - throw new Error(`Unable to add query. Schema definition mode must be ${SchemaMode.CODE}. Received: ${this.mode}`); - } - if (!this.query) { - this.query = new ObjectType('Query', { definition: {} }); - this.addType(this.query); - }; - this.query.addField({ fieldName, field }); - return this.query; - } - - /** - * Add a mutation field to the schema's Mutation. CDK will create an - * Object Type called 'Mutation'. For example, - * - * type Mutation { - * fieldName: Field.returnType - * } - * - * @param fieldName the name of the Mutation - * @param field the resolvable field to for this Mutation - */ - public addMutation(fieldName: string, field: ResolvableField): ObjectType { - if (this.mode !== SchemaMode.CODE) { - throw new Error(`Unable to add mutation. Schema definition mode must be ${SchemaMode.CODE}. Received: ${this.mode}`); - } - if (!this.mutation) { - this.mutation = new ObjectType('Mutation', { definition: {} }); - this.addType(this.mutation); + public bind(api: IGraphqlApi, _options?: SchemaBindOptions): ISchemaConfig { + return { + apiId: api.apiId, + definition: this.definition, }; - this.mutation.addField({ fieldName, field }); - return this.mutation; - } - - /** - * Add a subscription field to the schema's Subscription. CDK will create an - * Object Type called 'Subscription'. For example, - * - * type Subscription { - * fieldName: Field.returnType - * } - * - * @param fieldName the name of the Subscription - * @param field the resolvable field to for this Subscription - */ - public addSubscription(fieldName: string, field: Field): ObjectType { - if (this.mode !== SchemaMode.CODE) { - throw new Error(`Unable to add subscription. Schema definition mode must be ${SchemaMode.CODE}. Received: ${this.mode}`); - } - if (!this.subscription) { - this.subscription = new ObjectType('Subscription', { definition: {} }); - this.addType(this.subscription); - } - const directives = field.fieldOptions?.directives?.filter((directive) => directive.mutationFields); - if (directives && directives.length > 1) { - throw new Error(`Subscription fields must not have more than one @aws_subscribe directives. Received: ${directives.length}`); - } - this.subscription.addField({ fieldName, field }); - return this.subscription; - } - - /** - * Add type to the schema - * - * @param type the intermediate type to add to the schema - * - */ - public addType(type: IIntermediateType): IIntermediateType { - if (this.mode !== SchemaMode.CODE) { - throw new Error('API cannot add type because schema definition mode is not configured as CODE.'); - } - this.types.push(type); - return type; - } - - /** - * Set the root types of this schema if they are defined. - * - * For example: - * schema { - * query: Query - * mutation: Mutation - * subscription: Subscription - * } - */ - private declareSchema(): string { - if (!this.query && !this.mutation && !this.subscription) { - return ''; - } - type root = 'mutation' | 'query' | 'subscription'; - const list: root[] = ['query', 'mutation', 'subscription']; - return shapeAddition({ - prefix: 'schema', - fields: list.map((key: root) => this[key] ? `${key}: ${this[key]?.name}` : '') - .filter((field) => field != ''), - }) + '\n'; } -} \ No newline at end of file +} diff --git a/packages/@aws-cdk/aws-appsync/rosetta/with-objects.ts-fixture b/packages/@aws-cdk/aws-appsync/rosetta/with-objects.ts-fixture deleted file mode 100644 index 1058e0c2d6fbf..0000000000000 --- a/packages/@aws-cdk/aws-appsync/rosetta/with-objects.ts-fixture +++ /dev/null @@ -1,50 +0,0 @@ -// Fixture with packages imported, but nothing else -import { Stack } from '@aws-cdk/core'; -import { Construct } from 'constructs'; -import appsync = require('@aws-cdk/aws-appsync'); -const pluralize = require('pluralize'); - -const args = { - after: appsync.GraphqlType.string(), - first: appsync.GraphqlType.int(), - before: appsync.GraphqlType.string(), - last: appsync.GraphqlType.int(), -}; - -const Node = new appsync.InterfaceType('Node', { - definition: { id: appsync.GraphqlType.string() } -}); - -const FilmNode = new appsync.ObjectType('FilmNode', { - interfaceTypes: [Node], - definition: { filmName: appsync.GraphqlType.string() } -}); - -function generateEdgeAndConnection(base: appsync.ObjectType) { - const edge = new appsync.ObjectType(`${base.name}Edge`, { - definition: { node: base.attribute(), cursor: appsync.GraphqlType.string() } - }); - const connection = new appsync.ObjectType(`${base.name}Connection`, { - definition: { - edges: edge.attribute({ isList: true }), - [pluralize(base.name)]: base.attribute({ isList: true }), - totalCount: appsync.GraphqlType.int(), - } - }); - return { edge: edge, connection: connection }; -} - -const demo = new appsync.ObjectType('Demo', { - definition: { - id: appsync.GraphqlType.string({ isRequired: true }), - version: appsync.GraphqlType.string({ isRequired: true }), - }, -}); - -class Fixture extends Stack { - constructor(scope: Construct, id: string) { - super(scope, id); - - /// here - } -} diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-auth.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-auth.test.ts index b220e9d6f2d3b..7331fdfd907e7 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-auth.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-auth.test.ts @@ -16,7 +16,7 @@ describe('AppSync API Key Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), }); // THEN @@ -27,7 +27,7 @@ describe('AppSync API Key Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.IAM }, additionalAuthorizationModes: [ @@ -44,7 +44,7 @@ describe('AppSync API Key Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.IAM }, }, @@ -58,7 +58,7 @@ describe('AppSync API Key Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.IAM }, additionalAuthorizationModes: [], @@ -73,7 +73,7 @@ describe('AppSync API Key Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.IAM }, additionalAuthorizationModes: [{ @@ -96,7 +96,7 @@ describe('AppSync API Key Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'API', { name: 'apiKeyUnitTest', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.auth.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.auth.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.API_KEY, @@ -118,7 +118,7 @@ describe('AppSync API Key Authorization', () => { const when = () => { new appsync.GraphqlApi(stack, 'API', { name: 'apiKeyUnitTest', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.auth.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.auth.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.API_KEY, @@ -139,7 +139,7 @@ describe('AppSync API Key Authorization', () => { const when = () => { new appsync.GraphqlApi(stack, 'API', { name: 'apiKeyUnitTest', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.auth.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.auth.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.API_KEY, @@ -159,7 +159,7 @@ describe('AppSync API Key Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.IAM }, additionalAuthorizationModes: [ @@ -186,7 +186,7 @@ describe('AppSync API Key Authorization', () => { expect(() => { new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { additionalAuthorizationModes: [{ authorizationType: appsync.AuthorizationType.API_KEY, @@ -201,7 +201,7 @@ describe('AppSync API Key Authorization', () => { expect(() => { new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.API_KEY }, additionalAuthorizationModes: [{ @@ -217,7 +217,7 @@ describe('AppSync API Key Authorization', () => { expect(() => { new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.IAM }, additionalAuthorizationModes: [ @@ -235,7 +235,7 @@ describe('AppSync IAM Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.IAM }, }, @@ -251,7 +251,7 @@ describe('AppSync IAM Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { additionalAuthorizationModes: [{ authorizationType: appsync.AuthorizationType.IAM }], }, @@ -268,7 +268,7 @@ describe('AppSync IAM Authorization', () => { expect(() => { new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.IAM }, additionalAuthorizationModes: [{ authorizationType: appsync.AuthorizationType.IAM }], @@ -282,7 +282,7 @@ describe('AppSync IAM Authorization', () => { expect(() => { new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { additionalAuthorizationModes: [ { authorizationType: appsync.AuthorizationType.IAM }, @@ -303,7 +303,7 @@ describe('AppSync User Pool Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.USER_POOL, @@ -327,7 +327,7 @@ describe('AppSync User Pool Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.USER_POOL, @@ -356,7 +356,7 @@ describe('AppSync User Pool Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { additionalAuthorizationModes: [{ authorizationType: appsync.AuthorizationType.USER_POOL, @@ -381,7 +381,7 @@ describe('AppSync User Pool Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { additionalAuthorizationModes: [{ authorizationType: appsync.AuthorizationType.USER_POOL, @@ -411,7 +411,7 @@ describe('AppSync User Pool Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.USER_POOL, @@ -468,7 +468,7 @@ describe('AppSync OIDC Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.OIDC, @@ -490,7 +490,7 @@ describe('AppSync OIDC Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.OIDC, @@ -520,7 +520,7 @@ describe('AppSync OIDC Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { additionalAuthorizationModes: [{ authorizationType: appsync.AuthorizationType.OIDC, @@ -544,7 +544,7 @@ describe('AppSync OIDC Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { additionalAuthorizationModes: [{ authorizationType: appsync.AuthorizationType.OIDC, @@ -576,7 +576,7 @@ describe('AppSync OIDC Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.OIDC, @@ -647,7 +647,7 @@ describe('AppSync Lambda Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.LAMBDA, @@ -688,7 +688,7 @@ describe('AppSync Lambda Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.LAMBDA, @@ -730,7 +730,7 @@ describe('AppSync Lambda Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { additionalAuthorizationModes: [{ authorizationType: appsync.AuthorizationType.LAMBDA, @@ -770,7 +770,7 @@ describe('AppSync Lambda Authorization', () => { // WHEN new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { additionalAuthorizationModes: [{ authorizationType: appsync.AuthorizationType.LAMBDA, @@ -813,7 +813,7 @@ describe('AppSync Lambda Authorization', () => { test('Lambda authorization throws with multiple lambda authorization', () => { expect(() => new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.LAMBDA, @@ -836,7 +836,7 @@ describe('AppSync Lambda Authorization', () => { expect(() => new appsync.GraphqlApi(stack, 'api2', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.IAM }, additionalAuthorizationModes: [ @@ -864,7 +864,7 @@ describe('AppSync Lambda Authorization', () => { test('throws if authorization type and mode do not match', () => { expect(() => new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.LAMBDA, diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-caching-config.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-caching-config.test.ts index c012ee8f1f04c..43dc85a9b1fd5 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-caching-config.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-caching-config.test.ts @@ -13,7 +13,7 @@ beforeEach(() => { stack = new cdk.Stack(); api = new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.lambda.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.lambda.graphql')), }); }); @@ -33,7 +33,7 @@ describe('Lambda caching config', () => { // WHEN const lambdaDS = api.addLambdaDataSource('LambdaDS', func); - lambdaDS.createResolver({ + lambdaDS.createResolver('QueryAllPosts', { typeName: 'Query', fieldName: 'allPosts', }); @@ -50,7 +50,7 @@ describe('Lambda caching config', () => { // WHEN const lambdaDS = api.addLambdaDataSource('LambdaDS', func); - lambdaDS.createResolver({ + lambdaDS.createResolver('QueryAllPosts', { typeName: 'Query', fieldName: 'allPosts', cachingConfig: { @@ -77,7 +77,7 @@ describe('Lambda caching config', () => { // THEN expect(() => { - lambdaDS.createResolver({ + lambdaDS.createResolver('QueryAllPosts', { typeName: 'Query', fieldName: 'allPosts', cachingConfig: { @@ -95,7 +95,7 @@ describe('Lambda caching config', () => { // THEN expect(() => { - lambdaDS.createResolver({ + lambdaDS.createResolver('QueryAllPosts', { typeName: 'Query', fieldName: 'allPosts', cachingConfig: { @@ -113,7 +113,7 @@ describe('Lambda caching config', () => { // THEN expect(() => { - lambdaDS.createResolver({ + lambdaDS.createResolver('QueryAllPosts', { typeName: 'Query', fieldName: 'allPosts', cachingConfig: { diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-code-first.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-code-first.test.ts deleted file mode 100644 index f79e92ab67d35..0000000000000 --- a/packages/@aws-cdk/aws-appsync/test/appsync-code-first.test.ts +++ /dev/null @@ -1,329 +0,0 @@ -import { Template } from '@aws-cdk/assertions'; -import * as cdk from '@aws-cdk/core'; -import * as appsync from '../lib'; -import * as t from './scalar-type-defintions'; - -let stack: cdk.Stack; -beforeEach(() => { - // GIVEN - stack = new cdk.Stack(); -}); - -describe('code-first implementation through GraphQL Api functions`', () => { - let api: appsync.GraphqlApi; - beforeEach(() => { - // GIVEN - api = new appsync.GraphqlApi(stack, 'api', { - name: 'api', - }); - }); - - test('testing addType w/ Interface Type for schema definition mode `code`', () => { - // WHEN - const test = new appsync.InterfaceType('Test', { - definition: { - id: t.id, - lid: t.list_id, - rid: t.required_id, - rlid: t.required_list_id, - rlrid: t.required_list_required_id, - }, - }); - api.addType(test); - test.addField({ fieldName: 'dupid', field: t.dup_id }); - const out = 'interface Test {\n id: ID\n lid: [ID]\n rid: ID!\n rlid: [ID]!\n rlrid: [ID!]!\n dupid: [ID!]!\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('testing addType w/ Object Type for schema definition mode `code`', () => { - // WHEN - const test = new appsync.ObjectType('Test', { - definition: { - id: t.id, - lid: t.list_id, - rid: t.required_id, - rlid: t.required_list_id, - rlrid: t.required_list_required_id, - }, - }); - api.addType(test); - test.addField({ fieldName: 'dupid', field: t.dup_id }); - const out = 'type Test {\n id: ID\n lid: [ID]\n rid: ID!\n rlid: [ID]!\n rlrid: [ID!]!\n dupid: [ID!]!\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('testing addObjectType for schema definition mode `code`', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.id, - lid: t.list_id, - rid: t.required_id, - rlid: t.required_list_id, - rlrid: t.required_list_required_id, - dupid: t.dup_id, - }, - })); - const out = 'type Test {\n id: ID\n lid: [ID]\n rid: ID!\n rlid: [ID]!\n rlrid: [ID!]!\n dupid: [ID!]!\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('addField dynamically adds field to schema for ObjectType', () => { - // WHEN - const test = api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.id, - lid: t.list_id, - rid: t.required_id, - rlid: t.required_list_id, - rlrid: t.required_list_required_id, - }, - })); - - test.addField({ fieldName: 'dupid', field: t.dup_id }); - const out = 'type Test {\n id: ID\n lid: [ID]\n rid: ID!\n rlid: [ID]!\n rlrid: [ID!]!\n dupid: [ID!]!\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('testing addInterfaceType for schema definition mode `code`', () => { - // WHEN - api.addType(new appsync.InterfaceType('Test', { - definition: { - id: t.id, - lid: t.list_id, - rid: t.required_id, - rlid: t.required_list_id, - rlrid: t.required_list_required_id, - dupid: t.dup_id, - }, - })); - const out = 'interface Test {\n id: ID\n lid: [ID]\n rid: ID!\n rlid: [ID]!\n rlrid: [ID!]!\n dupid: [ID!]!\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('addField dynamically adds field to schema for InterfaceType', () => { - // WHEN - const test = api.addType(new appsync.InterfaceType('Test', { - definition: { - id: t.id, - lid: t.list_id, - rid: t.required_id, - rlid: t.required_list_id, - rlrid: t.required_list_required_id, - }, - })); - - test.addField({ fieldName: 'dupid', field: t.dup_id }); - const out = 'interface Test {\n id: ID\n lid: [ID]\n rid: ID!\n rlid: [ID]!\n rlrid: [ID!]!\n dupid: [ID!]!\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('addSubscription allows for adding fields but not resolvable fields', () => { - const ds = api.addNoneDataSource('DS'); - - // WHEN - api.addMutation('addId', new appsync.ResolvableField({ - returnType: t.required_id, - args: { id: t.required_id }, - dataSource: ds, - })); - api.addSubscription('addedId', new appsync.Field({ - returnType: t.required_id, - args: { id: t.required_id }, - directives: [appsync.Directive.subscribe('addId')], - })); - - const schemaDef = 'schema {\n mutation: Mutation\n subscription: Subscription\n}\n'; - const mutationDef = 'type Mutation {\n addId(id: ID!): ID!\n}\n'; - const subscriptionDef = 'type Subscription {\n addedId(id: ID!): ID!\n @aws_subscribe(mutations: ["addId"])\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${schemaDef}${mutationDef}${subscriptionDef}`, - }); - }); -}); - -describe('code-first implementation through Schema functions`', () => { - let schema: appsync.Schema; - beforeEach(() => { - // GIVEN - schema = new appsync.Schema(); - }); - - test('testing addType w/ Interface Type for schema definition mode `code`', () => { - // WHEN - const test = new appsync.InterfaceType('Test', { - definition: { - id: t.id, - lid: t.list_id, - rid: t.required_id, - rlid: t.required_list_id, - rlrid: t.required_list_required_id, - }, - }); - schema.addType(test); - test.addField({ fieldName: 'dupid', field: t.dup_id }); - - new appsync.GraphqlApi(stack, 'api', { - name: 'api', - schema, - }); - const out = 'interface Test {\n id: ID\n lid: [ID]\n rid: ID!\n rlid: [ID]!\n rlrid: [ID!]!\n dupid: [ID!]!\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('testing addType w/ Object Type for schema definition mode `code`', () => { - // WHEN - const test = new appsync.ObjectType('Test', { - definition: { - id: t.id, - lid: t.list_id, - rid: t.required_id, - rlid: t.required_list_id, - rlrid: t.required_list_required_id, - }, - }); - schema.addType(test); - test.addField({ fieldName: 'dupid', field: t.dup_id }); - - new appsync.GraphqlApi(stack, 'api', { - name: 'api', - schema, - }); - const out = 'type Test {\n id: ID\n lid: [ID]\n rid: ID!\n rlid: [ID]!\n rlrid: [ID!]!\n dupid: [ID!]!\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('testing addObjectType for schema definition mode `code`', () => { - // WHEN - schema.addType(new appsync.ObjectType('Test', { - definition: { - id: t.id, - lid: t.list_id, - rid: t.required_id, - rlid: t.required_list_id, - rlrid: t.required_list_required_id, - dupid: t.dup_id, - }, - })); - - new appsync.GraphqlApi(stack, 'api', { - name: 'api', - schema, - }); - - const out = 'type Test {\n id: ID\n lid: [ID]\n rid: ID!\n rlid: [ID]!\n rlrid: [ID!]!\n dupid: [ID!]!\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('schema.addField dynamically adds field to schema for ObjectType', () => { - // WHEN - const test = schema.addType(new appsync.ObjectType('Test', { - definition: { - id: t.id, - lid: t.list_id, - rid: t.required_id, - rlid: t.required_list_id, - rlrid: t.required_list_required_id, - }, - })); - - test.addField({ fieldName: 'dupid', field: t.dup_id }); - new appsync.GraphqlApi(stack, 'api', { - name: 'api', - schema, - }); - const out = 'type Test {\n id: ID\n lid: [ID]\n rid: ID!\n rlid: [ID]!\n rlrid: [ID!]!\n dupid: [ID!]!\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('testing addInterfaceType for schema definition mode `code`', () => { - // WHEN - schema.addType(new appsync.InterfaceType('Test', { - definition: { - id: t.id, - lid: t.list_id, - rid: t.required_id, - rlid: t.required_list_id, - rlrid: t.required_list_required_id, - dupid: t.dup_id, - }, - })); - new appsync.GraphqlApi(stack, 'api', { - name: 'api', - schema, - }); - const out = 'interface Test {\n id: ID\n lid: [ID]\n rid: ID!\n rlid: [ID]!\n rlrid: [ID!]!\n dupid: [ID!]!\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('schema addField dynamically adds field to schema for InterfaceType', () => { - // WHEN - const test = schema.addType(new appsync.InterfaceType('Test', { - definition: { - id: t.id, - lid: t.list_id, - rid: t.required_id, - rlid: t.required_list_id, - rlrid: t.required_list_required_id, - }, - })); - - test.addField({ fieldName: 'dupid', field: t.dup_id }); - new appsync.GraphqlApi(stack, 'api', { - name: 'api', - schema, - }); - const out = 'interface Test {\n id: ID\n lid: [ID]\n rid: ID!\n rlid: [ID]!\n rlrid: [ID!]!\n dupid: [ID!]!\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); -}); diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-directives.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-directives.test.ts deleted file mode 100644 index de2ce5d864813..0000000000000 --- a/packages/@aws-cdk/aws-appsync/test/appsync-directives.test.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { Template } from '@aws-cdk/assertions'; -import * as cognito from '@aws-cdk/aws-cognito'; -import * as cdk from '@aws-cdk/core'; -import * as appsync from '../lib'; -import * as t from './scalar-type-defintions'; - -const iam = [appsync.Directive.iam()]; -const apiKey = [appsync.Directive.apiKey()]; -const oidc = [appsync.Directive.oidc()]; -const cognito_default = [appsync.Directive.cognito('test', 'test2')]; -const cognito_additional = [appsync.Directive.cognito('test', 'test2')]; -const custom = [appsync.Directive.custom('custom')]; - -const generateField = (directives: appsync.Directive[]): appsync.Field => { - return new appsync.Field({ - returnType: t.string, - directives, - }); -}; - -const generateRField = (directives: appsync.Directive[]): appsync.ResolvableField => { - return new appsync.ResolvableField({ - returnType: t.string, - directives, - }); -}; - -let stack: cdk.Stack; - -let api_apiKey: appsync.GraphqlApi, api_iam: appsync.GraphqlApi, api_oidc: appsync.GraphqlApi, - api_auth: appsync.GraphqlApi, api_cognito: appsync.GraphqlApi; -beforeEach(() => { - // GIVEN - stack = new cdk.Stack(); - const userPool = new cognito.UserPool(stack, 'userpool'); - api_apiKey = new appsync.GraphqlApi(stack, 'api_apiKey', { - name: 'api', - }); - api_iam = new appsync.GraphqlApi(stack, 'api_iam', { - name: 'api', - authorizationConfig: { - defaultAuthorization: { - authorizationType: appsync.AuthorizationType.IAM, - }, - }, - }); - api_oidc = new appsync.GraphqlApi(stack, 'api_oidc', { - name: 'api', - authorizationConfig: { - defaultAuthorization: { - authorizationType: appsync.AuthorizationType.OIDC, - openIdConnectConfig: { oidcProvider: 'test' }, - }, - }, - }); - api_auth = new appsync.GraphqlApi(stack, 'api_cognito_default', { - name: 'api', - authorizationConfig: { - defaultAuthorization: { - authorizationType: appsync.AuthorizationType.USER_POOL, - userPoolConfig: { userPool }, - }, - }, - }); - api_cognito = new appsync.GraphqlApi(stack, 'api_cognito_additional', { - name: 'api', - authorizationConfig: { - additionalAuthorizationModes: [ - { - authorizationType: appsync.AuthorizationType.USER_POOL, - userPoolConfig: { userPool }, - }, - ], - }, - }); -}); - -const testObjectType = (IApi: appsync.GraphqlApi, directives: appsync.Directive[], tag: string): any => { - // WHEN - IApi.addType(new appsync.ObjectType('Test', { - definition: { - field: generateField(directives), - rfield: generateRField(directives), - }, - directives: directives, - })); - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `type Test ${tag} {\n field: String\n ${tag}\n rfield: String\n ${tag}\n}\n`, - }); -}; - -const testInterfaceType = (IApi: appsync.GraphqlApi, directives: appsync.Directive[], tag: string): any => { - // WHEN - IApi.addType(new appsync.InterfaceType('Test', { - definition: { - field: generateField(directives), - rfield: generateRField(directives), - }, - directives: directives, - })); - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `interface Test ${tag} {\n field: String\n ${tag}\n rfield: String\n ${tag}\n}\n`, - }); -}; - -describe('Basic Testing of Directives for Code-First', () => { - test('Iam directive configures in Object Type', () => { testObjectType(api_iam, iam, '@aws_iam'); }); - - test('Iam directive configures in Interface Type', () => { testInterfaceType(api_iam, iam, '@aws_iam'); }); - - test('Api Key directive configures in Object Type', () => { testObjectType(api_apiKey, apiKey, '@aws_api_key'); }); - - test('Api Key directive configures in Interface Type', () => { testInterfaceType(api_apiKey, apiKey, '@aws_api_key'); }); - - test('OIDC directive configures in Object Type', () => { testObjectType(api_oidc, oidc, '@aws_oidc'); }); - - test('OIDC directive configures in Interface Type', () => { testInterfaceType(api_oidc, oidc, '@aws_oidc'); }); - - test('Cognito as default directive configures in Object Type', () => { - testObjectType(api_auth, cognito_default, '@aws_auth(cognito_groups: ["test", "test2"])'); - }); - - test('Cognito as default directive configures in Interface Type', () => { - testInterfaceType(api_auth, cognito_default, '@aws_auth(cognito_groups: ["test", "test2"])'); - }); - - test('Cognito as additional directive configures in Object Type', () => { - testObjectType(api_cognito, cognito_additional, '@aws_cognito_user_pools(cognito_groups: ["test", "test2"])'); - }); - - test('Custom directive configures in Object Type', () => { - testObjectType(api_cognito, custom, 'custom'); - }); - - test('Custom directive configures in Interface Type', () => { - testInterfaceType(api_cognito, custom, 'custom'); - }); -}); \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-domain.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-domain.test.ts index ddc3041670fa0..aac7539679b4a 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-domain.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-domain.test.ts @@ -20,7 +20,7 @@ describe('Tests of AppSync Domain Name', () => { test('DomainNameAssociation depends on DomainName construct', () => { new appsync.GraphqlApi(stack, 'baseApi', { name: 'api', - schema: appsync.Schema.fromAsset( + schema: appsync.SchemaFile.fromAsset( path.join(__dirname, 'appsync.test.graphql'), ), domainName: { @@ -44,7 +44,7 @@ describe('Tests of AppSync Domain Name', () => { test('appSyncDomainName exposes the domain of the associated AWS::AppSync::DomainName', () => { const api = new appsync.GraphqlApi(stack, 'baseApi', { name: 'api', - schema: appsync.Schema.fromAsset( + schema: appsync.SchemaFile.fromAsset( path.join(__dirname, 'appsync.test.graphql'), ), domainName: { @@ -59,7 +59,7 @@ describe('Tests of AppSync Domain Name', () => { test('appSyncDomainName should throw an error when no custom domain has been configured', () => { const api = new appsync.GraphqlApi(stack, 'baseApi', { name: 'api', - schema: appsync.Schema.fromAsset( + schema: appsync.SchemaFile.fromAsset( path.join(__dirname, 'appsync.test.graphql'), ), }); diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-dynamodb.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-dynamodb.test.ts index 35ddd4e3cbb24..d49dfffa61ffa 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-dynamodb.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-dynamodb.test.ts @@ -16,7 +16,7 @@ beforeEach(() => { stack = new cdk.Stack(); api = new appsync.GraphqlApi(stack, 'baseApi', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), }); }); diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-elasticsearch.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-elasticsearch.test.ts index c6049ba4b3baa..86dbf19885546 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-elasticsearch.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-elasticsearch.test.ts @@ -15,7 +15,7 @@ describeDeprecated('Appsync Elasticsearch integration', () => { stack = new cdk.Stack(); api = new appsync.GraphqlApi(stack, 'baseApi', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), }); domain = new es.Domain(stack, 'EsDomain', { version: es.ElasticsearchVersion.V7_10, diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-enum-type.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-enum-type.test.ts deleted file mode 100644 index a04e9a5c89d82..0000000000000 --- a/packages/@aws-cdk/aws-appsync/test/appsync-enum-type.test.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { Template } from '@aws-cdk/assertions'; -import * as cdk from '@aws-cdk/core'; -import * as appsync from '../lib'; -import * as t from './scalar-type-defintions'; - -const out = 'enum Test {\n test1\n test2\n test3\n}\n'; -let stack: cdk.Stack; -let api: appsync.GraphqlApi; -beforeEach(() => { - // GIVEN - stack = new cdk.Stack(); - api = new appsync.GraphqlApi(stack, 'api', { - name: 'api', - }); -}); - -describe('testing Enum Type properties', () => { - test('EnumType configures properly', () => { - // WHEN - const test = new appsync.EnumType('Test', { - definition: ['test1', 'test2', 'test3'], - }); - api.addType(test); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - Template.fromStack(stack).resourceCountIs('AWS::AppSync::Resolver', 0); - }); - - test('EnumType can addField', () => { - // WHEN - const test = new appsync.EnumType('Test', { - definition: ['test1', 'test2'], - }); - api.addType(test); - test.addField({ fieldName: 'test3' }); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('EnumType can be a GraphqlType', () => { - // WHEN - const test = new appsync.EnumType('Test', { - definition: ['test1', 'test2', 'test3'], - }); - api.addType(test); - - api.addType(new appsync.ObjectType('Test2', { - definition: { enum: test.attribute() }, - })); - - const obj = 'type Test2 {\n enum: Test\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}${obj}`, - }); - }); - - test('errors when enum type is configured with white space', () => { - // THEN - expect(() => { - new appsync.EnumType('Test', { - definition: ['test 1', 'test2', 'test3'], - }); - }).toThrowError('Enum Type values cannot have whitespace. Received: test 1'); - }); - - test('errors when the fieldName in addField has white space', () => { - // WHEN - const test = new appsync.EnumType('Test', { - definition: [], - }); - // THEN - expect(() => { - test.addField({ fieldName: ' ' }); - }).toThrowError('Enum Type values cannot have whitespace. Received: '); - }); - - test('errors when enum type is configured with field options', () => { - // WHEN - const test = new appsync.EnumType('Test', { - definition: [], - }); - // THEN - expect(() => { - test.addField({ fieldName: 'test', field: t.string }); - }).toThrowError('Enum Type fields consist of strings. Use the fieldName option instead of the field option.'); - }); - - test('errors when enum type is missing fieldName option', () => { - // WHEN - const test = new appsync.EnumType('Test', { - definition: [], - }); - // THEN - expect(() => { - test.addField({}); - }).toThrowError('When adding a field to an Enum Type, you must configure the fieldName option.'); - }); -}); \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-grant.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-grant.test.ts index fb23df6e8ec74..0b95a93bc9947 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-grant.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-grant.test.ts @@ -15,7 +15,7 @@ beforeEach(() => { }); api = new appsync.GraphqlApi(stack, 'API', { name: 'demo', - schema: appsync.Schema.fromAsset(join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(join(__dirname, 'appsync.test.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: appsync.AuthorizationType.IAM, diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-http.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-http.test.ts index 2f380b028c592..655527a414a82 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-http.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-http.test.ts @@ -12,7 +12,7 @@ beforeEach(() => { stack = new cdk.Stack(); api = new appsync.GraphqlApi(stack, 'baseApi', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), }); endpoint = 'aws.amazon.com'; }); diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-input-types.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-input-types.test.ts deleted file mode 100644 index f58196e43cd31..0000000000000 --- a/packages/@aws-cdk/aws-appsync/test/appsync-input-types.test.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { Template } from '@aws-cdk/assertions'; -import * as cdk from '@aws-cdk/core'; -import * as appsync from '../lib'; -import * as t from './scalar-type-defintions'; - -const out = 'input Test {\n test: String\n}\n'; -let stack: cdk.Stack; -let api: appsync.GraphqlApi; -beforeEach(() => { - // GIVEN - stack = new cdk.Stack(); - api = new appsync.GraphqlApi(stack, 'api', { - name: 'api', - }); -}); - -describe('testing Input Type properties', () => { - test('InputType configures properly', () => { - // WHEN - const test = new appsync.InputType('Test', { - definition: { test: t.string }, - }); - api.addType(test); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - Template.fromStack(stack).resourceCountIs('AWS::AppSync::Resolver', 0); - }); - - test('InputType can addField', () => { - // WHEN - const test = new appsync.InputType('Test', { definition: {} }); - api.addType(test); - test.addField({ fieldName: 'test', field: t.string }); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('appsync fails addField with InputType missing fieldName', () => { - // WHEN - const test = new appsync.InputType('Test', { definition: {} }); - api.addType(test); - - // THEN - expect(() => { - test.addField({ fieldName: 'test' }); - }).toThrowError('Input Types must have both fieldName and field options.'); - }); - - test('appsync fails addField with InputType missing field', () => { - // WHEN - const test = new appsync.InputType('Test', { definition: {} }); - api.addType(test); - - // THEN - expect(() => { - test.addField({ field: t.string }); - }).toThrowError('Input Types must have both fieldName and field options.'); - }); - - test('appsync fails addField with InputType missing both fieldName and field options', () => { - // WHEN - const test = new appsync.InputType('Test', { definition: {} }); - api.addType(test); - - // THEN - expect(() => { - test.addField({}); - }).toThrowError('Input Types must have both fieldName and field options.'); - }); - - test('InputType can be a GraphqlType', () => { - // WHEN - const test = new appsync.InputType('Test', { - definition: { test: t.string }, - }); - api.addType(test); - - api.addType(new appsync.ObjectType('Test2', { - definition: { input: test.attribute() }, - })); - - const obj = 'type Test2 {\n input: Test\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}${obj}`, - }); - }); -}); \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-interface-type.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-interface-type.test.ts deleted file mode 100644 index f94400fab6ea3..0000000000000 --- a/packages/@aws-cdk/aws-appsync/test/appsync-interface-type.test.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { Template } from '@aws-cdk/assertions'; -import * as cdk from '@aws-cdk/core'; -import * as appsync from '../lib'; -import * as t from './scalar-type-defintions'; - -let stack: cdk.Stack; -let api: appsync.GraphqlApi; -beforeEach(() => { - // GIVEN - stack = new cdk.Stack(); - api = new appsync.GraphqlApi(stack, 'api', { - name: 'api', - }); -}); - -describe('testing InterfaceType properties', () => { - let baseTest: appsync.InterfaceType; - beforeEach(()=>{ - baseTest = new appsync.InterfaceType('baseTest', { - definition: { - id: t.id, - }, - }); - }); - test('basic InterfaceType produces correct schema', () => { - // WHEN - api.addToSchema(baseTest.toString()); - const out = 'interface baseTest {\n id: ID\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('InterfaceType fields can have arguments', () => { - // WHEN - baseTest.addField({ - fieldName: 'test', - field: new appsync.Field({ - returnType: t.string, - args: { success: t.int }, - }), - }); - api.addToSchema(baseTest.toString()); - const out = 'interface baseTest {\n id: ID\n test(success: Int): String\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('InterfaceType fields will not produce resolvers', () => { - // WHEN - baseTest.addField({ - fieldName: 'test', - field: new appsync.ResolvableField({ - returnType: t.string, - args: { success: t.int }, - dataSource: api.addNoneDataSource('none'), - }), - }); - api.addToSchema(baseTest.toString()); - const out = 'interface baseTest {\n id: ID\n test(success: Int): String\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - Template.fromStack(stack).resourceCountIs('AWS::AppSync::Resolver', 0); - }); - - test('Interface Type can be a Graphql Type', () => { - // WHEN - const graphqlType = baseTest.attribute(); - - const test = new appsync.ObjectType('Test', { - definition: { - test: graphqlType, - }, - }); - api.addToSchema(test.toString()); - const out = 'type Test {\n test: baseTest\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('Interface Type can generate Fields with Directives', () => { - // WHEN - const test = new appsync.InterfaceType('Test', { - definition: { - test: t.string, - }, - }); - test.addField({ - fieldName: 'resolve', - field: new appsync.Field({ - returnType: t.string, - directives: [appsync.Directive.apiKey()], - }), - }); - - api.addType(test); - const out = 'interface Test {\n test: String\n resolve: String\n @aws_api_key\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('Interface Type can generate ResolvableFields with Directives, but not the resolver', () => { - // WHEN - const test = new appsync.InterfaceType('Test', { - definition: { - test: t.string, - }, - }); - test.addField({ - fieldName: 'resolve', - field: new appsync.ResolvableField({ - returnType: t.string, - directives: [appsync.Directive.apiKey()], - dataSource: api.addNoneDataSource('none'), - }), - }); - - api.addType(test); - const out = 'interface Test {\n test: String\n resolve: String\n @aws_api_key\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - Template.fromStack(stack).resourceCountIs('AWS::AppSync::Resolver', 0); - }); - - test('appsync fails addField with InterfaceType missing fieldName', () => { - // WHEN - const test = new appsync.InterfaceType('Test', { definition: {} }); - api.addType(test); - - // THEN - expect(() => { - test.addField({ fieldName: 'test' }); - }).toThrowError('Interface Types must have both fieldName and field options.'); - }); - - test('appsync fails addField with InterfaceType missing field', () => { - // WHEN - const test = new appsync.InterfaceType('Test', { definition: {} }); - api.addType(test); - - // THEN - expect(() => { - test.addField({ field: t.string }); - }).toThrowError('Interface Types must have both fieldName and field options.'); - }); - - test('appsync fails addField with InterfaceType missing both fieldName and field options', () => { - // WHEN - const test = new appsync.InterfaceType('Test', { definition: {} }); - api.addType(test); - - // THEN - expect(() => { - test.addField({}); - }).toThrowError('Interface Types must have both fieldName and field options.'); - }); -}); \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-lambda.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-lambda.test.ts index 3db68304b8c9f..9479d5975adc5 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-lambda.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-lambda.test.ts @@ -11,7 +11,7 @@ beforeEach(() => { stack = new cdk.Stack(); api = new appsync.GraphqlApi(stack, 'baseApi', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), }); }); @@ -73,7 +73,7 @@ describe('Lambda Data Source configuration', () => { const newStack = new cdk.Stack(); const graphqlapi = new appsync.GraphqlApi(newStack, 'baseApi', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), }); const dummyFunction = new lambda.Function(newStack, 'func', { code: lambda.Code.fromAsset(path.join(__dirname, 'verify/iam-query')), @@ -116,7 +116,7 @@ describe('Lambda Data Source configuration', () => { description: 'custom description', }); - ds.createResolver({ + ds.createResolver('TestField', { typeName: 'test', fieldName: 'field', }); @@ -164,4 +164,4 @@ describe('adding lambda data source from imported api', () => { ApiId: { 'Fn::GetAtt': ['baseApiCDA4D43A', 'ApiId'] }, }); }); -}); \ No newline at end of file +}); diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-mapping-template.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-mapping-template.test.ts index b01403a7ba9fc..e06e87e6658a5 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-mapping-template.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-mapping-template.test.ts @@ -12,7 +12,7 @@ beforeEach(() => { stack = new cdk.Stack(); api = new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.lambda.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.lambda.graphql')), }); }); @@ -34,7 +34,7 @@ describe('Lambda Mapping Templates', () => { // WHEN const lambdaDS = api.addLambdaDataSource('LambdaDS', func); - lambdaDS.createResolver({ + lambdaDS.createResolver('QueryAllPosts', { typeName: 'Query', fieldName: 'allPosts', requestMappingTemplate: appsync.MappingTemplate.lambdaRequest(), @@ -52,7 +52,7 @@ describe('Lambda Mapping Templates', () => { // WHEN const lambdaDS = api.addLambdaDataSource('LambdaDS', func); - lambdaDS.createResolver({ + lambdaDS.createResolver('PostRelatedPosts', { typeName: 'Post', fieldName: 'relatedPosts', requestMappingTemplate: appsync.MappingTemplate.lambdaRequest('$util.toJson($ctx)', 'BatchInvoke'), @@ -67,4 +67,4 @@ describe('Lambda Mapping Templates', () => { MaxBatchSize: 10, }); }); -}); \ No newline at end of file +}); diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-none.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-none.test.ts index cbe768f095f26..caf9aaa090561 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-none.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-none.test.ts @@ -10,7 +10,7 @@ beforeEach(() => { stack = new cdk.Stack(); api = new appsync.GraphqlApi(stack, 'baseApi', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), }); }); diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-object-type.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-object-type.test.ts deleted file mode 100644 index 4180ec9d30dad..0000000000000 --- a/packages/@aws-cdk/aws-appsync/test/appsync-object-type.test.ts +++ /dev/null @@ -1,295 +0,0 @@ -import { Template } from '@aws-cdk/assertions'; -import * as cdk from '@aws-cdk/core'; -import * as appsync from '../lib'; -import * as t from './scalar-type-defintions'; - -let stack: cdk.Stack; -let api: appsync.GraphqlApi; -beforeEach(() => { - // GIVEN - stack = new cdk.Stack(); - api = new appsync.GraphqlApi(stack, 'api', { - name: 'api', - }); -}); - -describe('testing Object Type properties', () => { - test('ObjectType can implement from interface types', () => { - // WHEN - const baseTest = new appsync.InterfaceType('baseTest', { - definition: { - id: t.id, - }, - }); - const objectTest = new appsync.ObjectType('objectTest', { - interfaceTypes: [baseTest], - definition: { - id2: t.id, - }, - directives: [appsync.Directive.custom('@test')], - }); - - api.addType(baseTest); - api.addType(objectTest); - const gql_interface = 'interface baseTest {\n id: ID\n}\n'; - const gql_object = 'type objectTest implements baseTest @test {\n id2: ID\n id: ID\n}\n'; - const out = `${gql_interface}${gql_object}`; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('ObjectType can implement from multiple interface types', () => { - // WHEN - const baseTest = new appsync.InterfaceType('baseTest', { - definition: { id: t.id }, - }); - const anotherTest = new appsync.InterfaceType('anotherTest', { - definition: { id2: t.id }, - }); - const objectTest = new appsync.ObjectType('objectTest', { - interfaceTypes: [anotherTest, baseTest], - definition: { - id3: t.id, - }, - }); - - api.addType(baseTest); - api.addType(anotherTest); - api.addType(objectTest); - - const gql_interface = 'interface baseTest {\n id: ID\n}\ninterface anotherTest {\n id2: ID\n}\n'; - const gql_object = 'type objectTest implements anotherTest & baseTest {\n id3: ID\n id2: ID\n id: ID\n}\n'; - const out = `${gql_interface}${gql_object}`; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('Object Type can be a Graphql Type', () => { - // WHEN - const baseTest = new appsync.ObjectType('baseTest', { - definition: { - id: t.id, - }, - }); - const graphqlType = baseTest.attribute(); - const test = new appsync.ObjectType('Test', { - definition: { - test: graphqlType, - }, - }); - api.addType(test); - const out = 'type Test {\n test: baseTest\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('Object Type can implement Resolvable Field in definition', () => { - // WHEN - const field = new appsync.ResolvableField({ - returnType: t.string, - dataSource: api.addNoneDataSource('none'), - args: { - arg: t.int, - }, - - }); - const test = new appsync.ObjectType('Test', { - definition: { - test: t.string, - resolve: field, - }, - }); - api.addType(test); - const out = 'type Test {\n test: String\n resolve(arg: Int): String\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('Object Type can implement Resolvable Field from GraphqlType', () => { - // WHEN - const field = new appsync.ResolvableField({ - returnType: t.string, - dataSource: api.addNoneDataSource('none'), - args: { - arg: t.int, - }, - - }); - const test = new appsync.ObjectType('Test', { - definition: { - test: t.string, - resolve: field, - }, - }); - api.addType(test); - const out = 'type Test {\n test: String\n resolve(arg: Int): String\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('Object Type can implement Resolvable Field for pipelineResolvers', () => { - // WHEN - const ds = api.addNoneDataSource('none'); - const test1 = ds.createFunction({ - name: 'test1', - }); - const test2 = ds.createFunction({ - name: 'test2', - }); - const test = new appsync.ObjectType('Test', { - definition: { - resolve: new appsync.ResolvableField({ - returnType: t.string, - args: { - arg: t.int, - }, - pipelineConfig: [test1, test2], - requestMappingTemplate: appsync.MappingTemplate.fromString(JSON.stringify({ - version: '2017-02-28', - })), - responseMappingTemplate: appsync.MappingTemplate.fromString(JSON.stringify({ - version: 'v1', - })), - }), - }, - }); - api.addType(test); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::Resolver', { - Kind: 'PIPELINE', - PipelineConfig: { - Functions: [ - { 'Fn::GetAtt': ['apinonetest1FunctionEF63046F', 'FunctionId'] }, - { 'Fn::GetAtt': ['apinonetest2Function615111D0', 'FunctionId'] }, - ], - }, - }); - }); - - test('Object Type can dynamically add Fields', () => { - // WHEN - const field = new appsync.ResolvableField({ - returnType: t.string, - dataSource: api.addNoneDataSource('none'), - args: { arg: t.int }, - - }); - const test = new appsync.ObjectType('Test', { - definition: { - test: t.string, - }, - }); - test.addField({ fieldName: 'resolve', field }); - test.addField({ fieldName: 'dynamic', field: t.string }); - - api.addType(test); - const out = 'type Test {\n test: String\n resolve(arg: Int): String\n dynamic: String\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - Template.fromStack(stack).resourceCountIs('AWS::AppSync::Resolver', 1); - }); - - test('Object Type can generate Fields with Directives', () => { - // WHEN - const test = new appsync.ObjectType('Test', { - definition: { - test: t.string, - }, - }); - test.addField({ - fieldName: 'resolve', - field: new appsync.Field({ - returnType: t.string, - directives: [appsync.Directive.apiKey()], - }), - }); - - api.addType(test); - const out = 'type Test {\n test: String\n resolve: String\n @aws_api_key\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('Object Type can generate ResolvableFields with Directives', () => { - // WHEN - const test = new appsync.ObjectType('Test', { - definition: { - test: t.string, - }, - }); - const field = new appsync.ResolvableField({ - returnType: t.string, - directives: [appsync.Directive.apiKey()], - dataSource: api.addNoneDataSource('none'), - args: { - arg: t.string, - }, - - }); - test.addField({ fieldName: 'resolve', field }); - - api.addType(test); - const out = 'type Test {\n test: String\n resolve(arg: String): String\n @aws_api_key\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - Template.fromStack(stack).resourceCountIs('AWS::AppSync::Resolver', 1); - }); - - test('appsync fails addField with ObjectType missing fieldName', () => { - // WHEN - const test = new appsync.ObjectType('Test', { definition: {} }); - api.addType(test); - - // THEN - expect(() => { - test.addField({ fieldName: 'test' }); - }).toThrowError('Object Types must have both fieldName and field options.'); - }); - - test('appsync fails addField with ObjectType missing field', () => { - // WHEN - const test = new appsync.ObjectType('Test', { definition: {} }); - api.addType(test); - - // THEN - expect(() => { - test.addField({ field: t.string }); - }).toThrowError('Object Types must have both fieldName and field options.'); - }); - - test('appsync fails addField with ObjectType missing both fieldName and field options', () => { - // WHEN - const test = new appsync.ObjectType('Test', { definition: {} }); - api.addType(test); - - // THEN - expect(() => { - test.addField({}); - }).toThrowError('Object Types must have both fieldName and field options.'); - }); -}); diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-opensearch.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-opensearch.test.ts index 92cf5d26c0abf..fe88042030fb4 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-opensearch.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-opensearch.test.ts @@ -12,7 +12,7 @@ beforeEach(() => { stack = new cdk.Stack(); api = new appsync.GraphqlApi(stack, 'baseApi', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), }); domain = new opensearch.Domain(stack, 'OsDomain', { version: opensearch.EngineVersion.OPENSEARCH_1_1, diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-rds.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-rds.test.ts index 2030c900d5977..a281737d1ab3c 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync-rds.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync-rds.test.ts @@ -12,7 +12,7 @@ beforeEach(() => { stack = new cdk.Stack(); api = new appsync.GraphqlApi(stack, 'baseApi', { name: 'api', - schema: new appsync.Schema({ + schema: new appsync.SchemaFile({ filePath: path.join(__dirname, 'appsync.test.graphql'), }), }); diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-scalar-type.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-scalar-type.test.ts deleted file mode 100644 index 01cf50bd8904b..0000000000000 --- a/packages/@aws-cdk/aws-appsync/test/appsync-scalar-type.test.ts +++ /dev/null @@ -1,227 +0,0 @@ -import { Template } from '@aws-cdk/assertions'; -import * as cdk from '@aws-cdk/core'; -import * as appsync from '../lib'; -import * as t from './scalar-type-defintions'; - -let stack: cdk.Stack; -let api: appsync.GraphqlApi; -beforeEach(() => { - // GIVEN - stack = new cdk.Stack(); - api = new appsync.GraphqlApi(stack, 'api', { - name: 'api', - }); -}); - -describe('testing all GraphQL Types', () => { - test('scalar type id', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.id, - }, - })); - const out = 'type Test {\n id: ID\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('scalar type string', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.string, - }, - })); - const out = 'type Test {\n id: String\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('scalar type int', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.int, - }, - })); - const out = 'type Test {\n id: Int\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('scalar type float', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.float, - }, - })); - const out = 'type Test {\n id: Float\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('scalar type boolean', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.boolean, - }, - })); - const out = 'type Test {\n id: Boolean\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('scalar type AWSDate', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.awsDate, - }, - })); - const out = 'type Test {\n id: AWSDate\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('scalar type AWSTime', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.awsTime, - }, - })); - const out = 'type Test {\n id: AWSTime\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('scalar type AWSDateTime', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.awsDateTime, - }, - })); - const out = 'type Test {\n id: AWSDateTime\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('scalar type AWSTimestamp', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.awsTimestamp, - }, - })); - const out = 'type Test {\n id: AWSTimestamp\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('scalar type AWSEmail', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.awsEmail, - }, - })); - const out = 'type Test {\n id: AWSEmail\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('scalar type AWSJSON', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.awsJson, - }, - })); - const out = 'type Test {\n id: AWSJSON\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - - test('scalar type AWSUrl', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.awsUrl, - }, - })); - const out = 'type Test {\n id: AWSURL\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('scalar type AWSPhone', () => { - // WHEN - api.addType(new appsync.ObjectType('Test', { - definition: { - id: t.awsPhone, - }, - })); - const out = 'type Test {\n id: AWSPhone\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('scalar type AWSIPAddress', () => { - // WHEN - api.addType( new appsync.ObjectType('Test', { - definition: { - id: t.awsIpAddress, - }, - })); - const out = 'type Test {\n id: AWSIPAddress\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); -}); \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-schema.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-schema.test.ts deleted file mode 100644 index 9e3c5d951d807..0000000000000 --- a/packages/@aws-cdk/aws-appsync/test/appsync-schema.test.ts +++ /dev/null @@ -1,275 +0,0 @@ -import { join } from 'path'; -import { Template } from '@aws-cdk/assertions'; -import * as cdk from '@aws-cdk/core'; -import * as appsync from '../lib'; -import * as t from './scalar-type-defintions'; - -// Schema Definitions -const type = new appsync.ObjectType('test', { - definition: { - version: t.required_string, - }, -}); -const query = new appsync.ObjectType('Query', { - definition: { - getTests: new appsync.ResolvableField({ - returnType: type.attribute({ isRequiredList: true, isList: true }), - }), - }, -}); -const mutation = new appsync.ObjectType('Mutation', { - definition: { - addTest: new appsync.ResolvableField({ - returnType: type.attribute(), - args: { version: t.required_string }, - }), - }, -}); - -let stack: cdk.Stack; -beforeEach(() => { - // GIVEN - stack = new cdk.Stack(); -}); - -describe('basic testing schema definition mode `code`', () => { - - test('definition mode `code` produces empty schema definition', () => { - // WHEN - new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - }); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: '', - }); - }); - - test('definition mode `code` generates correct schema with addToSchema', () => { - // WHEN - const api = new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - }); - api.addType(type); - api.addType(query); - api.addType(mutation); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${type.toString()}\n${query.toString()}\n${mutation.toString()}\n`, - }); - }); - - test('definition mode `code` allows for api to addQuery', () => { - // WHEN - const api = new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - }); - api.addQuery('test', new appsync.ResolvableField({ - returnType: t.string, - })); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: 'schema {\n query: Query\n}\ntype Query {\n test: String\n}\n', - }); - }); - - test('definition mode `code` allows for schema to addQuery', () => { - // WHEN - const schema = new appsync.Schema(); - new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - schema, - }); - schema.addQuery('test', new appsync.ResolvableField({ - returnType: t.string, - })); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: 'schema {\n query: Query\n}\ntype Query {\n test: String\n}\n', - }); - }); - - test('definition mode `code` allows for api to addMutation', () => { - // WHEN - const api = new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - }); - api.addMutation('test', new appsync.ResolvableField({ - returnType: t.string, - })); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: 'schema {\n mutation: Mutation\n}\ntype Mutation {\n test: String\n}\n', - }); - }); - - test('definition mode `code` allows for schema to addMutation', () => { - // WHEN - const schema = new appsync.Schema(); - new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - schema, - }); - schema.addMutation('test', new appsync.ResolvableField({ - returnType: t.string, - })); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: 'schema {\n mutation: Mutation\n}\ntype Mutation {\n test: String\n}\n', - }); - }); - - test('definition mode `code` allows for api to addSubscription', () => { - // WHEN - const api = new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - }); - api.addSubscription('test', new appsync.ResolvableField({ - returnType: t.string, - })); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: 'schema {\n subscription: Subscription\n}\ntype Subscription {\n test: String\n}\n', - }); - }); - - test('definition mode `code` allows for schema to addSubscription', () => { - // WHEN - const schema = new appsync.Schema(); - new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - schema, - }); - schema.addSubscription('test', new appsync.ResolvableField({ - returnType: t.string, - })); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: 'schema {\n subscription: Subscription\n}\ntype Subscription {\n test: String\n}\n', - }); - }); - - test('definition mode `code` addSubscription w/ @aws_subscribe', () => { - // WHE - const api = new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - }); - api.addSubscription('test', new appsync.ResolvableField({ - returnType: t.string, - directives: [appsync.Directive.subscribe('test1')], - })); - - const out = 'schema {\n subscription: Subscription\n}\ntype Subscription {\n test: String\n @aws_subscribe(mutations: ["test1"])\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: out, - }); - }); -}); - -describe('testing schema definition mode `file`', () => { - - test('definition mode `file` produces correct output', () => { - // WHEN - new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - schema: appsync.Schema.fromAsset(join(__dirname, 'appsync.test.graphql')), - }); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${type.toString()}\n${query.toString()}\n${mutation.toString()}\n`, - }); - }); - - test('definition mode `file` errors when addType for object is called', () => { - // WHEN - const api = new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - schema: appsync.Schema.fromAsset(join(__dirname, 'appsync.test.graphql')), - }); - - // THEN - expect(() => { - api.addType(new appsync.ObjectType('blah', { - definition: { fail: t.id }, - })); - }).toThrowError('API cannot add type because schema definition mode is not configured as CODE.'); - }); - - test('definition mode `file` errors when addType for interface is called', () => { - // WHEN - const api = new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - schema: appsync.Schema.fromAsset(join(__dirname, 'appsync.test.graphql')), - }); - - // THEN - expect(() => { - api.addType(new appsync.InterfaceType('blah', { - definition: { fail: t.id }, - })); - }).toThrowError('API cannot add type because schema definition mode is not configured as CODE.'); - }); - - test('definition mode `file` errors when addToSchema is called', () => { - // WHEN - const api = new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - schema: appsync.Schema.fromAsset(join(__dirname, 'appsync.test.graphql')), - }); - - // THEN - expect(() => { - api.addToSchema('blah'); - }).toThrowError('API cannot append to schema because schema definition mode is not configured as CODE.'); - }); - - test('definition mode `file` errors when addQuery is called', () => { - // WHEN - const api = new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - schema: appsync.Schema.fromAsset(join(__dirname, 'appsync.test.graphql')), - }); - - // THEN - expect(() => { - api.addQuery('blah', new appsync.ResolvableField({ returnType: t.string })); - }).toThrowError('Unable to add query. Schema definition mode must be CODE. Received: FILE'); - }); - - test('definition mode `file` errors when addMutation is called', () => { - // WHEN - const api = new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - schema: appsync.Schema.fromAsset(join(__dirname, 'appsync.test.graphql')), - }); - - // THEN - expect(() => { - api.addMutation('blah', new appsync.ResolvableField({ returnType: t.string })); - }).toThrowError('Unable to add mutation. Schema definition mode must be CODE. Received: FILE'); - }); - - test('definition mode `file` errors when addSubscription is called', () => { - // WHEN - const api = new appsync.GraphqlApi(stack, 'API', { - name: 'demo', - schema: appsync.Schema.fromAsset(join(__dirname, 'appsync.test.graphql')), - }); - - // THEN - expect(() => { - api.addSubscription('blah', new appsync.ResolvableField({ returnType: t.string })); - }).toThrowError('Unable to add subscription. Schema definition mode must be CODE. Received: FILE'); - }); -}); \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/appsync-union-types.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync-union-types.test.ts deleted file mode 100644 index b84099b93e68f..0000000000000 --- a/packages/@aws-cdk/aws-appsync/test/appsync-union-types.test.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { Template } from '@aws-cdk/assertions'; -import * as cdk from '@aws-cdk/core'; -import * as appsync from '../lib'; -import * as t from './scalar-type-defintions'; - -const out = 'type Test1 {\n test1: String\n}\ntype Test2 {\n test2: String\n}\nunion UnionTest = Test1 | Test2\n'; -const test1 = new appsync.ObjectType('Test1', { - definition: { test1: t.string }, -}); -const test2 = new appsync.ObjectType('Test2', { - definition: { test2: t.string }, -}); -let stack: cdk.Stack; -let api: appsync.GraphqlApi; -beforeEach(() => { - // GIVEN - stack = new cdk.Stack(); - api = new appsync.GraphqlApi(stack, 'api', { - name: 'api', - }); - api.addType(test1); - api.addType(test2); -}); - -describe('testing Union Type properties', () => { - test('UnionType configures properly', () => { - // WHEN - const union = new appsync.UnionType('UnionTest', { - definition: [test1, test2], - }); - api.addType(union); - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - Template.fromStack(stack).resourceCountIs('AWS::AppSync::Resolver', 0); - }); - - test('UnionType can addField', () => { - // WHEN - const union = new appsync.UnionType('UnionTest', { - definition: [test1], - }); - api.addType(union); - union.addField({ field: test2.attribute() }); - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}`, - }); - }); - - test('UnionType errors when addField is configured with fieldName option', () => { - // WHEN - const union = new appsync.UnionType('UnionTest', { - definition: [test1], - }); - api.addType(union); - - // THEN - expect(() => { - union.addField({ fieldName: 'fail', field: test2.attribute() }); - }).toThrowError('Union Types cannot be configured with the fieldName option. Use the field option instead.'); - }); - - test('UnionType errors when addField is not configured with field option', () => { - // WHEN - const union = new appsync.UnionType('UnionTest', { - definition: [test1], - }); - api.addType(union); - - // THEN - expect(() => { - union.addField({}); - }).toThrowError('Union Types must be configured with the field option.'); - }); - - test('UnionType can be a GraphqlType', () => { - // WHEN - const union = new appsync.UnionType('UnionTest', { - definition: [test1, test2], - }); - api.addType(union); - - api.addType(new appsync.ObjectType('Test2', { - definition: { union: union.attribute() }, - })); - - const obj = 'type Test2 {\n union: UnionTest\n}\n'; - - // THEN - Template.fromStack(stack).hasResourceProperties('AWS::AppSync::GraphQLSchema', { - Definition: `${out}${obj}`, - }); - }); - - test('appsync errors when addField with Graphql Types', () => { - // WHEN - const test = new appsync.UnionType('Test', { - definition: [], - }); - // THEN - expect(() => { - test.addField({ field: t.string }); - }).toThrowError('Fields for Union Types must be Object Types.'); - }); - - test('appsync errors when addField with Field', () => { - // WHEN - const test = new appsync.UnionType('Test', { - definition: [], - }); - // THEN - expect(() => { - test.addField({ field: new appsync.Field({ returnType: t.string }) }); - }).toThrowError('Fields for Union Types must be Object Types.'); - }); - - test('appsync errors when addField with ResolvableField', () => { - // WHEN - const test = new appsync.UnionType('Test', { - definition: [], - }); - // THEN - expect(() => { - test.addField({ field: new appsync.ResolvableField({ returnType: t.string }) }); - }).toThrowError('Fields for Union Types must be Object Types.'); - }); - - test('appsync errors when addField with Interface Types', () => { - // WHEN - const test = new appsync.UnionType('Test', { - definition: [], - }); - // THEN - expect(() => { - test.addField({ field: new appsync.InterfaceType('break', { definition: {} }).attribute() }); - }).toThrowError('Fields for Union Types must be Object Types.'); - }); - - test('appsync errors when addField with Union Types', () => { - // WHEN - const test = new appsync.UnionType('Test', { - definition: [], - }); - // THEN - expect(() => { - test.addField({ field: test.attribute() }); - }).toThrowError('Fields for Union Types must be Object Types.'); - }); -}); \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/appsync.test.ts b/packages/@aws-cdk/aws-appsync/test/appsync.test.ts index 1ed2a95b6aeae..840f9664e5854 100644 --- a/packages/@aws-cdk/aws-appsync/test/appsync.test.ts +++ b/packages/@aws-cdk/aws-appsync/test/appsync.test.ts @@ -13,7 +13,7 @@ beforeEach(() => { api = new appsync.GraphqlApi(stack, 'api', { authorizationConfig: {}, name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), logConfig: {}, }); }); @@ -21,13 +21,13 @@ beforeEach(() => { test('appsync should configure pipeline when pipelineConfig has contents', () => { // WHEN const ds = api.addNoneDataSource('none'); - const test1 = ds.createFunction({ + const test1 = ds.createFunction('Test1Function', { name: 'test1', }); - const test2 = ds.createFunction({ + const test2 = ds.createFunction('Test2Function', { name: 'test2', }); - api.createResolver({ + api.createResolver('TestTest2', { typeName: 'test', fieldName: 'test2', pipelineConfig: [test1, test2], @@ -38,8 +38,8 @@ test('appsync should configure pipeline when pipelineConfig has contents', () => Kind: 'PIPELINE', PipelineConfig: { Functions: [ - { 'Fn::GetAtt': ['apinonetest1FunctionEF63046F', 'FunctionId'] }, - { 'Fn::GetAtt': ['apinonetest2Function615111D0', 'FunctionId'] }, + { 'Fn::GetAtt': ['apiTest1Function793605E9', 'FunctionId'] }, + { 'Fn::GetAtt': ['apiTest2FunctionB704A7AD', 'FunctionId'] }, ], }, }); @@ -48,16 +48,17 @@ test('appsync should configure pipeline when pipelineConfig has contents', () => test('appsync should error when creating pipeline resolver with data source', () => { // WHEN const ds = api.addNoneDataSource('none'); - const test1 = ds.createFunction({ + const test1 = ds.createFunction('Test1Function', { name: 'test1', }); - const test2 = ds.createFunction({ + const test2 = ds.createFunction('Test2Function', { name: 'test2', }); // THEN expect(() => { - ds.createResolver({ + api.createResolver('TestTest2', { + dataSource: ds, typeName: 'test', fieldName: 'test2', pipelineConfig: [test1, test2], @@ -83,7 +84,7 @@ test('appsync should configure resolver as unit when pipelineConfig is empty', ( test('appsync should configure resolver as unit when pipelineConfig is empty array', () => { // WHEN - api.createResolver({ + api.createResolver('TestTest2', { typeName: 'test', fieldName: 'test2', pipelineConfig: [], @@ -100,7 +101,7 @@ test('when xray is enabled should not throw an Error', () => { new appsync.GraphqlApi(stack, 'api-x-ray', { authorizationConfig: {}, name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), xrayEnabled: true, }); @@ -123,7 +124,7 @@ test('appsync GraphqlApi should be configured with custom CloudWatch Logs role w new appsync.GraphqlApi(stack, 'api-custom-cw-logs-role', { authorizationConfig: {}, name: 'apiWithCustomRole', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), logConfig: { role: cloudWatchLogRole, }, @@ -169,7 +170,7 @@ test('appsync GraphqlApi should be configured with custom domain when specified' new appsync.GraphqlApi(stack, 'api-custom-cw-logs-role', { authorizationConfig: {}, name: 'apiWithCustomRole', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), domainName: { domainName, certificate, @@ -201,7 +202,7 @@ test('log retention should be configured with given retention time when specifie new appsync.GraphqlApi(stack, 'log-retention', { authorizationConfig: {}, name: 'log-retention', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), logConfig: { retention: retentionTime, }, @@ -232,9 +233,9 @@ test('log retention should not appear when no retention time is specified', () = new appsync.GraphqlApi(stack, 'no-log-retention', { authorizationConfig: {}, name: 'no-log-retention', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), }); // THEN Template.fromStack(stack).resourceCountIs('Custom::LogRetention', 0); -}); \ No newline at end of file +}); diff --git a/packages/@aws-cdk/aws-appsync/test/integ.api-import.ts b/packages/@aws-cdk/aws-appsync/test/integ.api-import.ts index a4ebc3105209e..451c4357c81aa 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.api-import.ts +++ b/packages/@aws-cdk/aws-appsync/test/integ.api-import.ts @@ -24,7 +24,7 @@ const baseStack = new cdk.Stack(app, 'baseStack'); const baseApi = new appsync.GraphqlApi(baseStack, 'baseApi', { name: 'baseApi', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), }); const stack = new cdk.Stack(app, 'stack'); @@ -43,14 +43,14 @@ const testTable = new db.Table(stack, 'TestTable', { const testDS = api.addDynamoDbDataSource('ds', testTable); -testDS.createResolver({ +testDS.createResolver('QueryGetTests', { typeName: 'Query', fieldName: 'getTests', requestMappingTemplate: appsync.MappingTemplate.dynamoDbScanTable(), responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultList(), }); -testDS.createResolver({ +testDS.createResolver('MutationAddTest', { typeName: 'Mutation', fieldName: 'addTest', requestMappingTemplate: appsync.MappingTemplate.dynamoDbPutItem(appsync.PrimaryKey.partition('id').auto(), appsync.Values.projecting('test')), @@ -64,7 +64,7 @@ const api2 = appsync.GraphqlApi.fromGraphqlApiAttributes(stack, 'api2', { const none = api2.addNoneDataSource('none'); -const func = none.createFunction({ +const func = none.createFunction('PipelineFunction', { name: 'pipeline_function', requestMappingTemplate: appsync.MappingTemplate.fromString(JSON.stringify({ version: '2017-02-28', @@ -87,4 +87,4 @@ new appsync.Resolver(stack, 'pipeline_resolver', { })), }); -app.synth(); \ No newline at end of file +app.synth(); diff --git a/packages/@aws-cdk/aws-appsync/test/integ.appsync-lambda.ts b/packages/@aws-cdk/aws-appsync/test/integ.appsync-lambda.ts index b60dd5e23223d..365d8b328135a 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.appsync-lambda.ts +++ b/packages/@aws-cdk/aws-appsync/test/integ.appsync-lambda.ts @@ -23,7 +23,7 @@ const stack = new cdk.Stack(app, 'stack'); const api = new appsync.GraphqlApi(stack, 'LambdaAPI', { name: 'LambdaAPI', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.lambda.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.lambda.graphql')), }); const func = new lambda.Function(stack, 'func', { @@ -47,35 +47,35 @@ const requestPayload = (field: string, { withArgs = false, withSource = false }) }; const responseMappingTemplate = appsync.MappingTemplate.lambdaResult(); -lambdaDS.createResolver({ +lambdaDS.createResolver('QueryGetPost', { typeName: 'Query', fieldName: 'getPost', requestMappingTemplate: appsync.MappingTemplate.lambdaRequest(requestPayload('getPost', { withArgs: true })), responseMappingTemplate, }); -lambdaDS.createResolver({ +lambdaDS.createResolver('QueryAllPosts', { typeName: 'Query', fieldName: 'allPosts', requestMappingTemplate: appsync.MappingTemplate.lambdaRequest(requestPayload('allPosts', {})), responseMappingTemplate, }); -lambdaDS.createResolver({ +lambdaDS.createResolver('MutationAddPost', { typeName: 'Mutation', fieldName: 'addPost', requestMappingTemplate: appsync.MappingTemplate.lambdaRequest(requestPayload('addPost', { withArgs: true })), responseMappingTemplate, }); -lambdaDS.createResolver({ +lambdaDS.createResolver('PostRelatedPosts', { typeName: 'Post', fieldName: 'relatedPosts', requestMappingTemplate: appsync.MappingTemplate.lambdaRequest(requestPayload('relatedPosts', { withSource: true }), 'BatchInvoke'), responseMappingTemplate, }); -lambdaDS.createResolver({ +lambdaDS.createResolver('PostRelatedPostsMaxBatchSize', { typeName: 'Post', fieldName: 'relatedPostsMaxBatchSize', requestMappingTemplate: appsync.MappingTemplate.lambdaRequest(requestPayload('relatedPostsMaxBatchSize', { withSource: true }), 'BatchInvoke'), @@ -83,4 +83,4 @@ lambdaDS.createResolver({ maxBatchSize: 2, }); -app.synth(); \ No newline at end of file +app.synth(); diff --git a/packages/@aws-cdk/aws-appsync/test/integ.appsync-none.ts b/packages/@aws-cdk/aws-appsync/test/integ.appsync-none.ts index 34ce22aefba68..20d8922210d1a 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.appsync-none.ts +++ b/packages/@aws-cdk/aws-appsync/test/integ.appsync-none.ts @@ -8,7 +8,7 @@ const stack = new cdk.Stack(app, 'stack'); const api = new appsync.GraphqlApi(stack, 'NoneAPI', { name: 'NoneAPI', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.none.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.none.graphql')), }); api.addNoneDataSource('NoneDS', { diff --git a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/aws-appsync-integ.assets.json b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/aws-appsync-integ.assets.json index e1fc66d0072de..1dce01edaab20 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/aws-appsync-integ.assets.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/aws-appsync-integ.assets.json @@ -1,7 +1,7 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { - "b0462850439179659920597f4327262b24073af4f4969622163b0a295fce1dda": { + "de7d932209c6d07c0ba0e631387676246a8182018b2b7423dc18b52baec3e984": { "source": { "path": "aws-appsync-integ.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "b0462850439179659920597f4327262b24073af4f4969622163b0a295fce1dda.json", + "objectKey": "de7d932209c6d07c0ba0e631387676246a8182018b2b7423dc18b52baec3e984.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/aws-appsync-integ.template.json b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/aws-appsync-integ.template.json index 08669bf3f0155..a3fec85414f21 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/aws-appsync-integ.template.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/aws-appsync-integ.template.json @@ -121,7 +121,7 @@ } } }, - "ApitestDataSourceQuerygetTestsResolverA3BBB672": { + "ApiQueryGetTestsF8C40170": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -142,7 +142,7 @@ "ApitestDataSource96AE54D5" ] }, - "ApitestDataSourceMutationaddTestResolver36203D6B": { + "ApiMutationAddTestBF148084": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { diff --git a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/cdk.out b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/integ.json b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/integ.json index 7dcc8937ebb9f..aa96b0d39f29c 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "testCases": { "integ.auth-apikey": { "stacks": [ diff --git a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/manifest.json b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/manifest.json index 5092943d4ea3f..84425007dd38d 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "artifacts": { "aws-appsync-integ.assets": { "type": "cdk:asset-manifest", @@ -17,7 +17,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}/b0462850439179659920597f4327262b24073af4f4969622163b0a295fce1dda.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/de7d932209c6d07c0ba0e631387676246a8182018b2b7423dc18b52baec3e984.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -69,16 +69,16 @@ "data": "ApitestDataSource96AE54D5" } ], - "/aws-appsync-integ/Api/testDataSource/QuerygetTestsResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetTests/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApitestDataSourceQuerygetTestsResolverA3BBB672" + "data": "ApiQueryGetTestsF8C40170" } ], - "/aws-appsync-integ/Api/testDataSource/MutationaddTestResolver/Resource": [ + "/aws-appsync-integ/Api/MutationAddTest/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApitestDataSourceMutationaddTestResolver36203D6B" + "data": "ApiMutationAddTestBF148084" } ], "/aws-appsync-integ/TestTable/Resource": [ @@ -98,6 +98,24 @@ "type": "aws:cdk:logicalId", "data": "CheckBootstrapVersion" } + ], + "ApitestDataSourceQuerygetTestsResolverA3BBB672": [ + { + "type": "aws:cdk:logicalId", + "data": "ApitestDataSourceQuerygetTestsResolverA3BBB672", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApitestDataSourceMutationaddTestResolver36203D6B": [ + { + "type": "aws:cdk:logicalId", + "data": "ApitestDataSourceMutationaddTestResolver36203D6B", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } ] }, "displayName": "aws-appsync-integ" diff --git a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/tree.json b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/tree.json index 6c8c0f98bc587..4d17f656f3f8c 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.js.snapshot/tree.json @@ -217,80 +217,80 @@ "fqn": "@aws-cdk/aws-appsync.CfnDataSource", "version": "0.0.0" } - }, - "QuerygetTestsResolver": { - "id": "QuerygetTestsResolver", - "path": "aws-appsync-integ/Api/testDataSource/QuerygetTestsResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/testDataSource/QuerygetTestsResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getTests", - "typeName": "Query", - "dataSourceName": "testDataSource", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Scan\", \"consistentRead\": false}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.DynamoDbDataSource", + "version": "0.0.0" + } + }, + "QueryGetTests": { + "id": "QueryGetTests", + "path": "aws-appsync-integ/Api/QueryGetTests", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetTests/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getTests", + "typeName": "Query", + "dataSourceName": "testDataSource", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Scan\", \"consistentRead\": false}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "MutationaddTestResolver": { - "id": "MutationaddTestResolver", - "path": "aws-appsync-integ/Api/testDataSource/MutationaddTestResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/testDataSource/MutationaddTestResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "addTest", - "typeName": "Mutation", - "dataSourceName": "testDataSource", - "kind": "UNIT", - "requestMappingTemplate": "\n #set($input = $ctx.args.test)\n \n {\n \"version\": \"2017-02-28\",\n \"operation\": \"PutItem\",\n \"key\" : {\n \"id\" : $util.dynamodb.toDynamoDBJson($util.autoId())\n },\n \"attributeValues\": $util.dynamodb.toMapValuesJson($input)\n }", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "MutationAddTest": { + "id": "MutationAddTest", + "path": "aws-appsync-integ/Api/MutationAddTest", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/MutationAddTest/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "addTest", + "typeName": "Mutation", + "dataSourceName": "testDataSource", + "kind": "UNIT", + "requestMappingTemplate": "\n #set($input = $ctx.args.test)\n \n {\n \"version\": \"2017-02-28\",\n \"operation\": \"PutItem\",\n \"key\" : {\n \"id\" : $util.dynamodb.toDynamoDBJson($util.autoId())\n },\n \"attributeValues\": $util.dynamodb.toMapValuesJson($input)\n }", + "responseMappingTemplate": "$util.toJson($ctx.result)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.DynamoDbDataSource", + "fqn": "@aws-cdk/aws-appsync.Resolver", "version": "0.0.0" } } @@ -371,7 +371,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } } }, diff --git a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.ts b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.ts index 4adb6e5bdafbe..234f3595aa112 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.ts +++ b/packages/@aws-cdk/aws-appsync/test/integ.auth-apikey.ts @@ -1,7 +1,7 @@ import { join } from 'path'; import { AttributeType, BillingMode, Table } from '@aws-cdk/aws-dynamodb'; import { App, RemovalPolicy, Stack } from '@aws-cdk/core'; -import { AuthorizationType, GraphqlApi, MappingTemplate, PrimaryKey, Schema, Values } from '../lib'; +import { AuthorizationType, GraphqlApi, MappingTemplate, PrimaryKey, SchemaFile, Values } from '../lib'; /* * Creates an Appsync GraphQL API with API_KEY authorization. @@ -23,7 +23,7 @@ const stack = new Stack(app, 'aws-appsync-integ'); const api = new GraphqlApi(stack, 'Api', { name: 'Integ_Test_APIKey', - schema: Schema.fromAsset(join(__dirname, 'appsync.auth.graphql')), + schema: SchemaFile.fromAsset(join(__dirname, 'appsync.auth.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: AuthorizationType.API_KEY, @@ -46,18 +46,18 @@ const testTable = new Table(stack, 'TestTable', { const testDS = api.addDynamoDbDataSource('testDataSource', testTable); -testDS.createResolver({ +testDS.createResolver('QueryGetTests', { typeName: 'Query', fieldName: 'getTests', requestMappingTemplate: MappingTemplate.dynamoDbScanTable(), responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); -testDS.createResolver({ +testDS.createResolver('MutationAddTest', { typeName: 'Mutation', fieldName: 'addTest', requestMappingTemplate: MappingTemplate.dynamoDbPutItem(PrimaryKey.partition('id').auto(), Values.projecting('test')), responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), }); -app.synth(); \ No newline at end of file +app.synth(); diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/appsync-elasticsearch.assets.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/appsync-elasticsearch.assets.json index 6396fedfa0262..14576bb0b5a50 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/appsync-elasticsearch.assets.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/appsync-elasticsearch.assets.json @@ -1,7 +1,7 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { - "08fe8252ae99e2f46d03e04321cb848d70ee9c2656baeb387f3baae1575b1d87": { + "fcad6b907b2ee72d05b9e3af0a8d220115fb800f1839d979919a8e80e5c933e5": { "source": { "path": "appsync-elasticsearch.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "08fe8252ae99e2f46d03e04321cb848d70ee9c2656baeb387f3baae1575b1d87.json", + "objectKey": "fcad6b907b2ee72d05b9e3af0a8d220115fb800f1839d979919a8e80e5c933e5.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/appsync-elasticsearch.template.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/appsync-elasticsearch.template.json index 028edef274be0..25aea7ee34590 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/appsync-elasticsearch.template.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/appsync-elasticsearch.template.json @@ -185,7 +185,7 @@ } } }, - "apidsQuerygetTestsResolver5C6FBB59": { + "apiQueryGetTests5F79F353": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/cdk.out b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/integ.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/integ.json index 357bb3676e3d2..bbb089bc1d1e4 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "testCases": { "integ.graphql-elasticsearch": { "stacks": [ diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/manifest.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/manifest.json index 71d3fb6055567..ec86cc75c0088 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "artifacts": { "appsync-elasticsearch.assets": { "type": "cdk:asset-manifest", @@ -17,7 +17,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}/08fe8252ae99e2f46d03e04321cb848d70ee9c2656baeb387f3baae1575b1d87.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/fcad6b907b2ee72d05b9e3af0a8d220115fb800f1839d979919a8e80e5c933e5.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -81,10 +81,10 @@ "data": "apids4328272F" } ], - "/appsync-elasticsearch/api/ds/QuerygetTestsResolver/Resource": [ + "/appsync-elasticsearch/api/QueryGetTests/Resource": [ { "type": "aws:cdk:logicalId", - "data": "apidsQuerygetTestsResolver5C6FBB59" + "data": "apiQueryGetTests5F79F353" } ], "/appsync-elasticsearch/BootstrapVersion": [ @@ -98,6 +98,15 @@ "type": "aws:cdk:logicalId", "data": "CheckBootstrapVersion" } + ], + "apidsQuerygetTestsResolver5C6FBB59": [ + { + "type": "aws:cdk:logicalId", + "data": "apidsQuerygetTestsResolver5C6FBB59", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } ] }, "displayName": "appsync-elasticsearch" diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/tree.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/tree.json index 90f8169797964..9f3215651373d 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.js.snapshot/tree.json @@ -316,45 +316,45 @@ "fqn": "@aws-cdk/aws-appsync.CfnDataSource", "version": "0.0.0" } - }, - "QuerygetTestsResolver": { - "id": "QuerygetTestsResolver", - "path": "appsync-elasticsearch/api/ds/QuerygetTestsResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "appsync-elasticsearch/api/ds/QuerygetTestsResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "apiC8550315", - "ApiId" - ] - }, - "fieldName": "getTests", - "typeName": "Query", - "dataSourceName": "ds", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\":\"2017-02-28\",\"operation\":\"GET\",\"path\":\"/id/post/_search\",\"params\":{\"headers\":{},\"queryString\":{},\"body\":{\"from\":0,\"size\":50}}}", - "responseMappingTemplate": "{\"version\":\"2017-02-28\",\"operation\":\"GET\",\"path\":\"/id/post/_search\",\"params\":{\"headers\":{},\"queryString\":{},\"body\":{\"from\":0,\"size\":50,\"query\":{\"term\":{\"author\":\"$util.toJson($context.arguments.author)\"}}}}}" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.ElasticsearchDataSource", + "version": "0.0.0" + } + }, + "QueryGetTests": { + "id": "QueryGetTests", + "path": "appsync-elasticsearch/api/QueryGetTests", + "children": { + "Resource": { + "id": "Resource", + "path": "appsync-elasticsearch/api/QueryGetTests/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "apiC8550315", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getTests", + "typeName": "Query", + "dataSourceName": "ds", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\":\"2017-02-28\",\"operation\":\"GET\",\"path\":\"/id/post/_search\",\"params\":{\"headers\":{},\"queryString\":{},\"body\":{\"from\":0,\"size\":50}}}", + "responseMappingTemplate": "{\"version\":\"2017-02-28\",\"operation\":\"GET\",\"path\":\"/id/post/_search\",\"params\":{\"headers\":{},\"queryString\":{},\"body\":{\"from\":0,\"size\":50,\"query\":{\"term\":{\"author\":\"$util.toJson($context.arguments.author)\"}}}}}" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.ElasticsearchDataSource", + "fqn": "@aws-cdk/aws-appsync.Resolver", "version": "0.0.0" } } @@ -391,7 +391,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } } }, diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.ts b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.ts index 933572da29eca..e8b25d9f47538 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.ts +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-elasticsearch.ts @@ -22,12 +22,12 @@ const domain = new es.Domain(stack, 'Domain', { const api = new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), }); const ds = api.addElasticsearchDataSource('ds', domain); -ds.createResolver({ +ds.createResolver('QueryGetTests', { typeName: 'Query', fieldName: 'getTests', requestMappingTemplate: appsync.MappingTemplate.fromString(JSON.stringify({ @@ -63,4 +63,4 @@ ds.createResolver({ })), }); -app.synth(); \ No newline at end of file +app.synth(); diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/aws-appsync-integ.assets.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/aws-appsync-integ.assets.json index e0414901b9572..e865af1460b98 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/aws-appsync-integ.assets.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/aws-appsync-integ.assets.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { "f38244b9028d22d4e265a5b466bdba928d93b5a4ac2b4bbf583309b3f027f044": { "source": { @@ -14,7 +14,7 @@ } } }, - "8d15941ec2e2ee7e1551ec111288fbf5f90d3c8054ccd83a9d3f4995d2475536": { + "828c009f2f1e2d21ce3627f5921a761c1c9b77228bbd5d9723b9a0a92952b49f": { "source": { "path": "aws-appsync-integ.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "8d15941ec2e2ee7e1551ec111288fbf5f90d3c8054ccd83a9d3f4995d2475536.json", + "objectKey": "828c009f2f1e2d21ce3627f5921a761c1c9b77228bbd5d9723b9a0a92952b49f.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/aws-appsync-integ.template.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/aws-appsync-integ.template.json index 1a4e761944b90..2e72be8c91099 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/aws-appsync-integ.template.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/aws-appsync-integ.template.json @@ -153,7 +153,7 @@ } } }, - "ApidsQuerygetTestResolverCCED7EC2": { + "ApiQueryGetTest0BEAD0F2": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -174,7 +174,7 @@ "ApiSchema510EECD7" ] }, - "ApidsQuerygetTestsResolver952F49EE": { + "ApiQueryGetTestsF8C40170": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -195,7 +195,7 @@ "ApiSchema510EECD7" ] }, - "ApidsMutationaddTestResolverBCF0400B": { + "ApiMutationAddTestBF148084": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/cdk.out b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/integ.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/integ.json index 7c2a2229a0b5e..a62bab1947a9f 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "testCases": { "integ.graphql-iam": { "stacks": [ diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/manifest.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/manifest.json index 8b33b79f39dd0..86f747e9a6c80 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "artifacts": { "aws-appsync-integ.assets": { "type": "cdk:asset-manifest", @@ -17,7 +17,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}/8d15941ec2e2ee7e1551ec111288fbf5f90d3c8054ccd83a9d3f4995d2475536.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/828c009f2f1e2d21ce3627f5921a761c1c9b77228bbd5d9723b9a0a92952b49f.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -69,22 +69,22 @@ "data": "Apids0DB53FEA" } ], - "/aws-appsync-integ/Api/ds/QuerygetTestResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetTest/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApidsQuerygetTestResolverCCED7EC2" + "data": "ApiQueryGetTest0BEAD0F2" } ], - "/aws-appsync-integ/Api/ds/QuerygetTestsResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetTests/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApidsQuerygetTestsResolver952F49EE" + "data": "ApiQueryGetTestsF8C40170" } ], - "/aws-appsync-integ/Api/ds/MutationaddTestResolver/Resource": [ + "/aws-appsync-integ/Api/MutationAddTest/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApidsMutationaddTestResolverBCF0400B" + "data": "ApiMutationAddTestBF148084" } ], "/aws-appsync-integ/TestTable/Resource": [ @@ -134,6 +134,33 @@ "type": "aws:cdk:logicalId", "data": "CheckBootstrapVersion" } + ], + "ApidsQuerygetTestResolverCCED7EC2": [ + { + "type": "aws:cdk:logicalId", + "data": "ApidsQuerygetTestResolverCCED7EC2", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApidsQuerygetTestsResolver952F49EE": [ + { + "type": "aws:cdk:logicalId", + "data": "ApidsQuerygetTestsResolver952F49EE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApidsMutationaddTestResolverBCF0400B": [ + { + "type": "aws:cdk:logicalId", + "data": "ApidsMutationaddTestResolverBCF0400B", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } ] }, "displayName": "aws-appsync-integ" diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/tree.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/tree.json index e349d8989099b..1d4edb1992fa7 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.js.snapshot/tree.json @@ -260,115 +260,115 @@ "fqn": "@aws-cdk/aws-appsync.CfnDataSource", "version": "0.0.0" } - }, - "QuerygetTestResolver": { - "id": "QuerygetTestResolver", - "path": "aws-appsync-integ/Api/ds/QuerygetTestResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/ds/QuerygetTestResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getTest", - "typeName": "Query", - "dataSourceName": "testDataSource", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"GetItem\", \"consistentRead\": false, \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.DynamoDbDataSource", + "version": "0.0.0" + } + }, + "QueryGetTest": { + "id": "QueryGetTest", + "path": "aws-appsync-integ/Api/QueryGetTest", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetTest/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getTest", + "typeName": "Query", + "dataSourceName": "testDataSource", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"GetItem\", \"consistentRead\": false, \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", + "responseMappingTemplate": "$util.toJson($ctx.result)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetTestsResolver": { - "id": "QuerygetTestsResolver", - "path": "aws-appsync-integ/Api/ds/QuerygetTestsResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/ds/QuerygetTestsResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getTests", - "typeName": "Query", - "dataSourceName": "testDataSource", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Scan\", \"consistentRead\": false}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetTests": { + "id": "QueryGetTests", + "path": "aws-appsync-integ/Api/QueryGetTests", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetTests/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getTests", + "typeName": "Query", + "dataSourceName": "testDataSource", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Scan\", \"consistentRead\": false}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "MutationaddTestResolver": { - "id": "MutationaddTestResolver", - "path": "aws-appsync-integ/Api/ds/MutationaddTestResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/ds/MutationaddTestResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "addTest", - "typeName": "Mutation", - "dataSourceName": "testDataSource", - "kind": "UNIT", - "requestMappingTemplate": "\n #set($input = $ctx.args.test)\n \n {\n \"version\": \"2017-02-28\",\n \"operation\": \"PutItem\",\n \"key\" : {\n \"id\" : $util.dynamodb.toDynamoDBJson($util.autoId())\n },\n \"attributeValues\": $util.dynamodb.toMapValuesJson($input)\n }", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "MutationAddTest": { + "id": "MutationAddTest", + "path": "aws-appsync-integ/Api/MutationAddTest", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/MutationAddTest/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "addTest", + "typeName": "Mutation", + "dataSourceName": "testDataSource", + "kind": "UNIT", + "requestMappingTemplate": "\n #set($input = $ctx.args.test)\n \n {\n \"version\": \"2017-02-28\",\n \"operation\": \"PutItem\",\n \"key\" : {\n \"id\" : $util.dynamodb.toDynamoDBJson($util.autoId())\n },\n \"attributeValues\": $util.dynamodb.toMapValuesJson($input)\n }", + "responseMappingTemplate": "$util.toJson($ctx.result)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.DynamoDbDataSource", + "fqn": "@aws-cdk/aws-appsync.Resolver", "version": "0.0.0" } } @@ -820,7 +820,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } } }, diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.ts b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.ts index 86496338f585b..b92a78485c3c2 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.ts +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-iam.ts @@ -12,7 +12,7 @@ import { UserPoolDefaultAction, Values, IamResource, - Schema, + SchemaFile, } from '../lib'; /* @@ -38,7 +38,7 @@ const userPool = new UserPool(stack, 'Pool', { const api = new GraphqlApi(stack, 'Api', { name: 'Integ_Test_IAM', - schema: Schema.fromAsset(join(__dirname, 'integ.graphql-iam.graphql')), + schema: SchemaFile.fromAsset(join(__dirname, 'integ.graphql-iam.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: AuthorizationType.USER_POOL, @@ -66,21 +66,21 @@ const testTable = new Table(stack, 'TestTable', { const testDS = api.addDynamoDbDataSource('ds', testTable, { name: 'testDataSource' }); -testDS.createResolver({ +testDS.createResolver('QueryGetTest', { typeName: 'Query', fieldName: 'getTest', requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id'), responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), }); -testDS.createResolver({ +testDS.createResolver('QueryGetTests', { typeName: 'Query', fieldName: 'getTests', requestMappingTemplate: MappingTemplate.dynamoDbScanTable(), responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); -testDS.createResolver({ +testDS.createResolver('MutationAddTest', { typeName: 'Mutation', fieldName: 'addTest', requestMappingTemplate: MappingTemplate.dynamoDbPutItem(PrimaryKey.partition('id').auto(), Values.projecting('test')), diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/appsync-opensearch.assets.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/appsync-opensearch.assets.json index 1a4098ed90364..a7da3cc32abc0 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/appsync-opensearch.assets.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/appsync-opensearch.assets.json @@ -1,7 +1,7 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { - "afad76ea31dfbff09b61eded5f1d5e5fd22e29130ce087d5f25b2a31f470128a": { + "cbf69265acb5253067d9fc78cec3e7b151737dc0ba84d10aedd04a2c12f84bc4": { "source": { "path": "appsync-opensearch.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "afad76ea31dfbff09b61eded5f1d5e5fd22e29130ce087d5f25b2a31f470128a.json", + "objectKey": "cbf69265acb5253067d9fc78cec3e7b151737dc0ba84d10aedd04a2c12f84bc4.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/appsync-opensearch.template.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/appsync-opensearch.template.json index b6e627fd979cb..9b3b8ea1cb382 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/appsync-opensearch.template.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/appsync-opensearch.template.json @@ -182,7 +182,7 @@ } } }, - "apidsQuerygetTestsResolver5C6FBB59": { + "apiQueryGetTests5F79F353": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/cdk.out b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/integ.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/integ.json index 2ff15a8cfcaaa..9082fbbe8ed5d 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "testCases": { "integ.graphql-opensearch": { "stacks": [ diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/manifest.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/manifest.json index c5b4953867628..81e53a3ee447f 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "artifacts": { "appsync-opensearch.assets": { "type": "cdk:asset-manifest", @@ -17,7 +17,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}/afad76ea31dfbff09b61eded5f1d5e5fd22e29130ce087d5f25b2a31f470128a.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/cbf69265acb5253067d9fc78cec3e7b151737dc0ba84d10aedd04a2c12f84bc4.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -81,10 +81,10 @@ "data": "apids4328272F" } ], - "/appsync-opensearch/api/ds/QuerygetTestsResolver/Resource": [ + "/appsync-opensearch/api/QueryGetTests/Resource": [ { "type": "aws:cdk:logicalId", - "data": "apidsQuerygetTestsResolver5C6FBB59" + "data": "apiQueryGetTests5F79F353" } ], "/appsync-opensearch/BootstrapVersion": [ @@ -98,6 +98,15 @@ "type": "aws:cdk:logicalId", "data": "CheckBootstrapVersion" } + ], + "apidsQuerygetTestsResolver5C6FBB59": [ + { + "type": "aws:cdk:logicalId", + "data": "apidsQuerygetTestsResolver5C6FBB59", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } ] }, "displayName": "appsync-opensearch" diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/tree.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/tree.json index e1b3a8f2b034e..7c9f3a92a3545 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.js.snapshot/tree.json @@ -313,45 +313,45 @@ "fqn": "@aws-cdk/aws-appsync.CfnDataSource", "version": "0.0.0" } - }, - "QuerygetTestsResolver": { - "id": "QuerygetTestsResolver", - "path": "appsync-opensearch/api/ds/QuerygetTestsResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "appsync-opensearch/api/ds/QuerygetTestsResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "apiC8550315", - "ApiId" - ] - }, - "fieldName": "getTests", - "typeName": "Query", - "dataSourceName": "ds", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\":\"2017-02-28\",\"operation\":\"GET\",\"path\":\"/id/post/_search\",\"params\":{\"headers\":{},\"queryString\":{},\"body\":{\"from\":0,\"size\":50}}}", - "responseMappingTemplate": "{\"version\":\"2017-02-28\",\"operation\":\"GET\",\"path\":\"/id/post/_search\",\"params\":{\"headers\":{},\"queryString\":{},\"body\":{\"from\":0,\"size\":50,\"query\":{\"term\":{\"author\":\"$util.toJson($context.arguments.author)\"}}}}}" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.OpenSearchDataSource", + "version": "0.0.0" + } + }, + "QueryGetTests": { + "id": "QueryGetTests", + "path": "appsync-opensearch/api/QueryGetTests", + "children": { + "Resource": { + "id": "Resource", + "path": "appsync-opensearch/api/QueryGetTests/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "apiC8550315", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getTests", + "typeName": "Query", + "dataSourceName": "ds", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\":\"2017-02-28\",\"operation\":\"GET\",\"path\":\"/id/post/_search\",\"params\":{\"headers\":{},\"queryString\":{},\"body\":{\"from\":0,\"size\":50}}}", + "responseMappingTemplate": "{\"version\":\"2017-02-28\",\"operation\":\"GET\",\"path\":\"/id/post/_search\",\"params\":{\"headers\":{},\"queryString\":{},\"body\":{\"from\":0,\"size\":50,\"query\":{\"term\":{\"author\":\"$util.toJson($context.arguments.author)\"}}}}}" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.OpenSearchDataSource", + "fqn": "@aws-cdk/aws-appsync.Resolver", "version": "0.0.0" } } @@ -388,7 +388,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } } }, diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.ts b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.ts index a8c8984c04e14..67d283b7ca1e6 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.ts +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql-opensearch.ts @@ -22,12 +22,12 @@ const domain = new opensearch.Domain(stack, 'Domain', { const api = new appsync.GraphqlApi(stack, 'api', { name: 'api', - schema: appsync.Schema.fromAsset(path.join(__dirname, 'appsync.test.graphql')), + schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'appsync.test.graphql')), }); const ds = api.addOpenSearchDataSource('ds', domain); -ds.createResolver({ +ds.createResolver('QueryGetTests', { typeName: 'Query', fieldName: 'getTests', requestMappingTemplate: appsync.MappingTemplate.fromString(JSON.stringify({ diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql-schema.ts b/packages/@aws-cdk/aws-appsync/test/integ.graphql-schema.ts deleted file mode 100644 index 6475b0bfae971..0000000000000 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql-schema.ts +++ /dev/null @@ -1,133 +0,0 @@ -import * as db from '@aws-cdk/aws-dynamodb'; -import * as cdk from '@aws-cdk/core'; -import * as appsync from '../lib'; -import * as ObjectType from './object-type-definitions'; -import * as ScalarType from './scalar-type-defintions'; - -/* - * Creates an Appsync GraphQL API and schema in a code-first approach. - * - * Stack verification steps: - * Deploy stack, get api key and endpoinScalarType. Check if schema connects to data source. - * - * -- bash verify.integ.graphql-schema.sh --start -- start -- - * -- aws appsync list-graphql-apis -- obtain apiId & endpoint -- - * -- aws appsync list-api-keys --api-id [apiId] -- obtain api key -- - * -- bash verify.integ.graphql-schema.sh --check [apiKey] [url] -- check if success -- - * -- bash verify.integ.graphql-schema.sh --clean -- clean -- - */ -const app = new cdk.App(); -const stack = new cdk.Stack(app, 'code-first-schema'); - -const schema = new appsync.Schema(); - -const node = new appsync.InterfaceType('Node', { - definition: { - created: ScalarType.string, - edited: ScalarType.string, - id: ScalarType.required_id, - }, -}); - -schema.addType(node); - -const api = new appsync.GraphqlApi(stack, 'code-first-api', { - name: 'api', - schema: schema, -}); - -const table = new db.Table(stack, 'table', { - partitionKey: { - name: 'id', - type: db.AttributeType.STRING, - }, -}); - -const tableDS = api.addDynamoDbDataSource('planets', table); - -const planet = ObjectType.planet; -schema.addType(planet); - -const species = api.addType(new appsync.ObjectType('Species', { - interfaceTypes: [node], - definition: { - name: ScalarType.string, - classification: ScalarType.string, - designation: ScalarType.string, - averageHeight: ScalarType.float, - averageLifespan: ScalarType.int, - eyeColors: ScalarType.list_string, - hairColors: ScalarType.list_string, - skinColors: ScalarType.list_string, - language: ScalarType.string, - homeworld: planet.attribute(), - }, -})); - -api.addQuery('getPlanets', new appsync.ResolvableField({ - returnType: planet.attribute({ isList: true }), - dataSource: tableDS, - requestMappingTemplate: appsync.MappingTemplate.dynamoDbScanTable(), - responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultList(), -})); - -/* ATTRIBUTES */ -const name = new appsync.Assign('name', '$context.arguments.name'); -const diameter = new appsync.Assign('diameter', '$context.arguments.diameter'); -const rotationPeriod = new appsync.Assign('rotationPeriod', '$context.arguments.rotationPeriod'); -const orbitalPeriod = new appsync.Assign('orbitalPeriod', '$context.arguments.orbitalPeriod'); -const gravity = new appsync.Assign('gravityPeriod', '$context.arguments.gravity'); -const population = new appsync.Assign('population', '$context.arguments.population'); -const climates = new appsync.Assign('climates', '$context.arguments.climates'); -const terrains = new appsync.Assign('terrains', '$context.arguments.terrains'); -const surfaceWater = new appsync.Assign('surfaceWater', '$context.arguments.surfaceWater'); -api.addMutation('addPlanet', new appsync.ResolvableField({ - returnType: planet.attribute(), - args: { - name: ScalarType.string, - diameter: ScalarType.int, - rotationPeriod: ScalarType.int, - orbitalPeriod: ScalarType.int, - gravity: ScalarType.string, - population: ScalarType.list_string, - climates: ScalarType.list_string, - terrains: ScalarType.list_string, - surfaceWater: ScalarType.float, - }, - dataSource: tableDS, - requestMappingTemplate: appsync.MappingTemplate.dynamoDbPutItem( - appsync.PrimaryKey.partition('id').auto(), new appsync.AttributeValues('$context.arguments', - [name, diameter, rotationPeriod, orbitalPeriod, gravity, population, climates, terrains, surfaceWater], - ), - ), - responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultItem(), -})); - -api.addSubscription('addedPlanets', new appsync.Field({ - returnType: planet.attribute(), - args: { id: ScalarType.required_id }, - directives: [appsync.Directive.subscribe('addPlanet')], -})); -api.addType(new appsync.InputType('AwesomeInput', { - definition: { awesomeInput: ScalarType.string }, -})); - -api.addType(new appsync.EnumType('Episodes', { - definition: [ - 'The_Phantom_Menace', - 'Attack_of_the_Clones', - 'Revenge_of_the_Sith', - 'A_New_Hope', - 'The_Empire_Strikes_Back', - 'Return_of_the_Jedi', - 'The_Force_Awakens', - 'The_Last_Jedi', - 'The_Rise_of_Skywalker', - ], -})); - -api.addType(new appsync.UnionType('Union', { - definition: [species, planet], -})); - -app.synth(); \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/aws-appsync-integ.assets.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/aws-appsync-integ.assets.json index c32e1bef4959b..1d67950b15b71 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/aws-appsync-integ.assets.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/aws-appsync-integ.assets.json @@ -1,7 +1,7 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { - "5965527058acb79443e765fbe78cf2b94e89646caa2a13566464ecfd01ab4f33": { + "f0839c62a66861871198b19fa32c08fe6fdf19ee3c62c5204b12cee9c9f5f22d": { "source": { "path": "aws-appsync-integ.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "5965527058acb79443e765fbe78cf2b94e89646caa2a13566464ecfd01ab4f33.json", + "objectKey": "f0839c62a66861871198b19fa32c08fe6fdf19ee3c62c5204b12cee9c9f5f22d.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/aws-appsync-integ.template.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/aws-appsync-integ.template.json index e61ff4d7d2c7a..d6daf0ddedafb 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/aws-appsync-integ.template.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/aws-appsync-integ.template.json @@ -92,7 +92,7 @@ "Type": "NONE" } }, - "ApinoneQuerygetServiceVersionResolver336A3C2C": { + "ApiQuerygetServiceVersionDA048589": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -201,7 +201,206 @@ } } }, - "ApicustomerDsQuerygetCustomersResolverA74C8A2E": { + "ApiorderDsServiceRoleCC2040C0": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appsync.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "ApiorderDsServiceRoleDefaultPolicy3315FCF4": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "dynamodb:BatchGetItem", + "dynamodb:BatchWriteItem", + "dynamodb:ConditionCheckItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + "dynamodb:GetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:PutItem", + "dynamodb:Query", + "dynamodb:Scan", + "dynamodb:UpdateItem" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::GetAtt": [ + "OrderTable416EB896", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "OrderTable416EB896", + "Arn" + ] + }, + "/index/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ApiorderDsServiceRoleDefaultPolicy3315FCF4", + "Roles": [ + { + "Ref": "ApiorderDsServiceRoleCC2040C0" + } + ] + } + }, + "ApiorderDsB50C8AAD": { + "Type": "AWS::AppSync::DataSource", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "Name": "Order", + "Type": "AMAZON_DYNAMODB", + "DynamoDBConfig": { + "AwsRegion": { + "Ref": "AWS::Region" + }, + "TableName": { + "Ref": "OrderTable416EB896" + } + }, + "ServiceRoleArn": { + "Fn::GetAtt": [ + "ApiorderDsServiceRoleCC2040C0", + "Arn" + ] + } + } + }, + "ApipaymentDsServiceRole0DAC58D6": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appsync.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "ApipaymentDsServiceRoleDefaultPolicy528E42B0": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "dynamodb:BatchGetItem", + "dynamodb:BatchWriteItem", + "dynamodb:ConditionCheckItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + "dynamodb:GetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:PutItem", + "dynamodb:Query", + "dynamodb:Scan", + "dynamodb:UpdateItem" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":dynamodb:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":table/PaymentTable" + ] + ] + }, + { + "Ref": "AWS::NoValue" + } + ] + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "ApipaymentDsServiceRoleDefaultPolicy528E42B0", + "Roles": [ + { + "Ref": "ApipaymentDsServiceRole0DAC58D6" + } + ] + } + }, + "ApipaymentDs95C7AC36": { + "Type": "AWS::AppSync::DataSource", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "Name": "Payment", + "Type": "AMAZON_DYNAMODB", + "DynamoDBConfig": { + "AwsRegion": { + "Ref": "AWS::Region" + }, + "TableName": "PaymentTable" + }, + "ServiceRoleArn": { + "Fn::GetAtt": [ + "ApipaymentDsServiceRole0DAC58D6", + "Arn" + ] + } + } + }, + "ApiQueryGetCustomersAD7B06C3": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -222,7 +421,7 @@ "ApiSchema510EECD7" ] }, - "ApicustomerDsQuerygetCustomerResolver3649A130": { + "ApiQueryGetCustomer5EC5BDE8": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -243,7 +442,7 @@ "ApiSchema510EECD7" ] }, - "ApicustomerDsQuerygetCustomersNotConsistentResolver66499326": { + "ApiQueryGetCusomtersNotConsistent851627D3": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -264,7 +463,7 @@ "ApiSchema510EECD7" ] }, - "ApicustomerDsQuerygetCustomerNotConsistentResolverE173BDA3": { + "ApiQueryGetCustomerNotConsistent090667B1": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -285,7 +484,7 @@ "ApiSchema510EECD7" ] }, - "ApicustomerDsQuerygetCustomersConsistentResolver302CA74B": { + "ApiQueryGetCustomersConsistentCBD09D98": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -306,7 +505,7 @@ "ApiSchema510EECD7" ] }, - "ApicustomerDsQuerygetCustomerConsistentResolver0A30CD6C": { + "ApiQueryGetCustomerConsistentAE365D03": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -327,7 +526,7 @@ "ApiSchema510EECD7" ] }, - "ApicustomerDsMutationaddCustomerResolver4DE5B517": { + "ApiMutationAddCustomer4E43DA9D": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -348,7 +547,7 @@ "ApiSchema510EECD7" ] }, - "ApicustomerDsMutationsaveCustomerResolver241DD231": { + "ApiMutationSaveCustomer9E1B960E": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -369,7 +568,7 @@ "ApiSchema510EECD7" ] }, - "ApicustomerDsMutationsaveCustomerWithFirstOrderResolver7DE2CBC8": { + "ApiMutationSaveCustomerWithFirstOrder9E0E3BDE": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -390,7 +589,7 @@ "ApiSchema510EECD7" ] }, - "ApicustomerDsMutationremoveCustomerResolverAD3AE7F5": { + "ApiMutationRemoveCustomer9CB404E8": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -411,106 +610,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsServiceRoleCC2040C0": { - "Type": "AWS::IAM::Role", - "Properties": { - "AssumeRolePolicyDocument": { - "Statement": [ - { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": { - "Service": "appsync.amazonaws.com" - } - } - ], - "Version": "2012-10-17" - } - } - }, - "ApiorderDsServiceRoleDefaultPolicy3315FCF4": { - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyDocument": { - "Statement": [ - { - "Action": [ - "dynamodb:BatchGetItem", - "dynamodb:BatchWriteItem", - "dynamodb:ConditionCheckItem", - "dynamodb:DeleteItem", - "dynamodb:DescribeTable", - "dynamodb:GetItem", - "dynamodb:GetRecords", - "dynamodb:GetShardIterator", - "dynamodb:PutItem", - "dynamodb:Query", - "dynamodb:Scan", - "dynamodb:UpdateItem" - ], - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "OrderTable416EB896", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "OrderTable416EB896", - "Arn" - ] - }, - "/index/*" - ] - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "PolicyName": "ApiorderDsServiceRoleDefaultPolicy3315FCF4", - "Roles": [ - { - "Ref": "ApiorderDsServiceRoleCC2040C0" - } - ] - } - }, - "ApiorderDsB50C8AAD": { - "Type": "AWS::AppSync::DataSource", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "Name": "Order", - "Type": "AMAZON_DYNAMODB", - "DynamoDBConfig": { - "AwsRegion": { - "Ref": "AWS::Region" - }, - "TableName": { - "Ref": "OrderTable416EB896" - } - }, - "ServiceRoleArn": { - "Fn::GetAtt": [ - "ApiorderDsServiceRoleCC2040C0", - "Arn" - ] - } - } - }, - "ApiorderDsQuerygetCustomerOrdersEqResolverEF9D5350": { + "ApiQueryGetCustomerOrdersEq8D77201B": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -531,7 +631,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersEqResolverE58570FF": { + "ApiQueryGetOrderCustomersEq37D9DEE0": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -552,7 +652,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersLtResolver909F3D8F": { + "ApiQueryGetCustomerOrdersLt0C55634C": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -573,7 +673,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersLtResolver77468800": { + "ApiQueryGetOrderCustomersLt4AB5E0F8": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -594,7 +694,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersLeResolverF230A8BE": { + "ApiQueryGetCustomerOrdersLe15936B5B": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -615,7 +715,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersLeResolver836A0389": { + "ApiQueryGetOrderCustomersLeE726F374": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -636,7 +736,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersGtResolverF01F806B": { + "ApiQueryGetCustomerOrdersGtAABE2A40": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -657,7 +757,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersGtResolver3197CCFE": { + "ApiQueryGetOrderCustomersGtB37E8428": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -678,7 +778,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersGeResolver63CAD303": { + "ApiQueryGetCustomerOrdersGeD1854D76": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -699,7 +799,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersGeResolver0B78B0B4": { + "ApiQueryGetOrderCustomersGe1790C495": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -720,7 +820,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersNotConsistentEqResolver242A8314": { + "ApiQueryGetCustomerOrdersNotConsistentEqD733058C": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -741,7 +841,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersNotConsistentEqResolver53CBADD9": { + "ApiQueryGetOrderCustomersNotConsistentEq3BE248FE": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -762,7 +862,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersNotConsistentLtResolver5259538F": { + "ApiQueryGetCustomerOrdersNotConsistentLt7B43587C": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -783,7 +883,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersNotConsistentLtResolver322C467A": { + "ApiQueryGetOrderCustomersNotConsistentLt3B88F412": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -804,7 +904,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersNotConsistentLeResolver2DB38FDE": { + "ApiQueryGetCustomerOrdersNotConsistentLe8817EDDB": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -825,7 +925,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersNotConsistentLeResolver8A28C79C": { + "ApiQueryGetOrderCustomersNotConsistentLe09B90BC1": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -846,7 +946,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersNotConsistentGtResolverD7C416AD": { + "ApiQueryGetCustomerOrdersNotConsistentGt92879DB9": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -867,7 +967,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersNotConsistentGtResolver91BD36C9": { + "ApiQueryGetOrderCustomersNotConsistentGt6C9F2F8F": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -888,7 +988,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersNotConsistentGeResolver0E9FE662": { + "ApiQueryGetCustomerOrdersNotConsistentGe8F8AA1E1": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -909,7 +1009,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersNotConsistentGeResolver555023D7": { + "ApiQueryGetOrderCustomersNotConsistentGe76FFC40E": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -930,7 +1030,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersConsistentEqResolver0A400223": { + "ApiQueryGetCustomerOrdersConsistentEq653D75B6": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -951,7 +1051,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersConsistentEqResolverF54BDAB4": { + "ApiQueryGetOrderCustomersConsistentEq6C9CAA47": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -972,7 +1072,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersConsistentLtResolver73E118EE": { + "ApiQueryGetCustomerOrdersConsistentLt250BF7EC": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -993,7 +1093,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersConsistentLtResolver8B18EA77": { + "ApiQueryGetOrderCustomersConsistentLtB4B34793": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1014,7 +1114,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersConsistentLeResolverEA8D11EE": { + "ApiQueryGetCustomerOrdersConsistentLeECDEAB1B": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1035,7 +1135,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersConsistentLeResolverB027B939": { + "ApiQueryGetOrderCustomersConsistentLeA46A454C": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1056,7 +1156,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersConsistentGtResolverD927E07A": { + "ApiQueryGetCustomerOrdersConsistentGtBC4B2EDF": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1077,7 +1177,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersConsistentGtResolver58B23E21": { + "ApiQueryGetOrderCustomersConsistentGt8185C8F7": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1098,7 +1198,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersConsistentGeResolverB8F83696": { + "ApiQueryGetCustomerOrdersConsistentGeB76BCC43": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1119,7 +1219,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersConsistentGeResolver674A5CD5": { + "ApiQueryGetOrderCustomersConsistentGeCE4A2D21": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1140,7 +1240,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersFilterResolverCD2B8747": { + "ApiQueryGetCustomerOrdersFilter854FF70B": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1161,7 +1261,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetCustomerOrdersBetweenResolver7DEE368E": { + "ApiQueryGetCustomerOrdersBetween40B365B9": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1182,7 +1282,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersFilterResolver628CC68D": { + "ApiQueryGetOrderCustomersFilter4E08981B": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1203,7 +1303,7 @@ "ApiSchema510EECD7" ] }, - "ApiorderDsQuerygetOrderCustomersBetweenResolver2048F3CB": { + "ApiQueryGetOrderCustomersBetween7C2EFCFE": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1224,107 +1324,7 @@ "ApiSchema510EECD7" ] }, - "ApipaymentDsServiceRole0DAC58D6": { - "Type": "AWS::IAM::Role", - "Properties": { - "AssumeRolePolicyDocument": { - "Statement": [ - { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": { - "Service": "appsync.amazonaws.com" - } - } - ], - "Version": "2012-10-17" - } - } - }, - "ApipaymentDsServiceRoleDefaultPolicy528E42B0": { - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyDocument": { - "Statement": [ - { - "Action": [ - "dynamodb:BatchGetItem", - "dynamodb:BatchWriteItem", - "dynamodb:ConditionCheckItem", - "dynamodb:DeleteItem", - "dynamodb:DescribeTable", - "dynamodb:GetItem", - "dynamodb:GetRecords", - "dynamodb:GetShardIterator", - "dynamodb:PutItem", - "dynamodb:Query", - "dynamodb:Scan", - "dynamodb:UpdateItem" - ], - "Effect": "Allow", - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":dynamodb:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":table/PaymentTable" - ] - ] - }, - { - "Ref": "AWS::NoValue" - } - ] - } - ], - "Version": "2012-10-17" - }, - "PolicyName": "ApipaymentDsServiceRoleDefaultPolicy528E42B0", - "Roles": [ - { - "Ref": "ApipaymentDsServiceRole0DAC58D6" - } - ] - } - }, - "ApipaymentDs95C7AC36": { - "Type": "AWS::AppSync::DataSource", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "Name": "Payment", - "Type": "AMAZON_DYNAMODB", - "DynamoDBConfig": { - "AwsRegion": { - "Ref": "AWS::Region" - }, - "TableName": "PaymentTable" - }, - "ServiceRoleArn": { - "Fn::GetAtt": [ - "ApipaymentDsServiceRole0DAC58D6", - "Arn" - ] - } - } - }, - "ApipaymentDsQuerygetPaymentResolverD172BFC9": { + "ApiQueryGetPayment26F71513": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1345,7 +1345,7 @@ "ApiSchema510EECD7" ] }, - "ApipaymentDsQuerygetPaymentConsistentResolver05C2ACB8": { + "ApiQueryGetPaymentConsistent0440A8CE": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1366,7 +1366,7 @@ "ApiSchema510EECD7" ] }, - "ApipaymentDsMutationsavePaymentResolverE09FE5BB": { + "ApiMutationSavePayment63C236F7": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { @@ -1426,7 +1426,7 @@ } } }, - "ApidsMutationdoPostOnAwsResolver9583D8A3": { + "ApiMutationDoPostOnAws6DBBF12B": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/cdk.out b/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/integ.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/integ.json index 7ea468371e6eb..0d615ad95144d 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "testCases": { "integ.graphql": { "stacks": [ diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/manifest.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/manifest.json index c0fca1d7119a2..5e7edc082b402 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "artifacts": { "aws-appsync-integ.assets": { "type": "cdk:asset-manifest", @@ -17,7 +17,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}/5965527058acb79443e765fbe78cf2b94e89646caa2a13566464ecfd01ab4f33.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/f0839c62a66861871198b19fa32c08fe6fdf19ee3c62c5204b12cee9c9f5f22d.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -63,10 +63,10 @@ "data": "Apinone1F55F3F3" } ], - "/aws-appsync-integ/Api/none/QuerygetServiceVersionResolver/Resource": [ + "/aws-appsync-integ/Api/QuerygetServiceVersion/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApinoneQuerygetServiceVersionResolver336A3C2C" + "data": "ApiQuerygetServiceVersionDA048589" } ], "/aws-appsync-integ/Api/customerDs/ServiceRole/Resource": [ @@ -87,322 +87,322 @@ "data": "ApicustomerDsFE73DAC5" } ], - "/aws-appsync-integ/Api/customerDs/QuerygetCustomersResolver/Resource": [ + "/aws-appsync-integ/Api/orderDs/ServiceRole/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApicustomerDsQuerygetCustomersResolverA74C8A2E" + "data": "ApiorderDsServiceRoleCC2040C0" } ], - "/aws-appsync-integ/Api/customerDs/QuerygetCustomerResolver/Resource": [ + "/aws-appsync-integ/Api/orderDs/ServiceRole/DefaultPolicy/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApicustomerDsQuerygetCustomerResolver3649A130" + "data": "ApiorderDsServiceRoleDefaultPolicy3315FCF4" } ], - "/aws-appsync-integ/Api/customerDs/QuerygetCustomersNotConsistentResolver/Resource": [ + "/aws-appsync-integ/Api/orderDs/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApicustomerDsQuerygetCustomersNotConsistentResolver66499326" + "data": "ApiorderDsB50C8AAD" } ], - "/aws-appsync-integ/Api/customerDs/QuerygetCustomerNotConsistentResolver/Resource": [ + "/aws-appsync-integ/Api/paymentDs/ServiceRole/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApicustomerDsQuerygetCustomerNotConsistentResolverE173BDA3" + "data": "ApipaymentDsServiceRole0DAC58D6" } ], - "/aws-appsync-integ/Api/customerDs/QuerygetCustomersConsistentResolver/Resource": [ + "/aws-appsync-integ/Api/paymentDs/ServiceRole/DefaultPolicy/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApicustomerDsQuerygetCustomersConsistentResolver302CA74B" + "data": "ApipaymentDsServiceRoleDefaultPolicy528E42B0" } ], - "/aws-appsync-integ/Api/customerDs/QuerygetCustomerConsistentResolver/Resource": [ + "/aws-appsync-integ/Api/paymentDs/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApicustomerDsQuerygetCustomerConsistentResolver0A30CD6C" + "data": "ApipaymentDs95C7AC36" } ], - "/aws-appsync-integ/Api/customerDs/MutationaddCustomerResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomers/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApicustomerDsMutationaddCustomerResolver4DE5B517" + "data": "ApiQueryGetCustomersAD7B06C3" } ], - "/aws-appsync-integ/Api/customerDs/MutationsaveCustomerResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomer/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApicustomerDsMutationsaveCustomerResolver241DD231" + "data": "ApiQueryGetCustomer5EC5BDE8" } ], - "/aws-appsync-integ/Api/customerDs/MutationsaveCustomerWithFirstOrderResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCusomtersNotConsistent/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApicustomerDsMutationsaveCustomerWithFirstOrderResolver7DE2CBC8" + "data": "ApiQueryGetCusomtersNotConsistent851627D3" } ], - "/aws-appsync-integ/Api/customerDs/MutationremoveCustomerResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerNotConsistent/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApicustomerDsMutationremoveCustomerResolverAD3AE7F5" + "data": "ApiQueryGetCustomerNotConsistent090667B1" } ], - "/aws-appsync-integ/Api/orderDs/ServiceRole/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomersConsistent/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsServiceRoleCC2040C0" + "data": "ApiQueryGetCustomersConsistentCBD09D98" } ], - "/aws-appsync-integ/Api/orderDs/ServiceRole/DefaultPolicy/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerConsistent/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsServiceRoleDefaultPolicy3315FCF4" + "data": "ApiQueryGetCustomerConsistentAE365D03" } ], - "/aws-appsync-integ/Api/orderDs/Resource": [ + "/aws-appsync-integ/Api/MutationAddCustomer/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsB50C8AAD" + "data": "ApiMutationAddCustomer4E43DA9D" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersEqResolver/Resource": [ + "/aws-appsync-integ/Api/MutationSaveCustomer/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersEqResolverEF9D5350" + "data": "ApiMutationSaveCustomer9E1B960E" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersEqResolver/Resource": [ + "/aws-appsync-integ/Api/MutationSaveCustomerWithFirstOrder/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersEqResolverE58570FF" + "data": "ApiMutationSaveCustomerWithFirstOrder9E0E3BDE" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersLtResolver/Resource": [ + "/aws-appsync-integ/Api/MutationRemoveCustomer/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersLtResolver909F3D8F" + "data": "ApiMutationRemoveCustomer9CB404E8" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersLtResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersEq/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersLtResolver77468800" + "data": "ApiQueryGetCustomerOrdersEq8D77201B" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersLeResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersEq/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersLeResolverF230A8BE" + "data": "ApiQueryGetOrderCustomersEq37D9DEE0" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersLeResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersLt/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersLeResolver836A0389" + "data": "ApiQueryGetCustomerOrdersLt0C55634C" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersGtResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersLt/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersGtResolverF01F806B" + "data": "ApiQueryGetOrderCustomersLt4AB5E0F8" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersGtResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersLe/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersGtResolver3197CCFE" + "data": "ApiQueryGetCustomerOrdersLe15936B5B" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersGeResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersLe/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersGeResolver63CAD303" + "data": "ApiQueryGetOrderCustomersLeE726F374" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersGeResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersGt/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersGeResolver0B78B0B4" + "data": "ApiQueryGetCustomerOrdersGtAABE2A40" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentEqResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersGt/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersNotConsistentEqResolver242A8314" + "data": "ApiQueryGetOrderCustomersGtB37E8428" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentEqResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersGe/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersNotConsistentEqResolver53CBADD9" + "data": "ApiQueryGetCustomerOrdersGeD1854D76" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentLtResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersGe/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersNotConsistentLtResolver5259538F" + "data": "ApiQueryGetOrderCustomersGe1790C495" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentLtResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentEq/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersNotConsistentLtResolver322C467A" + "data": "ApiQueryGetCustomerOrdersNotConsistentEqD733058C" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentLeResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentEq/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersNotConsistentLeResolver2DB38FDE" + "data": "ApiQueryGetOrderCustomersNotConsistentEq3BE248FE" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentLeResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentLt/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersNotConsistentLeResolver8A28C79C" + "data": "ApiQueryGetCustomerOrdersNotConsistentLt7B43587C" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentGtResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentLt/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersNotConsistentGtResolverD7C416AD" + "data": "ApiQueryGetOrderCustomersNotConsistentLt3B88F412" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentGtResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentLe/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersNotConsistentGtResolver91BD36C9" + "data": "ApiQueryGetCustomerOrdersNotConsistentLe8817EDDB" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentGeResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentLe/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersNotConsistentGeResolver0E9FE662" + "data": "ApiQueryGetOrderCustomersNotConsistentLe09B90BC1" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentGeResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentGt/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersNotConsistentGeResolver555023D7" + "data": "ApiQueryGetCustomerOrdersNotConsistentGt92879DB9" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentEqResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentGt/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersConsistentEqResolver0A400223" + "data": "ApiQueryGetOrderCustomersNotConsistentGt6C9F2F8F" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentEqResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentGe/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersConsistentEqResolverF54BDAB4" + "data": "ApiQueryGetCustomerOrdersNotConsistentGe8F8AA1E1" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentLtResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentGe/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersConsistentLtResolver73E118EE" + "data": "ApiQueryGetOrderCustomersNotConsistentGe76FFC40E" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentLtResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentEq/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersConsistentLtResolver8B18EA77" + "data": "ApiQueryGetCustomerOrdersConsistentEq653D75B6" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentLeResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersConsistentEq/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersConsistentLeResolverEA8D11EE" + "data": "ApiQueryGetOrderCustomersConsistentEq6C9CAA47" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentLeResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentLt/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersConsistentLeResolverB027B939" + "data": "ApiQueryGetCustomerOrdersConsistentLt250BF7EC" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentGtResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersConsistentLt/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersConsistentGtResolverD927E07A" + "data": "ApiQueryGetOrderCustomersConsistentLtB4B34793" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentGtResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentLe/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersConsistentGtResolver58B23E21" + "data": "ApiQueryGetCustomerOrdersConsistentLeECDEAB1B" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentGeResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersConsistentLe/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersConsistentGeResolverB8F83696" + "data": "ApiQueryGetOrderCustomersConsistentLeA46A454C" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentGeResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentGt/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersConsistentGeResolver674A5CD5" + "data": "ApiQueryGetCustomerOrdersConsistentGtBC4B2EDF" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersFilterResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersConsistentGt/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersFilterResolverCD2B8747" + "data": "ApiQueryGetOrderCustomersConsistentGt8185C8F7" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersBetweenResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentGe/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetCustomerOrdersBetweenResolver7DEE368E" + "data": "ApiQueryGetCustomerOrdersConsistentGeB76BCC43" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersFilterResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersConsistentGe/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersFilterResolver628CC68D" + "data": "ApiQueryGetOrderCustomersConsistentGeCE4A2D21" } ], - "/aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersBetweenResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersFilter/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApiorderDsQuerygetOrderCustomersBetweenResolver2048F3CB" + "data": "ApiQueryGetCustomerOrdersFilter854FF70B" } ], - "/aws-appsync-integ/Api/paymentDs/ServiceRole/Resource": [ + "/aws-appsync-integ/Api/QueryGetCustomerOrdersBetween/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApipaymentDsServiceRole0DAC58D6" + "data": "ApiQueryGetCustomerOrdersBetween40B365B9" } ], - "/aws-appsync-integ/Api/paymentDs/ServiceRole/DefaultPolicy/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersFilter/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApipaymentDsServiceRoleDefaultPolicy528E42B0" + "data": "ApiQueryGetOrderCustomersFilter4E08981B" } ], - "/aws-appsync-integ/Api/paymentDs/Resource": [ + "/aws-appsync-integ/Api/QueryGetOrderCustomersBetween/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApipaymentDs95C7AC36" + "data": "ApiQueryGetOrderCustomersBetween7C2EFCFE" } ], - "/aws-appsync-integ/Api/paymentDs/QuerygetPaymentResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetPayment/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApipaymentDsQuerygetPaymentResolverD172BFC9" + "data": "ApiQueryGetPayment26F71513" } ], - "/aws-appsync-integ/Api/paymentDs/QuerygetPaymentConsistentResolver/Resource": [ + "/aws-appsync-integ/Api/QueryGetPaymentConsistent/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApipaymentDsQuerygetPaymentConsistentResolver05C2ACB8" + "data": "ApiQueryGetPaymentConsistent0440A8CE" } ], - "/aws-appsync-integ/Api/paymentDs/MutationsavePaymentResolver/Resource": [ + "/aws-appsync-integ/Api/MutationSavePayment/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApipaymentDsMutationsavePaymentResolverE09FE5BB" + "data": "ApiMutationSavePayment63C236F7" } ], "/aws-appsync-integ/Api/ds/ServiceRole/Resource": [ @@ -417,10 +417,10 @@ "data": "Apids0DB53FEA" } ], - "/aws-appsync-integ/Api/ds/MutationdoPostOnAwsResolver/Resource": [ + "/aws-appsync-integ/Api/MutationDoPostOnAws/Resource": [ { "type": "aws:cdk:logicalId", - "data": "ApidsMutationdoPostOnAwsResolver9583D8A3" + "data": "ApiMutationDoPostOnAws6DBBF12B" } ], "/aws-appsync-integ/CustomerTable/Resource": [ @@ -452,6 +452,447 @@ "type": "aws:cdk:logicalId", "data": "CheckBootstrapVersion" } + ], + "ApinoneQuerygetServiceVersionResolver336A3C2C": [ + { + "type": "aws:cdk:logicalId", + "data": "ApinoneQuerygetServiceVersionResolver336A3C2C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApicustomerDsQuerygetCustomersResolverA74C8A2E": [ + { + "type": "aws:cdk:logicalId", + "data": "ApicustomerDsQuerygetCustomersResolverA74C8A2E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApicustomerDsQuerygetCustomerResolver3649A130": [ + { + "type": "aws:cdk:logicalId", + "data": "ApicustomerDsQuerygetCustomerResolver3649A130", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApicustomerDsQuerygetCustomersNotConsistentResolver66499326": [ + { + "type": "aws:cdk:logicalId", + "data": "ApicustomerDsQuerygetCustomersNotConsistentResolver66499326", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApicustomerDsQuerygetCustomerNotConsistentResolverE173BDA3": [ + { + "type": "aws:cdk:logicalId", + "data": "ApicustomerDsQuerygetCustomerNotConsistentResolverE173BDA3", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApicustomerDsQuerygetCustomersConsistentResolver302CA74B": [ + { + "type": "aws:cdk:logicalId", + "data": "ApicustomerDsQuerygetCustomersConsistentResolver302CA74B", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApicustomerDsQuerygetCustomerConsistentResolver0A30CD6C": [ + { + "type": "aws:cdk:logicalId", + "data": "ApicustomerDsQuerygetCustomerConsistentResolver0A30CD6C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApicustomerDsMutationaddCustomerResolver4DE5B517": [ + { + "type": "aws:cdk:logicalId", + "data": "ApicustomerDsMutationaddCustomerResolver4DE5B517", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApicustomerDsMutationsaveCustomerResolver241DD231": [ + { + "type": "aws:cdk:logicalId", + "data": "ApicustomerDsMutationsaveCustomerResolver241DD231", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApicustomerDsMutationsaveCustomerWithFirstOrderResolver7DE2CBC8": [ + { + "type": "aws:cdk:logicalId", + "data": "ApicustomerDsMutationsaveCustomerWithFirstOrderResolver7DE2CBC8", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApicustomerDsMutationremoveCustomerResolverAD3AE7F5": [ + { + "type": "aws:cdk:logicalId", + "data": "ApicustomerDsMutationremoveCustomerResolverAD3AE7F5", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersEqResolverEF9D5350": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersEqResolverEF9D5350", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersEqResolverE58570FF": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersEqResolverE58570FF", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersLtResolver909F3D8F": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersLtResolver909F3D8F", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersLtResolver77468800": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersLtResolver77468800", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersLeResolverF230A8BE": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersLeResolverF230A8BE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersLeResolver836A0389": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersLeResolver836A0389", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersGtResolverF01F806B": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersGtResolverF01F806B", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersGtResolver3197CCFE": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersGtResolver3197CCFE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersGeResolver63CAD303": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersGeResolver63CAD303", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersGeResolver0B78B0B4": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersGeResolver0B78B0B4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersNotConsistentEqResolver242A8314": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersNotConsistentEqResolver242A8314", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersNotConsistentEqResolver53CBADD9": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersNotConsistentEqResolver53CBADD9", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersNotConsistentLtResolver5259538F": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersNotConsistentLtResolver5259538F", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersNotConsistentLtResolver322C467A": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersNotConsistentLtResolver322C467A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersNotConsistentLeResolver2DB38FDE": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersNotConsistentLeResolver2DB38FDE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersNotConsistentLeResolver8A28C79C": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersNotConsistentLeResolver8A28C79C", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersNotConsistentGtResolverD7C416AD": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersNotConsistentGtResolverD7C416AD", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersNotConsistentGtResolver91BD36C9": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersNotConsistentGtResolver91BD36C9", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersNotConsistentGeResolver0E9FE662": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersNotConsistentGeResolver0E9FE662", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersNotConsistentGeResolver555023D7": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersNotConsistentGeResolver555023D7", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersConsistentEqResolver0A400223": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersConsistentEqResolver0A400223", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersConsistentEqResolverF54BDAB4": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersConsistentEqResolverF54BDAB4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersConsistentLtResolver73E118EE": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersConsistentLtResolver73E118EE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersConsistentLtResolver8B18EA77": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersConsistentLtResolver8B18EA77", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersConsistentLeResolverEA8D11EE": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersConsistentLeResolverEA8D11EE", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersConsistentLeResolverB027B939": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersConsistentLeResolverB027B939", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersConsistentGtResolverD927E07A": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersConsistentGtResolverD927E07A", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersConsistentGtResolver58B23E21": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersConsistentGtResolver58B23E21", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersConsistentGeResolverB8F83696": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersConsistentGeResolverB8F83696", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersConsistentGeResolver674A5CD5": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersConsistentGeResolver674A5CD5", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersFilterResolverCD2B8747": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersFilterResolverCD2B8747", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetCustomerOrdersBetweenResolver7DEE368E": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetCustomerOrdersBetweenResolver7DEE368E", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersFilterResolver628CC68D": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersFilterResolver628CC68D", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApiorderDsQuerygetOrderCustomersBetweenResolver2048F3CB": [ + { + "type": "aws:cdk:logicalId", + "data": "ApiorderDsQuerygetOrderCustomersBetweenResolver2048F3CB", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApipaymentDsQuerygetPaymentResolverD172BFC9": [ + { + "type": "aws:cdk:logicalId", + "data": "ApipaymentDsQuerygetPaymentResolverD172BFC9", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApipaymentDsQuerygetPaymentConsistentResolver05C2ACB8": [ + { + "type": "aws:cdk:logicalId", + "data": "ApipaymentDsQuerygetPaymentConsistentResolver05C2ACB8", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApipaymentDsMutationsavePaymentResolverE09FE5BB": [ + { + "type": "aws:cdk:logicalId", + "data": "ApipaymentDsMutationsavePaymentResolverE09FE5BB", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "ApidsMutationdoPostOnAwsResolver9583D8A3": [ + { + "type": "aws:cdk:logicalId", + "data": "ApidsMutationdoPostOnAwsResolver9583D8A3", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } ] }, "displayName": "aws-appsync-integ" diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/tree.json b/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/tree.json index b58920fcbfeb4..685ecb931fde0 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql.js.snapshot/tree.json @@ -160,45 +160,45 @@ "fqn": "@aws-cdk/aws-appsync.CfnDataSource", "version": "0.0.0" } - }, - "QuerygetServiceVersionResolver": { - "id": "QuerygetServiceVersionResolver", - "path": "aws-appsync-integ/Api/none/QuerygetServiceVersionResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/none/QuerygetServiceVersionResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getServiceVersion", - "typeName": "Query", - "dataSourceName": "None", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\":\"2017-02-28\"}", - "responseMappingTemplate": "{\"version\":\"v1\"}" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.NoneDataSource", + "version": "0.0.0" + } + }, + "QuerygetServiceVersion": { + "id": "QuerygetServiceVersion", + "path": "aws-appsync-integ/Api/QuerygetServiceVersion", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QuerygetServiceVersion/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getServiceVersion", + "typeName": "Query", + "dataSourceName": "None", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\":\"2017-02-28\"}", + "responseMappingTemplate": "{\"version\":\"v1\"}" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.NoneDataSource", + "fqn": "@aws-cdk/aws-appsync.Resolver", "version": "0.0.0" } }, @@ -345,356 +345,6 @@ "fqn": "@aws-cdk/aws-appsync.CfnDataSource", "version": "0.0.0" } - }, - "QuerygetCustomersResolver": { - "id": "QuerygetCustomersResolver", - "path": "aws-appsync-integ/Api/customerDs/QuerygetCustomersResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/customerDs/QuerygetCustomersResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomers", - "typeName": "Query", - "dataSourceName": "Customer", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Scan\", \"consistentRead\": false}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", - "version": "0.0.0" - } - }, - "QuerygetCustomerResolver": { - "id": "QuerygetCustomerResolver", - "path": "aws-appsync-integ/Api/customerDs/QuerygetCustomerResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/customerDs/QuerygetCustomerResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomer", - "typeName": "Query", - "dataSourceName": "Customer", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"GetItem\", \"consistentRead\": false, \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", - "version": "0.0.0" - } - }, - "QuerygetCustomersNotConsistentResolver": { - "id": "QuerygetCustomersNotConsistentResolver", - "path": "aws-appsync-integ/Api/customerDs/QuerygetCustomersNotConsistentResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/customerDs/QuerygetCustomersNotConsistentResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomersNotConsistent", - "typeName": "Query", - "dataSourceName": "Customer", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Scan\", \"consistentRead\": false}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", - "version": "0.0.0" - } - }, - "QuerygetCustomerNotConsistentResolver": { - "id": "QuerygetCustomerNotConsistentResolver", - "path": "aws-appsync-integ/Api/customerDs/QuerygetCustomerNotConsistentResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/customerDs/QuerygetCustomerNotConsistentResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerNotConsistent", - "typeName": "Query", - "dataSourceName": "Customer", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"GetItem\", \"consistentRead\": false, \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", - "version": "0.0.0" - } - }, - "QuerygetCustomersConsistentResolver": { - "id": "QuerygetCustomersConsistentResolver", - "path": "aws-appsync-integ/Api/customerDs/QuerygetCustomersConsistentResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/customerDs/QuerygetCustomersConsistentResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomersConsistent", - "typeName": "Query", - "dataSourceName": "Customer", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Scan\", \"consistentRead\": true}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", - "version": "0.0.0" - } - }, - "QuerygetCustomerConsistentResolver": { - "id": "QuerygetCustomerConsistentResolver", - "path": "aws-appsync-integ/Api/customerDs/QuerygetCustomerConsistentResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/customerDs/QuerygetCustomerConsistentResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerConsistent", - "typeName": "Query", - "dataSourceName": "Customer", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"GetItem\", \"consistentRead\": true, \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", - "version": "0.0.0" - } - }, - "MutationaddCustomerResolver": { - "id": "MutationaddCustomerResolver", - "path": "aws-appsync-integ/Api/customerDs/MutationaddCustomerResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/customerDs/MutationaddCustomerResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "addCustomer", - "typeName": "Mutation", - "dataSourceName": "Customer", - "kind": "UNIT", - "requestMappingTemplate": "\n #set($input = $ctx.args.customer)\n \n {\n \"version\": \"2017-02-28\",\n \"operation\": \"PutItem\",\n \"key\" : {\n \"id\" : $util.dynamodb.toDynamoDBJson($util.autoId())\n },\n \"attributeValues\": $util.dynamodb.toMapValuesJson($input)\n }", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", - "version": "0.0.0" - } - }, - "MutationsaveCustomerResolver": { - "id": "MutationsaveCustomerResolver", - "path": "aws-appsync-integ/Api/customerDs/MutationsaveCustomerResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/customerDs/MutationsaveCustomerResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "saveCustomer", - "typeName": "Mutation", - "dataSourceName": "Customer", - "kind": "UNIT", - "requestMappingTemplate": "\n #set($input = $ctx.args.customer)\n \n {\n \"version\": \"2017-02-28\",\n \"operation\": \"PutItem\",\n \"key\" : {\n \"id\" : $util.dynamodb.toDynamoDBJson($ctx.args.id)\n },\n \"attributeValues\": $util.dynamodb.toMapValuesJson($input)\n }", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", - "version": "0.0.0" - } - }, - "MutationsaveCustomerWithFirstOrderResolver": { - "id": "MutationsaveCustomerWithFirstOrderResolver", - "path": "aws-appsync-integ/Api/customerDs/MutationsaveCustomerWithFirstOrderResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/customerDs/MutationsaveCustomerWithFirstOrderResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "saveCustomerWithFirstOrder", - "typeName": "Mutation", - "dataSourceName": "Customer", - "kind": "UNIT", - "requestMappingTemplate": "\n #set($input = $ctx.args.order)\n $util.qr($input.put(\"referral\", referral))\n {\n \"version\": \"2017-02-28\",\n \"operation\": \"PutItem\",\n \"key\" : {\n \"order\" : $util.dynamodb.toDynamoDBJson($util.autoId()),\"customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer.id)\n },\n \"attributeValues\": $util.dynamodb.toMapValuesJson($input)\n }", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", - "version": "0.0.0" - } - }, - "MutationremoveCustomerResolver": { - "id": "MutationremoveCustomerResolver", - "path": "aws-appsync-integ/Api/customerDs/MutationremoveCustomerResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/customerDs/MutationremoveCustomerResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "removeCustomer", - "typeName": "Mutation", - "dataSourceName": "Customer", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"DeleteItem\", \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", - "version": "0.0.0" - } } }, "constructInfo": { @@ -856,1331 +506,1689 @@ "fqn": "@aws-cdk/aws-appsync.CfnDataSource", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersEqResolver": { - "id": "QuerygetCustomerOrdersEqResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersEqResolver", + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.DynamoDbDataSource", + "version": "0.0.0" + } + }, + "paymentDs": { + "id": "paymentDs", + "path": "aws-appsync-integ/Api/paymentDs", + "children": { + "ServiceRole": { + "id": "ServiceRole", + "path": "aws-appsync-integ/Api/paymentDs/ServiceRole", "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersEqResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersEq", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer = :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } - }, + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "aws-appsync-integ/Api/paymentDs/ServiceRole/ImportServiceRole", "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "fqn": "@aws-cdk/core.Resource", "version": "0.0.0" } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", - "version": "0.0.0" - } - }, - "QuerygetOrderCustomersEqResolver": { - "id": "QuerygetOrderCustomersEqResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersEqResolver", - "children": { + }, "Resource": { "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersEqResolver/Resource", + "path": "aws-appsync-integ/Api/paymentDs/ServiceRole/Resource", "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:type": "AWS::IAM::Role", "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersEq", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order = :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "appsync.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "fqn": "@aws-cdk/aws-iam.CfnRole", "version": "0.0.0" } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", - "version": "0.0.0" - } - }, - "QuerygetCustomerOrdersLtResolver": { - "id": "QuerygetCustomerOrdersLtResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersLtResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersLtResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "aws-appsync-integ/Api/paymentDs/ServiceRole/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/paymentDs/ServiceRole/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "dynamodb:BatchGetItem", + "dynamodb:BatchWriteItem", + "dynamodb:ConditionCheckItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + "dynamodb:GetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:PutItem", + "dynamodb:Query", + "dynamodb:Scan", + "dynamodb:UpdateItem" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":dynamodb:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":table/PaymentTable" + ] + ] + }, + { + "Ref": "AWS::NoValue" + } + ] + } + ], + "Version": "2012-10-17" + }, + "policyName": "ApipaymentDsServiceRoleDefaultPolicy528E42B0", + "roles": [ + { + "Ref": "ApipaymentDsServiceRole0DAC58D6" + } + ] + } }, - "fieldName": "getCustomerOrdersLt", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer < :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" + "constructInfo": { + "fqn": "@aws-cdk/aws-iam.CfnPolicy", + "version": "0.0.0" + } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "fqn": "@aws-cdk/aws-iam.Policy", "version": "0.0.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-iam.Role", "version": "0.0.0" } }, - "QuerygetOrderCustomersLtResolver": { - "id": "QuerygetOrderCustomersLtResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersLtResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersLtResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersLt", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order < :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/paymentDs/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::DataSource", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "name": "Payment", + "type": "AMAZON_DYNAMODB", + "dynamoDbConfig": { + "tableName": "PaymentTable", + "awsRegion": { + "Ref": "AWS::Region" } }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" + "serviceRoleArn": { + "Fn::GetAtt": [ + "ApipaymentDsServiceRole0DAC58D6", + "Arn" + ] } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnDataSource", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersLeResolver": { - "id": "QuerygetCustomerOrdersLeResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersLeResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersLeResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersLe", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer <= :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.DynamoDbDataSource", + "version": "0.0.0" + } + }, + "QueryGetCustomers": { + "id": "QueryGetCustomers", + "path": "aws-appsync-integ/Api/QueryGetCustomers", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomers/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomers", + "typeName": "Query", + "dataSourceName": "Customer", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Scan\", \"consistentRead\": false}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersLeResolver": { - "id": "QuerygetOrderCustomersLeResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersLeResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersLeResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersLe", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order <= :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomer": { + "id": "QueryGetCustomer", + "path": "aws-appsync-integ/Api/QueryGetCustomer", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomer/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "getCustomer", + "typeName": "Query", + "dataSourceName": "Customer", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"GetItem\", \"consistentRead\": false, \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", + "responseMappingTemplate": "$util.toJson($ctx.result)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCusomtersNotConsistent": { + "id": "QueryGetCusomtersNotConsistent", + "path": "aws-appsync-integ/Api/QueryGetCusomtersNotConsistent", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCusomtersNotConsistent/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "getCustomersNotConsistent", + "typeName": "Query", + "dataSourceName": "Customer", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Scan\", \"consistentRead\": false}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerNotConsistent": { + "id": "QueryGetCustomerNotConsistent", + "path": "aws-appsync-integ/Api/QueryGetCustomerNotConsistent", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerNotConsistent/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "getCustomerNotConsistent", + "typeName": "Query", + "dataSourceName": "Customer", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"GetItem\", \"consistentRead\": false, \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", + "responseMappingTemplate": "$util.toJson($ctx.result)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomersConsistent": { + "id": "QueryGetCustomersConsistent", + "path": "aws-appsync-integ/Api/QueryGetCustomersConsistent", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomersConsistent/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "getCustomersConsistent", + "typeName": "Query", + "dataSourceName": "Customer", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Scan\", \"consistentRead\": true}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerConsistent": { + "id": "QueryGetCustomerConsistent", + "path": "aws-appsync-integ/Api/QueryGetCustomerConsistent", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerConsistent/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "getCustomerConsistent", + "typeName": "Query", + "dataSourceName": "Customer", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"GetItem\", \"consistentRead\": true, \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", + "responseMappingTemplate": "$util.toJson($ctx.result)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "MutationAddCustomer": { + "id": "MutationAddCustomer", + "path": "aws-appsync-integ/Api/MutationAddCustomer", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/MutationAddCustomer/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "addCustomer", + "typeName": "Mutation", + "dataSourceName": "Customer", + "kind": "UNIT", + "requestMappingTemplate": "\n #set($input = $ctx.args.customer)\n \n {\n \"version\": \"2017-02-28\",\n \"operation\": \"PutItem\",\n \"key\" : {\n \"id\" : $util.dynamodb.toDynamoDBJson($util.autoId())\n },\n \"attributeValues\": $util.dynamodb.toMapValuesJson($input)\n }", + "responseMappingTemplate": "$util.toJson($ctx.result)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "MutationSaveCustomer": { + "id": "MutationSaveCustomer", + "path": "aws-appsync-integ/Api/MutationSaveCustomer", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/MutationSaveCustomer/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "saveCustomer", + "typeName": "Mutation", + "dataSourceName": "Customer", + "kind": "UNIT", + "requestMappingTemplate": "\n #set($input = $ctx.args.customer)\n \n {\n \"version\": \"2017-02-28\",\n \"operation\": \"PutItem\",\n \"key\" : {\n \"id\" : $util.dynamodb.toDynamoDBJson($ctx.args.id)\n },\n \"attributeValues\": $util.dynamodb.toMapValuesJson($input)\n }", + "responseMappingTemplate": "$util.toJson($ctx.result)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "MutationSaveCustomerWithFirstOrder": { + "id": "MutationSaveCustomerWithFirstOrder", + "path": "aws-appsync-integ/Api/MutationSaveCustomerWithFirstOrder", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/MutationSaveCustomerWithFirstOrder/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "saveCustomerWithFirstOrder", + "typeName": "Mutation", + "dataSourceName": "Customer", + "kind": "UNIT", + "requestMappingTemplate": "\n #set($input = $ctx.args.order)\n $util.qr($input.put(\"referral\", referral))\n {\n \"version\": \"2017-02-28\",\n \"operation\": \"PutItem\",\n \"key\" : {\n \"order\" : $util.dynamodb.toDynamoDBJson($util.autoId()),\"customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer.id)\n },\n \"attributeValues\": $util.dynamodb.toMapValuesJson($input)\n }", + "responseMappingTemplate": "$util.toJson($ctx.result)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "MutationRemoveCustomer": { + "id": "MutationRemoveCustomer", + "path": "aws-appsync-integ/Api/MutationRemoveCustomer", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/MutationRemoveCustomer/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "removeCustomer", + "typeName": "Mutation", + "dataSourceName": "Customer", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"DeleteItem\", \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", + "responseMappingTemplate": "$util.toJson($ctx.result)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersEq": { + "id": "QueryGetCustomerOrdersEq", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersEq", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersEq/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "getCustomerOrdersEq", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer = :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersEq": { + "id": "QueryGetOrderCustomersEq", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersEq", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersEq/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "getOrderCustomersEq", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order = :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersLt": { + "id": "QueryGetCustomerOrdersLt", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersLt", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersLt/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "getCustomerOrdersLt", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer < :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersLt": { + "id": "QueryGetOrderCustomersLt", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersLt", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersLt/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] + }, + "fieldName": "getOrderCustomersLt", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order < :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.CfnResolver", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersLe": { + "id": "QueryGetCustomerOrdersLe", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersLe", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersLe/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersLe", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer <= :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersGtResolver": { - "id": "QuerygetCustomerOrdersGtResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersGtResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersGtResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersGt", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer > :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersLe": { + "id": "QueryGetOrderCustomersLe", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersLe", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersLe/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersLe", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order <= :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersGtResolver": { - "id": "QuerygetOrderCustomersGtResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersGtResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersGtResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersGt", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order > :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersGt": { + "id": "QueryGetCustomerOrdersGt", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersGt", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersGt/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersGt", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer > :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersGeResolver": { - "id": "QuerygetCustomerOrdersGeResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersGeResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersGeResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersGe", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer >= :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersGt": { + "id": "QueryGetOrderCustomersGt", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersGt", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersGt/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersGt", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order > :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersGeResolver": { - "id": "QuerygetOrderCustomersGeResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersGeResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersGeResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersGe", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order >= :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersGe": { + "id": "QueryGetCustomerOrdersGe", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersGe", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersGe/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersGe", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer >= :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersNotConsistentEqResolver": { - "id": "QuerygetCustomerOrdersNotConsistentEqResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentEqResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentEqResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersNotConsistentEq", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer = :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersGe": { + "id": "QueryGetOrderCustomersGe", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersGe", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersGe/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersGe", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order >= :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersNotConsistentEqResolver": { - "id": "QuerygetOrderCustomersNotConsistentEqResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentEqResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentEqResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersNotConsistentEq", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order = :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersNotConsistentEq": { + "id": "QueryGetCustomerOrdersNotConsistentEq", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentEq", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentEq/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersNotConsistentEq", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer = :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersNotConsistentLtResolver": { - "id": "QuerygetCustomerOrdersNotConsistentLtResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentLtResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentLtResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersNotConsistentLt", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer < :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersNotConsistentEq": { + "id": "QueryGetOrderCustomersNotConsistentEq", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentEq", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentEq/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersNotConsistentEq", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order = :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersNotConsistentLtResolver": { - "id": "QuerygetOrderCustomersNotConsistentLtResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentLtResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentLtResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersNotConsistentLt", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order < :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersNotConsistentLt": { + "id": "QueryGetCustomerOrdersNotConsistentLt", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentLt", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentLt/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersNotConsistentLt", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer < :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersNotConsistentLeResolver": { - "id": "QuerygetCustomerOrdersNotConsistentLeResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentLeResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentLeResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersNotConsistentLe", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer <= :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersNotConsistentLt": { + "id": "QueryGetOrderCustomersNotConsistentLt", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentLt", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentLt/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersNotConsistentLt", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order < :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersNotConsistentLeResolver": { - "id": "QuerygetOrderCustomersNotConsistentLeResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentLeResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentLeResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersNotConsistentLe", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order <= :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersNotConsistentLe": { + "id": "QueryGetCustomerOrdersNotConsistentLe", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentLe", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentLe/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersNotConsistentLe", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer <= :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersNotConsistentGtResolver": { - "id": "QuerygetCustomerOrdersNotConsistentGtResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentGtResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentGtResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersNotConsistentGt", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer > :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersNotConsistentLe": { + "id": "QueryGetOrderCustomersNotConsistentLe", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentLe", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentLe/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersNotConsistentLe", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order <= :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersNotConsistentGtResolver": { - "id": "QuerygetOrderCustomersNotConsistentGtResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentGtResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentGtResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersNotConsistentGt", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order > :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersNotConsistentGt": { + "id": "QueryGetCustomerOrdersNotConsistentGt", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentGt", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentGt/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersNotConsistentGt", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer > :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersNotConsistentGeResolver": { - "id": "QuerygetCustomerOrdersNotConsistentGeResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentGeResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersNotConsistentGeResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersNotConsistentGe", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer >= :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersNotConsistentGt": { + "id": "QueryGetOrderCustomersNotConsistentGt", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentGt", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentGt/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersNotConsistentGt", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order > :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersNotConsistentGeResolver": { - "id": "QuerygetOrderCustomersNotConsistentGeResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentGeResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersNotConsistentGeResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersNotConsistentGe", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order >= :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersNotConsistentGe": { + "id": "QueryGetCustomerOrdersNotConsistentGe", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentGe", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersNotConsistentGe/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersNotConsistentGe", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer >= :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersConsistentEqResolver": { - "id": "QuerygetCustomerOrdersConsistentEqResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentEqResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentEqResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersConsistentEq", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"query\" : {\n \"expression\" : \"#customer = :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersNotConsistentGe": { + "id": "QueryGetOrderCustomersNotConsistentGe", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentGe", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersNotConsistentGe/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersNotConsistentGe", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order >= :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersConsistentEqResolver": { - "id": "QuerygetOrderCustomersConsistentEqResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentEqResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentEqResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersConsistentEq", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order = :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersConsistentEq": { + "id": "QueryGetCustomerOrdersConsistentEq", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentEq", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentEq/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersConsistentEq", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"query\" : {\n \"expression\" : \"#customer = :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersConsistentLtResolver": { - "id": "QuerygetCustomerOrdersConsistentLtResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentLtResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentLtResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersConsistentLt", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"query\" : {\n \"expression\" : \"#customer < :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersConsistentEq": { + "id": "QueryGetOrderCustomersConsistentEq", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersConsistentEq", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersConsistentEq/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersConsistentEq", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order = :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersConsistentLtResolver": { - "id": "QuerygetOrderCustomersConsistentLtResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentLtResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentLtResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersConsistentLt", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order < :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersConsistentLt": { + "id": "QueryGetCustomerOrdersConsistentLt", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentLt", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentLt/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersConsistentLt", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"query\" : {\n \"expression\" : \"#customer < :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersConsistentLeResolver": { - "id": "QuerygetCustomerOrdersConsistentLeResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentLeResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentLeResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersConsistentLe", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"query\" : {\n \"expression\" : \"#customer <= :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersConsistentLt": { + "id": "QueryGetOrderCustomersConsistentLt", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersConsistentLt", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersConsistentLt/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersConsistentLt", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order < :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersConsistentLeResolver": { - "id": "QuerygetOrderCustomersConsistentLeResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentLeResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentLeResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersConsistentLe", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order <= :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersConsistentLe": { + "id": "QueryGetCustomerOrdersConsistentLe", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentLe", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentLe/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersConsistentLe", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"query\" : {\n \"expression\" : \"#customer <= :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersConsistentGtResolver": { - "id": "QuerygetCustomerOrdersConsistentGtResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentGtResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentGtResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersConsistentGt", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"query\" : {\n \"expression\" : \"#customer > :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersConsistentLe": { + "id": "QueryGetOrderCustomersConsistentLe", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersConsistentLe", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersConsistentLe/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersConsistentLe", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order <= :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersConsistentGtResolver": { - "id": "QuerygetOrderCustomersConsistentGtResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentGtResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentGtResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersConsistentGt", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order > :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersConsistentGt": { + "id": "QueryGetCustomerOrdersConsistentGt", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentGt", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentGt/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersConsistentGt", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"query\" : {\n \"expression\" : \"#customer > :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersConsistentGeResolver": { - "id": "QuerygetCustomerOrdersConsistentGeResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentGeResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersConsistentGeResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersConsistentGe", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"query\" : {\n \"expression\" : \"#customer >= :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersConsistentGt": { + "id": "QueryGetOrderCustomersConsistentGt", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersConsistentGt", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersConsistentGt/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersConsistentGt", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order > :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersConsistentGeResolver": { - "id": "QuerygetOrderCustomersConsistentGeResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentGeResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersConsistentGeResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersConsistentGe", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order >= :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersConsistentGe": { + "id": "QueryGetCustomerOrdersConsistentGe", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentGe", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersConsistentGe/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersConsistentGe", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"query\" : {\n \"expression\" : \"#customer >= :customer\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersFilterResolver": { - "id": "QuerygetCustomerOrdersFilterResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersFilterResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersFilterResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersFilter", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer = :customer AND begins_with(#order, :order)\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\", \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer), \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersConsistentGe": { + "id": "QueryGetOrderCustomersConsistentGe", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersConsistentGe", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersConsistentGe/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersConsistentGe", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": true, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order >= :order\",\n \"expressionNames\" : {\n \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetCustomerOrdersBetweenResolver": { - "id": "QuerygetCustomerOrdersBetweenResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersBetweenResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetCustomerOrdersBetweenResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getCustomerOrdersBetween", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer = :customer AND #order BETWEEN :order1 AND :order2\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\", \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer), \":order1\" : $util.dynamodb.toDynamoDBJson($ctx.args.order1), \":order2\" : $util.dynamodb.toDynamoDBJson($ctx.args.order2)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersFilter": { + "id": "QueryGetCustomerOrdersFilter", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersFilter", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersFilter/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersFilter", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer = :customer AND begins_with(#order, :order)\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\", \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer), \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersFilterResolver": { - "id": "QuerygetOrderCustomersFilterResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersFilterResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersFilterResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersFilter", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#order = :order AND begins_with(#customer, :customer)\",\n \"expressionNames\" : {\n \"#order\" : \"order\", \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order), \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetCustomerOrdersBetween": { + "id": "QueryGetCustomerOrdersBetween", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersBetween", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetCustomerOrdersBetween/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getCustomerOrdersBetween", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#customer = :customer AND #order BETWEEN :order1 AND :order2\",\n \"expressionNames\" : {\n \"#customer\" : \"customer\", \"#order\" : \"order\"\n },\n \"expressionValues\" : {\n \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer), \":order1\" : $util.dynamodb.toDynamoDBJson($ctx.args.order1), \":order2\" : $util.dynamodb.toDynamoDBJson($ctx.args.order2)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetOrderCustomersBetweenResolver": { - "id": "QuerygetOrderCustomersBetweenResolver", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersBetweenResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/orderDs/QuerygetOrderCustomersBetweenResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getOrderCustomersBetween", - "typeName": "Query", - "dataSourceName": "Order", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order = :order AND #customer BETWEEN :customer1 AND :customer2\",\n \"expressionNames\" : {\n \"#order\" : \"order\", \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order), \":customer1\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer1), \":customer2\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer2)\n }\n }}", - "responseMappingTemplate": "$util.toJson($ctx.result.items)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetOrderCustomersFilter": { + "id": "QueryGetOrderCustomersFilter", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersFilter", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersFilter/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getOrderCustomersFilter", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"query\" : {\n \"expression\" : \"#order = :order AND begins_with(#customer, :customer)\",\n \"expressionNames\" : {\n \"#order\" : \"order\", \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order), \":customer\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.DynamoDbDataSource", + "fqn": "@aws-cdk/aws-appsync.Resolver", "version": "0.0.0" } }, - "paymentDs": { - "id": "paymentDs", - "path": "aws-appsync-integ/Api/paymentDs", + "QueryGetOrderCustomersBetween": { + "id": "QueryGetOrderCustomersBetween", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersBetween", "children": { - "ServiceRole": { - "id": "ServiceRole", - "path": "aws-appsync-integ/Api/paymentDs/ServiceRole", - "children": { - "ImportServiceRole": { - "id": "ImportServiceRole", - "path": "aws-appsync-integ/Api/paymentDs/ServiceRole/ImportServiceRole", - "constructInfo": { - "fqn": "@aws-cdk/core.Resource", - "version": "0.0.0" - } - }, - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/paymentDs/ServiceRole/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Role", - "aws:cdk:cloudformation:props": { - "assumeRolePolicyDocument": { - "Statement": [ - { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": { - "Service": "appsync.amazonaws.com" - } - } - ], - "Version": "2012-10-17" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-iam.CfnRole", - "version": "0.0.0" - } - }, - "DefaultPolicy": { - "id": "DefaultPolicy", - "path": "aws-appsync-integ/Api/paymentDs/ServiceRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/paymentDs/ServiceRole/DefaultPolicy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": [ - "dynamodb:BatchGetItem", - "dynamodb:BatchWriteItem", - "dynamodb:ConditionCheckItem", - "dynamodb:DeleteItem", - "dynamodb:DescribeTable", - "dynamodb:GetItem", - "dynamodb:GetRecords", - "dynamodb:GetShardIterator", - "dynamodb:PutItem", - "dynamodb:Query", - "dynamodb:Scan", - "dynamodb:UpdateItem" - ], - "Effect": "Allow", - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":dynamodb:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":table/PaymentTable" - ] - ] - }, - { - "Ref": "AWS::NoValue" - } - ] - } - ], - "Version": "2012-10-17" - }, - "policyName": "ApipaymentDsServiceRoleDefaultPolicy528E42B0", - "roles": [ - { - "Ref": "ApipaymentDsServiceRole0DAC58D6" - } - ] - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-iam.CfnPolicy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-iam.Policy", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/aws-iam.Role", - "version": "0.0.0" - } - }, "Resource": { "id": "Resource", - "path": "aws-appsync-integ/Api/paymentDs/Resource", + "path": "aws-appsync-integ/Api/QueryGetOrderCustomersBetween/Resource", "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::DataSource", + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", "aws:cdk:cloudformation:props": { "apiId": { "Fn::GetAtt": [ @@ -2188,135 +2196,127 @@ "ApiId" ] }, - "name": "Payment", - "type": "AMAZON_DYNAMODB", - "dynamoDbConfig": { - "tableName": "PaymentTable", - "awsRegion": { - "Ref": "AWS::Region" - } - }, - "serviceRoleArn": { - "Fn::GetAtt": [ - "ApipaymentDsServiceRole0DAC58D6", - "Arn" - ] - } + "fieldName": "getOrderCustomersBetween", + "typeName": "Query", + "dataSourceName": "Order", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\" : \"2017-02-28\", \"operation\" : \"Query\", \"consistentRead\": false, \"index\" : \"orderIndex\", \"query\" : {\n \"expression\" : \"#order = :order AND #customer BETWEEN :customer1 AND :customer2\",\n \"expressionNames\" : {\n \"#order\" : \"order\", \"#customer\" : \"customer\"\n },\n \"expressionValues\" : {\n \":order\" : $util.dynamodb.toDynamoDBJson($ctx.args.order), \":customer1\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer1), \":customer2\" : $util.dynamodb.toDynamoDBJson($ctx.args.customer2)\n }\n }}", + "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnDataSource", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetPaymentResolver": { - "id": "QuerygetPaymentResolver", - "path": "aws-appsync-integ/Api/paymentDs/QuerygetPaymentResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/paymentDs/QuerygetPaymentResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getPayment", - "typeName": "Query", - "dataSourceName": "Payment", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"GetItem\", \"consistentRead\": false, \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetPayment": { + "id": "QueryGetPayment", + "path": "aws-appsync-integ/Api/QueryGetPayment", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetPayment/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getPayment", + "typeName": "Query", + "dataSourceName": "Payment", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"GetItem\", \"consistentRead\": false, \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", + "responseMappingTemplate": "$util.toJson($ctx.result)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "QuerygetPaymentConsistentResolver": { - "id": "QuerygetPaymentConsistentResolver", - "path": "aws-appsync-integ/Api/paymentDs/QuerygetPaymentConsistentResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/paymentDs/QuerygetPaymentConsistentResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "getPaymentConsistent", - "typeName": "Query", - "dataSourceName": "Payment", - "kind": "UNIT", - "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"GetItem\", \"consistentRead\": true, \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "QueryGetPaymentConsistent": { + "id": "QueryGetPaymentConsistent", + "path": "aws-appsync-integ/Api/QueryGetPaymentConsistent", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/QueryGetPaymentConsistent/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "getPaymentConsistent", + "typeName": "Query", + "dataSourceName": "Payment", + "kind": "UNIT", + "requestMappingTemplate": "{\"version\": \"2017-02-28\", \"operation\": \"GetItem\", \"consistentRead\": true, \"key\": {\"id\": $util.dynamodb.toDynamoDBJson($ctx.args.id)}}", + "responseMappingTemplate": "$util.toJson($ctx.result)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } - }, - "MutationsavePaymentResolver": { - "id": "MutationsavePaymentResolver", - "path": "aws-appsync-integ/Api/paymentDs/MutationsavePaymentResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/paymentDs/MutationsavePaymentResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "savePayment", - "typeName": "Mutation", - "dataSourceName": "Payment", - "kind": "UNIT", - "requestMappingTemplate": "\n #set($input = $ctx.args.payment)\n \n {\n \"version\": \"2017-02-28\",\n \"operation\": \"PutItem\",\n \"key\" : {\n \"id\" : $util.dynamodb.toDynamoDBJson($util.autoId())\n },\n \"attributeValues\": $util.dynamodb.toMapValuesJson($input)\n }", - "responseMappingTemplate": "$util.toJson($ctx.result)" - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.Resolver", + "version": "0.0.0" + } + }, + "MutationSavePayment": { + "id": "MutationSavePayment", + "path": "aws-appsync-integ/Api/MutationSavePayment", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/MutationSavePayment/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "savePayment", + "typeName": "Mutation", + "dataSourceName": "Payment", + "kind": "UNIT", + "requestMappingTemplate": "\n #set($input = $ctx.args.payment)\n \n {\n \"version\": \"2017-02-28\",\n \"operation\": \"PutItem\",\n \"key\" : {\n \"id\" : $util.dynamodb.toDynamoDBJson($util.autoId())\n },\n \"attributeValues\": $util.dynamodb.toMapValuesJson($input)\n }", + "responseMappingTemplate": "$util.toJson($ctx.result)" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.DynamoDbDataSource", + "fqn": "@aws-cdk/aws-appsync.Resolver", "version": "0.0.0" } }, @@ -2396,45 +2396,45 @@ "fqn": "@aws-cdk/aws-appsync.CfnDataSource", "version": "0.0.0" } - }, - "MutationdoPostOnAwsResolver": { - "id": "MutationdoPostOnAwsResolver", - "path": "aws-appsync-integ/Api/ds/MutationdoPostOnAwsResolver", - "children": { - "Resource": { - "id": "Resource", - "path": "aws-appsync-integ/Api/ds/MutationdoPostOnAwsResolver/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", - "aws:cdk:cloudformation:props": { - "apiId": { - "Fn::GetAtt": [ - "ApiF70053CD", - "ApiId" - ] - }, - "fieldName": "doPostOnAws", - "typeName": "Mutation", - "dataSourceName": "http", - "kind": "UNIT", - "requestMappingTemplate": "{\n \"version\": \"2018-05-29\",\n \"method\": \"POST\",\n # if full path is https://api.xxxxxxxxx.com/posts then resourcePath would be /posts\n \"resourcePath\": \"/path/123\",\n \"params\":{\n \"body\": $util.toJson($ctx.args),\n \"headers\":{\n \"Content-Type\": \"application/json\",\n \"Authorization\": \"$ctx.request.headers.Authorization\"\n }\n }\n }", - "responseMappingTemplate": "\n ## Raise a GraphQL field error in case of a datasource invocation error\n #if($ctx.error)\n $util.error($ctx.error.message, $ctx.error.type)\n #end\n ## if the response status code is not 200, then return an error. Else return the body **\n #if($ctx.result.statusCode == 200)\n ## If response is 200, return the body.\n $ctx.result.body\n #else\n ## If response is not 200, append the response to error block.\n $utils.appendError($ctx.result.body, \"$ctx.result.statusCode\")\n #end\n " - } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-appsync.HttpDataSource", + "version": "0.0.0" + } + }, + "MutationDoPostOnAws": { + "id": "MutationDoPostOnAws", + "path": "aws-appsync-integ/Api/MutationDoPostOnAws", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-appsync-integ/Api/MutationDoPostOnAws/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AppSync::Resolver", + "aws:cdk:cloudformation:props": { + "apiId": { + "Fn::GetAtt": [ + "ApiF70053CD", + "ApiId" + ] }, - "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.CfnResolver", - "version": "0.0.0" - } + "fieldName": "doPostOnAws", + "typeName": "Mutation", + "dataSourceName": "http", + "kind": "UNIT", + "requestMappingTemplate": "{\n \"version\": \"2018-05-29\",\n \"method\": \"POST\",\n # if full path is https://api.xxxxxxxxx.com/posts then resourcePath would be /posts\n \"resourcePath\": \"/path/123\",\n \"params\":{\n \"body\": $util.toJson($ctx.args),\n \"headers\":{\n \"Content-Type\": \"application/json\",\n \"Authorization\": \"$ctx.request.headers.Authorization\"\n }\n }\n }", + "responseMappingTemplate": "\n ## Raise a GraphQL field error in case of a datasource invocation error\n #if($ctx.error)\n $util.error($ctx.error.message, $ctx.error.type)\n #end\n ## if the response status code is not 200, then return an error. Else return the body **\n #if($ctx.result.statusCode == 200)\n ## If response is 200, return the body.\n $ctx.result.body\n #else\n ## If response is not 200, append the response to error block.\n $utils.appendError($ctx.result.body, \"$ctx.result.statusCode\")\n #end\n " } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.Resolver", + "fqn": "@aws-cdk/aws-appsync.CfnResolver", "version": "0.0.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-appsync.HttpDataSource", + "fqn": "@aws-cdk/aws-appsync.Resolver", "version": "0.0.0" } } @@ -2637,7 +2637,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } } }, diff --git a/packages/@aws-cdk/aws-appsync/test/integ.graphql.ts b/packages/@aws-cdk/aws-appsync/test/integ.graphql.ts index fa0feb5ae2921..76303ff807297 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.graphql.ts +++ b/packages/@aws-cdk/aws-appsync/test/integ.graphql.ts @@ -8,7 +8,7 @@ import { KeyCondition, MappingTemplate, PrimaryKey, - Schema, + SchemaFile, Values, } from '../lib'; @@ -35,7 +35,7 @@ const userPool = new UserPool(stack, 'Pool', { const api = new GraphqlApi(stack, 'Api', { name: 'demoapi', - schema: Schema.fromAsset(join(__dirname, 'integ.graphql.graphql')), + schema: SchemaFile.fromAsset(join(__dirname, 'integ.graphql.graphql')), authorizationConfig: { defaultAuthorization: { authorizationType: AuthorizationType.USER_POOL, @@ -53,7 +53,7 @@ const api = new GraphqlApi(stack, 'Api', { const noneDS = api.addNoneDataSource('none', { name: 'None' }); -noneDS.createResolver({ +noneDS.createResolver('QuerygetServiceVersion', { typeName: 'Query', fieldName: 'getServiceVersion', requestMappingTemplate: MappingTemplate.fromString(JSON.stringify({ @@ -111,55 +111,55 @@ const customerDS = api.addDynamoDbDataSource('customerDs', customerTable, { name const orderDS = api.addDynamoDbDataSource('orderDs', orderTable, { name: 'Order' }); const paymentDS = api.addDynamoDbDataSource('paymentDs', paymentTable, { name: 'Payment' }); -customerDS.createResolver({ +customerDS.createResolver('QueryGetCustomers', { typeName: 'Query', fieldName: 'getCustomers', requestMappingTemplate: MappingTemplate.dynamoDbScanTable(), responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); -customerDS.createResolver({ +customerDS.createResolver('QueryGetCustomer', { typeName: 'Query', fieldName: 'getCustomer', requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id'), responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), }); -customerDS.createResolver({ +customerDS.createResolver('QueryGetCusomtersNotConsistent', { typeName: 'Query', fieldName: 'getCustomersNotConsistent', requestMappingTemplate: MappingTemplate.dynamoDbScanTable(false), responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); -customerDS.createResolver({ +customerDS.createResolver('QueryGetCustomerNotConsistent', { typeName: 'Query', fieldName: 'getCustomerNotConsistent', requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id', false), responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), }); -customerDS.createResolver({ +customerDS.createResolver('QueryGetCustomersConsistent', { typeName: 'Query', fieldName: 'getCustomersConsistent', requestMappingTemplate: MappingTemplate.dynamoDbScanTable(true), responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); -customerDS.createResolver({ +customerDS.createResolver('QueryGetCustomerConsistent', { typeName: 'Query', fieldName: 'getCustomerConsistent', requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id', true), responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), }); -customerDS.createResolver({ +customerDS.createResolver('MutationAddCustomer', { typeName: 'Mutation', fieldName: 'addCustomer', requestMappingTemplate: MappingTemplate.dynamoDbPutItem(PrimaryKey.partition('id').auto(), Values.projecting('customer')), responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), }); -customerDS.createResolver({ +customerDS.createResolver('MutationSaveCustomer', { typeName: 'Mutation', fieldName: 'saveCustomer', requestMappingTemplate: MappingTemplate.dynamoDbPutItem(PrimaryKey.partition('id').is('id'), Values.projecting('customer')), responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), }); -customerDS.createResolver({ +customerDS.createResolver('MutationSaveCustomerWithFirstOrder', { typeName: 'Mutation', fieldName: 'saveCustomerWithFirstOrder', requestMappingTemplate: MappingTemplate.dynamoDbPutItem( @@ -171,7 +171,7 @@ customerDS.createResolver({ .attribute('referral').is('referral')), responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), }); -customerDS.createResolver({ +customerDS.createResolver('MutationRemoveCustomer', { typeName: 'Mutation', fieldName: 'removeCustomer', requestMappingTemplate: MappingTemplate.dynamoDbDeleteItem('id', 'id'), @@ -186,13 +186,13 @@ const ops = [ { suffix: 'Ge', op: KeyCondition.ge }, ]; for (const { suffix, op } of ops) { - orderDS.createResolver({ + orderDS.createResolver(`QueryGetCustomerOrders${suffix}`, { typeName: 'Query', fieldName: 'getCustomerOrders' + suffix, requestMappingTemplate: MappingTemplate.dynamoDbQuery(op('customer', 'customer')), responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); - orderDS.createResolver({ + orderDS.createResolver(`QueryGetOrderCustomers${suffix}`, { typeName: 'Query', fieldName: 'getOrderCustomers' + suffix, requestMappingTemplate: MappingTemplate.dynamoDbQuery(op('order', 'order'), 'orderIndex'), @@ -200,13 +200,13 @@ for (const { suffix, op } of ops) { }); } for (const { suffix, op } of ops) { - orderDS.createResolver({ + orderDS.createResolver(`QueryGetCustomerOrdersNotConsistent${suffix}`, { typeName: 'Query', fieldName: 'getCustomerOrdersNotConsistent' + suffix, requestMappingTemplate: MappingTemplate.dynamoDbQuery(op('customer', 'customer'), undefined, false), responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); - orderDS.createResolver({ + orderDS.createResolver(`QueryGetOrderCustomersNotConsistent${suffix}`, { typeName: 'Query', fieldName: 'getOrderCustomersNotConsistent' + suffix, requestMappingTemplate: MappingTemplate.dynamoDbQuery(op('order', 'order'), 'orderIndex', false), @@ -214,41 +214,41 @@ for (const { suffix, op } of ops) { }); } for (const { suffix, op } of ops) { - orderDS.createResolver({ + orderDS.createResolver(`QueryGetCustomerOrdersConsistent${suffix}`, { typeName: 'Query', fieldName: 'getCustomerOrdersConsistent' + suffix, requestMappingTemplate: MappingTemplate.dynamoDbQuery(op('customer', 'customer'), undefined, true), responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); - orderDS.createResolver({ + orderDS.createResolver(`QueryGetOrderCustomersConsistent${suffix}`, { typeName: 'Query', fieldName: 'getOrderCustomersConsistent' + suffix, requestMappingTemplate: MappingTemplate.dynamoDbQuery(op('order', 'order'), 'orderIndex', true), responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); } -orderDS.createResolver({ +orderDS.createResolver('QueryGetCustomerOrdersFilter', { typeName: 'Query', fieldName: 'getCustomerOrdersFilter', requestMappingTemplate: MappingTemplate.dynamoDbQuery( KeyCondition.eq('customer', 'customer').and(KeyCondition.beginsWith('order', 'order'))), responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); -orderDS.createResolver({ +orderDS.createResolver('QueryGetCustomerOrdersBetween', { typeName: 'Query', fieldName: 'getCustomerOrdersBetween', requestMappingTemplate: MappingTemplate.dynamoDbQuery( KeyCondition.eq('customer', 'customer').and(KeyCondition.between('order', 'order1', 'order2'))), responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); -orderDS.createResolver({ +orderDS.createResolver('QueryGetOrderCustomersFilter', { typeName: 'Query', fieldName: 'getOrderCustomersFilter', requestMappingTemplate: MappingTemplate.dynamoDbQuery( KeyCondition.eq('order', 'order').and(KeyCondition.beginsWith('customer', 'customer'))), responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); -orderDS.createResolver({ +orderDS.createResolver('QueryGetOrderCustomersBetween', { typeName: 'Query', fieldName: 'getOrderCustomersBetween', requestMappingTemplate: MappingTemplate.dynamoDbQuery( @@ -256,19 +256,19 @@ orderDS.createResolver({ responseMappingTemplate: MappingTemplate.dynamoDbResultList(), }); -paymentDS.createResolver({ +paymentDS.createResolver('QueryGetPayment', { typeName: 'Query', fieldName: 'getPayment', requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id'), responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), }); -paymentDS.createResolver({ +paymentDS.createResolver('QueryGetPaymentConsistent', { typeName: 'Query', fieldName: 'getPaymentConsistent', requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id', true), responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), }); -paymentDS.createResolver({ +paymentDS.createResolver('MutationSavePayment', { typeName: 'Mutation', fieldName: 'savePayment', requestMappingTemplate: MappingTemplate.dynamoDbPutItem(PrimaryKey.partition('id').auto(), Values.projecting('payment')), @@ -277,7 +277,7 @@ paymentDS.createResolver({ const httpDS = api.addHttpDataSource('ds', 'https://aws.amazon.com/', { name: 'http' }); -httpDS.createResolver({ +httpDS.createResolver('MutationDoPostOnAws', { typeName: 'Mutation', fieldName: 'doPostOnAws', requestMappingTemplate: MappingTemplate.fromString(`{ diff --git a/packages/@aws-cdk/aws-appsync/test/integ.log-retention.ts b/packages/@aws-cdk/aws-appsync/test/integ.log-retention.ts index 664c28ceee237..96f981ce6c197 100644 --- a/packages/@aws-cdk/aws-appsync/test/integ.log-retention.ts +++ b/packages/@aws-cdk/aws-appsync/test/integ.log-retention.ts @@ -2,7 +2,7 @@ import { join } from 'path'; import { RetentionDays } from '@aws-cdk/aws-logs'; import { App, Stack } from '@aws-cdk/core'; import { ExpectedResult, IntegTest } from '@aws-cdk/integ-tests'; -import { GraphqlApi, LogConfig, Schema } from '../lib'; +import { GraphqlApi, LogConfig, SchemaFile } from '../lib'; const app = new App(); const stack = new Stack(app, 'AppSyncIntegLogRetention'); @@ -16,7 +16,7 @@ const logConfig: LogConfig = { const api = new GraphqlApi(stack, 'GraphqlApi', { authorizationConfig: {}, name: 'IntegLogRetention', - schema: Schema.fromAsset(join(__dirname, 'appsync.test.graphql')), + schema: SchemaFile.fromAsset(join(__dirname, 'appsync.test.graphql')), logConfig, }); @@ -37,4 +37,4 @@ describe.expect(ExpectedResult.objectLike({ ], })); -app.synth(); \ No newline at end of file +app.synth(); diff --git a/packages/@aws-cdk/aws-appsync/test/object-type-definitions.ts b/packages/@aws-cdk/aws-appsync/test/object-type-definitions.ts deleted file mode 100644 index 138f2d7e1faa1..0000000000000 --- a/packages/@aws-cdk/aws-appsync/test/object-type-definitions.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ObjectType } from '../lib'; -import * as ScalarType from './scalar-type-defintions'; - -export const planet = new ObjectType('Planet', { - definition: { - name: ScalarType.string, - diameter: ScalarType.int, - rotationPeriod: ScalarType.int, - orbitalPeriod: ScalarType.int, - gravity: ScalarType.string, - population: ScalarType.list_string, - climates: ScalarType.list_string, - terrains: ScalarType.list_string, - surfaceWater: ScalarType.float, - created: ScalarType.string, - edited: ScalarType.string, - id: ScalarType.required_id, - }, -}); \ No newline at end of file diff --git a/packages/@aws-cdk/aws-appsync/test/scalar-type-defintions.ts b/packages/@aws-cdk/aws-appsync/test/scalar-type-defintions.ts deleted file mode 100644 index 80d03d28d1230..0000000000000 --- a/packages/@aws-cdk/aws-appsync/test/scalar-type-defintions.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { GraphqlType } from '../lib'; - -// ID -export const id = GraphqlType.id(); -export const list_id = GraphqlType.id({ - isList: true, -}); -export const required_id = GraphqlType.id({ - isRequired: true, -}); -export const required_list_id = GraphqlType.id({ - isRequiredList: true, -}); -export const required_list_required_id = GraphqlType.id({ - isRequired: true, - isRequiredList: true, -}); -export const dup_id = GraphqlType.id({ - isList: true, - isRequired: true, - isRequiredList: true, -}); - -// STRING -export const string = GraphqlType.string(); -export const required_string = GraphqlType.string({ isRequired: true }); -export const list_string = GraphqlType.string({ isList: true }); - -// INT -export const int = GraphqlType.int(); - -// FLOAT -export const float = GraphqlType.float(); - -// BOOLEAN -export const boolean = GraphqlType.boolean(); - -// AWSDate -export const awsDate = GraphqlType.awsDate(); - -// AWSTime -export const awsTime = GraphqlType.awsTime(); - -// AWSDateTime -export const awsDateTime = GraphqlType.awsDateTime(); - -// AWSTimestamp -export const awsTimestamp = GraphqlType.awsTimestamp(); - -// AWSEmail -export const awsEmail = GraphqlType.awsEmail(); - -// AWSJSON -export const awsJson = GraphqlType.awsJson(); - -// AWSUrl -export const awsUrl = GraphqlType.awsUrl(); - -// AWSPhone -export const awsPhone = GraphqlType.awsPhone(); - -// AWSIPAddress -export const awsIpAddress = GraphqlType.awsIpAddress(); diff --git a/packages/@aws-cdk/aws-autoscaling/README.md b/packages/@aws-cdk/aws-autoscaling/README.md index 8b61d74c27e61..c8c7667ac5a5a 100644 --- a/packages/@aws-cdk/aws-autoscaling/README.md +++ b/packages/@aws-cdk/aws-autoscaling/README.md @@ -295,7 +295,7 @@ const autoScalingGroup = new autoscaling.AutoScalingGroup(this, 'ASG', { vpc, instanceType, machineImage, - blockDevices: [{ + blockDevices: [ { deviceName: 'gp3-volume', volume: autoscaling.BlockDeviceVolume.ebs(15, { @@ -303,7 +303,7 @@ const autoScalingGroup = new autoscaling.AutoScalingGroup(this, 'ASG', { throughput: 125, }), }, - }], + ], // ... }); ``` @@ -574,6 +574,35 @@ autoScalingGroup.addWarmPool({ }); ``` +### Default Instance Warming + +You can use the default instance warmup feature to improve the Amazon CloudWatch metrics used for dynamic scaling. +When default instance warmup is not enabled, each instance starts contributing usage data to the aggregated metrics +as soon as the instance reaches the InService state. However, if you enable default instance warmup, this lets +your instances finish warming up before they contribute the usage data. + +To optimize the performance of scaling policies that scale continuously, such as target tracking and step scaling +policies, we strongly recommend that you enable the default instance warmup, even if its value is set to 0 seconds. + +To set up Default Instance Warming for an autoscaling group, simply pass it in as a prop + +```ts +declare const vpc: ec2.Vpc; +declare const instanceType: ec2.InstanceType; +declare const machineImage: ec2.IMachineImage; + + +new autoscaling.AutoScalingGroup(this, 'ASG', { + vpc, + instanceType, + machineImage, + + // ... + + defaultInstanceWarmup: Duration.seconds(5), +}); +``` + ## Future work * [ ] CloudWatch Events (impossible to add currently as the AutoScalingGroup ARN is diff --git a/packages/@aws-cdk/aws-autoscaling/lib/auto-scaling-group.ts b/packages/@aws-cdk/aws-autoscaling/lib/auto-scaling-group.ts index df442537b7232..c70c32271c331 100644 --- a/packages/@aws-cdk/aws-autoscaling/lib/auto-scaling-group.ts +++ b/packages/@aws-cdk/aws-autoscaling/lib/auto-scaling-group.ts @@ -336,6 +336,23 @@ export interface CommonAutoScalingGroupProps { * @default - `TerminationPolicy.DEFAULT` */ readonly terminationPolicies?: TerminationPolicy[]; + + /** + * The amount of time, in seconds, until a newly launched instance can contribute to the Amazon CloudWatch metrics. + * This delay lets an instance finish initializing before Amazon EC2 Auto Scaling aggregates instance metrics, + * resulting in more reliable usage data. Set this value equal to the amount of time that it takes for resource + * consumption to become stable after an instance reaches the InService state. + * + * To optimize the performance of scaling policies that scale continuously, such as target tracking and + * step scaling policies, we strongly recommend that you enable the default instance warmup, even if its value is set to 0 seconds + * + * Default instance warmup will not be added if no value is specified + * + * @see https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-default-instance-warmup.html + * + * @default None + */ + readonly defaultInstanceWarmup?: Duration; } /** @@ -1344,6 +1361,7 @@ export class AutoScalingGroup extends AutoScalingGroupBase implements maxInstanceLifetime: this.maxInstanceLifetime ? this.maxInstanceLifetime.toSeconds() : undefined, newInstancesProtectedFromScaleIn: Lazy.any({ produce: () => this.newInstancesProtectedFromScaleIn }), terminationPolicies: props.terminationPolicies, + defaultInstanceWarmup: props.defaultInstanceWarmup?.toSeconds(), ...this.getLaunchSettings(launchConfig, props.launchTemplate, props.mixedInstancesPolicy), }; diff --git a/packages/@aws-cdk/aws-autoscaling/test/auto-scaling-group.test.ts b/packages/@aws-cdk/aws-autoscaling/test/auto-scaling-group.test.ts index 48062024b9fb4..553ed50b81dc4 100644 --- a/packages/@aws-cdk/aws-autoscaling/test/auto-scaling-group.test.ts +++ b/packages/@aws-cdk/aws-autoscaling/test/auto-scaling-group.test.ts @@ -286,6 +286,25 @@ describe('auto scaling group', () => { }); }); + test('can specify only defaultInstanceWarmup', () => { + // GIVEN + const stack = new cdk.Stack(); + const vpc = mockVpc(stack); + + // WHEN + new autoscaling.AutoScalingGroup(stack, 'MyFleet', { + instanceType: ec2.InstanceType.of(ec2.InstanceClass.M4, ec2.InstanceSize.MICRO), + machineImage: new ec2.AmazonLinuxImage(), + vpc, + defaultInstanceWarmup: cdk.Duration.seconds(5), + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::AutoScaling::AutoScalingGroup', { + DefaultInstanceWarmup: 5, + }); + }); + test('addToRolePolicy can be used to add statements to the role policy', () => { const stack = new cdk.Stack(undefined, 'MyStack', { env: { region: 'us-east-1', account: '1234' } }); const vpc = mockVpc(stack); diff --git a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/aws-cdk-asg-integ.assets.json b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/aws-cdk-asg-integ.assets.json index 82db7bdafa693..6f9a7efb4533c 100644 --- a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/aws-cdk-asg-integ.assets.json +++ b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/aws-cdk-asg-integ.assets.json @@ -1,7 +1,7 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { - "2ca8f144c3e288148d58c9b9e86c9034f6a72b09cecffac3a5d406f8f53d5b18": { + "768b8ff8b1178a04dbfca488da9459f4f402bfad643db0b4791787ef23ec4db5": { "source": { "path": "aws-cdk-asg-integ.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "2ca8f144c3e288148d58c9b9e86c9034f6a72b09cecffac3a5d406f8f53d5b18.json", + "objectKey": "768b8ff8b1178a04dbfca488da9459f4f402bfad643db0b4791787ef23ec4db5.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/aws-cdk-asg-integ.template.json b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/aws-cdk-asg-integ.template.json index d063936bdcbbb..0698ba8c6c24d 100644 --- a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/aws-cdk-asg-integ.template.json +++ b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/aws-cdk-asg-integ.template.json @@ -507,6 +507,38 @@ } } }, + "AsgWithDefaultInstanceWarmupASG7A481C66": { + "Type": "AWS::AutoScaling::AutoScalingGroup", + "Properties": { + "MaxSize": "1", + "MinSize": "1", + "DefaultInstanceWarmup": 5, + "LaunchTemplate": { + "LaunchTemplateId": { + "Ref": "MainLT4FC09097" + }, + "Version": { + "Fn::GetAtt": [ + "MainLT4FC09097", + "LatestVersionNumber" + ] + } + }, + "VPCZoneIdentifier": [ + { + "Ref": "VPCPrivateSubnet1Subnet8BCA10E0" + }, + { + "Ref": "VPCPrivateSubnet2SubnetCFCDAA7A" + } + ] + }, + "UpdatePolicy": { + "AutoScalingScheduledAction": { + "IgnoreUnmodifiedGroupSizeProperties": true + } + } + }, "AsgFromMipASG9EFCE2FC": { "Type": "AWS::AutoScaling::AutoScalingGroup", "Properties": { diff --git a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/cdk.out b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/integ.json b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/integ.json index b2a0249ca14c8..d0ed5ee3ba231 100644 --- a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "testCases": { "integ.asg-lt": { "stacks": [ diff --git a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/manifest.json b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/manifest.json index 626c4977f059b..2aaf97a525a2a 100644 --- a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "21.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "aws-cdk-asg-integ.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,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}/2ca8f144c3e288148d58c9b9e86c9034f6a72b09cecffac3a5d406f8f53d5b18.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/768b8ff8b1178a04dbfca488da9459f4f402bfad643db0b4791787ef23ec4db5.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -213,6 +207,12 @@ "data": "AsgFromLTASG089B7C3A" } ], + "/aws-cdk-asg-integ/AsgWithDefaultInstanceWarmup/ASG": [ + { + "type": "aws:cdk:logicalId", + "data": "AsgWithDefaultInstanceWarmupASG7A481C66" + } + ], "/aws-cdk-asg-integ/AsgFromMip": [ { "type": "aws:cdk:warning", @@ -293,6 +293,12 @@ ] }, "displayName": "aws-cdk-asg-integ" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/tree.json b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/tree.json index 10f3be8834c97..a5f63ed131aae 100644 --- a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.140" - } - }, "aws-cdk-asg-integ": { "id": "aws-cdk-asg-integ", "path": "aws-cdk-asg-integ", @@ -856,6 +848,51 @@ "version": "0.0.0" } }, + "AsgWithDefaultInstanceWarmup": { + "id": "AsgWithDefaultInstanceWarmup", + "path": "aws-cdk-asg-integ/AsgWithDefaultInstanceWarmup", + "children": { + "ASG": { + "id": "ASG", + "path": "aws-cdk-asg-integ/AsgWithDefaultInstanceWarmup/ASG", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::AutoScaling::AutoScalingGroup", + "aws:cdk:cloudformation:props": { + "maxSize": "1", + "minSize": "1", + "defaultInstanceWarmup": 5, + "launchTemplate": { + "launchTemplateId": { + "Ref": "MainLT4FC09097" + }, + "version": { + "Fn::GetAtt": [ + "MainLT4FC09097", + "LatestVersionNumber" + ] + } + }, + "vpcZoneIdentifier": [ + { + "Ref": "VPCPrivateSubnet1Subnet8BCA10E0" + }, + { + "Ref": "VPCPrivateSubnet2SubnetCFCDAA7A" + } + ] + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-autoscaling.CfnAutoScalingGroup", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-autoscaling.AutoScalingGroup", + "version": "0.0.0" + } + }, "AsgFromMip": { "id": "AsgFromMip", "path": "aws-cdk-asg-integ/AsgFromMip", @@ -1049,6 +1086,14 @@ "id": "InstanceRole", "path": "aws-cdk-asg-integ/AsgWithGp3Blockdevice/InstanceRole", "children": { + "ImportInstanceRole": { + "id": "ImportInstanceRole", + "path": "aws-cdk-asg-integ/AsgWithGp3Blockdevice/InstanceRole/ImportInstanceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "aws-cdk-asg-integ/AsgWithGp3Blockdevice/InstanceRole/Resource", @@ -1202,12 +1247,36 @@ "fqn": "@aws-cdk/core.Resource", "version": "0.0.0" } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-cdk-asg-integ/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-cdk-asg-integ/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } } }, "constructInfo": { "fqn": "@aws-cdk/core.Stack", "version": "0.0.0" } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } } }, "constructInfo": { diff --git a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.ts b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.ts index d215e03d344bf..3e07a7b1e093b 100644 --- a/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.ts +++ b/packages/@aws-cdk/aws-autoscaling/test/integ.asg-lt.ts @@ -34,6 +34,12 @@ new autoscaling.AutoScalingGroup(stack, 'AsgFromLT', { desiredCapacity: 5, }); +new autoscaling.AutoScalingGroup(stack, 'AsgWithDefaultInstanceWarmup', { + vpc, + launchTemplate: lt, + defaultInstanceWarmup: cdk.Duration.seconds(5), +}); + new autoscaling.AutoScalingGroup(stack, 'AsgFromMip', { vpc, mixedInstancesPolicy: { diff --git a/packages/@aws-cdk/aws-certificatemanager/lambda-packages/dns_validated_certificate_handler/package.json b/packages/@aws-cdk/aws-certificatemanager/lambda-packages/dns_validated_certificate_handler/package.json index d8ec3bc9ab169..8b818d1b82425 100644 --- a/packages/@aws-cdk/aws-certificatemanager/lambda-packages/dns_validated_certificate_handler/package.json +++ b/packages/@aws-cdk/aws-certificatemanager/lambda-packages/dns_validated_certificate_handler/package.json @@ -29,7 +29,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/sinon": "^9.0.11", "@aws-cdk/cdk-build-tools": "0.0.0", "aws-sdk": "^2.596.0", diff --git a/packages/@aws-cdk/aws-cloudformation/package.json b/packages/@aws-cdk/aws-cloudformation/package.json index 9854e31e29859..e77fc63a8af4a 100644 --- a/packages/@aws-cdk/aws-cloudformation/package.json +++ b/packages/@aws-cdk/aws-cloudformation/package.json @@ -88,7 +88,7 @@ "@aws-cdk/integ-tests": "0.0.0", "@aws-cdk/cfn2ts": "0.0.0", "@aws-cdk/pkglint": "0.0.0", - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/jest": "^27.5.2", "jest": "^27.5.1" }, diff --git a/packages/@aws-cdk/aws-cloudtrail/README.md b/packages/@aws-cdk/aws-cloudtrail/README.md index 4a750517d60bd..26050e56a817d 100644 --- a/packages/@aws-cdk/aws-cloudtrail/README.md +++ b/packages/@aws-cdk/aws-cloudtrail/README.md @@ -197,3 +197,17 @@ new cloudtrail.Trail(this, 'OrganizationTrail', { isOrganizationTrail: true, }); ``` + +## CloudTrail Insights + +Set `InsightSelector` to enable Insight. +Insights selector values can be `ApiCallRateInsight`, `ApiErrorRateInsight`, or both. + +```ts +new Trail(stack, 'Insights', { + insightTypes: [ + InsightType.API_CALL_RATE, + InsightType.API_ERROR_RATE, + ], +}); +``` diff --git a/packages/@aws-cdk/aws-cloudtrail/lib/cloudtrail.ts b/packages/@aws-cdk/aws-cloudtrail/lib/cloudtrail.ts index 73cb247821560..8161e56fab336 100644 --- a/packages/@aws-cdk/aws-cloudtrail/lib/cloudtrail.ts +++ b/packages/@aws-cdk/aws-cloudtrail/lib/cloudtrail.ts @@ -127,6 +127,13 @@ export interface TrailProps { * @default - false */ readonly isOrganizationTrail?: boolean + + /** + * A JSON string that contains the insight types you want to log on a trail. + * + * @default - No Value. + */ + readonly insightTypes?: InsightType[] } /** @@ -158,6 +165,23 @@ export enum ReadWriteType { NONE = 'None', } +/** + * Util element for InsightSelector + */ +export class InsightType { + /** + * The type of insights to log on a trail. (API Call Rate) + */ + public static readonly API_CALL_RATE = new InsightType('ApiCallRateInsight'); + + /** + * The type of insights to log on a trail. (API Error Rate) + */ + public static readonly API_ERROR_RATE = new InsightType('ApiErrorRateInsight'); + + protected constructor(public readonly value: string) {} +} + /** * Cloud trail allows you to log events that happen in your AWS account * For example: @@ -213,6 +237,7 @@ export class Trail extends Resource { private s3bucket: s3.IBucket; private eventSelectors: EventSelector[] = []; private topic: sns.ITopic | undefined; + private insightTypeValues: InsightSelector[] | undefined; constructor(scope: Construct, id: string, props: TrailProps = {}) { super(scope, id, { @@ -283,6 +308,12 @@ export class Trail extends Resource { throw new Error('Both kmsKey and encryptionKey must not be specified. Use only encryptionKey'); } + if (props.insightTypes) { + this.insightTypeValues = props.insightTypes.map(function(t) { + return { insightType: t.value }; + }); + } + // TODO: not all regions support validation. Use service configuration data to fail gracefully const trail = new CfnTrail(this, 'Resource', { isLogging: true, @@ -298,6 +329,7 @@ export class Trail extends Resource { snsTopicName: this.topic?.topicName, eventSelectors: this.eventSelectors, isOrganizationTrail: props.isOrganizationTrail, + insightSelectors: this.insightTypeValues, }); this.trailArn = this.getResourceArnAttribute(trail.attrArn, { @@ -502,3 +534,7 @@ interface EventSelectorData { readonly type: string; readonly values: string[]; } + +interface InsightSelector { + readonly insightType?: string; +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-cloudtrail/package.json b/packages/@aws-cdk/aws-cloudtrail/package.json index 17df9eddd0812..6ae72b8456ee3 100644 --- a/packages/@aws-cdk/aws-cloudtrail/package.json +++ b/packages/@aws-cdk/aws-cloudtrail/package.json @@ -115,7 +115,8 @@ }, "awslint": { "exclude": [ - "events-method-signature:@aws-cdk/aws-cloudtrail.Trail.onEvent" + "events-method-signature:@aws-cdk/aws-cloudtrail.Trail.onEvent", + "docs-public-apis:@aws-cdk/aws-cloudtrail.InsightType.value" ] }, "engines": { diff --git a/packages/@aws-cdk/aws-cloudtrail/test/cloudtrail.test.ts b/packages/@aws-cdk/aws-cloudtrail/test/cloudtrail.test.ts index 9cb6149775fb1..c041a674621e6 100644 --- a/packages/@aws-cdk/aws-cloudtrail/test/cloudtrail.test.ts +++ b/packages/@aws-cdk/aws-cloudtrail/test/cloudtrail.test.ts @@ -7,7 +7,7 @@ import * as s3 from '@aws-cdk/aws-s3'; import * as sns from '@aws-cdk/aws-sns'; import { testDeprecated } from '@aws-cdk/cdk-build-tools'; import { Stack } from '@aws-cdk/core'; -import { ManagementEventSources, ReadWriteType, Trail } from '../lib'; +import { ManagementEventSources, ReadWriteType, Trail, InsightType } from '../lib'; const ExpectedBucketPolicyProperties = { PolicyDocument: { @@ -702,4 +702,79 @@ describe('cloudtrail', () => { }); }); }); -}); + describe('insights ', () => { + test('no properties', () => { + const stack = getTestStack(); + new Trail(stack, 'MyAmazingCloudTrail', { + insightTypes: [], + }); + Template.fromStack(stack).hasResourceProperties('AWS::CloudTrail::Trail', { + InsightSelectors: [], + }); + }); + test('API Call Rate properties', () => { + const stack = getTestStack(); + new Trail(stack, 'MyAmazingCloudTrail', { + insightTypes: [ + InsightType.API_CALL_RATE, + ], + }); + Template.fromStack(stack).hasResourceProperties('AWS::CloudTrail::Trail', { + InsightSelectors: [{ + InsightType: 'ApiCallRateInsight', + }], + }); + }); + test('API Error Rate properties', () => { + const stack = getTestStack(); + new Trail(stack, 'MyAmazingCloudTrail', { + insightTypes: [ + InsightType.API_ERROR_RATE, + ], + }); + Template.fromStack(stack).hasResourceProperties('AWS::CloudTrail::Trail', { + InsightSelectors: [{ + InsightType: 'ApiErrorRateInsight', + }], + }); + }); + test('duplicate properties', () => { + const stack = getTestStack(); + new Trail(stack, 'MyAmazingCloudTrail', { + insightTypes: [ + InsightType.API_CALL_RATE, + InsightType.API_CALL_RATE, + ], + }); + Template.fromStack(stack).hasResourceProperties('AWS::CloudTrail::Trail', { + InsightSelectors: [ + { + InsightType: 'ApiCallRateInsight', + }, + { + InsightType: 'ApiCallRateInsight', + }, + ], + }); + }); + test('ALL properties', () => { + const stack = getTestStack(); + new Trail(stack, 'MyAmazingCloudTrail', { + insightTypes: [ + InsightType.API_CALL_RATE, + InsightType.API_ERROR_RATE, + ], + }); + Template.fromStack(stack).hasResourceProperties('AWS::CloudTrail::Trail', { + InsightSelectors: [ + { + InsightType: 'ApiCallRateInsight', + }, + { + InsightType: 'ApiErrorRateInsight', + }, + ], + }); + }); + }); +}); \ No newline at end of file diff --git a/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/__entrypoint__.js b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/__entrypoint__.js new file mode 100644 index 0000000000000..1e3a3093c1706 --- /dev/null +++ b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/__entrypoint__.js @@ -0,0 +1,144 @@ +"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': responseBody.length }, + }; + 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLWVudHJ5cG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJub2RlanMtZW50cnlwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsMkJBQTJCO0FBRTNCLGlCQUFpQjtBQUNKLFFBQUEsUUFBUSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsR0FBRyxFQUFFLFVBQVU7SUFDZixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGdCQUFnQixFQUFFLFNBQVM7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sZ0NBQWdDLEdBQUcsd0RBQXdELENBQUM7QUFDbEcsTUFBTSwwQkFBMEIsR0FBRyw4REFBOEQsQ0FBQztBQVczRixLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWtELEVBQUUsT0FBMEI7SUFDMUcsTUFBTSxjQUFjLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDeEQsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0QsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxhQUFhO0lBQ2IsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssZ0NBQWdDLEVBQUU7UUFDbkcsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUN0RSxNQUFNLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTztLQUNSO0lBRUQsSUFBSTtRQUNGLHlFQUF5RTtRQUN6RSxpRUFBaUU7UUFDakUsd0NBQXdDO1FBQ3hDLGlFQUFpRTtRQUNqRSxNQUFNLFdBQVcsR0FBWSxPQUFPLENBQUMsZ0JBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUQsdURBQXVEO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEQsMkJBQTJCO1FBQzNCLE1BQU0sY0FBYyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUNoRDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsTUFBTSxJQUFJLEdBQWE7WUFDckIsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLGdCQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLHlFQUF5RTtZQUN6RSxtRUFBbUU7WUFDbkUsd0VBQXdFO1lBQ3hFLHFFQUFxRTtZQUNyRSxnQ0FBZ0M7WUFDaEMsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtnQkFDbEMsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsNEdBQTRHLENBQUMsQ0FBQztnQkFDM0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdDQUFnQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNMLGtFQUFrRTtnQkFDbEUsNkRBQTZEO2dCQUM3RCxnQkFBUSxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDcEc7U0FDRjtRQUVELG1FQUFtRTtRQUNuRSxNQUFNLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDdEM7QUFDSCxDQUFDO0FBbkRELDBCQW1EQztBQUVELFNBQVMsY0FBYyxDQUNyQixVQUF5RixFQUN6RixrQkFBMEMsRUFBRztJQUU3QyxzRUFBc0U7SUFDdEUsdUJBQXVCO0lBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO0lBRXZILGtFQUFrRTtJQUNsRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLGtCQUFrQixLQUFLLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtRQUMvRixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxVQUFVLENBQUMsa0JBQWtCLFNBQVMsZUFBZSxDQUFDLGtCQUFrQixtQkFBbUIsQ0FBQyxDQUFDO0tBQ3RLO0lBRUQsMERBQTBEO0lBQzFELE9BQU87UUFDTCxHQUFHLFVBQVU7UUFDYixHQUFHLGVBQWU7UUFDbEIsa0JBQWtCLEVBQUUsa0JBQWtCO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE0QixFQUFFLEtBQWU7SUFDekUsTUFBTSxJQUFJLEdBQW1EO1FBQzNELE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTTtRQUM5QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSwwQkFBMEI7UUFDMUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtRQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0tBQ2pCLENBQUM7SUFFRixnQkFBUSxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHO1FBQ1YsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1FBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRTtLQUN2RSxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUc7UUFDbkIsUUFBUSxFQUFFLENBQUM7UUFDWCxLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUM7SUFDRixNQUFNLFdBQVcsQ0FBQyxZQUFZLEVBQUUsZ0JBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxPQUE2QixFQUFFLFlBQW9CO0lBQ3ZGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNmO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxHQUFHLE1BQWE7SUFDL0Msc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQVNELFNBQWdCLFdBQVcsQ0FBMEIsT0FBcUIsRUFBRSxFQUE0QjtJQUN0RyxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUssRUFBRSxFQUFFO1FBQ3hCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN2QixPQUFPLElBQUksRUFBRTtZQUNYLElBQUk7Z0JBQ0YsT0FBTyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ3hCO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsSUFBSSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ25CLE1BQU0sQ0FBQyxDQUFDO2lCQUNUO2dCQUNELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDVDtTQUNGO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQWhCRCxrQ0FnQkM7QUFFRCxLQUFLLFVBQVUsS0FBSyxDQUFDLEVBQVU7SUFDN0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcblxuLy8gZm9yIHVuaXQgdGVzdHNcbmV4cG9ydCBjb25zdCBleHRlcm5hbCA9IHtcbiAgc2VuZEh0dHBSZXF1ZXN0OiBkZWZhdWx0U2VuZEh0dHBSZXF1ZXN0LFxuICBsb2c6IGRlZmF1bHRMb2csXG4gIGluY2x1ZGVTdGFja1RyYWNlczogdHJ1ZSxcbiAgdXNlckhhbmRsZXJJbmRleDogJy4vaW5kZXgnLFxufTtcblxuY29uc3QgQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVIgPSAnQVdTQ0RLOjpDdXN0b21SZXNvdXJjZVByb3ZpZGVyRnJhbWV3b3JrOjpDUkVBVEVfRkFJTEVEJztcbmNvbnN0IE1JU1NJTkdfUEhZU0lDQUxfSURfTUFSS0VSID0gJ0FXU0NESzo6Q3VzdG9tUmVzb3VyY2VQcm92aWRlckZyYW1ld29yazo6TUlTU0lOR19QSFlTSUNBTF9JRCc7XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlID0gQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCAmIEhhbmRsZXJSZXNwb25zZTtcbmV4cG9ydCB0eXBlIEhhbmRsZXIgPSAoZXZlbnQ6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIGNvbnRleHQ6IEFXU0xhbWJkYS5Db250ZXh0KSA9PiBQcm9taXNlPEhhbmRsZXJSZXNwb25zZSB8IHZvaWQ+O1xuZXhwb3J0IHR5cGUgSGFuZGxlclJlc3BvbnNlID0gdW5kZWZpbmVkIHwge1xuICBEYXRhPzogYW55O1xuICBQaHlzaWNhbFJlc291cmNlSWQ/OiBzdHJpbmc7XG4gIFJlYXNvbj86IHN0cmluZztcbiAgTm9FY2hvPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50LCBjb250ZXh0OiBBV1NMYW1iZGEuQ29udGV4dCkge1xuICBjb25zdCBzYW5pdGl6ZWRFdmVudCA9IHsgLi4uZXZlbnQsIFJlc3BvbnNlVVJMOiAnLi4uJyB9O1xuICBleHRlcm5hbC5sb2coSlNPTi5zdHJpbmdpZnkoc2FuaXRpemVkRXZlbnQsIHVuZGVmaW5lZCwgMikpO1xuXG4gIC8vIGlnbm9yZSBERUxFVEUgZXZlbnQgd2hlbiB0aGUgcGh5c2ljYWwgcmVzb3VyY2UgSUQgaXMgdGhlIG1hcmtlciB0aGF0XG4gIC8vIGluZGljYXRlcyB0aGF0IHRoaXMgREVMRVRFIGlzIGEgc3Vic2VxdWVudCBERUxFVEUgdG8gYSBmYWlsZWQgQ1JFQVRFXG4gIC8vIG9wZXJhdGlvbi5cbiAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSAnRGVsZXRlJyAmJiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgPT09IENSRUFURV9GQUlMRURfUEhZU0lDQUxfSURfTUFSS0VSKSB7XG4gICAgZXh0ZXJuYWwubG9nKCdpZ25vcmluZyBERUxFVEUgZXZlbnQgY2F1c2VkIGJ5IGEgZmFpbGVkIENSRUFURSBldmVudCcpO1xuICAgIGF3YWl0IHN1Ym1pdFJlc3BvbnNlKCdTVUNDRVNTJywgZXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gaW52b2tlIHRoZSB1c2VyIGhhbmRsZXIuIHRoaXMgaXMgaW50ZW50aW9uYWxseSBpbnNpZGUgdGhlIHRyeS1jYXRjaCB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IGlmIHRoZXJlIGlzIGFuIGVycm9yIGl0J3MgcmVwb3J0ZWQgYXMgYSBmYWlsdXJlIHRvXG4gICAgLy8gY2xvdWRmb3JtYXRpb24gKG90aGVyd2lzZSBjZm4gd2FpdHMpLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgY29uc3QgdXNlckhhbmRsZXI6IEhhbmRsZXIgPSByZXF1aXJlKGV4dGVybmFsLnVzZXJIYW5kbGVySW5kZXgpLmhhbmRsZXI7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXNlckhhbmRsZXIoc2FuaXRpemVkRXZlbnQsIGNvbnRleHQpO1xuXG4gICAgLy8gdmFsaWRhdGUgdXNlciByZXNwb25zZSBhbmQgY3JlYXRlIHRoZSBjb21iaW5lZCBldmVudFxuICAgIGNvbnN0IHJlc3BvbnNlRXZlbnQgPSByZW5kZXJSZXNwb25zZShldmVudCwgcmVzdWx0KTtcblxuICAgIC8vIHN1Ym1pdCB0byBjZm4gYXMgc3VjY2Vzc1xuICAgIGF3YWl0IHN1Ym1pdFJlc3BvbnNlKCdTVUNDRVNTJywgcmVzcG9uc2VFdmVudCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCByZXNwOiBSZXNwb25zZSA9IHtcbiAgICAgIC4uLmV2ZW50LFxuICAgICAgUmVhc29uOiBleHRlcm5hbC5pbmNsdWRlU3RhY2tUcmFjZXMgPyBlLnN0YWNrIDogZS5tZXNzYWdlLFxuICAgIH07XG5cbiAgICBpZiAoIXJlc3AuUGh5c2ljYWxSZXNvdXJjZUlkKSB7XG4gICAgICAvLyBzcGVjaWFsIGNhc2U6IGlmIENSRUFURSBmYWlscywgd2hpY2ggdXN1YWxseSBpbXBsaWVzLCB3ZSB1c3VhbGx5IGRvbid0XG4gICAgICAvLyBoYXZlIGEgcGh5c2ljYWwgcmVzb3VyY2UgaWQuIGluIHRoaXMgY2FzZSwgdGhlIHN1YnNlcXVlbnQgREVMRVRFXG4gICAgICAvLyBvcGVyYXRpb24gZG9lcyBub3QgaGF2ZSBhbnkgbWVhbmluZywgYW5kIHdpbGwgbGlrZWx5IGZhaWwgYXMgd2VsbC4gdG9cbiAgICAgIC8vIGFkZHJlc3MgdGhpcywgd2UgdXNlIGEgbWFya2VyIHNvIHRoZSBwcm92aWRlciBmcmFtZXdvcmsgY2FuIHNpbXBseVxuICAgICAgLy8gaWdub3JlIHRoZSBzdWJzZXF1ZW50IERFTEVURS5cbiAgICAgIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gJ0NyZWF0ZScpIHtcbiAgICAgICAgZXh0ZXJuYWwubG9nKCdDUkVBVEUgZmFpbGVkLCByZXNwb25kaW5nIHdpdGggYSBtYXJrZXIgcGh5c2ljYWwgcmVzb3VyY2UgaWQgc28gdGhhdCB0aGUgc3Vic2VxdWVudCBERUxFVEUgd2lsbCBiZSBpZ25vcmVkJyk7XG4gICAgICAgIHJlc3AuUGh5c2ljYWxSZXNvdXJjZUlkID0gQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UsIGlmIFBoeXNpY2FsUmVzb3VyY2VJZCBpcyBub3Qgc3BlY2lmaWVkLCBzb21ldGhpbmcgaXNcbiAgICAgICAgLy8gdGVycmlibHkgd3JvbmcgYmVjYXVzZSBhbGwgb3RoZXIgZXZlbnRzIHNob3VsZCBoYXZlIGFuIElELlxuICAgICAgICBleHRlcm5hbC5sb2coYEVSUk9SOiBNYWxmb3JtZWQgZXZlbnQuIFwiUGh5c2ljYWxSZXNvdXJjZUlkXCIgaXMgcmVxdWlyZWQ6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQpfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMgaXMgYW4gYWN0dWFsIGVycm9yLCBmYWlsIHRoZSBhY3Rpdml0eSBhbHRvZ2V0aGVyIGFuZCBleGlzdC5cbiAgICBhd2FpdCBzdWJtaXRSZXNwb25zZSgnRkFJTEVEJywgcmVzcCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyUmVzcG9uc2UoXG4gIGNmblJlcXVlc3Q6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQgJiB7IFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZyB9LFxuICBoYW5kbGVyUmVzcG9uc2U6IHZvaWQgfCBIYW5kbGVyUmVzcG9uc2UgPSB7IH0pOiBSZXNwb25zZSB7XG5cbiAgLy8gaWYgcGh5c2ljYWwgSUQgaXMgbm90IHJldHVybmVkLCB3ZSBoYXZlIHNvbWUgZGVmYXVsdHMgZm9yIHlvdSBiYXNlZFxuICAvLyBvbiB0aGUgcmVxdWVzdCB0eXBlLlxuICBjb25zdCBwaHlzaWNhbFJlc291cmNlSWQgPSBoYW5kbGVyUmVzcG9uc2UuUGh5c2ljYWxSZXNvdXJjZUlkID8/IGNmblJlcXVlc3QuUGh5c2ljYWxSZXNvdXJjZUlkID8/IGNmblJlcXVlc3QuUmVxdWVzdElkO1xuXG4gIC8vIGlmIHdlIGFyZSBpbiBERUxFVEUgYW5kIHBoeXNpY2FsIElEIHdhcyBjaGFuZ2VkLCBpdCdzIGFuIGVycm9yLlxuICBpZiAoY2ZuUmVxdWVzdC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScgJiYgcGh5c2ljYWxSZXNvdXJjZUlkICE9PSBjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgREVMRVRFOiBjYW5ub3QgY2hhbmdlIHRoZSBwaHlzaWNhbCByZXNvdXJjZSBJRCBmcm9tIFwiJHtjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZH1cIiB0byBcIiR7aGFuZGxlclJlc3BvbnNlLlBoeXNpY2FsUmVzb3VyY2VJZH1cIiBkdXJpbmcgZGVsZXRpb25gKTtcbiAgfVxuXG4gIC8vIG1lcmdlIHJlcXVlc3QgZXZlbnQgYW5kIHJlc3VsdCBldmVudCAocmVzdWx0IHByZXZhaWxzKS5cbiAgcmV0dXJuIHtcbiAgICAuLi5jZm5SZXF1ZXN0LFxuICAgIC4uLmhhbmRsZXJSZXNwb25zZSxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3VibWl0UmVzcG9uc2Uoc3RhdHVzOiAnU1VDQ0VTUycgfCAnRkFJTEVEJywgZXZlbnQ6IFJlc3BvbnNlKSB7XG4gIGNvbnN0IGpzb246IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2UgPSB7XG4gICAgU3RhdHVzOiBzdGF0dXMsXG4gICAgUmVhc29uOiBldmVudC5SZWFzb24gPz8gc3RhdHVzLFxuICAgIFN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gICAgUmVxdWVzdElkOiBldmVudC5SZXF1ZXN0SWQsXG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgfHwgTUlTU0lOR19QSFlTSUNBTF9JRF9NQVJLRVIsXG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIE5vRWNobzogZXZlbnQuTm9FY2hvLFxuICAgIERhdGE6IGV2ZW50LkRhdGEsXG4gIH07XG5cbiAgZXh0ZXJuYWwubG9nKCdzdWJtaXQgcmVzcG9uc2UgdG8gY2xvdWRmb3JtYXRpb24nLCBqc29uKTtcblxuICBjb25zdCByZXNwb25zZUJvZHkgPSBKU09OLnN0cmluZ2lmeShqc29uKTtcbiAgY29uc3QgcGFyc2VkVXJsID0gdXJsLnBhcnNlKGV2ZW50LlJlc3BvbnNlVVJMKTtcbiAgY29uc3QgcmVxID0ge1xuICAgIGhvc3RuYW1lOiBwYXJzZWRVcmwuaG9zdG5hbWUsXG4gICAgcGF0aDogcGFyc2VkVXJsLnBhdGgsXG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICBoZWFkZXJzOiB7ICdjb250ZW50LXR5cGUnOiAnJywgJ2NvbnRlbnQtbGVuZ3RoJzogcmVzcG9uc2VCb2R5Lmxlbmd0aCB9LFxuICB9O1xuXG4gIGNvbnN0IHJldHJ5T3B0aW9ucyA9IHtcbiAgICBhdHRlbXB0czogNSxcbiAgICBzbGVlcDogMTAwMCxcbiAgfTtcbiAgYXdhaXQgd2l0aFJldHJpZXMocmV0cnlPcHRpb25zLCBleHRlcm5hbC5zZW5kSHR0cFJlcXVlc3QpKHJlcSwgcmVzcG9uc2VCb2R5KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdFNlbmRIdHRwUmVxdWVzdChvcHRpb25zOiBodHRwcy5SZXF1ZXN0T3B0aW9ucywgcmVzcG9uc2VCb2R5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucywgXyA9PiByZXNvbHZlKCkpO1xuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgcmVxdWVzdC53cml0ZShyZXNwb25zZUJvZHkpO1xuICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdExvZyhmbXQ6IHN0cmluZywgLi4ucGFyYW1zOiBhbnlbXSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhmbXQsIC4uLnBhcmFtcyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zIHtcbiAgLyoqIEhvdyBtYW55IHJldHJpZXMgKHdpbGwgYXQgbGVhc3QgdHJ5IG9uY2UpICovXG4gIHJlYWRvbmx5IGF0dGVtcHRzOiBudW1iZXI7XG4gIC8qKiBTbGVlcCBiYXNlLCBpbiBtcyAqL1xuICByZWFkb25seSBzbGVlcDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJldHJpZXM8QSBleHRlbmRzIEFycmF5PGFueT4sIEI+KG9wdGlvbnM6IFJldHJ5T3B0aW9ucywgZm46ICguLi54czogQSkgPT4gUHJvbWlzZTxCPik6ICguLi54czogQSkgPT4gUHJvbWlzZTxCPiB7XG4gIHJldHVybiBhc3luYyAoLi4ueHM6IEEpID0+IHtcbiAgICBsZXQgYXR0ZW1wdHMgPSBvcHRpb25zLmF0dGVtcHRzO1xuICAgIGxldCBtcyA9IG9wdGlvbnMuc2xlZXA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbiguLi54cyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChhdHRlbXB0cy0tIDw9IDApIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1zKSk7XG4gICAgICAgIG1zICo9IDI7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2spID0+IHNldFRpbWVvdXQob2ssIG1zKSk7XG59Il19 \ No newline at end of file diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.js b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/index.js similarity index 100% rename from packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.js rename to packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/index.js diff --git a/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/aws-cdk-cloudtrail-inshights-test.assets.json b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/aws-cdk-cloudtrail-inshights-test.assets.json new file mode 100644 index 0000000000000..b8f6f1418d4b3 --- /dev/null +++ b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/aws-cdk-cloudtrail-inshights-test.assets.json @@ -0,0 +1,32 @@ +{ + "version": "22.0.0", + "files": { + "33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c": { + "source": { + "path": "asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "9e54867c184c79374c51ba171db494a5736a30294e618efa94e199b94e58868e": { + "source": { + "path": "aws-cdk-cloudtrail-inshights-test.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "9e54867c184c79374c51ba171db494a5736a30294e618efa94e199b94e58868e.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/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/aws-cdk-cloudtrail-inshights-test.template.json b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/aws-cdk-cloudtrail-inshights-test.template.json new file mode 100644 index 0000000000000..fd514eb5cee35 --- /dev/null +++ b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/aws-cdk-cloudtrail-inshights-test.template.json @@ -0,0 +1,246 @@ +{ + "Resources": { + "S3486F821D": { + "Type": "AWS::S3::Bucket", + "Properties": { + "Tags": [ + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "S3Policy2E4AA1D6": { + "Type": "AWS::S3::BucketPolicy", + "Properties": { + "Bucket": { + "Ref": "S3486F821D" + }, + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:List*" + ], + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + } + }, + "Resource": [ + { + "Fn::GetAtt": [ + "S3486F821D", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "S3486F821D", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": "s3:GetBucketAcl", + "Effect": "Allow", + "Principal": { + "Service": "cloudtrail.amazonaws.com" + }, + "Resource": { + "Fn::GetAtt": [ + "S3486F821D", + "Arn" + ] + } + }, + { + "Action": "s3:PutObject", + "Condition": { + "StringEquals": { + "s3:x-amz-acl": "bucket-owner-full-control" + } + }, + "Effect": "Allow", + "Principal": { + "Service": "cloudtrail.amazonaws.com" + }, + "Resource": { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "S3486F821D", + "Arn" + ] + }, + "/AWSLogs/", + { + "Ref": "AWS::AccountId" + }, + "/*" + ] + ] + } + } + ], + "Version": "2012-10-17" + } + } + }, + "S3AutoDeleteObjectsCustomResource5A4102C9": { + "Type": "Custom::S3AutoDeleteObjects", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "Arn" + ] + }, + "BucketName": { + "Ref": "S3486F821D" + } + }, + "DependsOn": [ + "S3Policy2E4AA1D6" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": { + "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" + } + ] + } + }, + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c.zip" + }, + "Timeout": 900, + "MemorySize": 128, + "Handler": "__entrypoint__.handler", + "Role": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + }, + "Runtime": "nodejs14.x", + "Description": { + "Fn::Join": [ + "", + [ + "Lambda function for auto-deleting objects in ", + { + "Ref": "S3486F821D" + }, + " S3 bucket." + ] + ] + } + }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ] + }, + "Trail022F0CF2": { + "Type": "AWS::CloudTrail::Trail", + "Properties": { + "IsLogging": true, + "S3BucketName": { + "Ref": "S3486F821D" + }, + "EnableLogFileValidation": true, + "EventSelectors": [], + "IncludeGlobalServiceEvents": true, + "InsightSelectors": [ + { + "InsightType": "ApiCallRateInsight" + }, + { + "InsightType": "ApiErrorRateInsight" + } + ], + "IsMultiRegionTrail": true + }, + "DependsOn": [ + "S3Policy2E4AA1D6" + ] + } + }, + "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/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0.assets.json b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0.assets.json new file mode 100644 index 0000000000000..e8b86d44c5823 --- /dev/null +++ b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0.assets.json @@ -0,0 +1,19 @@ +{ + "version": "22.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0.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/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0.template.json b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0.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/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/cdk.out b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/cdk.out new file mode 100644 index 0000000000000..145739f539580 --- /dev/null +++ b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/integ.json b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/integ.json new file mode 100644 index 0000000000000..c1ea903f0978f --- /dev/null +++ b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "22.0.0", + "testCases": { + "aws-cdk-cloudtrail-inshights/DefaultTest": { + "stacks": [ + "aws-cdk-cloudtrail-inshights-test" + ], + "assertionStack": "aws-cdk-cloudtrail-inshights/DefaultTest/DeployAssert", + "assertionStackName": "awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/manifest.json b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/manifest.json new file mode 100644 index 0000000000000..11c9688123ea5 --- /dev/null +++ b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/manifest.json @@ -0,0 +1,141 @@ +{ + "version": "22.0.0", + "artifacts": { + "aws-cdk-cloudtrail-inshights-test.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "aws-cdk-cloudtrail-inshights-test.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "aws-cdk-cloudtrail-inshights-test": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "aws-cdk-cloudtrail-inshights-test.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}/9e54867c184c79374c51ba171db494a5736a30294e618efa94e199b94e58868e.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "aws-cdk-cloudtrail-inshights-test.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-cdk-cloudtrail-inshights-test.assets" + ], + "metadata": { + "/aws-cdk-cloudtrail-inshights-test/S3/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "S3486F821D" + } + ], + "/aws-cdk-cloudtrail-inshights-test/S3/Policy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "S3Policy2E4AA1D6" + } + ], + "/aws-cdk-cloudtrail-inshights-test/S3/AutoDeleteObjectsCustomResource/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "S3AutoDeleteObjectsCustomResource5A4102C9" + } + ], + "/aws-cdk-cloudtrail-inshights-test/Custom::S3AutoDeleteObjectsCustomResourceProvider/Role": [ + { + "type": "aws:cdk:logicalId", + "data": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + } + ], + "/aws-cdk-cloudtrail-inshights-test/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler": [ + { + "type": "aws:cdk:logicalId", + "data": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F" + } + ], + "/aws-cdk-cloudtrail-inshights-test/Trail/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Trail022F0CF2" + } + ], + "/aws-cdk-cloudtrail-inshights-test/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-cdk-cloudtrail-inshights-test/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "aws-cdk-cloudtrail-inshights-test" + }, + "awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0.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": [ + "awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0.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": [ + "awscdkcloudtrailinshightsDefaultTestDeployAssertF7B86FF0.assets" + ], + "metadata": { + "/aws-cdk-cloudtrail-inshights/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-cdk-cloudtrail-inshights/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "aws-cdk-cloudtrail-inshights/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/tree.json b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/tree.json new file mode 100644 index 0000000000000..208617f44a1be --- /dev/null +++ b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.js.snapshot/tree.json @@ -0,0 +1,333 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "aws-cdk-cloudtrail-inshights-test": { + "id": "aws-cdk-cloudtrail-inshights-test", + "path": "aws-cdk-cloudtrail-inshights-test", + "children": { + "S3": { + "id": "S3", + "path": "aws-cdk-cloudtrail-inshights-test/S3", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-cloudtrail-inshights-test/S3/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::S3::Bucket", + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "aws-cdk:auto-delete-objects", + "value": "true" + } + ] + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-s3.CfnBucket", + "version": "0.0.0" + } + }, + "Policy": { + "id": "Policy", + "path": "aws-cdk-cloudtrail-inshights-test/S3/Policy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-cloudtrail-inshights-test/S3/Policy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::S3::BucketPolicy", + "aws:cdk:cloudformation:props": { + "bucket": { + "Ref": "S3486F821D" + }, + "policyDocument": { + "Statement": [ + { + "Action": [ + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:List*" + ], + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + } + }, + "Resource": [ + { + "Fn::GetAtt": [ + "S3486F821D", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "S3486F821D", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + }, + { + "Action": "s3:GetBucketAcl", + "Effect": "Allow", + "Principal": { + "Service": "cloudtrail.amazonaws.com" + }, + "Resource": { + "Fn::GetAtt": [ + "S3486F821D", + "Arn" + ] + } + }, + { + "Action": "s3:PutObject", + "Condition": { + "StringEquals": { + "s3:x-amz-acl": "bucket-owner-full-control" + } + }, + "Effect": "Allow", + "Principal": { + "Service": "cloudtrail.amazonaws.com" + }, + "Resource": { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "S3486F821D", + "Arn" + ] + }, + "/AWSLogs/", + { + "Ref": "AWS::AccountId" + }, + "/*" + ] + ] + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-s3.CfnBucketPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-s3.BucketPolicy", + "version": "0.0.0" + } + }, + "AutoDeleteObjectsCustomResource": { + "id": "AutoDeleteObjectsCustomResource", + "path": "aws-cdk-cloudtrail-inshights-test/S3/AutoDeleteObjectsCustomResource", + "children": { + "Default": { + "id": "Default", + "path": "aws-cdk-cloudtrail-inshights-test/S3/AutoDeleteObjectsCustomResource/Default", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.CustomResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-s3.Bucket", + "version": "0.0.0" + } + }, + "Custom::S3AutoDeleteObjectsCustomResourceProvider": { + "id": "Custom::S3AutoDeleteObjectsCustomResourceProvider", + "path": "aws-cdk-cloudtrail-inshights-test/Custom::S3AutoDeleteObjectsCustomResourceProvider", + "children": { + "Staging": { + "id": "Staging", + "path": "aws-cdk-cloudtrail-inshights-test/Custom::S3AutoDeleteObjectsCustomResourceProvider/Staging", + "constructInfo": { + "fqn": "@aws-cdk/core.AssetStaging", + "version": "0.0.0" + } + }, + "Role": { + "id": "Role", + "path": "aws-cdk-cloudtrail-inshights-test/Custom::S3AutoDeleteObjectsCustomResourceProvider/Role", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + }, + "Handler": { + "id": "Handler", + "path": "aws-cdk-cloudtrail-inshights-test/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.CustomResourceProvider", + "version": "0.0.0" + } + }, + "Trail": { + "id": "Trail", + "path": "aws-cdk-cloudtrail-inshights-test/Trail", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-cdk-cloudtrail-inshights-test/Trail/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CloudTrail::Trail", + "aws:cdk:cloudformation:props": { + "isLogging": true, + "s3BucketName": { + "Ref": "S3486F821D" + }, + "enableLogFileValidation": true, + "eventSelectors": [], + "includeGlobalServiceEvents": true, + "insightSelectors": [ + { + "insightType": "ApiCallRateInsight" + }, + { + "insightType": "ApiErrorRateInsight" + } + ], + "isMultiRegionTrail": true + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-cloudtrail.CfnTrail", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-cloudtrail.Trail", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-cdk-cloudtrail-inshights-test/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-cdk-cloudtrail-inshights-test/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + }, + "aws-cdk-cloudtrail-inshights": { + "id": "aws-cdk-cloudtrail-inshights", + "path": "aws-cdk-cloudtrail-inshights", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "aws-cdk-cloudtrail-inshights/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "aws-cdk-cloudtrail-inshights/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.161" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "aws-cdk-cloudtrail-inshights/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-cdk-cloudtrail-inshights/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-cdk-cloudtrail-inshights/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.IntegTestCase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.IntegTest", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.161" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.App", + "version": "0.0.0" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.ts b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.ts new file mode 100644 index 0000000000000..d43dc2493394c --- /dev/null +++ b/packages/@aws-cdk/aws-cloudtrail/test/integ.cloudtrail-insight.ts @@ -0,0 +1,47 @@ +import * as iam from '@aws-cdk/aws-iam'; +import * as s3 from '@aws-cdk/aws-s3'; +import { App, RemovalPolicy, Stack } from '@aws-cdk/core'; +import * as integ from '@aws-cdk/integ-tests'; + +import * as cloudtrail from '../lib'; + +const app = new App(); +const stack = new Stack(app, 'aws-cdk-cloudtrail-inshights-test'); + +const cloudTrailPrincipal = new iam.ServicePrincipal('cloudtrail.amazonaws.com'); + +const Trailbucket = new s3.Bucket(stack, 'S3', { + encryption: s3.BucketEncryption.UNENCRYPTED, + removalPolicy: RemovalPolicy.DESTROY, + autoDeleteObjects: true, +}); + +Trailbucket.addToResourcePolicy(new iam.PolicyStatement({ + resources: [Trailbucket.bucketArn], + actions: ['s3:GetBucketAcl'], + principals: [cloudTrailPrincipal], +})); + +Trailbucket.addToResourcePolicy(new iam.PolicyStatement({ + resources: [Trailbucket.arnForObjects(`AWSLogs/${Stack.of(stack).account}/*`)], + actions: ['s3:PutObject'], + principals: [cloudTrailPrincipal], + conditions: { + StringEquals: { 's3:x-amz-acl': 'bucket-owner-full-control' }, + }, +})); + +new cloudtrail.Trail(stack, 'Trail', { + bucket: Trailbucket, + insightTypes: [ + cloudtrail.InsightType.API_CALL_RATE, + cloudtrail.InsightType.API_ERROR_RATE, + ], +}); + + +new integ.IntegTest(app, 'aws-cdk-cloudtrail-inshights', { + testCases: [stack], +}); + +app.synth(); diff --git a/packages/@aws-cdk/aws-cloudwatch/lib/metric.ts b/packages/@aws-cdk/aws-cloudwatch/lib/metric.ts index f3f9400712f02..f2a8093e27685 100644 --- a/packages/@aws-cdk/aws-cloudwatch/lib/metric.ts +++ b/packages/@aws-cdk/aws-cloudwatch/lib/metric.ts @@ -589,7 +589,7 @@ export class MathExpression implements IMetric { const warnings = []; - if (missingIdentifiers.length > 0) { + if (!this.expression.toUpperCase().match('\\s*SELECT\\s.*') && missingIdentifiers.length > 0) { warnings.push(`Math expression '${this.expression}' references unknown identifiers: ${missingIdentifiers.join(', ')}. Please add them to the 'usingMetrics' map.`); } diff --git a/packages/@aws-cdk/aws-cloudwatch/test/metric-math.test.ts b/packages/@aws-cdk/aws-cloudwatch/test/metric-math.test.ts index 480a25e3d748e..72e61cbd0a19a 100644 --- a/packages/@aws-cdk/aws-cloudwatch/test/metric-math.test.ts +++ b/packages/@aws-cdk/aws-cloudwatch/test/metric-math.test.ts @@ -75,6 +75,14 @@ describe('Metric Math', () => { expect(m.warnings).toContainEqual(expect.stringContaining("'m1 + m2' references unknown identifiers")); }); + test('metrics insights expression does not produce warning for unknown identifier', () => { + const m = new MathExpression({ + expression: "SELECT AVG(CpuUsage) FROM EC2 WHERE Instance = '123456'", + }); + + expect(m.warnings).toBeUndefined(); + }); + test('math expression referring to unknown expressions produces a warning, even when nested', () => { const m = new MathExpression({ expression: 'e1 + 5', diff --git a/packages/@aws-cdk/aws-codebuild/README.md b/packages/@aws-cdk/aws-codebuild/README.md index d22d46bd678a1..8748b4368a898 100644 --- a/packages/@aws-cdk/aws-codebuild/README.md +++ b/packages/@aws-cdk/aws-codebuild/README.md @@ -158,7 +158,7 @@ const project = new codebuild.PipelineProject(this, 'Project', { }) ``` -For more details, see the readme of the `@aws-cdk/@aws-codepipeline-actions` package. +For more details, see the readme of the `@aws-cdk/aws-codepipeline-actions` package. ## Caching diff --git a/packages/@aws-cdk/aws-codepipeline-actions/package.json b/packages/@aws-cdk/aws-codepipeline-actions/package.json index e688e99db0c3e..8d1eff5f5bf79 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/package.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/package.json @@ -87,7 +87,7 @@ "@aws-cdk/cx-api": "0.0.0", "@aws-cdk/pkglint": "0.0.0", "@types/jest": "^27.5.2", - "@types/lodash": "^4.14.189", + "@types/lodash": "^4.14.191", "jest": "^27.5.1", "lodash": "^4.17.21" }, diff --git a/packages/@aws-cdk/aws-cognito/README.md b/packages/@aws-cdk/aws-cognito/README.md index 75a5e549f9095..f01f8646a4d1f 100644 --- a/packages/@aws-cdk/aws-cognito/README.md +++ b/packages/@aws-cdk/aws-cognito/README.md @@ -356,6 +356,16 @@ new cognito.UserPool(this, 'UserPool', { The default for account recovery is by phone if available and by email otherwise. A user will not be allowed to reset their password via phone if they are also using it for MFA. +#### Advanced Security Mode + +User pools can be configured to use Advanced security. You can turn the user pool advanced security features on, and customize the actions that are taken in response to different risks. Or you can use audit mode to gather metrics on detected risks without taking action. In audit mode, the advanced security features publish metrics to Amazon CloudWatch. See the [documentation on Advanced security](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html) to learn more. + +```ts +new cognito.UserPool(this, 'myuserpool', { + // ... + advancedSecurityMode: cognito.AdvancedSecurityMode.ENFORCED, +}); +``` ### Emails diff --git a/packages/@aws-cdk/aws-cognito/lib/user-pool.ts b/packages/@aws-cdk/aws-cognito/lib/user-pool.ts index 29e3b6e28338c..63cc7bc587631 100644 --- a/packages/@aws-cdk/aws-cognito/lib/user-pool.ts +++ b/packages/@aws-cdk/aws-cognito/lib/user-pool.ts @@ -496,6 +496,19 @@ export interface DeviceTracking { readonly deviceOnlyRememberedOnUserPrompt: boolean; } +/** + * The different ways in which a user pool's Advanced Security Mode can be configured. + * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-userpooladdons.html#cfn-cognito-userpool-userpooladdons-advancedsecuritymode + */ +export enum AdvancedSecurityMode { + /** Enable advanced security mode */ + ENFORCED = 'ENFORCED', + /** gather metrics on detected risks without taking action. Metrics are published to Amazon CloudWatch */ + AUDIT = 'AUDIT', + /** Advanced security mode is disabled */ + OFF = 'OFF' +} + /** * Props for the UserPool construct */ @@ -692,6 +705,12 @@ export interface UserPoolProps { * @default - no key ID configured */ readonly customSenderKmsKey?: IKey; + + /** + * The user pool's Advanced Security Mode + * @default - no value + */ + readonly advancedSecurityMode?: AdvancedSecurityMode; } /** @@ -934,6 +953,9 @@ export class UserPool extends UserPoolBase { emailVerificationSubject, smsVerificationMessage, verificationMessageTemplate, + userPoolAddOns: undefinedIfNoKeys({ + advancedSecurityMode: props.advancedSecurityMode, + }), schema: this.schemaConfiguration(props), mfaConfiguration: props.mfa, enabledMfas: this.mfaConfiguration(props), diff --git a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/cdk.out b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/integ-user-pool.assets.json b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/integ-user-pool.assets.json index 3993c765c773e..644371da0045c 100644 --- a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/integ-user-pool.assets.json +++ b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/integ-user-pool.assets.json @@ -1,7 +1,7 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { - "7df3ca05ace569184cc645d485b05885dc2e13f745606873a57afa9d264ecc08": { + "d52bd1bc71dfc61d4ad7024fe0716269f71e86ea085d0ccd71bcbe68e8df1c34": { "source": { "path": "integ-user-pool.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "7df3ca05ace569184cc645d485b05885dc2e13f745606873a57afa9d264ecc08.json", + "objectKey": "d52bd1bc71dfc61d4ad7024fe0716269f71e86ea085d0ccd71bcbe68e8df1c34.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/integ-user-pool.template.json b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/integ-user-pool.template.json index e8d562b64cc60..8bf4aebbc70b3 100644 --- a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/integ-user-pool.template.json +++ b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/integ-user-pool.template.json @@ -905,6 +905,9 @@ "phone_number" ] }, + "UserPoolAddOns": { + "AdvancedSecurityMode": "ENFORCED" + }, "UserPoolName": "MyUserPool", "VerificationMessageTemplate": { "DefaultEmailOption": "CONFIRM_WITH_CODE", diff --git a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/integ.json b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/integ.json index 3f63a187791d6..8ecffed9dfaf4 100644 --- a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "testCases": { "integ.user-pool-explicit-props": { "stacks": [ diff --git a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/manifest.json b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/manifest.json index 8934cd44cef53..6e7665f258319 100644 --- a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "21.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "integ-user-pool.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,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}/7df3ca05ace569184cc645d485b05885dc2e13f745606873a57afa9d264ecc08.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/d52bd1bc71dfc61d4ad7024fe0716269f71e86ea085d0ccd71bcbe68e8df1c34.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -260,99 +254,15 @@ "type": "aws:cdk:logicalId", "data": "CheckBootstrapVersion" } - ], - "createAuthChallengeCreateAuthChallengeCognito57E2297E": [ - { - "type": "aws:cdk:logicalId", - "data": "createAuthChallengeCreateAuthChallengeCognito57E2297E", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" - ] - } - ], - "customMessageCustomMessageCognitoB4F894A6": [ - { - "type": "aws:cdk:logicalId", - "data": "customMessageCustomMessageCognitoB4F894A6", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" - ] - } - ], - "defineAuthChallengeDefineAuthChallengeCognito4DBD8021": [ - { - "type": "aws:cdk:logicalId", - "data": "defineAuthChallengeDefineAuthChallengeCognito4DBD8021", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" - ] - } - ], - "postAuthenticationPostAuthenticationCognito8B923BC3": [ - { - "type": "aws:cdk:logicalId", - "data": "postAuthenticationPostAuthenticationCognito8B923BC3", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" - ] - } - ], - "postConfirmationPostConfirmationCognito9D010393": [ - { - "type": "aws:cdk:logicalId", - "data": "postConfirmationPostConfirmationCognito9D010393", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" - ] - } - ], - "preAuthenticationPreAuthenticationCognito67FACB54": [ - { - "type": "aws:cdk:logicalId", - "data": "preAuthenticationPreAuthenticationCognito67FACB54", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" - ] - } - ], - "preSignUpPreSignUpCognitoE986CC53": [ - { - "type": "aws:cdk:logicalId", - "data": "preSignUpPreSignUpCognitoE986CC53", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" - ] - } - ], - "preTokenGenerationPreTokenGenerationCognitoC1959918": [ - { - "type": "aws:cdk:logicalId", - "data": "preTokenGenerationPreTokenGenerationCognitoC1959918", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" - ] - } - ], - "userMigrationUserMigrationCognito29EEC4AD": [ - { - "type": "aws:cdk:logicalId", - "data": "userMigrationUserMigrationCognito29EEC4AD", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" - ] - } - ], - "verifyAuthChallengeResponseVerifyAuthChallengeResponseCognito9DC48AFC": [ - { - "type": "aws:cdk:logicalId", - "data": "verifyAuthChallengeResponseVerifyAuthChallengeResponseCognito9DC48AFC", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" - ] - } ] }, "displayName": "integ-user-pool" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/tree.json b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/tree.json index 15fe1267a751d..9ca75c368a2c5 100644 --- a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.123" - } - }, "integ-user-pool": { "id": "integ-user-pool", "path": "integ-user-pool", @@ -24,6 +16,14 @@ "id": "ServiceRole", "path": "integ-user-pool/createAuthChallenge/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "integ-user-pool/createAuthChallenge/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "integ-user-pool/createAuthChallenge/ServiceRole/Resource", @@ -108,6 +108,14 @@ "id": "ServiceRole", "path": "integ-user-pool/customMessage/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "integ-user-pool/customMessage/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "integ-user-pool/customMessage/ServiceRole/Resource", @@ -192,6 +200,14 @@ "id": "ServiceRole", "path": "integ-user-pool/defineAuthChallenge/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "integ-user-pool/defineAuthChallenge/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "integ-user-pool/defineAuthChallenge/ServiceRole/Resource", @@ -276,6 +292,14 @@ "id": "ServiceRole", "path": "integ-user-pool/postAuthentication/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "integ-user-pool/postAuthentication/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "integ-user-pool/postAuthentication/ServiceRole/Resource", @@ -360,6 +384,14 @@ "id": "ServiceRole", "path": "integ-user-pool/postConfirmation/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "integ-user-pool/postConfirmation/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "integ-user-pool/postConfirmation/ServiceRole/Resource", @@ -444,6 +476,14 @@ "id": "ServiceRole", "path": "integ-user-pool/preAuthentication/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "integ-user-pool/preAuthentication/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "integ-user-pool/preAuthentication/ServiceRole/Resource", @@ -528,6 +568,14 @@ "id": "ServiceRole", "path": "integ-user-pool/preSignUp/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "integ-user-pool/preSignUp/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "integ-user-pool/preSignUp/ServiceRole/Resource", @@ -612,6 +660,14 @@ "id": "ServiceRole", "path": "integ-user-pool/preTokenGeneration/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "integ-user-pool/preTokenGeneration/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "integ-user-pool/preTokenGeneration/ServiceRole/Resource", @@ -696,6 +752,14 @@ "id": "ServiceRole", "path": "integ-user-pool/userMigration/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "integ-user-pool/userMigration/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "integ-user-pool/userMigration/ServiceRole/Resource", @@ -780,6 +844,14 @@ "id": "ServiceRole", "path": "integ-user-pool/verifyAuthChallengeResponse/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "integ-user-pool/verifyAuthChallengeResponse/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "integ-user-pool/verifyAuthChallengeResponse/ServiceRole/Resource", @@ -1134,6 +1206,14 @@ "id": "smsRole", "path": "integ-user-pool/myuserpool/smsRole", "children": { + "ImportsmsRole": { + "id": "ImportsmsRole", + "path": "integ-user-pool/myuserpool/smsRole/ImportsmsRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "integ-user-pool/myuserpool/smsRole/Resource", @@ -1356,6 +1436,9 @@ "phone_number" ] }, + "userPoolAddOns": { + "advancedSecurityMode": "ENFORCED" + }, "userPoolName": "MyUserPool", "verificationMessageTemplate": { "defaultEmailOption": "CONFIRM_WITH_CODE", @@ -1418,12 +1501,36 @@ "fqn": "@aws-cdk/core.CfnOutput", "version": "0.0.0" } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "integ-user-pool/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "integ-user-pool/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } } }, "constructInfo": { "fqn": "@aws-cdk/core.Stack", "version": "0.0.0" } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } } }, "constructInfo": { diff --git a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.ts b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.ts index 744dba2530789..bbd322af0ce03 100644 --- a/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.ts +++ b/packages/@aws-cdk/aws-cognito/test/integ.user-pool-explicit-props.ts @@ -1,6 +1,6 @@ import { Code, Function, IFunction, Runtime } from '@aws-cdk/aws-lambda'; import { App, CfnOutput, Duration, RemovalPolicy, Stack } from '@aws-cdk/core'; -import { BooleanAttribute, DateTimeAttribute, Mfa, NumberAttribute, StringAttribute, UserPool } from '../lib'; +import { AdvancedSecurityMode, BooleanAttribute, DateTimeAttribute, Mfa, NumberAttribute, StringAttribute, UserPool } from '../lib'; const app = new App(); const stack = new Stack(app, 'integ-user-pool'); @@ -73,6 +73,7 @@ const userpool = new UserPool(stack, 'myuserpool', { userMigration: dummyTrigger('userMigration'), verifyAuthChallengeResponse: dummyTrigger('verifyAuthChallengeResponse'), }, + advancedSecurityMode: AdvancedSecurityMode.ENFORCED, snsRegion: Stack.of(stack).region, }); diff --git a/packages/@aws-cdk/aws-cognito/test/user-pool.test.ts b/packages/@aws-cdk/aws-cognito/test/user-pool.test.ts index d122a8f733a48..9cc1cfc5fb4a8 100644 --- a/packages/@aws-cdk/aws-cognito/test/user-pool.test.ts +++ b/packages/@aws-cdk/aws-cognito/test/user-pool.test.ts @@ -5,7 +5,7 @@ import * as lambda from '@aws-cdk/aws-lambda'; import { testDeprecated } from '@aws-cdk/cdk-build-tools'; import { CfnParameter, Duration, Stack, Tags } from '@aws-cdk/core'; import { Construct } from 'constructs'; -import { AccountRecovery, Mfa, NumberAttribute, StringAttribute, UserPool, UserPoolIdentityProvider, UserPoolOperation, VerificationEmailStyle, UserPoolEmail } from '../lib'; +import { AccountRecovery, Mfa, NumberAttribute, StringAttribute, UserPool, UserPoolIdentityProvider, UserPoolOperation, VerificationEmailStyle, UserPoolEmail, AdvancedSecurityMode } from '../lib'; describe('User Pool', () => { test('default setup', () => { @@ -1924,6 +1924,41 @@ test('deletion protection', () => { }); }); +test.each( + [ + [AdvancedSecurityMode.ENFORCED, 'ENFORCED'], + [AdvancedSecurityMode.AUDIT, 'AUDIT'], + [AdvancedSecurityMode.OFF, 'OFF'], + ])('advanced security is configured correctly when set to (%s)', (advancedSecurityMode, compareString) => { + // GIVEN + const stack = new Stack(); + + // WHEN + new UserPool(stack, 'Pool', { + advancedSecurityMode: advancedSecurityMode, + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::Cognito::UserPool', { + UserPoolAddOns: { + AdvancedSecurityMode: compareString, + }, + }); +}); + +test('advanced security is not present if option is not provided', () => { + // GIVEN + const stack = new Stack(); + + // WHEN + new UserPool(stack, 'Pool', {}); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::Cognito::UserPool', { + UserPoolAddOns: Match.absent(), + }); +}); + function fooFunction(scope: Construct, name: string): lambda.IFunction { return new lambda.Function(scope, name, { functionName: name, diff --git a/packages/@aws-cdk/aws-dynamodb/package.json b/packages/@aws-cdk/aws-dynamodb/package.json index 44730e3c9a032..ca98cf7a26fd6 100644 --- a/packages/@aws-cdk/aws-dynamodb/package.json +++ b/packages/@aws-cdk/aws-dynamodb/package.json @@ -86,7 +86,7 @@ "@aws-cdk/integ-runner": "0.0.0", "@aws-cdk/integ-tests": "0.0.0", "@aws-cdk/pkglint": "0.0.0", - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/jest": "^27.5.2", "@types/sinon": "^9.0.11", "aws-sdk": "^2.1211.0", diff --git a/packages/@aws-cdk/aws-ec2/lib/instance-types.ts b/packages/@aws-cdk/aws-ec2/lib/instance-types.ts index f765d2824ef02..2a0a6fd68910b 100644 --- a/packages/@aws-cdk/aws-ec2/lib/instance-types.ts +++ b/packages/@aws-cdk/aws-ec2/lib/instance-types.ts @@ -421,7 +421,7 @@ export enum InstanceClass { /** * Compute optimized instances for high performance computing, 7th generation with Graviton3 processors */ - COMPUTE7_GRAVITON3 = 'compute7_graviton3', + COMPUTE7_GRAVITON3 = 'compute7-graviton3', /** * Compute optimized instances for high performance computing, 7th generation with Graviton3 processors @@ -440,12 +440,6 @@ export enum InstanceClass { */ C6GD = 'c6gd', - /** - * Compute optimized instances for high performance computing, 6th generation with Graviton2 processors - * and high network bandwidth capabilities - */ - COMPUTE6_GRAVITON2_HIGH_NETWORK_BANDWITH = 'compute6-graviton2-high-network-banwidth', - /** * Compute optimized instances for high performance computing, 6th generation with Graviton2 processors * and high network bandwidth capabilities @@ -1135,11 +1129,10 @@ export class InstanceType { [InstanceClass.C6G]: 'c6g', [InstanceClass.COMPUTE6_GRAVITON2_NVME_DRIVE]: 'c6gd', [InstanceClass.C6GD]: 'c6gd', - [InstanceClass.COMPUTE6_GRAVITON2_HIGH_NETWORK_BANDWIDTH]: 'c6gdb', - [InstanceClass.COMPUTE6_GRAVITON2_HIGH_NETWORK_BANDWITH]: 'c6gdb', + [InstanceClass.COMPUTE6_GRAVITON2_HIGH_NETWORK_BANDWIDTH]: 'c6gn', + [InstanceClass.C6GN]: 'c6gn', [InstanceClass.COMPUTE7_GRAVITON3]: 'c7g', [InstanceClass.C7G]: 'c7g', - [InstanceClass.C6GN]: 'c6gn', [InstanceClass.STORAGE2]: 'd2', [InstanceClass.D2]: 'd2', [InstanceClass.STORAGE3]: 'd3', diff --git a/packages/@aws-cdk/aws-ec2/lib/security-group.ts b/packages/@aws-cdk/aws-ec2/lib/security-group.ts index e3b63b42f48af..ab66118204d2c 100644 --- a/packages/@aws-cdk/aws-ec2/lib/security-group.ts +++ b/packages/@aws-cdk/aws-ec2/lib/security-group.ts @@ -432,7 +432,7 @@ export class SecurityGroup extends SecurityGroupBase { vpcId: options.vpc?.vpcId, }, dummyValue: { - securityGroupId: 'sg-12345', + securityGroupId: 'sg-12345678', allowAllOutbound: true, } as cxapi.SecurityGroupContextResponse, }).value; diff --git a/packages/@aws-cdk/aws-ec2/lib/vpc-flow-logs.ts b/packages/@aws-cdk/aws-ec2/lib/vpc-flow-logs.ts index d43f9f9aac26c..30cd9fe7d7e0d 100644 --- a/packages/@aws-cdk/aws-ec2/lib/vpc-flow-logs.ts +++ b/packages/@aws-cdk/aws-ec2/lib/vpc-flow-logs.ts @@ -676,7 +676,7 @@ export class FlowLog extends FlowLogBase { } const flowLog = new CfnFlowLog(this, 'FlowLog', { - destinationOptions: destinationConfig.destinationOptions, + destinationOptions: renderDestinationOptions(destinationConfig.destinationOptions), deliverLogsPermissionArn: this.iamRole ? this.iamRole.roleArn : undefined, logDestinationType: destinationConfig.logDestinationType, logGroupName: this.logGroup ? this.logGroup.logGroupName : undefined, @@ -694,3 +694,13 @@ export class FlowLog extends FlowLogBase { this.node.defaultChild = flowLog; } } + +function renderDestinationOptions(opts: DestinationOptions | undefined): CfnFlowLog.DestinationOptionsProperty | undefined { + if (opts === undefined) { return undefined; } + + return { + fileFormat: opts.fileFormat ?? 'plain-text', + hiveCompatiblePartitions: opts.hiveCompatiblePartitions ?? false, + perHourPartition: opts.perHourPartition ?? false, + }; +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-ec2/package.json b/packages/@aws-cdk/aws-ec2/package.json index 6ac7a71eb045b..987a921bd02bc 100644 --- a/packages/@aws-cdk/aws-ec2/package.json +++ b/packages/@aws-cdk/aws-ec2/package.json @@ -88,7 +88,7 @@ "@aws-cdk/cloud-assembly-schema": "0.0.0", "@aws-cdk/cx-api": "0.0.0", "@aws-cdk/pkglint": "0.0.0", - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/jest": "^27.5.2", "jest": "^27.5.1" }, diff --git a/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/cdk.out b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/cdk.out new file mode 100644 index 0000000000000..145739f539580 --- /dev/null +++ b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/consumer.assets.json b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/consumer.assets.json new file mode 100644 index 0000000000000..be6680037c694 --- /dev/null +++ b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/consumer.assets.json @@ -0,0 +1,19 @@ +{ + "version": "22.0.0", + "files": { + "0fe7f73285a0ff152665f28743981914632b5c05b361126f8af577515c058bdc": { + "source": { + "path": "consumer.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "0fe7f73285a0ff152665f28743981914632b5c05b361126f8af577515c058bdc.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/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/consumer.template.json b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/consumer.template.json new file mode 100644 index 0000000000000..3aa229c39def4 --- /dev/null +++ b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/consumer.template.json @@ -0,0 +1,95 @@ +{ + "Resources": { + "GetAtt0B6ACA40": { + "Type": "AWS::SSM::Parameter", + "Properties": { + "Type": "StringList", + "Value": { + "Fn::Join": [ + ",", + { + "Fn::Split": [ + "||", + { + "Fn::ImportValue": "producer:ExportsOutputFnGetAttendpointE7B9679BDnsEntries62080A34" + } + ] + } + ] + } + } + }, + "Ref47C32AF2": { + "Type": "AWS::SSM::Parameter", + "Properties": { + "Type": "StringList", + "Value": { + "Fn::Join": [ + ",", + { + "Fn::Split": [ + "||", + { + "Fn::ImportValue": "producer:ExportsOutputRefstringListParam77B646D6" + } + ] + } + ] + } + } + }, + "ManualEB2ECD12": { + "Type": "AWS::SSM::Parameter", + "Properties": { + "Type": "StringList", + "Value": { + "Fn::Join": [ + ",", + { + "Fn::Split": [ + "||", + { + "Fn::ImportValue": "ManualExport" + } + ] + } + ] + } + } + } + }, + "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/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/crossregionreferencesDefaultTestDeployAssertAB7415FD.assets.json b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/crossregionreferencesDefaultTestDeployAssertAB7415FD.assets.json new file mode 100644 index 0000000000000..57978842e1a8a --- /dev/null +++ b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/crossregionreferencesDefaultTestDeployAssertAB7415FD.assets.json @@ -0,0 +1,19 @@ +{ + "version": "22.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "crossregionreferencesDefaultTestDeployAssertAB7415FD.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/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/crossregionreferencesDefaultTestDeployAssertAB7415FD.template.json b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/crossregionreferencesDefaultTestDeployAssertAB7415FD.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/crossregionreferencesDefaultTestDeployAssertAB7415FD.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/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/integ.json b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/integ.json new file mode 100644 index 0000000000000..b28db8687060c --- /dev/null +++ b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/integ.json @@ -0,0 +1,14 @@ +{ + "version": "22.0.0", + "testCases": { + "cross-region-references/DefaultTest": { + "stacks": [ + "producer", + "consumer" + ], + "stackUpdateWorkflow": false, + "assertionStack": "cross-region-references/DefaultTest/DeployAssert", + "assertionStackName": "crossregionreferencesDefaultTestDeployAssertAB7415FD" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/manifest.json b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/manifest.json new file mode 100644 index 0000000000000..e38a5a5e53acf --- /dev/null +++ b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/manifest.json @@ -0,0 +1,339 @@ +{ + "version": "22.0.0", + "artifacts": { + "producer.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "producer.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "producer": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "producer.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}/3d13409de2ca165913ea98c816c66c594e70fabb474b3eb57d271cc8e8f0fa6f.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "producer.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": [ + "producer.assets" + ], + "metadata": { + "/producer/vpc/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcA2121C38" + } + ], + "/producer/vpc/PublicSubnet1/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPublicSubnet1Subnet2E65531E" + } + ], + "/producer/vpc/PublicSubnet1/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPublicSubnet1RouteTable48A2DF9B" + } + ], + "/producer/vpc/PublicSubnet1/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPublicSubnet1RouteTableAssociation5D3F4579" + } + ], + "/producer/vpc/PublicSubnet1/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPublicSubnet1DefaultRoute10708846" + } + ], + "/producer/vpc/PublicSubnet1/EIP": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPublicSubnet1EIPDA49DCBE" + } + ], + "/producer/vpc/PublicSubnet1/NATGateway": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPublicSubnet1NATGateway9C16659E" + } + ], + "/producer/vpc/PublicSubnet2/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPublicSubnet2Subnet009B674F" + } + ], + "/producer/vpc/PublicSubnet2/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPublicSubnet2RouteTableEB40D4CB" + } + ], + "/producer/vpc/PublicSubnet2/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPublicSubnet2RouteTableAssociation21F81B59" + } + ], + "/producer/vpc/PublicSubnet2/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPublicSubnet2DefaultRouteA1EC0F60" + } + ], + "/producer/vpc/PublicSubnet2/EIP": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPublicSubnet2EIP9B3743B1" + } + ], + "/producer/vpc/PublicSubnet2/NATGateway": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPublicSubnet2NATGateway9B8AE11A" + } + ], + "/producer/vpc/PrivateSubnet1/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPrivateSubnet1Subnet934893E8" + } + ], + "/producer/vpc/PrivateSubnet1/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPrivateSubnet1RouteTableB41A48CC" + } + ], + "/producer/vpc/PrivateSubnet1/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPrivateSubnet1RouteTableAssociation67945127" + } + ], + "/producer/vpc/PrivateSubnet1/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPrivateSubnet1DefaultRoute1AA8E2E5" + } + ], + "/producer/vpc/PrivateSubnet2/Subnet": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPrivateSubnet2Subnet7031C2BA" + } + ], + "/producer/vpc/PrivateSubnet2/RouteTable": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPrivateSubnet2RouteTable7280F23E" + } + ], + "/producer/vpc/PrivateSubnet2/RouteTableAssociation": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPrivateSubnet2RouteTableAssociation007E94D3" + } + ], + "/producer/vpc/PrivateSubnet2/DefaultRoute": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcPrivateSubnet2DefaultRouteB0E07F99" + } + ], + "/producer/vpc/IGW": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcIGWE57CBDCA" + } + ], + "/producer/vpc/VPCGW": [ + { + "type": "aws:cdk:logicalId", + "data": "vpcVPCGW7984C166" + } + ], + "/producer/endpoint/SecurityGroup/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "endpointSecurityGroup895E596E" + } + ], + "/producer/endpoint/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "endpointE7B9679B" + } + ], + "/producer/stringListParam": [ + { + "type": "aws:cdk:logicalId", + "data": "stringListParam" + } + ], + "/producer/ExportManualExport": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportManualExport" + } + ], + "/producer/Exports/Output{\"Fn::GetAtt\":[\"endpointE7B9679B\",\"DnsEntries\"]}": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportsOutputFnGetAttendpointE7B9679BDnsEntries62080A34" + } + ], + "/producer/Exports/Output{\"Ref\":\"stringListParam\"}": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportsOutputRefstringListParam77B646D6" + } + ], + "/producer/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/producer/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "producer" + }, + "consumer.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "consumer.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "consumer": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "consumer.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}/0fe7f73285a0ff152665f28743981914632b5c05b361126f8af577515c058bdc.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "consumer.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": [ + "producer", + "consumer.assets" + ], + "metadata": { + "/consumer/GetAtt/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "GetAtt0B6ACA40" + } + ], + "/consumer/Ref/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Ref47C32AF2" + } + ], + "/consumer/Manual/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "ManualEB2ECD12" + } + ], + "/consumer/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/consumer/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "consumer" + }, + "crossregionreferencesDefaultTestDeployAssertAB7415FD.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "crossregionreferencesDefaultTestDeployAssertAB7415FD.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "crossregionreferencesDefaultTestDeployAssertAB7415FD": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "crossregionreferencesDefaultTestDeployAssertAB7415FD.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": [ + "crossregionreferencesDefaultTestDeployAssertAB7415FD.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": [ + "crossregionreferencesDefaultTestDeployAssertAB7415FD.assets" + ], + "metadata": { + "/cross-region-references/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/cross-region-references/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "cross-region-references/DefaultTest/DeployAssert" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/producer.assets.json b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/producer.assets.json new file mode 100644 index 0000000000000..457eb16c010a9 --- /dev/null +++ b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/producer.assets.json @@ -0,0 +1,19 @@ +{ + "version": "22.0.0", + "files": { + "3d13409de2ca165913ea98c816c66c594e70fabb474b3eb57d271cc8e8f0fa6f": { + "source": { + "path": "producer.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "3d13409de2ca165913ea98c816c66c594e70fabb474b3eb57d271cc8e8f0fa6f.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/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/producer.template.json b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/producer.template.json new file mode 100644 index 0000000000000..232c38b86ff01 --- /dev/null +++ b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.js.snapshot/producer.template.json @@ -0,0 +1,552 @@ +{ + "Resources": { + "vpcA2121C38": { + "Type": "AWS::EC2::VPC", + "Properties": { + "CidrBlock": "10.0.0.0/16", + "EnableDnsHostnames": true, + "EnableDnsSupport": true, + "InstanceTenancy": "default", + "Tags": [ + { + "Key": "Name", + "Value": "producer/vpc" + } + ] + } + }, + "vpcPublicSubnet1Subnet2E65531E": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "VpcId": { + "Ref": "vpcA2121C38" + }, + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.0.0/18", + "MapPublicIpOnLaunch": true, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Public" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "Name", + "Value": "producer/vpc/PublicSubnet1" + } + ] + } + }, + "vpcPublicSubnet1RouteTable48A2DF9B": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "VpcId": { + "Ref": "vpcA2121C38" + }, + "Tags": [ + { + "Key": "Name", + "Value": "producer/vpc/PublicSubnet1" + } + ] + } + }, + "vpcPublicSubnet1RouteTableAssociation5D3F4579": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "vpcPublicSubnet1RouteTable48A2DF9B" + }, + "SubnetId": { + "Ref": "vpcPublicSubnet1Subnet2E65531E" + } + } + }, + "vpcPublicSubnet1DefaultRoute10708846": { + "Type": "AWS::EC2::Route", + "Properties": { + "RouteTableId": { + "Ref": "vpcPublicSubnet1RouteTable48A2DF9B" + }, + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "vpcIGWE57CBDCA" + } + }, + "DependsOn": [ + "vpcVPCGW7984C166" + ] + }, + "vpcPublicSubnet1EIPDA49DCBE": { + "Type": "AWS::EC2::EIP", + "Properties": { + "Domain": "vpc", + "Tags": [ + { + "Key": "Name", + "Value": "producer/vpc/PublicSubnet1" + } + ] + } + }, + "vpcPublicSubnet1NATGateway9C16659E": { + "Type": "AWS::EC2::NatGateway", + "Properties": { + "SubnetId": { + "Ref": "vpcPublicSubnet1Subnet2E65531E" + }, + "AllocationId": { + "Fn::GetAtt": [ + "vpcPublicSubnet1EIPDA49DCBE", + "AllocationId" + ] + }, + "Tags": [ + { + "Key": "Name", + "Value": "producer/vpc/PublicSubnet1" + } + ] + }, + "DependsOn": [ + "vpcPublicSubnet1DefaultRoute10708846", + "vpcPublicSubnet1RouteTableAssociation5D3F4579" + ] + }, + "vpcPublicSubnet2Subnet009B674F": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "VpcId": { + "Ref": "vpcA2121C38" + }, + "AvailabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.64.0/18", + "MapPublicIpOnLaunch": true, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Public" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Public" + }, + { + "Key": "Name", + "Value": "producer/vpc/PublicSubnet2" + } + ] + } + }, + "vpcPublicSubnet2RouteTableEB40D4CB": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "VpcId": { + "Ref": "vpcA2121C38" + }, + "Tags": [ + { + "Key": "Name", + "Value": "producer/vpc/PublicSubnet2" + } + ] + } + }, + "vpcPublicSubnet2RouteTableAssociation21F81B59": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "vpcPublicSubnet2RouteTableEB40D4CB" + }, + "SubnetId": { + "Ref": "vpcPublicSubnet2Subnet009B674F" + } + } + }, + "vpcPublicSubnet2DefaultRouteA1EC0F60": { + "Type": "AWS::EC2::Route", + "Properties": { + "RouteTableId": { + "Ref": "vpcPublicSubnet2RouteTableEB40D4CB" + }, + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": { + "Ref": "vpcIGWE57CBDCA" + } + }, + "DependsOn": [ + "vpcVPCGW7984C166" + ] + }, + "vpcPublicSubnet2EIP9B3743B1": { + "Type": "AWS::EC2::EIP", + "Properties": { + "Domain": "vpc", + "Tags": [ + { + "Key": "Name", + "Value": "producer/vpc/PublicSubnet2" + } + ] + } + }, + "vpcPublicSubnet2NATGateway9B8AE11A": { + "Type": "AWS::EC2::NatGateway", + "Properties": { + "SubnetId": { + "Ref": "vpcPublicSubnet2Subnet009B674F" + }, + "AllocationId": { + "Fn::GetAtt": [ + "vpcPublicSubnet2EIP9B3743B1", + "AllocationId" + ] + }, + "Tags": [ + { + "Key": "Name", + "Value": "producer/vpc/PublicSubnet2" + } + ] + }, + "DependsOn": [ + "vpcPublicSubnet2DefaultRouteA1EC0F60", + "vpcPublicSubnet2RouteTableAssociation21F81B59" + ] + }, + "vpcPrivateSubnet1Subnet934893E8": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "VpcId": { + "Ref": "vpcA2121C38" + }, + "AvailabilityZone": { + "Fn::Select": [ + 0, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.128.0/18", + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Private" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Private" + }, + { + "Key": "Name", + "Value": "producer/vpc/PrivateSubnet1" + } + ] + } + }, + "vpcPrivateSubnet1RouteTableB41A48CC": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "VpcId": { + "Ref": "vpcA2121C38" + }, + "Tags": [ + { + "Key": "Name", + "Value": "producer/vpc/PrivateSubnet1" + } + ] + } + }, + "vpcPrivateSubnet1RouteTableAssociation67945127": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "vpcPrivateSubnet1RouteTableB41A48CC" + }, + "SubnetId": { + "Ref": "vpcPrivateSubnet1Subnet934893E8" + } + } + }, + "vpcPrivateSubnet1DefaultRoute1AA8E2E5": { + "Type": "AWS::EC2::Route", + "Properties": { + "RouteTableId": { + "Ref": "vpcPrivateSubnet1RouteTableB41A48CC" + }, + "DestinationCidrBlock": "0.0.0.0/0", + "NatGatewayId": { + "Ref": "vpcPublicSubnet1NATGateway9C16659E" + } + } + }, + "vpcPrivateSubnet2Subnet7031C2BA": { + "Type": "AWS::EC2::Subnet", + "Properties": { + "VpcId": { + "Ref": "vpcA2121C38" + }, + "AvailabilityZone": { + "Fn::Select": [ + 1, + { + "Fn::GetAZs": "" + } + ] + }, + "CidrBlock": "10.0.192.0/18", + "MapPublicIpOnLaunch": false, + "Tags": [ + { + "Key": "aws-cdk:subnet-name", + "Value": "Private" + }, + { + "Key": "aws-cdk:subnet-type", + "Value": "Private" + }, + { + "Key": "Name", + "Value": "producer/vpc/PrivateSubnet2" + } + ] + } + }, + "vpcPrivateSubnet2RouteTable7280F23E": { + "Type": "AWS::EC2::RouteTable", + "Properties": { + "VpcId": { + "Ref": "vpcA2121C38" + }, + "Tags": [ + { + "Key": "Name", + "Value": "producer/vpc/PrivateSubnet2" + } + ] + } + }, + "vpcPrivateSubnet2RouteTableAssociation007E94D3": { + "Type": "AWS::EC2::SubnetRouteTableAssociation", + "Properties": { + "RouteTableId": { + "Ref": "vpcPrivateSubnet2RouteTable7280F23E" + }, + "SubnetId": { + "Ref": "vpcPrivateSubnet2Subnet7031C2BA" + } + } + }, + "vpcPrivateSubnet2DefaultRouteB0E07F99": { + "Type": "AWS::EC2::Route", + "Properties": { + "RouteTableId": { + "Ref": "vpcPrivateSubnet2RouteTable7280F23E" + }, + "DestinationCidrBlock": "0.0.0.0/0", + "NatGatewayId": { + "Ref": "vpcPublicSubnet2NATGateway9B8AE11A" + } + } + }, + "vpcIGWE57CBDCA": { + "Type": "AWS::EC2::InternetGateway", + "Properties": { + "Tags": [ + { + "Key": "Name", + "Value": "producer/vpc" + } + ] + } + }, + "vpcVPCGW7984C166": { + "Type": "AWS::EC2::VPCGatewayAttachment", + "Properties": { + "VpcId": { + "Ref": "vpcA2121C38" + }, + "InternetGatewayId": { + "Ref": "vpcIGWE57CBDCA" + } + } + }, + "endpointSecurityGroup895E596E": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "producer/endpoint/SecurityGroup", + "SecurityGroupEgress": [ + { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1" + } + ], + "SecurityGroupIngress": [ + { + "CidrIp": { + "Fn::GetAtt": [ + "vpcA2121C38", + "CidrBlock" + ] + }, + "Description": { + "Fn::Join": [ + "", + [ + "from ", + { + "Fn::GetAtt": [ + "vpcA2121C38", + "CidrBlock" + ] + }, + ":443" + ] + ] + }, + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 443 + } + ], + "VpcId": { + "Ref": "vpcA2121C38" + } + } + }, + "endpointE7B9679B": { + "Type": "AWS::EC2::VPCEndpoint", + "Properties": { + "ServiceName": { + "Fn::Join": [ + "", + [ + "com.amazonaws.", + { + "Ref": "AWS::Region" + }, + ".secretsmanager" + ] + ] + }, + "VpcId": { + "Ref": "vpcA2121C38" + }, + "PrivateDnsEnabled": true, + "SecurityGroupIds": [ + { + "Fn::GetAtt": [ + "endpointSecurityGroup895E596E", + "GroupId" + ] + } + ], + "SubnetIds": [ + { + "Ref": "vpcPrivateSubnet1Subnet934893E8" + }, + { + "Ref": "vpcPrivateSubnet2Subnet7031C2BA" + } + ], + "VpcEndpointType": "Interface" + } + } + }, + "Parameters": { + "stringListParam": { + "Type": "List", + "Default": "BLAT,BLAH" + }, + "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]" + } + }, + "Outputs": { + "ExportManualExport": { + "Value": "string1||string2", + "Export": { + "Name": "ManualExport" + } + }, + "ExportsOutputFnGetAttendpointE7B9679BDnsEntries62080A34": { + "Value": { + "Fn::Join": [ + "||", + { + "Fn::GetAtt": [ + "endpointE7B9679B", + "DnsEntries" + ] + } + ] + }, + "Export": { + "Name": "producer:ExportsOutputFnGetAttendpointE7B9679BDnsEntries62080A34" + } + }, + "ExportsOutputRefstringListParam77B646D6": { + "Value": { + "Fn::Join": [ + "||", + { + "Ref": "stringListParam" + } + ] + }, + "Export": { + "Name": "producer:ExportsOutputRefstringListParam77B646D6" + } + } + }, + "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/aws-ec2/test/integ.core-cross-stack-string-list-references.ts b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.ts new file mode 100644 index 0000000000000..fc45599493847 --- /dev/null +++ b/packages/@aws-cdk/aws-ec2/test/integ.core-cross-stack-string-list-references.ts @@ -0,0 +1,72 @@ +import * as ssm from '@aws-cdk/aws-ssm'; +import { App, CfnParameter, Stack, StackProps } from '@aws-cdk/core'; +import { IntegTest } from '@aws-cdk/integ-tests'; +import { Construct } from 'constructs'; +import { InterfaceVpcEndpoint, InterfaceVpcEndpointAwsService, Vpc } from '../lib'; + +// GIVEN +const app = new App({ + treeMetadata: false, +}); + +class ProducerStack extends Stack { + public stringListGetAtt: string[]; + public stringListRef: CfnParameter; + public manualExport: string[]; + + constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); + + const vpc = new Vpc(this, 'vpc'); + this.stringListGetAtt = new InterfaceVpcEndpoint(this, 'endpoint', { + vpc, + service: InterfaceVpcEndpointAwsService.SECRETS_MANAGER, + }).vpcEndpointDnsEntries; + + this.stringListRef = new CfnParameter(this, 'stringListParam', { + default: 'BLAT,BLAH', + type: 'List', + }); + + this.manualExport = this.exportStringListValue(['string1', 'string2'], { + name: 'ManualExport', + }); + } +} + +export interface consumerDeployProps extends StackProps { + stringListGetAtt: string[], + stringListRef: CfnParameter, + manualStringList: string[] +} + +class ConsumerStack extends Stack { + constructor(scope: Construct, id: string, props: consumerDeployProps) { + super(scope, id, props); + + new ssm.StringListParameter(this, 'GetAtt', { + stringListValue: props.stringListGetAtt, + }); + + new ssm.StringListParameter(this, 'Ref', { + stringListValue: props.stringListRef.valueAsList, + }); + + new ssm.StringListParameter(this, 'Manual', { + stringListValue: props.manualStringList, + }); + } +} + +const producer = new ProducerStack(app, 'producer'); +const consumer = new ConsumerStack(app, 'consumer', { + stringListGetAtt: producer.stringListGetAtt, + stringListRef: producer.stringListRef, + manualStringList: producer.manualExport, +}); + +// THEN +new IntegTest(app, 'cross-region-references', { + testCases: [producer, consumer], + stackUpdateWorkflow: false, +}); diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsDefaultTestDeployAssert6AFD1854.assets.json b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsDefaultTestDeployAssert6AFD1854.assets.json index 297a68239d9a3..7b8f6b3c685fc 100644 --- a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsDefaultTestDeployAssert6AFD1854.assets.json +++ b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsDefaultTestDeployAssert6AFD1854.assets.json @@ -1,20 +1,20 @@ { "version": "21.0.0", "files": { - "b54b99043c35bd080b9d9d1afce31e3541cf15b679799ba980ed40c837dcb03b": { + "3074b79e05e7b98930b6449e01baa3e68b32ecff86328933c2542f7b7fe6fdac": { "source": { - "path": "asset.b54b99043c35bd080b9d9d1afce31e3541cf15b679799ba980ed40c837dcb03b.bundle", + "path": "asset.3074b79e05e7b98930b6449e01baa3e68b32ecff86328933c2542f7b7fe6fdac.bundle", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "b54b99043c35bd080b9d9d1afce31e3541cf15b679799ba980ed40c837dcb03b.zip", + "objectKey": "3074b79e05e7b98930b6449e01baa3e68b32ecff86328933c2542f7b7fe6fdac.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "1dcf759cd2c8928f5b1acfbf439f1751e25367a5ac61ba5e640ff8b78fdf89f7": { + "dd951509b1e22484b40a66a661cb8cebce3087b8cb381e3dcf02e641e5eb08cd": { "source": { "path": "FlowLogsDefaultTestDeployAssert6AFD1854.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "1dcf759cd2c8928f5b1acfbf439f1751e25367a5ac61ba5e640ff8b78fdf89f7.json", + "objectKey": "dd951509b1e22484b40a66a661cb8cebce3087b8cb381e3dcf02e641e5eb08cd.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsDefaultTestDeployAssert6AFD1854.template.json b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsDefaultTestDeployAssert6AFD1854.template.json index e8cb5fe5ffe8f..d8bc055b720ef 100644 --- a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsDefaultTestDeployAssert6AFD1854.template.json +++ b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsDefaultTestDeployAssert6AFD1854.template.json @@ -31,7 +31,7 @@ } }, "flattenResponse": "false", - "salt": "1666810703150" + "salt": "1668693953813" }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -115,7 +115,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "b54b99043c35bd080b9d9d1afce31e3541cf15b679799ba980ed40c837dcb03b.zip" + "S3Key": "3074b79e05e7b98930b6449e01baa3e68b32ecff86328933c2542f7b7fe6fdac.zip" }, "Timeout": 120, "Handler": "index.handler", diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsFeatureFlag.assets.json b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsFeatureFlag.assets.json index fa5105def2d15..ff70a68b4bce9 100644 --- a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsFeatureFlag.assets.json +++ b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsFeatureFlag.assets.json @@ -1,7 +1,7 @@ { "version": "21.0.0", "files": { - "2db53e096625b4b167fb15dd7bdc246692b381f45e28c509614fef7d41c20bc9": { + "8f4f8db3ea3ad2d5f5678275c75dce7d9b67b46d8df7d92c62913bdc5a03cd3f": { "source": { "path": "FlowLogsFeatureFlag.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "2db53e096625b4b167fb15dd7bdc246692b381f45e28c509614fef7d41c20bc9.json", + "objectKey": "8f4f8db3ea3ad2d5f5678275c75dce7d9b67b46d8df7d92c62913bdc5a03cd3f.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsFeatureFlag.template.json b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsFeatureFlag.template.json index 0c55b91df3207..9f63324d697a3 100644 --- a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsFeatureFlag.template.json +++ b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsFeatureFlag.template.json @@ -524,7 +524,6 @@ "Ref": "VPCB9E5F0B4" }, "ResourceType": "VPC", - "TrafficType": "ALL", "LogDestination": { "Fn::GetAtt": [ "VPCFlowLogsS3BucketFB7DC2BE", @@ -537,7 +536,8 @@ "Key": "Name", "Value": "FlowLogsFeatureFlag/VPC" } - ] + ], + "TrafficType": "ALL" } }, "VPCFlowLogsS3WithDestinationOptionsBucket1B7AC456": { @@ -673,11 +673,10 @@ "Ref": "VPCB9E5F0B4" }, "ResourceType": "VPC", - "TrafficType": "ALL", "DestinationOptions": { - "fileFormat": "plain-text", - "perHourPartition": false, - "hiveCompatiblePartitions": true + "FileFormat": "plain-text", + "HiveCompatiblePartitions": true, + "PerHourPartition": false }, "LogDestination": { "Fn::GetAtt": [ @@ -691,7 +690,8 @@ "Key": "Name", "Value": "FlowLogsFeatureFlag/VPC" } - ] + ], + "TrafficType": "ALL" } }, "FlowLogsInstanceInstanceSecurityGroupF61782E0": { diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsTestStack.assets.json b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsTestStack.assets.json index 310bb5c387339..d99b980527565 100644 --- a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsTestStack.assets.json +++ b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsTestStack.assets.json @@ -1,20 +1,20 @@ { "version": "21.0.0", "files": { - "bb426cfb5fed5237e5928f871893b243ddf86a591a592b558bd29f60e28bad9d": { + "33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c": { "source": { - "path": "asset.bb426cfb5fed5237e5928f871893b243ddf86a591a592b558bd29f60e28bad9d", + "path": "asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "bb426cfb5fed5237e5928f871893b243ddf86a591a592b558bd29f60e28bad9d.zip", + "objectKey": "33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "2090a74d484bc155b48d7511b99e4921b8f55e488c3fe1500cffede0cdfd33b7": { + "23955aa16c5d59106d93ecce9cedd43aa5782fbf23bb2ef8549b2119345a6f79": { "source": { "path": "FlowLogsTestStack.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "2090a74d484bc155b48d7511b99e4921b8f55e488c3fe1500cffede0cdfd33b7.json", + "objectKey": "23955aa16c5d59106d93ecce9cedd43aa5782fbf23bb2ef8549b2119345a6f79.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsTestStack.template.json b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsTestStack.template.json index 43b56bfee9517..c368f02a02265 100644 --- a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsTestStack.template.json +++ b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/FlowLogsTestStack.template.json @@ -524,7 +524,6 @@ "Ref": "VPCB9E5F0B4" }, "ResourceType": "VPC", - "TrafficType": "ALL", "LogDestination": { "Fn::GetAtt": [ "VPCFlowLogsS3BucketFB7DC2BE", @@ -537,7 +536,8 @@ "Key": "Name", "Value": "FlowLogsTestStack/VPC" } - ] + ], + "TrafficType": "ALL" } }, "VPCFlowLogsS3KeyPrefixFlowLogB57F1746": { @@ -547,7 +547,6 @@ "Ref": "VPCB9E5F0B4" }, "ResourceType": "VPC", - "TrafficType": "ALL", "LogDestination": { "Fn::Join": [ "", @@ -568,7 +567,8 @@ "Key": "Name", "Value": "FlowLogsTestStack/VPC" } - ] + ], + "TrafficType": "ALL" } }, "FlowLogsCWIAMRole017AD736": { @@ -643,7 +643,6 @@ "Ref": "VPCB9E5F0B4" }, "ResourceType": "VPC", - "TrafficType": "ALL", "DeliverLogsPermissionArn": { "Fn::GetAtt": [ "FlowLogsCWIAMRole017AD736", @@ -653,7 +652,8 @@ "LogDestinationType": "cloud-watch-logs", "LogGroupName": { "Ref": "FlowLogsCWLogGroup0398E8F8" - } + }, + "TrafficType": "ALL" } }, "Bucket83908E77": { @@ -888,7 +888,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "bb426cfb5fed5237e5928f871893b243ddf86a591a592b558bd29f60e28bad9d.zip" + "S3Key": "33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c.zip" }, "Timeout": 900, "MemorySize": 128, diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.84802aa01d2d2c9e7d8d69705ee832c97f1ebad2d73c72be5c32d53f16cf90a7.bundle/index.js b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.3074b79e05e7b98930b6449e01baa3e68b32ecff86328933c2542f7b7fe6fdac.bundle/index.js similarity index 75% rename from packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.84802aa01d2d2c9e7d8d69705ee832c97f1ebad2d73c72be5c32d53f16cf90a7.bundle/index.js rename to packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.3074b79e05e7b98930b6449e01baa3e68b32ecff86328933c2542f7b7fe6fdac.bundle/index.js index ba956d47f51fe..6bee1ced2a9b7 100644 --- a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.84802aa01d2d2c9e7d8d69705ee832c97f1ebad2d73c72be5c32d53f16cf90a7.bundle/index.js +++ b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.3074b79e05e7b98930b6449e01baa3e68b32ecff86328933c2542f7b7fe6fdac.bundle/index.js @@ -1,4 +1,3 @@ -"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; @@ -26,7 +25,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru // lib/assertions/providers/lambda-handler/index.ts var lambda_handler_exports = {}; __export(lambda_handler_exports, { - handler: () => handler + handler: () => handler, + isComplete: () => isComplete, + onTimeout: () => onTimeout }); module.exports = __toCommonJS(lambda_handler_exports); @@ -386,6 +387,7 @@ var StringLikeRegexpMatch = class extends Matcher { // lib/assertions/providers/lambda-handler/base.ts var https = __toESM(require("https")); var url = __toESM(require("url")); +var AWS = __toESM(require("aws-sdk")); var CustomResourceHandler = class { constructor(event, context) { this.event = event; @@ -404,20 +406,40 @@ var CustomResourceHandler = class { } async handle() { try { - console.log(`Event: ${JSON.stringify({ ...this.event, ResponseURL: "..." })}`); - const response = await this.processEvent(this.event.ResourceProperties); - console.log(`Event output : ${JSON.stringify(response)}`); - await this.respond({ - status: "SUCCESS", - reason: "OK", - data: response - }); + if ("stateMachineArn" in this.event.ResourceProperties) { + const req = { + stateMachineArn: this.event.ResourceProperties.stateMachineArn, + name: this.event.RequestId, + input: JSON.stringify(this.event) + }; + await this.startExecution(req); + return; + } else { + const response = await this.processEvent(this.event.ResourceProperties); + return response; + } } catch (e) { console.log(e); - await this.respond({ - status: "FAILED", - reason: e.message ?? "Internal Error" - }); + throw e; + } finally { + clearTimeout(this.timeout); + } + } + async handleIsComplete() { + try { + const result = await this.processEvent(this.event.ResourceProperties); + return result; + } catch (e) { + console.log(e); + return; + } finally { + clearTimeout(this.timeout); + } + } + async startExecution(req) { + try { + const sfn = new AWS.StepFunctions(); + await sfn.startExecution(req).promise(); } finally { clearTimeout(this.timeout); } @@ -453,6 +475,8 @@ var CustomResourceHandler = class { request2.end(); } catch (e) { reject(e); + } finally { + clearTimeout(this.timeout); } }); } @@ -479,7 +503,8 @@ var AssertionHandler = class extends CustomResourceHandler { matchResult.finished(); if (matchResult.hasFailed()) { result = { - data: JSON.stringify({ + failed: true, + assertion: JSON.stringify({ status: "fail", message: [ ...matchResult.toHumanStrings(), @@ -488,11 +513,11 @@ var AssertionHandler = class extends CustomResourceHandler { }) }; if (request2.failDeployment) { - throw new Error(result.data); + throw new Error(result.assertion); } } else { result = { - data: JSON.stringify({ + assertion: JSON.stringify({ status: "success" }) }; @@ -562,7 +587,10 @@ function flatten(object) { {}, ...function _flatten(child, path = []) { return [].concat(...Object.keys(child).map((key) => { - const childKey = Buffer.isBuffer(child[key]) ? child[key].toString("utf8") : child[key]; + let childKey = Buffer.isBuffer(child[key]) ? child[key].toString("utf8") : child[key]; + if (typeof childKey === "string") { + childKey = isJsonString(childKey); + } return typeof childKey === "object" && childKey !== null ? _flatten(childKey, path.concat([key])) : { [path.concat([key]).join(".")]: childKey }; })); }(object) @@ -570,9 +598,12 @@ function flatten(object) { } var AwsApiCallHandler = class extends CustomResourceHandler { async processEvent(request2) { - const AWS = require("aws-sdk"); - console.log(`AWS SDK VERSION: ${AWS.VERSION}`); - const service = new AWS[request2.service](); + const AWS2 = require("aws-sdk"); + console.log(`AWS SDK VERSION: ${AWS2.VERSION}`); + if (!Object.prototype.hasOwnProperty.call(AWS2, request2.service)) { + throw Error(`Service ${request2.service} does not exist in AWS SDK version ${AWS2.VERSION}.`); + } + const service = new AWS2[request2.service](); const response = await service[request2.api](request2.parameters && decode(request2.parameters)).promise(); console.log(`SDK response received ${JSON.stringify(response)}`); delete response.ResponseMetadata; @@ -582,9 +613,18 @@ var AwsApiCallHandler = class extends CustomResourceHandler { const flatData = { ...flatten(respond) }; - return request2.flattenResponse === "true" ? flatData : respond; + const resp = request2.flattenResponse === "true" ? flatData : respond; + console.log(`Returning result ${JSON.stringify(resp)}`); + return resp; } }; +function isJsonString(value) { + try { + return JSON.parse(value); + } catch { + return value; + } +} // lib/assertions/providers/lambda-handler/types.ts var ASSERT_RESOURCE_TYPE = "Custom::DeployAssert@AssertEquals"; @@ -592,21 +632,136 @@ var SDK_RESOURCE_TYPE_PREFIX = "Custom::DeployAssert@SdkCall"; // lib/assertions/providers/lambda-handler/index.ts async function handler(event, context) { + console.log(`Event: ${JSON.stringify({ ...event, ResponseURL: "..." })}`); + const provider = createResourceHandler(event, context); + try { + if (event.RequestType === "Delete") { + await provider.respond({ + status: "SUCCESS", + reason: "OK" + }); + return; + } + const result = await provider.handle(); + if ("stateMachineArn" in event.ResourceProperties) { + console.info('Found "stateMachineArn", waiter statemachine started'); + return; + } else if ("expected" in event.ResourceProperties) { + console.info('Found "expected", testing assertions'); + const actualPath = event.ResourceProperties.actualPath; + const actual = actualPath ? result[`apiCallResponse.${actualPath}`] : result.apiCallResponse; + const assertion = new AssertionHandler({ + ...event, + ResourceProperties: { + ServiceToken: event.ServiceToken, + actual, + expected: event.ResourceProperties.expected + } + }, context); + try { + const assertionResult = await assertion.handle(); + await provider.respond({ + status: "SUCCESS", + reason: "OK", + data: { + ...assertionResult, + ...result + } + }); + return; + } catch (e) { + await provider.respond({ + status: "FAILED", + reason: e.message ?? "Internal Error" + }); + return; + } + } + await provider.respond({ + status: "SUCCESS", + reason: "OK", + data: result + }); + } catch (e) { + await provider.respond({ + status: "FAILED", + reason: e.message ?? "Internal Error" + }); + return; + } + return; +} +async function onTimeout(timeoutEvent) { + const isCompleteRequest = JSON.parse(JSON.parse(timeoutEvent.Cause).errorMessage); + const provider = createResourceHandler(isCompleteRequest, standardContext); + await provider.respond({ + status: "FAILED", + reason: "Operation timed out: " + JSON.stringify(isCompleteRequest) + }); +} +async function isComplete(event, context) { + console.log(`Event: ${JSON.stringify({ ...event, ResponseURL: "..." })}`); const provider = createResourceHandler(event, context); - await provider.handle(); + try { + const result = await provider.handleIsComplete(); + const actualPath = event.ResourceProperties.actualPath; + if (result) { + const actual = actualPath ? result[`apiCallResponse.${actualPath}`] : result.apiCallResponse; + if ("expected" in event.ResourceProperties) { + const assertion = new AssertionHandler({ + ...event, + ResourceProperties: { + ServiceToken: event.ServiceToken, + actual, + expected: event.ResourceProperties.expected + } + }, context); + const assertionResult = await assertion.handleIsComplete(); + if (!(assertionResult == null ? void 0 : assertionResult.failed)) { + await provider.respond({ + status: "SUCCESS", + reason: "OK", + data: { + ...assertionResult, + ...result + } + }); + return; + } else { + console.log(`Assertion Failed: ${JSON.stringify(assertionResult)}`); + throw new Error(JSON.stringify(event)); + } + } + await provider.respond({ + status: "SUCCESS", + reason: "OK", + data: result + }); + } else { + console.log("No result"); + throw new Error(JSON.stringify(event)); + } + return; + } catch (e) { + console.log(e); + throw new Error(JSON.stringify(event)); + } } function createResourceHandler(event, context) { if (event.ResourceType.startsWith(SDK_RESOURCE_TYPE_PREFIX)) { return new AwsApiCallHandler(event, context); - } - switch (event.ResourceType) { - case ASSERT_RESOURCE_TYPE: - return new AssertionHandler(event, context); - default: - throw new Error(`Unsupported resource type "${event.ResourceType}`); + } else if (event.ResourceType.startsWith(ASSERT_RESOURCE_TYPE)) { + return new AssertionHandler(event, context); + } else { + throw new Error(`Unsupported resource type "${event.ResourceType}`); } } +var standardContext = { + getRemainingTimeInMillis: () => 9e4 +}; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { - handler + handler, + isComplete, + onTimeout }); diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/__entrypoint__.js b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/__entrypoint__.js new file mode 100644 index 0000000000000..1e3a3093c1706 --- /dev/null +++ b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/__entrypoint__.js @@ -0,0 +1,144 @@ +"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': responseBody.length }, + }; + 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLWVudHJ5cG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJub2RlanMtZW50cnlwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsMkJBQTJCO0FBRTNCLGlCQUFpQjtBQUNKLFFBQUEsUUFBUSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsR0FBRyxFQUFFLFVBQVU7SUFDZixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGdCQUFnQixFQUFFLFNBQVM7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sZ0NBQWdDLEdBQUcsd0RBQXdELENBQUM7QUFDbEcsTUFBTSwwQkFBMEIsR0FBRyw4REFBOEQsQ0FBQztBQVczRixLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWtELEVBQUUsT0FBMEI7SUFDMUcsTUFBTSxjQUFjLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDeEQsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0QsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxhQUFhO0lBQ2IsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssZ0NBQWdDLEVBQUU7UUFDbkcsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUN0RSxNQUFNLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTztLQUNSO0lBRUQsSUFBSTtRQUNGLHlFQUF5RTtRQUN6RSxpRUFBaUU7UUFDakUsd0NBQXdDO1FBQ3hDLGlFQUFpRTtRQUNqRSxNQUFNLFdBQVcsR0FBWSxPQUFPLENBQUMsZ0JBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUQsdURBQXVEO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEQsMkJBQTJCO1FBQzNCLE1BQU0sY0FBYyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUNoRDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsTUFBTSxJQUFJLEdBQWE7WUFDckIsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLGdCQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLHlFQUF5RTtZQUN6RSxtRUFBbUU7WUFDbkUsd0VBQXdFO1lBQ3hFLHFFQUFxRTtZQUNyRSxnQ0FBZ0M7WUFDaEMsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtnQkFDbEMsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsNEdBQTRHLENBQUMsQ0FBQztnQkFDM0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdDQUFnQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNMLGtFQUFrRTtnQkFDbEUsNkRBQTZEO2dCQUM3RCxnQkFBUSxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDcEc7U0FDRjtRQUVELG1FQUFtRTtRQUNuRSxNQUFNLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDdEM7QUFDSCxDQUFDO0FBbkRELDBCQW1EQztBQUVELFNBQVMsY0FBYyxDQUNyQixVQUF5RixFQUN6RixrQkFBMEMsRUFBRztJQUU3QyxzRUFBc0U7SUFDdEUsdUJBQXVCO0lBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO0lBRXZILGtFQUFrRTtJQUNsRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLGtCQUFrQixLQUFLLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtRQUMvRixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxVQUFVLENBQUMsa0JBQWtCLFNBQVMsZUFBZSxDQUFDLGtCQUFrQixtQkFBbUIsQ0FBQyxDQUFDO0tBQ3RLO0lBRUQsMERBQTBEO0lBQzFELE9BQU87UUFDTCxHQUFHLFVBQVU7UUFDYixHQUFHLGVBQWU7UUFDbEIsa0JBQWtCLEVBQUUsa0JBQWtCO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE0QixFQUFFLEtBQWU7SUFDekUsTUFBTSxJQUFJLEdBQW1EO1FBQzNELE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTTtRQUM5QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSwwQkFBMEI7UUFDMUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtRQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0tBQ2pCLENBQUM7SUFFRixnQkFBUSxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHO1FBQ1YsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1FBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRTtLQUN2RSxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUc7UUFDbkIsUUFBUSxFQUFFLENBQUM7UUFDWCxLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUM7SUFDRixNQUFNLFdBQVcsQ0FBQyxZQUFZLEVBQUUsZ0JBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxPQUE2QixFQUFFLFlBQW9CO0lBQ3ZGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNmO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxHQUFHLE1BQWE7SUFDL0Msc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQVNELFNBQWdCLFdBQVcsQ0FBMEIsT0FBcUIsRUFBRSxFQUE0QjtJQUN0RyxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUssRUFBRSxFQUFFO1FBQ3hCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN2QixPQUFPLElBQUksRUFBRTtZQUNYLElBQUk7Z0JBQ0YsT0FBTyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ3hCO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsSUFBSSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ25CLE1BQU0sQ0FBQyxDQUFDO2lCQUNUO2dCQUNELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDVDtTQUNGO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQWhCRCxrQ0FnQkM7QUFFRCxLQUFLLFVBQVUsS0FBSyxDQUFDLEVBQVU7SUFDN0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcblxuLy8gZm9yIHVuaXQgdGVzdHNcbmV4cG9ydCBjb25zdCBleHRlcm5hbCA9IHtcbiAgc2VuZEh0dHBSZXF1ZXN0OiBkZWZhdWx0U2VuZEh0dHBSZXF1ZXN0LFxuICBsb2c6IGRlZmF1bHRMb2csXG4gIGluY2x1ZGVTdGFja1RyYWNlczogdHJ1ZSxcbiAgdXNlckhhbmRsZXJJbmRleDogJy4vaW5kZXgnLFxufTtcblxuY29uc3QgQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVIgPSAnQVdTQ0RLOjpDdXN0b21SZXNvdXJjZVByb3ZpZGVyRnJhbWV3b3JrOjpDUkVBVEVfRkFJTEVEJztcbmNvbnN0IE1JU1NJTkdfUEhZU0lDQUxfSURfTUFSS0VSID0gJ0FXU0NESzo6Q3VzdG9tUmVzb3VyY2VQcm92aWRlckZyYW1ld29yazo6TUlTU0lOR19QSFlTSUNBTF9JRCc7XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlID0gQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCAmIEhhbmRsZXJSZXNwb25zZTtcbmV4cG9ydCB0eXBlIEhhbmRsZXIgPSAoZXZlbnQ6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIGNvbnRleHQ6IEFXU0xhbWJkYS5Db250ZXh0KSA9PiBQcm9taXNlPEhhbmRsZXJSZXNwb25zZSB8IHZvaWQ+O1xuZXhwb3J0IHR5cGUgSGFuZGxlclJlc3BvbnNlID0gdW5kZWZpbmVkIHwge1xuICBEYXRhPzogYW55O1xuICBQaHlzaWNhbFJlc291cmNlSWQ/OiBzdHJpbmc7XG4gIFJlYXNvbj86IHN0cmluZztcbiAgTm9FY2hvPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50LCBjb250ZXh0OiBBV1NMYW1iZGEuQ29udGV4dCkge1xuICBjb25zdCBzYW5pdGl6ZWRFdmVudCA9IHsgLi4uZXZlbnQsIFJlc3BvbnNlVVJMOiAnLi4uJyB9O1xuICBleHRlcm5hbC5sb2coSlNPTi5zdHJpbmdpZnkoc2FuaXRpemVkRXZlbnQsIHVuZGVmaW5lZCwgMikpO1xuXG4gIC8vIGlnbm9yZSBERUxFVEUgZXZlbnQgd2hlbiB0aGUgcGh5c2ljYWwgcmVzb3VyY2UgSUQgaXMgdGhlIG1hcmtlciB0aGF0XG4gIC8vIGluZGljYXRlcyB0aGF0IHRoaXMgREVMRVRFIGlzIGEgc3Vic2VxdWVudCBERUxFVEUgdG8gYSBmYWlsZWQgQ1JFQVRFXG4gIC8vIG9wZXJhdGlvbi5cbiAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSAnRGVsZXRlJyAmJiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgPT09IENSRUFURV9GQUlMRURfUEhZU0lDQUxfSURfTUFSS0VSKSB7XG4gICAgZXh0ZXJuYWwubG9nKCdpZ25vcmluZyBERUxFVEUgZXZlbnQgY2F1c2VkIGJ5IGEgZmFpbGVkIENSRUFURSBldmVudCcpO1xuICAgIGF3YWl0IHN1Ym1pdFJlc3BvbnNlKCdTVUNDRVNTJywgZXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gaW52b2tlIHRoZSB1c2VyIGhhbmRsZXIuIHRoaXMgaXMgaW50ZW50aW9uYWxseSBpbnNpZGUgdGhlIHRyeS1jYXRjaCB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IGlmIHRoZXJlIGlzIGFuIGVycm9yIGl0J3MgcmVwb3J0ZWQgYXMgYSBmYWlsdXJlIHRvXG4gICAgLy8gY2xvdWRmb3JtYXRpb24gKG90aGVyd2lzZSBjZm4gd2FpdHMpLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgY29uc3QgdXNlckhhbmRsZXI6IEhhbmRsZXIgPSByZXF1aXJlKGV4dGVybmFsLnVzZXJIYW5kbGVySW5kZXgpLmhhbmRsZXI7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXNlckhhbmRsZXIoc2FuaXRpemVkRXZlbnQsIGNvbnRleHQpO1xuXG4gICAgLy8gdmFsaWRhdGUgdXNlciByZXNwb25zZSBhbmQgY3JlYXRlIHRoZSBjb21iaW5lZCBldmVudFxuICAgIGNvbnN0IHJlc3BvbnNlRXZlbnQgPSByZW5kZXJSZXNwb25zZShldmVudCwgcmVzdWx0KTtcblxuICAgIC8vIHN1Ym1pdCB0byBjZm4gYXMgc3VjY2Vzc1xuICAgIGF3YWl0IHN1Ym1pdFJlc3BvbnNlKCdTVUNDRVNTJywgcmVzcG9uc2VFdmVudCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCByZXNwOiBSZXNwb25zZSA9IHtcbiAgICAgIC4uLmV2ZW50LFxuICAgICAgUmVhc29uOiBleHRlcm5hbC5pbmNsdWRlU3RhY2tUcmFjZXMgPyBlLnN0YWNrIDogZS5tZXNzYWdlLFxuICAgIH07XG5cbiAgICBpZiAoIXJlc3AuUGh5c2ljYWxSZXNvdXJjZUlkKSB7XG4gICAgICAvLyBzcGVjaWFsIGNhc2U6IGlmIENSRUFURSBmYWlscywgd2hpY2ggdXN1YWxseSBpbXBsaWVzLCB3ZSB1c3VhbGx5IGRvbid0XG4gICAgICAvLyBoYXZlIGEgcGh5c2ljYWwgcmVzb3VyY2UgaWQuIGluIHRoaXMgY2FzZSwgdGhlIHN1YnNlcXVlbnQgREVMRVRFXG4gICAgICAvLyBvcGVyYXRpb24gZG9lcyBub3QgaGF2ZSBhbnkgbWVhbmluZywgYW5kIHdpbGwgbGlrZWx5IGZhaWwgYXMgd2VsbC4gdG9cbiAgICAgIC8vIGFkZHJlc3MgdGhpcywgd2UgdXNlIGEgbWFya2VyIHNvIHRoZSBwcm92aWRlciBmcmFtZXdvcmsgY2FuIHNpbXBseVxuICAgICAgLy8gaWdub3JlIHRoZSBzdWJzZXF1ZW50IERFTEVURS5cbiAgICAgIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gJ0NyZWF0ZScpIHtcbiAgICAgICAgZXh0ZXJuYWwubG9nKCdDUkVBVEUgZmFpbGVkLCByZXNwb25kaW5nIHdpdGggYSBtYXJrZXIgcGh5c2ljYWwgcmVzb3VyY2UgaWQgc28gdGhhdCB0aGUgc3Vic2VxdWVudCBERUxFVEUgd2lsbCBiZSBpZ25vcmVkJyk7XG4gICAgICAgIHJlc3AuUGh5c2ljYWxSZXNvdXJjZUlkID0gQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UsIGlmIFBoeXNpY2FsUmVzb3VyY2VJZCBpcyBub3Qgc3BlY2lmaWVkLCBzb21ldGhpbmcgaXNcbiAgICAgICAgLy8gdGVycmlibHkgd3JvbmcgYmVjYXVzZSBhbGwgb3RoZXIgZXZlbnRzIHNob3VsZCBoYXZlIGFuIElELlxuICAgICAgICBleHRlcm5hbC5sb2coYEVSUk9SOiBNYWxmb3JtZWQgZXZlbnQuIFwiUGh5c2ljYWxSZXNvdXJjZUlkXCIgaXMgcmVxdWlyZWQ6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQpfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMgaXMgYW4gYWN0dWFsIGVycm9yLCBmYWlsIHRoZSBhY3Rpdml0eSBhbHRvZ2V0aGVyIGFuZCBleGlzdC5cbiAgICBhd2FpdCBzdWJtaXRSZXNwb25zZSgnRkFJTEVEJywgcmVzcCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyUmVzcG9uc2UoXG4gIGNmblJlcXVlc3Q6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQgJiB7IFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZyB9LFxuICBoYW5kbGVyUmVzcG9uc2U6IHZvaWQgfCBIYW5kbGVyUmVzcG9uc2UgPSB7IH0pOiBSZXNwb25zZSB7XG5cbiAgLy8gaWYgcGh5c2ljYWwgSUQgaXMgbm90IHJldHVybmVkLCB3ZSBoYXZlIHNvbWUgZGVmYXVsdHMgZm9yIHlvdSBiYXNlZFxuICAvLyBvbiB0aGUgcmVxdWVzdCB0eXBlLlxuICBjb25zdCBwaHlzaWNhbFJlc291cmNlSWQgPSBoYW5kbGVyUmVzcG9uc2UuUGh5c2ljYWxSZXNvdXJjZUlkID8/IGNmblJlcXVlc3QuUGh5c2ljYWxSZXNvdXJjZUlkID8/IGNmblJlcXVlc3QuUmVxdWVzdElkO1xuXG4gIC8vIGlmIHdlIGFyZSBpbiBERUxFVEUgYW5kIHBoeXNpY2FsIElEIHdhcyBjaGFuZ2VkLCBpdCdzIGFuIGVycm9yLlxuICBpZiAoY2ZuUmVxdWVzdC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScgJiYgcGh5c2ljYWxSZXNvdXJjZUlkICE9PSBjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgREVMRVRFOiBjYW5ub3QgY2hhbmdlIHRoZSBwaHlzaWNhbCByZXNvdXJjZSBJRCBmcm9tIFwiJHtjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZH1cIiB0byBcIiR7aGFuZGxlclJlc3BvbnNlLlBoeXNpY2FsUmVzb3VyY2VJZH1cIiBkdXJpbmcgZGVsZXRpb25gKTtcbiAgfVxuXG4gIC8vIG1lcmdlIHJlcXVlc3QgZXZlbnQgYW5kIHJlc3VsdCBldmVudCAocmVzdWx0IHByZXZhaWxzKS5cbiAgcmV0dXJuIHtcbiAgICAuLi5jZm5SZXF1ZXN0LFxuICAgIC4uLmhhbmRsZXJSZXNwb25zZSxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3VibWl0UmVzcG9uc2Uoc3RhdHVzOiAnU1VDQ0VTUycgfCAnRkFJTEVEJywgZXZlbnQ6IFJlc3BvbnNlKSB7XG4gIGNvbnN0IGpzb246IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2UgPSB7XG4gICAgU3RhdHVzOiBzdGF0dXMsXG4gICAgUmVhc29uOiBldmVudC5SZWFzb24gPz8gc3RhdHVzLFxuICAgIFN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gICAgUmVxdWVzdElkOiBldmVudC5SZXF1ZXN0SWQsXG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgfHwgTUlTU0lOR19QSFlTSUNBTF9JRF9NQVJLRVIsXG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIE5vRWNobzogZXZlbnQuTm9FY2hvLFxuICAgIERhdGE6IGV2ZW50LkRhdGEsXG4gIH07XG5cbiAgZXh0ZXJuYWwubG9nKCdzdWJtaXQgcmVzcG9uc2UgdG8gY2xvdWRmb3JtYXRpb24nLCBqc29uKTtcblxuICBjb25zdCByZXNwb25zZUJvZHkgPSBKU09OLnN0cmluZ2lmeShqc29uKTtcbiAgY29uc3QgcGFyc2VkVXJsID0gdXJsLnBhcnNlKGV2ZW50LlJlc3BvbnNlVVJMKTtcbiAgY29uc3QgcmVxID0ge1xuICAgIGhvc3RuYW1lOiBwYXJzZWRVcmwuaG9zdG5hbWUsXG4gICAgcGF0aDogcGFyc2VkVXJsLnBhdGgsXG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICBoZWFkZXJzOiB7ICdjb250ZW50LXR5cGUnOiAnJywgJ2NvbnRlbnQtbGVuZ3RoJzogcmVzcG9uc2VCb2R5Lmxlbmd0aCB9LFxuICB9O1xuXG4gIGNvbnN0IHJldHJ5T3B0aW9ucyA9IHtcbiAgICBhdHRlbXB0czogNSxcbiAgICBzbGVlcDogMTAwMCxcbiAgfTtcbiAgYXdhaXQgd2l0aFJldHJpZXMocmV0cnlPcHRpb25zLCBleHRlcm5hbC5zZW5kSHR0cFJlcXVlc3QpKHJlcSwgcmVzcG9uc2VCb2R5KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdFNlbmRIdHRwUmVxdWVzdChvcHRpb25zOiBodHRwcy5SZXF1ZXN0T3B0aW9ucywgcmVzcG9uc2VCb2R5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucywgXyA9PiByZXNvbHZlKCkpO1xuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgcmVxdWVzdC53cml0ZShyZXNwb25zZUJvZHkpO1xuICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdExvZyhmbXQ6IHN0cmluZywgLi4ucGFyYW1zOiBhbnlbXSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhmbXQsIC4uLnBhcmFtcyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zIHtcbiAgLyoqIEhvdyBtYW55IHJldHJpZXMgKHdpbGwgYXQgbGVhc3QgdHJ5IG9uY2UpICovXG4gIHJlYWRvbmx5IGF0dGVtcHRzOiBudW1iZXI7XG4gIC8qKiBTbGVlcCBiYXNlLCBpbiBtcyAqL1xuICByZWFkb25seSBzbGVlcDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJldHJpZXM8QSBleHRlbmRzIEFycmF5PGFueT4sIEI+KG9wdGlvbnM6IFJldHJ5T3B0aW9ucywgZm46ICguLi54czogQSkgPT4gUHJvbWlzZTxCPik6ICguLi54czogQSkgPT4gUHJvbWlzZTxCPiB7XG4gIHJldHVybiBhc3luYyAoLi4ueHM6IEEpID0+IHtcbiAgICBsZXQgYXR0ZW1wdHMgPSBvcHRpb25zLmF0dGVtcHRzO1xuICAgIGxldCBtcyA9IG9wdGlvbnMuc2xlZXA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbiguLi54cyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChhdHRlbXB0cy0tIDw9IDApIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1zKSk7XG4gICAgICAgIG1zICo9IDI7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2spID0+IHNldFRpbWVvdXQob2ssIG1zKSk7XG59Il19 \ No newline at end of file diff --git a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.js b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/index.js similarity index 100% rename from packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.js rename to packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/index.js diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/__entrypoint__.js b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/__entrypoint__.js deleted file mode 100644 index 9df94382cc74e..0000000000000 --- a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/__entrypoint__.js +++ /dev/null @@ -1,118 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -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': responseBody.length }, - }; - await 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); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLWVudHJ5cG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJub2RlanMtZW50cnlwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsMkJBQTJCO0FBRTNCLGlCQUFpQjtBQUNKLFFBQUEsUUFBUSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsR0FBRyxFQUFFLFVBQVU7SUFDZixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGdCQUFnQixFQUFFLFNBQVM7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sZ0NBQWdDLEdBQUcsd0RBQXdELENBQUM7QUFDbEcsTUFBTSwwQkFBMEIsR0FBRyw4REFBOEQsQ0FBQztBQVczRixLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWtELEVBQUUsT0FBMEI7SUFDMUcsTUFBTSxjQUFjLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDeEQsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0QsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxhQUFhO0lBQ2IsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssZ0NBQWdDLEVBQUU7UUFDbkcsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUN0RSxNQUFNLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTztLQUNSO0lBRUQsSUFBSTtRQUNGLHlFQUF5RTtRQUN6RSxpRUFBaUU7UUFDakUsd0NBQXdDO1FBQ3hDLGlFQUFpRTtRQUNqRSxNQUFNLFdBQVcsR0FBWSxPQUFPLENBQUMsZ0JBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUQsdURBQXVEO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEQsMkJBQTJCO1FBQzNCLE1BQU0sY0FBYyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUNoRDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsTUFBTSxJQUFJLEdBQWE7WUFDckIsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLGdCQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLHlFQUF5RTtZQUN6RSxtRUFBbUU7WUFDbkUsd0VBQXdFO1lBQ3hFLHFFQUFxRTtZQUNyRSxnQ0FBZ0M7WUFDaEMsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtnQkFDbEMsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsNEdBQTRHLENBQUMsQ0FBQztnQkFDM0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdDQUFnQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNMLGtFQUFrRTtnQkFDbEUsNkRBQTZEO2dCQUM3RCxnQkFBUSxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDcEc7U0FDRjtRQUVELG1FQUFtRTtRQUNuRSxNQUFNLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDdEM7QUFDSCxDQUFDO0FBbkRELDBCQW1EQztBQUVELFNBQVMsY0FBYyxDQUNyQixVQUF5RixFQUN6RixrQkFBMEMsRUFBRztJQUU3QyxzRUFBc0U7SUFDdEUsdUJBQXVCO0lBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO0lBRXZILGtFQUFrRTtJQUNsRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLGtCQUFrQixLQUFLLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtRQUMvRixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxVQUFVLENBQUMsa0JBQWtCLFNBQVMsZUFBZSxDQUFDLGtCQUFrQixtQkFBbUIsQ0FBQyxDQUFDO0tBQ3RLO0lBRUQsMERBQTBEO0lBQzFELE9BQU87UUFDTCxHQUFHLFVBQVU7UUFDYixHQUFHLGVBQWU7UUFDbEIsa0JBQWtCLEVBQUUsa0JBQWtCO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE0QixFQUFFLEtBQWU7SUFDekUsTUFBTSxJQUFJLEdBQW1EO1FBQzNELE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTTtRQUM5QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSwwQkFBMEI7UUFDMUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtRQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0tBQ2pCLENBQUM7SUFFRixnQkFBUSxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHO1FBQ1YsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1FBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRTtLQUN2RSxDQUFDO0lBRUYsTUFBTSxnQkFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVELEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxPQUE2QixFQUFFLFlBQW9CO0lBQ3ZGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNmO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxHQUFHLE1BQWE7SUFDL0Msc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuXG4vLyBmb3IgdW5pdCB0ZXN0c1xuZXhwb3J0IGNvbnN0IGV4dGVybmFsID0ge1xuICBzZW5kSHR0cFJlcXVlc3Q6IGRlZmF1bHRTZW5kSHR0cFJlcXVlc3QsXG4gIGxvZzogZGVmYXVsdExvZyxcbiAgaW5jbHVkZVN0YWNrVHJhY2VzOiB0cnVlLFxuICB1c2VySGFuZGxlckluZGV4OiAnLi9pbmRleCcsXG59O1xuXG5jb25zdCBDUkVBVEVfRkFJTEVEX1BIWVNJQ0FMX0lEX01BUktFUiA9ICdBV1NDREs6OkN1c3RvbVJlc291cmNlUHJvdmlkZXJGcmFtZXdvcms6OkNSRUFURV9GQUlMRUQnO1xuY29uc3QgTUlTU0lOR19QSFlTSUNBTF9JRF9NQVJLRVIgPSAnQVdTQ0RLOjpDdXN0b21SZXNvdXJjZVByb3ZpZGVyRnJhbWV3b3JrOjpNSVNTSU5HX1BIWVNJQ0FMX0lEJztcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50ICYgSGFuZGxlclJlc3BvbnNlO1xuZXhwb3J0IHR5cGUgSGFuZGxlciA9IChldmVudDogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgY29udGV4dDogQVdTTGFtYmRhLkNvbnRleHQpID0+IFByb21pc2U8SGFuZGxlclJlc3BvbnNlIHwgdm9pZD47XG5leHBvcnQgdHlwZSBIYW5kbGVyUmVzcG9uc2UgPSB1bmRlZmluZWQgfCB7XG4gIERhdGE/OiBhbnk7XG4gIFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZztcbiAgUmVhc29uPzogc3RyaW5nO1xuICBOb0VjaG8/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIGNvbnRleHQ6IEFXU0xhbWJkYS5Db250ZXh0KSB7XG4gIGNvbnN0IHNhbml0aXplZEV2ZW50ID0geyAuLi5ldmVudCwgUmVzcG9uc2VVUkw6ICcuLi4nIH07XG4gIGV4dGVybmFsLmxvZyhKU09OLnN0cmluZ2lmeShzYW5pdGl6ZWRFdmVudCwgdW5kZWZpbmVkLCAyKSk7XG5cbiAgLy8gaWdub3JlIERFTEVURSBldmVudCB3aGVuIHRoZSBwaHlzaWNhbCByZXNvdXJjZSBJRCBpcyB0aGUgbWFya2VyIHRoYXRcbiAgLy8gaW5kaWNhdGVzIHRoYXQgdGhpcyBERUxFVEUgaXMgYSBzdWJzZXF1ZW50IERFTEVURSB0byBhIGZhaWxlZCBDUkVBVEVcbiAgLy8gb3BlcmF0aW9uLlxuICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnICYmIGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCA9PT0gQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVIpIHtcbiAgICBleHRlcm5hbC5sb2coJ2lnbm9yaW5nIERFTEVURSBldmVudCBjYXVzZWQgYnkgYSBmYWlsZWQgQ1JFQVRFIGV2ZW50Jyk7XG4gICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ1NVQ0NFU1MnLCBldmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBpbnZva2UgdGhlIHVzZXIgaGFuZGxlci4gdGhpcyBpcyBpbnRlbnRpb25hbGx5IGluc2lkZSB0aGUgdHJ5LWNhdGNoIHRvXG4gICAgLy8gZW5zdXJlIHRoYXQgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaXQncyByZXBvcnRlZCBhcyBhIGZhaWx1cmUgdG9cbiAgICAvLyBjbG91ZGZvcm1hdGlvbiAob3RoZXJ3aXNlIGNmbiB3YWl0cykuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICBjb25zdCB1c2VySGFuZGxlcjogSGFuZGxlciA9IHJlcXVpcmUoZXh0ZXJuYWwudXNlckhhbmRsZXJJbmRleCkuaGFuZGxlcjtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1c2VySGFuZGxlcihzYW5pdGl6ZWRFdmVudCwgY29udGV4dCk7XG5cbiAgICAvLyB2YWxpZGF0ZSB1c2VyIHJlc3BvbnNlIGFuZCBjcmVhdGUgdGhlIGNvbWJpbmVkIGV2ZW50XG4gICAgY29uc3QgcmVzcG9uc2VFdmVudCA9IHJlbmRlclJlc3BvbnNlKGV2ZW50LCByZXN1bHQpO1xuXG4gICAgLy8gc3VibWl0IHRvIGNmbiBhcyBzdWNjZXNzXG4gICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ1NVQ0NFU1MnLCByZXNwb25zZUV2ZW50KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHJlc3A6IFJlc3BvbnNlID0ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICBSZWFzb246IGV4dGVybmFsLmluY2x1ZGVTdGFja1RyYWNlcyA/IGUuc3RhY2sgOiBlLm1lc3NhZ2UsXG4gICAgfTtcblxuICAgIGlmICghcmVzcC5QaHlzaWNhbFJlc291cmNlSWQpIHtcbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogaWYgQ1JFQVRFIGZhaWxzLCB3aGljaCB1c3VhbGx5IGltcGxpZXMsIHdlIHVzdWFsbHkgZG9uJ3RcbiAgICAgIC8vIGhhdmUgYSBwaHlzaWNhbCByZXNvdXJjZSBpZC4gaW4gdGhpcyBjYXNlLCB0aGUgc3Vic2VxdWVudCBERUxFVEVcbiAgICAgIC8vIG9wZXJhdGlvbiBkb2VzIG5vdCBoYXZlIGFueSBtZWFuaW5nLCBhbmQgd2lsbCBsaWtlbHkgZmFpbCBhcyB3ZWxsLiB0b1xuICAgICAgLy8gYWRkcmVzcyB0aGlzLCB3ZSB1c2UgYSBtYXJrZXIgc28gdGhlIHByb3ZpZGVyIGZyYW1ld29yayBjYW4gc2ltcGx5XG4gICAgICAvLyBpZ25vcmUgdGhlIHN1YnNlcXVlbnQgREVMRVRFLlxuICAgICAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSAnQ3JlYXRlJykge1xuICAgICAgICBleHRlcm5hbC5sb2coJ0NSRUFURSBmYWlsZWQsIHJlc3BvbmRpbmcgd2l0aCBhIG1hcmtlciBwaHlzaWNhbCByZXNvdXJjZSBpZCBzbyB0aGF0IHRoZSBzdWJzZXF1ZW50IERFTEVURSB3aWxsIGJlIGlnbm9yZWQnKTtcbiAgICAgICAgcmVzcC5QaHlzaWNhbFJlc291cmNlSWQgPSBDUkVBVEVfRkFJTEVEX1BIWVNJQ0FMX0lEX01BUktFUjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSwgaWYgUGh5c2ljYWxSZXNvdXJjZUlkIGlzIG5vdCBzcGVjaWZpZWQsIHNvbWV0aGluZyBpc1xuICAgICAgICAvLyB0ZXJyaWJseSB3cm9uZyBiZWNhdXNlIGFsbCBvdGhlciBldmVudHMgc2hvdWxkIGhhdmUgYW4gSUQuXG4gICAgICAgIGV4dGVybmFsLmxvZyhgRVJST1I6IE1hbGZvcm1lZCBldmVudC4gXCJQaHlzaWNhbFJlc291cmNlSWRcIiBpcyByZXF1aXJlZDogJHtKU09OLnN0cmluZ2lmeShldmVudCl9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhpcyBpcyBhbiBhY3R1YWwgZXJyb3IsIGZhaWwgdGhlIGFjdGl2aXR5IGFsdG9nZXRoZXIgYW5kIGV4aXN0LlxuICAgIGF3YWl0IHN1Ym1pdFJlc3BvbnNlKCdGQUlMRUQnLCByZXNwKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJSZXNwb25zZShcbiAgY2ZuUmVxdWVzdDogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCAmIHsgUGh5c2ljYWxSZXNvdXJjZUlkPzogc3RyaW5nIH0sXG4gIGhhbmRsZXJSZXNwb25zZTogdm9pZCB8IEhhbmRsZXJSZXNwb25zZSA9IHsgfSk6IFJlc3BvbnNlIHtcblxuICAvLyBpZiBwaHlzaWNhbCBJRCBpcyBub3QgcmV0dXJuZWQsIHdlIGhhdmUgc29tZSBkZWZhdWx0cyBmb3IgeW91IGJhc2VkXG4gIC8vIG9uIHRoZSByZXF1ZXN0IHR5cGUuXG4gIGNvbnN0IHBoeXNpY2FsUmVzb3VyY2VJZCA9IGhhbmRsZXJSZXNwb25zZS5QaHlzaWNhbFJlc291cmNlSWQgPz8gY2ZuUmVxdWVzdC5QaHlzaWNhbFJlc291cmNlSWQgPz8gY2ZuUmVxdWVzdC5SZXF1ZXN0SWQ7XG5cbiAgLy8gaWYgd2UgYXJlIGluIERFTEVURSBhbmQgcGh5c2ljYWwgSUQgd2FzIGNoYW5nZWQsIGl0J3MgYW4gZXJyb3IuXG4gIGlmIChjZm5SZXF1ZXN0LlJlcXVlc3RUeXBlID09PSAnRGVsZXRlJyAmJiBwaHlzaWNhbFJlc291cmNlSWQgIT09IGNmblJlcXVlc3QuUGh5c2ljYWxSZXNvdXJjZUlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBERUxFVEU6IGNhbm5vdCBjaGFuZ2UgdGhlIHBoeXNpY2FsIHJlc291cmNlIElEIGZyb20gXCIke2NmblJlcXVlc3QuUGh5c2ljYWxSZXNvdXJjZUlkfVwiIHRvIFwiJHtoYW5kbGVyUmVzcG9uc2UuUGh5c2ljYWxSZXNvdXJjZUlkfVwiIGR1cmluZyBkZWxldGlvbmApO1xuICB9XG5cbiAgLy8gbWVyZ2UgcmVxdWVzdCBldmVudCBhbmQgcmVzdWx0IGV2ZW50IChyZXN1bHQgcHJldmFpbHMpLlxuICByZXR1cm4ge1xuICAgIC4uLmNmblJlcXVlc3QsXG4gICAgLi4uaGFuZGxlclJlc3BvbnNlLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogcGh5c2ljYWxSZXNvdXJjZUlkLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdWJtaXRSZXNwb25zZShzdGF0dXM6ICdTVUNDRVNTJyB8ICdGQUlMRUQnLCBldmVudDogUmVzcG9uc2UpIHtcbiAgY29uc3QganNvbjogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSA9IHtcbiAgICBTdGF0dXM6IHN0YXR1cyxcbiAgICBSZWFzb246IGV2ZW50LlJlYXNvbiA/PyBzdGF0dXMsXG4gICAgU3RhY2tJZDogZXZlbnQuU3RhY2tJZCxcbiAgICBSZXF1ZXN0SWQ6IGV2ZW50LlJlcXVlc3RJZCxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCB8fCBNSVNTSU5HX1BIWVNJQ0FMX0lEX01BUktFUixcbiAgICBMb2dpY2FsUmVzb3VyY2VJZDogZXZlbnQuTG9naWNhbFJlc291cmNlSWQsXG4gICAgTm9FY2hvOiBldmVudC5Ob0VjaG8sXG4gICAgRGF0YTogZXZlbnQuRGF0YSxcbiAgfTtcblxuICBleHRlcm5hbC5sb2coJ3N1Ym1pdCByZXNwb25zZSB0byBjbG91ZGZvcm1hdGlvbicsIGpzb24pO1xuXG4gIGNvbnN0IHJlc3BvbnNlQm9keSA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xuICBjb25zdCBwYXJzZWRVcmwgPSB1cmwucGFyc2UoZXZlbnQuUmVzcG9uc2VVUkwpO1xuICBjb25zdCByZXEgPSB7XG4gICAgaG9zdG5hbWU6IHBhcnNlZFVybC5ob3N0bmFtZSxcbiAgICBwYXRoOiBwYXJzZWRVcmwucGF0aCxcbiAgICBtZXRob2Q6ICdQVVQnLFxuICAgIGhlYWRlcnM6IHsgJ2NvbnRlbnQtdHlwZSc6ICcnLCAnY29udGVudC1sZW5ndGgnOiByZXNwb25zZUJvZHkubGVuZ3RoIH0sXG4gIH07XG5cbiAgYXdhaXQgZXh0ZXJuYWwuc2VuZEh0dHBSZXF1ZXN0KHJlcSwgcmVzcG9uc2VCb2R5KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdFNlbmRIdHRwUmVxdWVzdChvcHRpb25zOiBodHRwcy5SZXF1ZXN0T3B0aW9ucywgcmVzcG9uc2VCb2R5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucywgXyA9PiByZXNvbHZlKCkpO1xuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgcmVxdWVzdC53cml0ZShyZXNwb25zZUJvZHkpO1xuICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdExvZyhmbXQ6IHN0cmluZywgLi4ucGFyYW1zOiBhbnlbXSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhmbXQsIC4uLnBhcmFtcyk7XG59XG4iXX0= \ No newline at end of file diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.d.ts b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.d.ts deleted file mode 100644 index 3554dc94d4617..0000000000000 --- a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function handler(event: AWSLambda.CloudFormationCustomResourceEvent): Promise; diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.ts b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.ts deleted file mode 100644 index 2459d44ab1d18..0000000000000 --- a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.ts +++ /dev/null @@ -1,82 +0,0 @@ -// eslint-disable-next-line import/no-extraneous-dependencies -import { S3 } from 'aws-sdk'; - -const AUTO_DELETE_OBJECTS_TAG = 'aws-cdk:auto-delete-objects'; - -const s3 = new S3(); - -export async function handler(event: AWSLambda.CloudFormationCustomResourceEvent) { - switch (event.RequestType) { - case 'Create': - return; - case 'Update': - return onUpdate(event); - case 'Delete': - return onDelete(event.ResourceProperties?.BucketName); - } -} - -async function onUpdate(event: AWSLambda.CloudFormationCustomResourceEvent) { - const updateEvent = event as AWSLambda.CloudFormationCustomResourceUpdateEvent; - const oldBucketName = updateEvent.OldResourceProperties?.BucketName; - const newBucketName = updateEvent.ResourceProperties?.BucketName; - const bucketNameHasChanged = newBucketName != null && oldBucketName != null && newBucketName !== oldBucketName; - - /* If the name of the bucket has changed, CloudFormation will try to delete the bucket - and create a new one with the new name. So we have to delete the contents of the - bucket so that this operation does not fail. */ - if (bucketNameHasChanged) { - return onDelete(oldBucketName); - } -} - -/** - * Recursively delete all items in the bucket - * - * @param bucketName the bucket name - */ -async function emptyBucket(bucketName: string) { - const listedObjects = await s3.listObjectVersions({ Bucket: bucketName }).promise(); - const contents = [...listedObjects.Versions ?? [], ...listedObjects.DeleteMarkers ?? []]; - if (contents.length === 0) { - return; - } - - const records = contents.map((record: any) => ({ Key: record.Key, VersionId: record.VersionId })); - await s3.deleteObjects({ Bucket: bucketName, Delete: { Objects: records } }).promise(); - - if (listedObjects?.IsTruncated) { - await emptyBucket(bucketName); - } -} - -async function onDelete(bucketName?: string) { - if (!bucketName) { - throw new Error('No BucketName was provided.'); - } - if (!await isBucketTaggedForDeletion(bucketName)) { - process.stdout.write(`Bucket does not have '${AUTO_DELETE_OBJECTS_TAG}' tag, skipping cleaning.\n`); - return; - } - try { - await emptyBucket(bucketName); - } catch (e) { - if (e.code !== 'NoSuchBucket') { - throw e; - } - // Bucket doesn't exist. Ignoring - } -} - -/** - * The bucket will only be tagged for deletion if it's being deleted in the same - * deployment as this Custom Resource. - * - * If the Custom Resource is every deleted before the bucket, it must be because - * `autoDeleteObjects` has been switched to false, in which case the tag would have - * been removed before we get to this Delete event. - */ -async function isBucketTaggedForDeletion(bucketName: string) { - const response = await s3.getBucketTagging({ Bucket: bucketName }).promise(); - return response.TagSet.some(tag => tag.Key === AUTO_DELETE_OBJECTS_TAG && tag.Value === 'true'); -} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/manifest.json b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/manifest.json index a114baf10c235..773077597be42 100644 --- a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { "version": "21.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "FlowLogsFeatureFlag.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,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}/2db53e096625b4b167fb15dd7bdc246692b381f45e28c509614fef7d41c20bc9.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/8f4f8db3ea3ad2d5f5678275c75dce7d9b67b46d8df7d92c62913bdc5a03cd3f.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -210,7 +204,10 @@ "/FlowLogsFeatureFlag/VPC/FlowLogsS3WithDestinationOptions/FlowLog": [ { "type": "aws:cdk:logicalId", - "data": "VPCFlowLogsS3WithDestinationOptionsFlowLog030C15B2" + "data": "VPCFlowLogsS3WithDestinationOptionsFlowLog030C15B2", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_REPLACE" + ] } ], "/FlowLogsFeatureFlag/Exports/Output{\"Fn::GetAtt\":[\"VPCFlowLogsS3BucketFB7DC2BE\",\"Arn\"]}": [ @@ -286,7 +283,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}/2090a74d484bc155b48d7511b99e4921b8f55e488c3fe1500cffede0cdfd33b7.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/23955aa16c5d59106d93ecce9cedd43aa5782fbf23bb2ef8549b2119345a6f79.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -549,7 +546,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}/1dcf759cd2c8928f5b1acfbf439f1751e25367a5ac61ba5e640ff8b78fdf89f7.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/dd951509b1e22484b40a66a661cb8cebce3087b8cb381e3dcf02e641e5eb08cd.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -604,6 +601,12 @@ ] }, "displayName": "FlowLogs/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/tree.json b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/tree.json index 9a0ff6b79a4b7..f6e0ef7c83ea9 100644 --- a/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-ec2/test/integ.vpc-flow-logs.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.123" - } - }, "FlowLogsFeatureFlag": { "id": "FlowLogsFeatureFlag", "path": "FlowLogsFeatureFlag", @@ -827,7 +819,6 @@ "Ref": "VPCB9E5F0B4" }, "resourceType": "VPC", - "trafficType": "ALL", "logDestination": { "Fn::GetAtt": [ "VPCFlowLogsS3BucketFB7DC2BE", @@ -840,7 +831,8 @@ "key": "Name", "value": "FlowLogsFeatureFlag/VPC" } - ] + ], + "trafficType": "ALL" } }, "constructInfo": { @@ -1028,11 +1020,10 @@ "Ref": "VPCB9E5F0B4" }, "resourceType": "VPC", - "trafficType": "ALL", "destinationOptions": { "fileFormat": "plain-text", - "perHourPartition": false, - "hiveCompatiblePartitions": true + "hiveCompatiblePartitions": true, + "perHourPartition": false }, "logDestination": { "Fn::GetAtt": [ @@ -1046,7 +1037,8 @@ "key": "Name", "value": "FlowLogsFeatureFlag/VPC" } - ] + ], + "trafficType": "ALL" } }, "constructInfo": { @@ -1089,7 +1081,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.123" + "version": "10.1.161" } }, "FlowLogsInstance": { @@ -1140,6 +1132,14 @@ "id": "InstanceRole", "path": "FlowLogsFeatureFlag/FlowLogsInstance/InstanceRole", "children": { + "ImportInstanceRole": { + "id": "ImportInstanceRole", + "path": "FlowLogsFeatureFlag/FlowLogsInstance/InstanceRole/ImportInstanceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "FlowLogsFeatureFlag/FlowLogsInstance/InstanceRole/Resource", @@ -1264,6 +1264,22 @@ "fqn": "@aws-cdk/core.Resource", "version": "0.0.0" } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "FlowLogsFeatureFlag/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "FlowLogsFeatureFlag/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } } }, "constructInfo": { @@ -2086,7 +2102,6 @@ "Ref": "VPCB9E5F0B4" }, "resourceType": "VPC", - "trafficType": "ALL", "logDestination": { "Fn::GetAtt": [ "VPCFlowLogsS3BucketFB7DC2BE", @@ -2099,7 +2114,8 @@ "key": "Name", "value": "FlowLogsTestStack/VPC" } - ] + ], + "trafficType": "ALL" } }, "constructInfo": { @@ -2127,7 +2143,6 @@ "Ref": "VPCB9E5F0B4" }, "resourceType": "VPC", - "trafficType": "ALL", "logDestination": { "Fn::Join": [ "", @@ -2148,7 +2163,8 @@ "key": "Name", "value": "FlowLogsTestStack/VPC" } - ] + ], + "trafficType": "ALL" } }, "constructInfo": { @@ -2176,6 +2192,14 @@ "id": "IAMRole", "path": "FlowLogsTestStack/FlowLogsCW/IAMRole", "children": { + "ImportIAMRole": { + "id": "ImportIAMRole", + "path": "FlowLogsTestStack/FlowLogsCW/IAMRole/ImportIAMRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "FlowLogsTestStack/FlowLogsCW/IAMRole/Resource", @@ -2299,7 +2323,6 @@ "Ref": "VPCB9E5F0B4" }, "resourceType": "VPC", - "trafficType": "ALL", "deliverLogsPermissionArn": { "Fn::GetAtt": [ "FlowLogsCWIAMRole017AD736", @@ -2309,7 +2332,8 @@ "logDestinationType": "cloud-watch-logs", "logGroupName": { "Ref": "FlowLogsCWLogGroup0398E8F8" - } + }, + "trafficType": "ALL" } }, "constructInfo": { @@ -2592,6 +2616,22 @@ "fqn": "@aws-cdk/core.CustomResourceProvider", "version": "0.0.0" } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "FlowLogsTestStack/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "FlowLogsTestStack/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } } }, "constructInfo": { @@ -2612,7 +2652,7 @@ "path": "FlowLogs/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.123" + "version": "10.1.161" } }, "DeployAssert": { @@ -2632,7 +2672,7 @@ "path": "FlowLogs/DefaultTest/DeployAssert/AwsApiCallS3listObjectsV2/SdkProvider/AssertionsProvider", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.123" + "version": "10.1.161" } } }, @@ -2704,7 +2744,23 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.123" + "version": "10.1.161" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "FlowLogs/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "FlowLogs/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" } } }, @@ -2724,6 +2780,14 @@ "fqn": "@aws-cdk/integ-tests.IntegTest", "version": "0.0.0" } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.161" + } } }, "constructInfo": { diff --git a/packages/@aws-cdk/aws-ec2/test/security-group.test.ts b/packages/@aws-cdk/aws-ec2/test/security-group.test.ts index a480c53f58dfa..5a5e6e41a8009 100644 --- a/packages/@aws-cdk/aws-ec2/test/security-group.test.ts +++ b/packages/@aws-cdk/aws-ec2/test/security-group.test.ts @@ -516,7 +516,9 @@ describe('security group', () => { }); }); }); +}); +describe('security group lookup', () => { testDeprecated('can look up a security group', () => { const app = new App(); const stack = new Stack(app, 'stack', { @@ -528,7 +530,7 @@ describe('security group', () => { const securityGroup = SecurityGroup.fromLookup(stack, 'stack', 'sg-1234'); - expect(securityGroup.securityGroupId).toEqual('sg-12345'); + expect(securityGroup.securityGroupId).toEqual('sg-12345678'); expect(securityGroup.allowAllOutbound).toEqual(true); }); @@ -547,7 +549,7 @@ describe('security group', () => { const securityGroup = SecurityGroup.fromLookupById(stack, 'SG1', 'sg-12345'); // THEN - expect(securityGroup.securityGroupId).toEqual('sg-12345'); + expect(securityGroup.securityGroupId).toEqual('sg-12345678'); expect(securityGroup.allowAllOutbound).toEqual(true); }); @@ -571,7 +573,7 @@ describe('security group', () => { const securityGroup = SecurityGroup.fromLookupByName(stack, 'SG1', 'sg-12345', vpc); // THEN - expect(securityGroup.securityGroupId).toEqual('sg-12345'); + expect(securityGroup.securityGroupId).toEqual('sg-12345678'); expect(securityGroup.allowAllOutbound).toEqual(true); }); @@ -595,11 +597,35 @@ describe('security group', () => { const securityGroup = SecurityGroup.fromLookupByName(stack, 'SG1', 'my-security-group', vpc); // THEN - expect(securityGroup.securityGroupId).toEqual('sg-12345'); + expect(securityGroup.securityGroupId).toEqual('sg-12345678'); expect(securityGroup.allowAllOutbound).toEqual(true); }); + test('can look up a security group and use it as a peer', () => { + // GIVEN + const app = new App(); + const stack = new Stack(app, 'stack', { + env: { + account: '1234', + region: 'us-east-1', + }, + }); + + const vpc = Vpc.fromVpcAttributes(stack, 'VPC', { + vpcId: 'vpc-1234', + availabilityZones: ['dummy1a', 'dummy1b', 'dummy1c'], + }); + + // WHEN + const securityGroup = SecurityGroup.fromLookupByName(stack, 'SG1', 'my-security-group', vpc); + + // THEN + expect(() => { + Peer.securityGroupId(securityGroup.securityGroupId); + }).not.toThrow(); + }); + test('throws if securityGroupId is tokenized', () => { // GIVEN const app = new App(); diff --git a/packages/@aws-cdk/aws-ec2/test/vpc-flow-logs.test.ts b/packages/@aws-cdk/aws-ec2/test/vpc-flow-logs.test.ts index 5b16d80caf50d..7a068377feffb 100644 --- a/packages/@aws-cdk/aws-ec2/test/vpc-flow-logs.test.ts +++ b/packages/@aws-cdk/aws-ec2/test/vpc-flow-logs.test.ts @@ -93,9 +93,9 @@ describe('vpc flow logs', () => { TrafficType: 'ALL', ResourceId: 'eni-123456', DestinationOptions: { - hiveCompatiblePartitions: true, - fileFormat: 'plain-text', - perHourPartition: false, + HiveCompatiblePartitions: true, + FileFormat: 'plain-text', + PerHourPartition: false, }, LogDestination: { 'Fn::GetAtt': [ diff --git a/packages/@aws-cdk/aws-ec2/test/vpc.test.ts b/packages/@aws-cdk/aws-ec2/test/vpc.test.ts index afe61c6e0a320..bdaffa94114de 100644 --- a/packages/@aws-cdk/aws-ec2/test/vpc.test.ts +++ b/packages/@aws-cdk/aws-ec2/test/vpc.test.ts @@ -1,6 +1,6 @@ import { Annotations, Match, Template } from '@aws-cdk/assertions'; import { testDeprecated } from '@aws-cdk/cdk-build-tools'; -import { CfnOutput, CfnResource, Fn, Lazy, Stack, Tags } from '@aws-cdk/core'; +import { App, CfnOutput, CfnResource, Fn, Lazy, Stack, Tags } from '@aws-cdk/core'; import { AclCidr, AclTraffic, @@ -27,6 +27,7 @@ import { TrafficDirection, Vpc, IpAddresses, + InterfaceVpcEndpointAwsService, } from '../lib'; describe('vpc', () => { @@ -2115,6 +2116,66 @@ describe('vpc', () => { } }); }); + + describe('can reference vpcEndpointDnsEntries across stacks', () => { + test('can reference an actual string list across stacks', () => { + const app = new App(); + const stack1 = new Stack(app, 'Stack1'); + const vpc = new Vpc(stack1, 'Vpc'); + const endpoint = new InterfaceVpcEndpoint(stack1, 'interfaceVpcEndpoint', { + vpc, + service: InterfaceVpcEndpointAwsService.SECRETS_MANAGER, + }); + + const stack2 = new Stack(app, 'Stack2'); + new CfnOutput(stack2, 'endpoint', { + value: Fn.select(0, endpoint.vpcEndpointDnsEntries), + }); + + const assembly = app.synth(); + const template1 = assembly.getStackByName(stack1.stackName).template; + const template2 = assembly.getStackByName(stack2.stackName).template; + + // THEN + expect(template1).toMatchObject({ + Outputs: { + ExportsOutputFnGetAttinterfaceVpcEndpoint89C99945DnsEntriesB1872F7A: { + Value: { + 'Fn::Join': [ + '||', { + 'Fn::GetAtt': [ + 'interfaceVpcEndpoint89C99945', + 'DnsEntries', + ], + }, + ], + }, + Export: { Name: 'Stack1:ExportsOutputFnGetAttinterfaceVpcEndpoint89C99945DnsEntriesB1872F7A' }, + }, + }, + }); + + expect(template2).toMatchObject({ + Outputs: { + endpoint: { + Value: { + 'Fn::Select': [ + 0, + { + 'Fn::Split': [ + '||', + { + 'Fn::ImportValue': 'Stack1:ExportsOutputFnGetAttinterfaceVpcEndpoint89C99945DnsEntriesB1872F7A', + }, + ], + }, + ], + }, + }, + }, + }); + }); + }); }); function getTestStack(): Stack { diff --git a/packages/@aws-cdk/aws-ecr/jest.config.js b/packages/@aws-cdk/aws-ecr/jest.config.js index f4f042f9d2c29..09efb83e68e72 100644 --- a/packages/@aws-cdk/aws-ecr/jest.config.js +++ b/packages/@aws-cdk/aws-ecr/jest.config.js @@ -5,6 +5,7 @@ module.exports = { global: { ...baseConfig.coverageThreshold.global, branches: 70, + statements: 78, }, }, }; diff --git a/packages/@aws-cdk/aws-ecr/lib/repository.ts b/packages/@aws-cdk/aws-ecr/lib/repository.ts index 1955a3447e18b..d32f3430e3c62 100644 --- a/packages/@aws-cdk/aws-ecr/lib/repository.ts +++ b/packages/@aws-cdk/aws-ecr/lib/repository.ts @@ -2,7 +2,7 @@ import { EOL } from 'os'; import * as events from '@aws-cdk/aws-events'; import * as iam from '@aws-cdk/aws-iam'; import * as kms from '@aws-cdk/aws-kms'; -import { ArnFormat, IResource, Lazy, RemovalPolicy, Resource, Stack, Token } from '@aws-cdk/core'; +import { ArnFormat, IResource, Lazy, RemovalPolicy, Resource, Stack, Tags, Token, TokenComparison } from '@aws-cdk/core'; import { IConstruct, Construct } from 'constructs'; import { CfnRepository } from './ecr.generated'; import { LifecycleRule, TagStatus } from './lifecycle'; @@ -279,17 +279,49 @@ export abstract class RepositoryBase extends Resource implements IRepository { rule.addTarget(options.target); return rule; } + /** * Grant the given principal identity permissions to perform the actions on this repository */ public grant(grantee: iam.IGrantable, ...actions: string[]) { - return iam.Grant.addToPrincipalOrResource({ - grantee, - actions, - resourceArns: [this.repositoryArn], - resourceSelfArns: [], - resource: this, - }); + const crossAccountPrincipal = this.unsafeCrossAccountResourcePolicyPrincipal(grantee); + if (crossAccountPrincipal) { + // If the principal is from a different account, + // that means addToPrincipalOrResource() will update the Resource Policy of this repo to trust that principal. + // However, ECR verifies that the principal used in the Policy exists, + // and will error out if it doesn't. + // Because of that, if the principal is a newly created resource, + // and there is not a dependency relationship between the Stacks of this repo and the principal, + // trust the entire account of the principal instead + // (otherwise, deploying this repo will fail). + // To scope down the permissions as much as possible, + // only trust principals from that account with a specific tag + const crossAccountPrincipalStack = Stack.of(crossAccountPrincipal); + const roleTag = `${crossAccountPrincipalStack.stackName}_${crossAccountPrincipal.node.addr}`; + Tags.of(crossAccountPrincipal).add('aws-cdk:id', roleTag); + this.addToResourcePolicy(new iam.PolicyStatement({ + actions, + principals: [new iam.AccountPrincipal(crossAccountPrincipalStack.account)], + conditions: { + StringEquals: { 'aws:PrincipalTag/aws-cdk:id': roleTag }, + }, + })); + + return iam.Grant.addToPrincipal({ + grantee, + actions, + resourceArns: [this.repositoryArn], + scope: this, + }); + } else { + return iam.Grant.addToPrincipalOrResource({ + grantee, + actions, + resourceArns: [this.repositoryArn], + resourceSelfArns: [], + resource: this, + }); + } } /** @@ -319,6 +351,43 @@ export abstract class RepositoryBase extends Resource implements IRepository { 'ecr:UploadLayerPart', 'ecr:CompleteLayerUpload'); } + + /** + * Returns the resource that backs the given IAM grantee if we cannot put a direct reference + * to the grantee in the resource policy of this ECR repository, + * and 'undefined' in case we can. + */ + private unsafeCrossAccountResourcePolicyPrincipal(grantee: iam.IGrantable): IConstruct | undefined { + // A principal cannot be safely added to the Resource Policy of this ECR repository, if: + // 1. The principal is from a different account, and + // 2. The principal is a new resource (meaning, not just referenced), and + // 3. The Stack this repo belongs to doesn't depend on the Stack the principal belongs to. + + // condition #1 + const principal = grantee.grantPrincipal; + const principalAccount = principal.principalAccount; + if (!principalAccount) { + return undefined; + } + const repoAndPrincipalAccountCompare = Token.compareStrings(this.env.account, principalAccount); + if (repoAndPrincipalAccountCompare === TokenComparison.BOTH_UNRESOLVED || + repoAndPrincipalAccountCompare === TokenComparison.SAME) { + return undefined; + } + + // condition #2 + if (!iam.principalIsOwnedResource(principal)) { + return undefined; + } + + // condition #3 + const principalStack = Stack.of(principal); + if (this.stack.dependencies.includes(principalStack)) { + return undefined; + } + + return principal; + } } /** @@ -491,7 +560,6 @@ export class Repository extends RepositoryBase { }); } - private static validateRepositoryName(physicalName: string) { const repositoryName = physicalName; if (!repositoryName || Token.isUnresolved(repositoryName)) { diff --git a/packages/@aws-cdk/aws-ecr/test/repository.test.ts b/packages/@aws-cdk/aws-ecr/test/repository.test.ts index 432ab41a2e8c1..84ea9d1a9930f 100644 --- a/packages/@aws-cdk/aws-ecr/test/repository.test.ts +++ b/packages/@aws-cdk/aws-ecr/test/repository.test.ts @@ -444,6 +444,36 @@ describe('repository', () => { }).toThrow('encryptionKey is specified, so \'encryption\' must be set to KMS (value: AES256)'); }); + test('removal policy is "Retain" by default', () => { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + new ecr.Repository(stack, 'Repo'); + + // THEN + Template.fromStack(stack).hasResource('AWS::ECR::Repository', { + 'Type': 'AWS::ECR::Repository', + 'DeletionPolicy': 'Retain', + }); + }); + + test('"Delete" removal policy can be set explicitly', () => { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + new ecr.Repository(stack, 'Repo', { + removalPolicy: cdk.RemovalPolicy.DESTROY, + }); + + // THEN + Template.fromStack(stack).hasResource('AWS::ECR::Repository', { + 'Type': 'AWS::ECR::Repository', + 'DeletionPolicy': 'Delete', + }); + }); + describe('events', () => { test('onImagePushed without imageTag creates the correct event', () => { const stack = new cdk.Stack(); diff --git a/packages/@aws-cdk/aws-ecs/test/images/tag-parameter-container-image.test.ts b/packages/@aws-cdk/aws-ecs/test/images/tag-parameter-container-image.test.ts index 9ff3023b1e965..5f09864f5f3c7 100644 --- a/packages/@aws-cdk/aws-ecs/test/images/tag-parameter-container-image.test.ts +++ b/packages/@aws-cdk/aws-ecs/test/images/tag-parameter-container-image.test.ts @@ -77,51 +77,52 @@ describe('tag parameter container image', () => { 'Fn::Join': ['', [ 'arn:', { Ref: 'AWS::Partition' }, - ':iam::service-account:role/servicestackionexecutionrolee7e2d9a783a54eb795f4', + ':iam::service-account:root', ]], }, }, + Condition: { + StringEquals: { + 'aws:PrincipalTag/aws-cdk:id': 'ServiceStack_c8a38b9d3ed0e8d960dd0d679c0bab1612dafa96f5', + }, + }, }], }, }); - Template.fromStack(serviceStack).hasResourceProperties('AWS::IAM::Role', { - RoleName: 'servicestackionexecutionrolee7e2d9a783a54eb795f4', + + Template.fromStack(serviceStack).hasResourceProperties('AWS::IAM::Policy', { + PolicyDocument: Match.objectLike({ + Statement: Match.arrayWith([ + Match.objectLike({ + Action: [ + 'ecr:BatchCheckLayerAvailability', + 'ecr:GetDownloadUrlForLayer', + 'ecr:BatchGetImage', + ], + Effect: 'Allow', + Resource: { + 'Fn::Join': ['', [ + 'arn:', + { Ref: 'AWS::Partition' }, + `:ecr:us-west-1:pipeline-account:repository/${repositoryName}`, + ]], + }, + }), + Match.objectLike({ + Action: 'ecr:GetAuthorizationToken', + Effect: 'Allow', + Resource: '*', + }), + ]), + }), }); - Template.fromStack(serviceStack).hasResourceProperties('AWS::ECS::TaskDefinition', { - ContainerDefinitions: [ - Match.objectLike({ - Image: { - 'Fn::Join': ['', [ - { - 'Fn::Select': [4, { - 'Fn::Split': [':', { - 'Fn::Join': ['', [ - 'arn:', - { Ref: 'AWS::Partition' }, - `:ecr:us-west-1:pipeline-account:repository/${repositoryName}`, - ]], - }], - }], - }, - '.dkr.ecr.', - { - 'Fn::Select': [3, { - 'Fn::Split': [':', { - 'Fn::Join': ['', [ - 'arn:', - { Ref: 'AWS::Partition' }, - `:ecr:us-west-1:pipeline-account:repository/${repositoryName}`, - ]], - }], - }], - }, - '.', - { Ref: 'AWS::URLSuffix' }, - `/${repositoryName}:`, - { Ref: 'ServiceTaskDefinitionContainerImageTagParamCEC9D0BA' }, - ]], - }, - }), + + Template.fromStack(serviceStack).hasResourceProperties('AWS::IAM::Role', { + Tags: [ + { + Key: 'aws-cdk:id', + Value: 'ServiceStack_c8a38b9d3ed0e8d960dd0d679c0bab1612dafa96f5', + }, ], }); }); diff --git a/packages/@aws-cdk/aws-eks/package.json b/packages/@aws-cdk/aws-eks/package.json index cf4562e65a869..0770eee3a0b9e 100644 --- a/packages/@aws-cdk/aws-eks/package.json +++ b/packages/@aws-cdk/aws-eks/package.json @@ -80,7 +80,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@aws-cdk/lambda-layer-kubectl-v24": "^2.0.27", + "@aws-cdk/lambda-layer-kubectl-v24": "^2.0.57", "aws-cdk-lib": "2.47.0", "@aws-cdk/assertions": "0.0.0", "@aws-cdk/cdk-build-tools": "0.0.0", @@ -88,13 +88,13 @@ "@aws-cdk/integ-tests": "0.0.0", "@aws-cdk/cfn2ts": "0.0.0", "@aws-cdk/pkglint": "0.0.0", - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/jest": "^27.5.2", "@types/sinon": "^9.0.11", "@types/yaml": "1.9.6", "aws-sdk": "^2.1211.0", - "cdk8s": "^2.5.53", - "cdk8s-plus-24": "2.0.28", + "cdk8s": "^2.5.74", + "cdk8s-plus-24": "2.0.59", "jest": "^27.5.1", "sinon": "^9.2.4" }, diff --git a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/asset.5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510.zip b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/asset.5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510.zip index 593043af0139a..d1065f07d934c 100644 Binary files a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/asset.5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510.zip and b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/asset.5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510.zip differ diff --git a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/asset.ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1.zip b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/asset.ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1.zip index b64a5034e3b6c..eb5f67658b87f 100644 Binary files a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/asset.ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1.zip and b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/asset.ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1.zip differ diff --git a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/asset.c475180f5b1bbabac165414da13a9b843b111cd3b6d5fae9c954c006640c4064.zip b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/asset.c475180f5b1bbabac165414da13a9b843b111cd3b6d5fae9c954c006640c4064.zip index a0efa36e0518a..5adf6bd9b4d19 100644 Binary files a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/asset.c475180f5b1bbabac165414da13a9b843b111cd3b6d5fae9c954c006640c4064.zip and b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/asset.c475180f5b1bbabac165414da13a9b843b111cd3b6d5fae9c954c006640c4064.zip differ diff --git a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/aws-cdk-eks-cluster-alb-controller-test.assets.json b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/aws-cdk-eks-cluster-alb-controller-test.assets.json index 9bf4f524ed699..5100de44d7273 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/aws-cdk-eks-cluster-alb-controller-test.assets.json +++ b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/aws-cdk-eks-cluster-alb-controller-test.assets.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { "c475180f5b1bbabac165414da13a9b843b111cd3b6d5fae9c954c006640c4064": { "source": { @@ -144,7 +144,7 @@ } } }, - "292c4b7414bf1bcfda3b17644a81a5d3696375b3964f62a8c7ddcc77265825fe": { + "59dc5af6d59f2ec8fce2d9a506da6d69adf240e9508faec917bb14f2a79c054a": { "source": { "path": "aws-cdk-eks-cluster-alb-controller-test.template.json", "packaging": "file" @@ -152,7 +152,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "292c4b7414bf1bcfda3b17644a81a5d3696375b3964f62a8c7ddcc77265825fe.json", + "objectKey": "59dc5af6d59f2ec8fce2d9a506da6d69adf240e9508faec917bb14f2a79c054a.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/aws-cdk-eks-cluster-alb-controller-test.template.json b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/aws-cdk-eks-cluster-alb-controller-test.template.json index 2c82e451a2fac..7d47fb5e56e0f 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/aws-cdk-eks-cluster-alb-controller-test.template.json +++ b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/aws-cdk-eks-cluster-alb-controller-test.template.json @@ -901,7 +901,7 @@ "Fn::Join": [ "", [ - "[{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"name\":\"hello-server-deployment-c852e88c\",\"labels\":{\"aws.cdk.eks/prune-c88b1dfeeaf63e3024ab07862029ba60fd8907fb04\":\"\"}},\"spec\":{\"minReadySeconds\":0,\"progressDeadlineSeconds\":600,\"replicas\":2,\"selector\":{\"matchLabels\":{\"cdk8s.io/metadata.addr\":\"hello-server-Deployment-c8659a74\"}},\"strategy\":{\"rollingUpdate\":{\"maxSurge\":\"25%\",\"maxUnavailable\":\"25%\"},\"type\":\"RollingUpdate\"},\"template\":{\"metadata\":{\"labels\":{\"cdk8s.io/metadata.addr\":\"hello-server-Deployment-c8659a74\"}},\"spec\":{\"automountServiceAccountToken\":false,\"containers\":[{\"args\":[\"-text\",\"hello\"],\"image\":\"hashicorp/http-echo\",\"imagePullPolicy\":\"Always\",\"name\":\"main\",\"ports\":[{\"containerPort\":5678}],\"resources\":{\"limits\":{\"cpu\":\"1500m\",\"memory\":\"2048Mi\"},\"requests\":{\"cpu\":\"1000m\",\"memory\":\"512Mi\"}},\"securityContext\":{\"allowPrivilegeEscalation\":false,\"privileged\":false,\"readOnlyRootFilesystem\":true,\"runAsGroup\":26000,\"runAsNonRoot\":true,\"runAsUser\":25000},\"startupProbe\":{\"failureThreshold\":3,\"tcpSocket\":{\"port\":5678}}}],\"dnsPolicy\":\"ClusterFirst\",\"restartPolicy\":\"Always\",\"securityContext\":{\"fsGroupChangePolicy\":\"Always\",\"runAsNonRoot\":true},\"setHostnameAsFQDN\":false}}}},{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"name\":\"hello-server-deployment-service-c8fd9c61\",\"labels\":{\"aws.cdk.eks/prune-c88b1dfeeaf63e3024ab07862029ba60fd8907fb04\":\"\"}},\"spec\":{\"externalIPs\":[],\"ports\":[{\"port\":5678,\"targetPort\":5678}],\"selector\":{\"cdk8s.io/metadata.addr\":\"hello-server-Deployment-c8659a74\"},\"type\":\"NodePort\"}},{\"apiVersion\":\"networking.k8s.io/v1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{\"kubernetes.io/ingress.class\":\"alb\",\"alb.ingress.kubernetes.io/scheme\":\"internal\",\"alb.ingress.kubernetes.io/inbound-cidrs\":\"", + "[{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"name\":\"hello-server-deployment-c852e88c\",\"labels\":{\"aws.cdk.eks/prune-c88b1dfeeaf63e3024ab07862029ba60fd8907fb04\":\"\"}},\"spec\":{\"minReadySeconds\":0,\"progressDeadlineSeconds\":600,\"replicas\":2,\"selector\":{\"matchLabels\":{\"cdk8s.io/metadata.addr\":\"hello-server-Deployment-c8659a74\"}},\"strategy\":{\"rollingUpdate\":{\"maxSurge\":\"25%\",\"maxUnavailable\":\"25%\"},\"type\":\"RollingUpdate\"},\"template\":{\"metadata\":{\"labels\":{\"cdk8s.io/metadata.addr\":\"hello-server-Deployment-c8659a74\"}},\"spec\":{\"automountServiceAccountToken\":false,\"containers\":[{\"args\":[\"-text\",\"hello\"],\"image\":\"hashicorp/http-echo\",\"imagePullPolicy\":\"Always\",\"name\":\"main\",\"ports\":[{\"containerPort\":5678}],\"resources\":{\"limits\":{\"cpu\":\"1500m\",\"memory\":\"2048Mi\"},\"requests\":{\"cpu\":\"1000m\",\"memory\":\"512Mi\"}},\"securityContext\":{\"allowPrivilegeEscalation\":false,\"privileged\":false,\"readOnlyRootFilesystem\":true,\"runAsNonRoot\":true},\"startupProbe\":{\"failureThreshold\":3,\"tcpSocket\":{\"port\":5678}}}],\"dnsPolicy\":\"ClusterFirst\",\"restartPolicy\":\"Always\",\"securityContext\":{\"fsGroupChangePolicy\":\"Always\",\"runAsNonRoot\":true},\"setHostnameAsFQDN\":false}}}},{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"name\":\"hello-server-deployment-service-c8fd9c61\",\"labels\":{\"aws.cdk.eks/prune-c88b1dfeeaf63e3024ab07862029ba60fd8907fb04\":\"\"}},\"spec\":{\"externalIPs\":[],\"ports\":[{\"port\":5678,\"targetPort\":5678}],\"selector\":{\"cdk8s.io/metadata.addr\":\"hello-server-Deployment-c8659a74\"},\"type\":\"NodePort\"}},{\"apiVersion\":\"networking.k8s.io/v1\",\"kind\":\"Ingress\",\"metadata\":{\"annotations\":{\"kubernetes.io/ingress.class\":\"alb\",\"alb.ingress.kubernetes.io/scheme\":\"internal\",\"alb.ingress.kubernetes.io/inbound-cidrs\":\"", { "Fn::GetAtt": [ "Vpc8378EB38", diff --git a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/awscdkclusteralbcontrollerDefaultTestDeployAssert78AE94CA.assets.json b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/awscdkclusteralbcontrollerDefaultTestDeployAssert78AE94CA.assets.json index a1fc5f495ec0d..6f509e04acaca 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/awscdkclusteralbcontrollerDefaultTestDeployAssert78AE94CA.assets.json +++ b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/awscdkclusteralbcontrollerDefaultTestDeployAssert78AE94CA.assets.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/cdk.out b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/integ.json b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/integ.json index f08d7eba3a078..dc2e3d409ca87 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "testCases": { "aws-cdk-cluster-alb-controller/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/manifest.json b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/manifest.json index 20b51ccb0d825..847a3bda7713d 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "artifacts": { "aws-cdk-eks-cluster-alb-controller-test.assets": { "type": "cdk:asset-manifest", @@ -17,7 +17,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}/292c4b7414bf1bcfda3b17644a81a5d3696375b3964f62a8c7ddcc77265825fe.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/59dc5af6d59f2ec8fce2d9a506da6d69adf240e9508faec917bb14f2a79c054a.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -162,10 +162,7 @@ "/aws-cdk-eks-cluster-alb-controller-test/KubectlLayer/Resource": [ { "type": "aws:cdk:logicalId", - "data": "KubectlLayer600207B5", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_REPLACE" - ] + "data": "KubectlLayer600207B5" } ], "/aws-cdk-eks-cluster-alb-controller-test/Cluster/Role/Resource": [ diff --git a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/tree.json b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/tree.json index 2fb72ae536050..1a1b2447d5622 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-eks/test/integ.alb-controller.js.snapshot/tree.json @@ -697,7 +697,7 @@ }, "constructInfo": { "fqn": "@aws-cdk/lambda-layer-kubectl-v24.KubectlV24Layer", - "version": "2.0.27" + "version": "2.0.50" } }, "Cluster": { @@ -961,7 +961,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } }, "KubectlReadyBarrier": { @@ -2525,7 +2525,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } } }, @@ -2604,7 +2604,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } }, "@aws-cdk--aws-eks.KubectlProvider": { @@ -3245,7 +3245,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } }, "awscdkeksclusteralbcontrollertestCluster481F6464-AlbController": { @@ -4088,7 +4088,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } }, "IngressPingerResponse": { @@ -4134,7 +4134,7 @@ "path": "aws-cdk-cluster-alb-controller/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } }, "DeployAssert": { @@ -4180,7 +4180,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } } }, diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/asset.5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510.zip b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/asset.5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510.zip index 593043af0139a..d1065f07d934c 100644 Binary files a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/asset.5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510.zip and b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/asset.5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510.zip differ diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/asset.ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1.zip b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/asset.ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1.zip index b64a5034e3b6c..eb5f67658b87f 100644 Binary files a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/asset.ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1.zip and b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/asset.ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1.zip differ diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/aws-eks-service-account-sdk-calls-test.assets.json b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/aws-eks-service-account-sdk-calls-test.assets.json index 2107ee796f2a8..97fe870aa4425 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/aws-eks-service-account-sdk-calls-test.assets.json +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/aws-eks-service-account-sdk-calls-test.assets.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { "ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1": { "source": { @@ -144,7 +144,7 @@ } } }, - "f2a0f01570772204ccb6eabd502add1f0b4c4049bdc0006358ae317a43801a4d": { + "0105ce475220dfe42cd9e7af0db5c090a5eda7e30cc75e688e14f6105a4b0a21": { "source": { "path": "aws-eks-service-account-sdk-calls-test.template.json", "packaging": "file" @@ -152,7 +152,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "f2a0f01570772204ccb6eabd502add1f0b4c4049bdc0006358ae317a43801a4d.json", + "objectKey": "0105ce475220dfe42cd9e7af0db5c090a5eda7e30cc75e688e14f6105a4b0a21.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/aws-eks-service-account-sdk-calls-test.template.json b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/aws-eks-service-account-sdk-calls-test.template.json index d01828ea37844..39176735872af 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/aws-eks-service-account-sdk-calls-test.template.json +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/aws-eks-service-account-sdk-calls-test.template.json @@ -1052,7 +1052,7 @@ { "Fn::Sub": "${AWS::AccountId}.dkr.ecr.${AWS::Region}.${AWS::URLSuffix}/cdk-hnb659fds-container-assets-${AWS::AccountId}-${AWS::Region}:078a27e3a5a83e24fda48494b75b1b703aade610c10e63f4a33f7029d6f6b236" }, - "\",\"imagePullPolicy\":\"Always\",\"name\":\"main\",\"resources\":{\"limits\":{\"cpu\":\"1500m\",\"memory\":\"2048Mi\"},\"requests\":{\"cpu\":\"1000m\",\"memory\":\"512Mi\"}},\"securityContext\":{\"allowPrivilegeEscalation\":false,\"privileged\":false,\"readOnlyRootFilesystem\":true,\"runAsGroup\":26000,\"runAsNonRoot\":true,\"runAsUser\":25000}}],\"dnsPolicy\":\"ClusterFirst\",\"restartPolicy\":\"Always\",\"securityContext\":{\"fsGroupChangePolicy\":\"Always\",\"runAsNonRoot\":true},\"serviceAccountName\":\"awseksserviceaccountsdkcallstestclustermyserviceaccount6d090a02\",\"setHostnameAsFQDN\":false}}}}]" + "\",\"imagePullPolicy\":\"Always\",\"name\":\"main\",\"resources\":{\"limits\":{\"cpu\":\"1500m\",\"memory\":\"2048Mi\"},\"requests\":{\"cpu\":\"1000m\",\"memory\":\"512Mi\"}},\"securityContext\":{\"allowPrivilegeEscalation\":false,\"privileged\":false,\"readOnlyRootFilesystem\":true,\"runAsNonRoot\":true}}],\"dnsPolicy\":\"ClusterFirst\",\"restartPolicy\":\"Always\",\"securityContext\":{\"fsGroupChangePolicy\":\"Always\",\"runAsNonRoot\":true},\"serviceAccountName\":\"awseksserviceaccountsdkcallstestclustermyserviceaccount6d090a02\",\"setHostnameAsFQDN\":false}}}}]" ] ] }, diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/awscdkeksserviceaccountsdkcallDefaultTestDeployAssertC5196707.assets.json b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/awscdkeksserviceaccountsdkcallDefaultTestDeployAssertC5196707.assets.json index ecad5bae4f311..65436edbf7724 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/awscdkeksserviceaccountsdkcallDefaultTestDeployAssertC5196707.assets.json +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/awscdkeksserviceaccountsdkcallDefaultTestDeployAssertC5196707.assets.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/cdk.out b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/integ.json b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/integ.json index 05a2b623c5518..9c501b5f2ee86 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "testCases": { "aws-cdk-eks-service-account-sdk-call/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/manifest.json b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/manifest.json index e992966f6c92f..ff79794d7fb16 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "artifacts": { "aws-eks-service-account-sdk-calls-test.assets": { "type": "cdk:asset-manifest", @@ -17,7 +17,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}/f2a0f01570772204ccb6eabd502add1f0b4c4049bdc0006358ae317a43801a4d.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/0105ce475220dfe42cd9e7af0db5c090a5eda7e30cc75e688e14f6105a4b0a21.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/tree.json b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/tree.json index 447ad0c8997e0..40102550d71ce 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-service-account-sdk-call.js.snapshot/tree.json @@ -930,7 +930,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } }, "KubectlReadyBarrier": { @@ -2638,7 +2638,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } } }, @@ -2717,7 +2717,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } }, "@aws-cdk--aws-eks.KubectlProvider": { @@ -3403,7 +3403,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } }, "Custom::AWSCDKOpenIdConnectProviderCustomResourceProvider": { @@ -3479,7 +3479,7 @@ "path": "aws-eks-service-account-sdk-calls-test/kplus-sa", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } }, "S3BucketPinger": { @@ -3905,7 +3905,7 @@ }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } }, "PingerResponse": { @@ -3951,7 +3951,7 @@ "path": "aws-cdk-eks-service-account-sdk-call/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } }, "DeployAssert": { @@ -3997,7 +3997,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.161" + "version": "10.1.182" } } }, diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/listener.test.ts b/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/listener.test.ts index b181d086633e8..838897fa5dfe1 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/listener.test.ts +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/listener.test.ts @@ -1719,7 +1719,7 @@ describe('tests', () => { // THEN Template.fromStack(stack).resourceCountIs('AWS::ElasticLoadBalancingV2::Listener', 0); expect(listener.listenerArn).toEqual('arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/application/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2'); - expect(listener.connections.securityGroups[0].securityGroupId).toEqual('sg-12345'); + expect(listener.connections.securityGroups[0].securityGroupId).toEqual('sg-12345678'); }); test('Can add rules to a looked-up ApplicationListener', () => { diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/load-balancer.test.ts b/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/load-balancer.test.ts index 102d016bf6bec..4124a222b7228 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/load-balancer.test.ts +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/load-balancer.test.ts @@ -579,7 +579,7 @@ describe('tests', () => { expect(loadBalancer.loadBalancerCanonicalHostedZoneId).toEqual('Z3DZXE0EXAMPLE'); expect(loadBalancer.loadBalancerDnsName).toEqual('my-load-balancer-1234567890.us-west-2.elb.amazonaws.com'); expect(loadBalancer.ipAddressType).toEqual(elbv2.IpAddressType.DUAL_STACK); - expect(loadBalancer.connections.securityGroups[0].securityGroupId).toEqual('sg-12345'); + expect(loadBalancer.connections.securityGroups[0].securityGroupId).toEqual('sg-12345678'); expect(loadBalancer.env.region).toEqual('us-west-2'); }); diff --git a/packages/@aws-cdk/aws-elasticsearch/README.md b/packages/@aws-cdk/aws-elasticsearch/README.md index 0628082acb39f..6d979176d8fff 100644 --- a/packages/@aws-cdk/aws-elasticsearch/README.md +++ b/packages/@aws-cdk/aws-elasticsearch/README.md @@ -11,7 +11,7 @@ -> Amazon Elasticsearch Service has been renamed to Amazon OpenSearch Service; consequently, the [@aws-cdk/aws-opensearchservice](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-opensearchservice-readme.html) module should be used instead. See [Amazon OpenSearch Service FAQs](https://aws.amazon.com/opensearch-service/faqs/#Name_change) for details. See [Migrating to OpenSearch](#migrating-to-opensearch) for migration instructions. +> Instead of this module, we recommend using the [@aws-cdk/aws-opensearchservice](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-opensearchservice-readme.html) module. See [Amazon OpenSearch Service FAQs](https://aws.amazon.com/opensearch-service/faqs/#Name_change) for details. See [Migrating to OpenSearch](#migrating-to-opensearch) for migration instructions. ## Quick start diff --git a/packages/@aws-cdk/aws-events/lib/event-bus.ts b/packages/@aws-cdk/aws-events/lib/event-bus.ts index ee953f5622634..196df5daa1076 100644 --- a/packages/@aws-cdk/aws-events/lib/event-bus.ts +++ b/packages/@aws-cdk/aws-events/lib/event-bus.ts @@ -2,7 +2,7 @@ import * as iam from '@aws-cdk/aws-iam'; import { ArnFormat, IResource, Lazy, Names, Resource, Stack, Token } from '@aws-cdk/core'; import { Construct } from 'constructs'; import { Archive, BaseArchiveProps } from './archive'; -import { CfnEventBus } from './events.generated'; +import { CfnEventBus, CfnEventBusPolicy } from './events.generated'; /** * Interface which all EventBus based classes MUST implement @@ -309,6 +309,8 @@ export class EventBus extends EventBusBase { */ public readonly eventSourceName?: string; + private policy?: EventBusPolicy; + constructor(scope: Construct, id: string, props?: EventBusProps) { const { eventBusName, eventSourceName } = EventBus.eventBusProps( Lazy.string({ produce: () => Names.uniqueId(this) }), @@ -332,6 +334,28 @@ export class EventBus extends EventBusBase { this.eventBusPolicy = eventBus.attrPolicy; this.eventSourceName = eventBus.eventSourceName; } + + /** + * Adds a statement to the IAM resource policy associated with this event bus. + */ + public addToResourcePolicy(statement: iam.PolicyStatement): iam.AddToResourcePolicyResult { + if (statement.sid == null) { + throw new Error('Event Bus policy statements must have a sid'); + } + + if (this.policy) { + // The policy can contain only one statement + return { statementAdded: false }; + } + + this.policy = new EventBusPolicy(this, 'Policy', { + eventBus: this, + statement: statement.toJSON(), + statementId: statement.sid, + }); + + return { statementAdded: true, policyDependable: this.policy }; + } } class ImportedEventBus extends EventBusBase { @@ -339,6 +363,7 @@ class ImportedEventBus extends EventBusBase { public readonly eventBusName: string; public readonly eventBusPolicy: string; public readonly eventSourceName?: string; + constructor(scope: Construct, id: string, attrs: EventBusAttributes) { const arnParts = Stack.of(scope).splitArn(attrs.eventBusArn, ArnFormat.SLASH_RESOURCE_NAME); super(scope, id, { @@ -352,3 +377,50 @@ class ImportedEventBus extends EventBusBase { this.eventSourceName = attrs.eventSourceName; } } + +/** + * Properties to associate Event Buses with a policy + */ +export interface EventBusPolicyProps { + /** + * The event bus to which the policy applies + */ + readonly eventBus: IEventBus; + + /** + * An IAM Policy Statement to apply to the Event Bus + */ + readonly statement: iam.PolicyStatement; + + /** + * An identifier string for the external account that + * you are granting permissions to. + */ + readonly statementId: string; +} + +/** + * The policy for an Event Bus + * + * Policies define the operations that are allowed on this resource. + * + * You almost never need to define this construct directly. + * + * All AWS resources that support resource policies have a method called + * `addToResourcePolicy()`, which will automatically create a new resource + * policy if one doesn't exist yet, otherwise it will add to the existing + * policy. + * + * Prefer to use `addToResourcePolicy()` instead. + */ +export class EventBusPolicy extends Resource { + constructor(scope: Construct, id: string, props: EventBusPolicyProps) { + super(scope, id); + + new CfnEventBusPolicy(this, 'Resource', { + statementId: props.statementId!, + statement: props.statement, + eventBusName: props.eventBus.eventBusName, + }); + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-events/package.json b/packages/@aws-cdk/aws-events/package.json index 072721b200824..446f64c8c9b10 100644 --- a/packages/@aws-cdk/aws-events/package.json +++ b/packages/@aws-cdk/aws-events/package.json @@ -115,7 +115,8 @@ "props-default-doc:@aws-cdk/aws-events.RuleTargetConfig.runCommandParameters", "props-default-doc:@aws-cdk/aws-events.RuleTargetConfig.sqsParameters", "props-default-doc:@aws-cdk/aws-events.RuleTargetConfig.httpParameters", - "from-method:@aws-cdk/aws-events.ApiDestination" + "from-method:@aws-cdk/aws-events.ApiDestination", + "props-physical-name:@aws-cdk/aws-events.EventBusPolicyProps" ] }, "stability": "stable", diff --git a/packages/@aws-cdk/aws-events/test/event-bus.test.ts b/packages/@aws-cdk/aws-events/test/event-bus.test.ts index 11b58d028c773..c8bf7b3222104 100644 --- a/packages/@aws-cdk/aws-events/test/event-bus.test.ts +++ b/packages/@aws-cdk/aws-events/test/event-bus.test.ts @@ -1,5 +1,6 @@ import { Template } from '@aws-cdk/assertions'; import * as iam from '@aws-cdk/aws-iam'; +import { Effect } from '@aws-cdk/aws-iam'; import { testDeprecated } from '@aws-cdk/cdk-build-tools'; import { Aws, CfnResource, Stack, Arn, App, PhysicalName, CfnOutput } from '@aws-cdk/core'; import { EventBus } from '../lib'; @@ -529,4 +530,91 @@ describe('event bus', () => { Name: 'stack1stack1busca19bdf8ab2e51b62a5a', }); }); + + test('can add one event bus policy', () => { + // GIVEN + const app = new App(); + const stack = new Stack(app, 'Stack'); + const bus = new EventBus(stack, 'Bus'); + + // WHEN + bus.addToResourcePolicy(new iam.PolicyStatement({ + effect: Effect.ALLOW, + principals: [new iam.AccountPrincipal('111111111111111')], + actions: ['events:PutEvents'], + sid: '123', + resources: [bus.eventBusArn], + })); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::Events::EventBusPolicy', { + StatementId: '123', + EventBusName: { + Ref: 'BusEA82B648', + }, + Statement: { + Action: 'events:PutEvents', + Effect: 'Allow', + Principal: { + AWS: { + 'Fn::Join': [ + '', + [ + 'arn:', + { + Ref: 'AWS::Partition', + }, + ':iam::111111111111111:root', + ], + ], + }, + }, + Sid: '123', + Resource: { + 'Fn::GetAtt': [ + 'BusEA82B648', + 'Arn', + ], + }, + }, + }); + }); + + test('cannot add more than one event bus policy', () => { + // GIVEN + const app = new App(); + const stack = new Stack(app, 'Stack'); + const bus = new EventBus(stack, 'Bus'); + + + const statement = new iam.PolicyStatement({ + effect: Effect.ALLOW, + principals: [new iam.ArnPrincipal('arn')], + actions: ['events:PutEvents'], + sid: '123', + resources: [bus.eventBusArn], + }); + + // WHEN + const add1 = bus.addToResourcePolicy(statement); + const add2 = bus.addToResourcePolicy(statement); + + // THEN + expect(add1.statementAdded).toBe(true); + expect(add2.statementAdded).toBe(false); + }); + + test('Event Bus policy statements must have a sid', () => { + // GIVEN + const app = new App(); + const stack = new Stack(app, 'Stack'); + const bus = new EventBus(stack, 'Bus'); + + // THEN + expect(() => bus.addToResourcePolicy(new iam.PolicyStatement({ + effect: Effect.ALLOW, + principals: [new iam.ArnPrincipal('arn')], + actions: ['events:PutEvents'], + }))).toThrow('Event Bus policy statements must have a sid'); + }); }); diff --git a/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2.assets.json b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2.assets.json new file mode 100644 index 0000000000000..0558ec65bb4a1 --- /dev/null +++ b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2.assets.json @@ -0,0 +1,19 @@ +{ + "version": "22.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2.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/aws-events/test/integ.eventbus.js.snapshot/IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2.template.json b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2.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/aws-events/test/integ.eventbus.js.snapshot/Stack.assets.json b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/Stack.assets.json new file mode 100644 index 0000000000000..1227cf564778b --- /dev/null +++ b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/Stack.assets.json @@ -0,0 +1,20 @@ +{ + "version": "22.0.0", + "files": { + "c71ed4ea3da796e03fa29834408d0b65d9093011ecfedfbb40bae050834974cc": { + "source": { + "path": "Stack.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-us-east-1": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1", + "objectKey": "c71ed4ea3da796e03fa29834408d0b65d9093011ecfedfbb40bae050834974cc.json", + "region": "us-east-1", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-us-east-1" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/Stack.template.json b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/Stack.template.json new file mode 100644 index 0000000000000..27cd68f2924c7 --- /dev/null +++ b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/Stack.template.json @@ -0,0 +1,78 @@ +{ + "Resources": { + "BusEA82B648": { + "Type": "AWS::Events::EventBus", + "Properties": { + "Name": "StackBusAA0A1E4B" + } + }, + "BusPolicyCF00D793": { + "Type": "AWS::Events::EventBusPolicy", + "Properties": { + "StatementId": "123", + "EventBusName": { + "Ref": "BusEA82B648" + }, + "Statement": { + "Action": "events:PutEvents", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:aws:iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + }, + "Resource": { + "Fn::GetAtt": [ + "BusEA82B648", + "Arn" + ] + }, + "Sid": "123" + } + } + } + }, + "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/aws-events/test/integ.eventbus.js.snapshot/cdk.out b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/cdk.out new file mode 100644 index 0000000000000..145739f539580 --- /dev/null +++ b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/integ.json b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/integ.json new file mode 100644 index 0000000000000..4ccd06ac2c606 --- /dev/null +++ b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "22.0.0", + "testCases": { + "IntegTest-BatchDefaultEnvVarsStack/DefaultTest": { + "stacks": [ + "Stack" + ], + "assertionStack": "IntegTest-BatchDefaultEnvVarsStack/DefaultTest/DeployAssert", + "assertionStackName": "IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/manifest.json b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/manifest.json new file mode 100644 index 0000000000000..a447751618586 --- /dev/null +++ b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/manifest.json @@ -0,0 +1,117 @@ +{ + "version": "22.0.0", + "artifacts": { + "Stack.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "Stack.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "Stack": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/us-east-1", + "properties": { + "templateFile": "Stack.template.json", + "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/c71ed4ea3da796e03fa29834408d0b65d9093011ecfedfbb40bae050834974cc.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "Stack.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-us-east-1", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "Stack.assets" + ], + "metadata": { + "/Stack/Bus/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "BusEA82B648" + } + ], + "/Stack/Bus/Policy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "BusPolicyCF00D793" + } + ], + "/Stack/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/Stack/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "Stack" + }, + "IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2.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": [ + "IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2.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": [ + "IntegTestBatchDefaultEnvVarsStackDefaultTestDeployAssertC15EFFF2.assets" + ], + "metadata": { + "/IntegTest-BatchDefaultEnvVarsStack/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/IntegTest-BatchDefaultEnvVarsStack/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "IntegTest-BatchDefaultEnvVarsStack/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/tree.json b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/tree.json new file mode 100644 index 0000000000000..c75244482411a --- /dev/null +++ b/packages/@aws-cdk/aws-events/test/integ.eventbus.js.snapshot/tree.json @@ -0,0 +1,177 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "Stack": { + "id": "Stack", + "path": "Stack", + "children": { + "Bus": { + "id": "Bus", + "path": "Stack/Bus", + "children": { + "Resource": { + "id": "Resource", + "path": "Stack/Bus/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Events::EventBus", + "aws:cdk:cloudformation:props": { + "name": "StackBusAA0A1E4B" + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + }, + "Policy": { + "id": "Policy", + "path": "Stack/Bus/Policy", + "children": { + "Resource": { + "id": "Resource", + "path": "Stack/Bus/Policy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Events::EventBusPolicy", + "aws:cdk:cloudformation:props": { + "statementId": "123", + "eventBusName": { + "Ref": "BusEA82B648" + }, + "statement": { + "Action": "events:PutEvents", + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::Join": [ + "", + [ + "arn:aws:iam::", + { + "Ref": "AWS::AccountId" + }, + ":root" + ] + ] + } + }, + "Resource": { + "Fn::GetAtt": [ + "BusEA82B648", + "Arn" + ] + }, + "Sid": "123" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "Stack/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "Stack/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + }, + "IntegTest-BatchDefaultEnvVarsStack": { + "id": "IntegTest-BatchDefaultEnvVarsStack", + "path": "IntegTest-BatchDefaultEnvVarsStack", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "IntegTest-BatchDefaultEnvVarsStack/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "IntegTest-BatchDefaultEnvVarsStack/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "IntegTest-BatchDefaultEnvVarsStack/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "IntegTest-BatchDefaultEnvVarsStack/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "IntegTest-BatchDefaultEnvVarsStack/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.IntegTestCase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.IntegTest", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.App", + "version": "0.0.0" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-events/test/integ.eventbus.ts b/packages/@aws-cdk/aws-events/test/integ.eventbus.ts new file mode 100644 index 0000000000000..1f3ed2046df6d --- /dev/null +++ b/packages/@aws-cdk/aws-events/test/integ.eventbus.ts @@ -0,0 +1,26 @@ +import * as iam from '@aws-cdk/aws-iam'; +import { App, Stack } from '@aws-cdk/core'; +import { IntegTest } from '@aws-cdk/integ-tests'; +import { EventBus } from '../lib'; + +const app = new App(); +const stack = new Stack(app, 'Stack', { + env: { + region: 'us-east-1', + }, +}); +const bus = new EventBus(stack, 'Bus'); + +bus.addToResourcePolicy(new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + principals: [new iam.AccountPrincipal(stack.account)], + actions: ['events:PutEvents'], + sid: '123', + resources: [bus.eventBusArn], +})); + +new IntegTest(app, 'IntegTest-BatchDefaultEnvVarsStack', { + testCases: [stack], +}); + +app.synth(); diff --git a/packages/@aws-cdk/aws-gamelift/README.md b/packages/@aws-cdk/aws-gamelift/README.md index 5631d73d2722d..2c310af40af88 100644 --- a/packages/@aws-cdk/aws-gamelift/README.md +++ b/packages/@aws-cdk/aws-gamelift/README.md @@ -449,6 +449,65 @@ new cloudwatch.Alarm(this, 'Alarm', { See: [Monitoring Using CloudWatch Metrics](https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html) in the *Amazon GameLift Developer Guide*. +## Game session queue + +The game session queue is the primary mechanism for processing new game session +requests and locating available game servers to host them. Although it is +possible to request a new game session be hosted on specific fleet or location. + +The `GameSessionQueue` resource creates a placement queue that processes requests for +new game sessions. A queue uses FleetIQ algorithms to determine the best placement +locations and find an available game server, then prompts the game server to start a +new game session. Queues can have destinations (GameLift fleets or aliases), which +determine where the queue can place new game sessions. A queue can have destinations +with varied fleet type (Spot and On-Demand), instance type, and AWS Region. + +```ts +declare const fleet: gamelift.BuildFleet; +declare const alias: gamelift.Alias; + +const queue = new gamelift.GameSessionQueue(this, 'GameSessionQueue', { + gameSessionQueueName: 'my-queue-name', + destinations: [fleet] +}); +queue.addDestination(alias); +``` + +A more complex configuration can also be definied to override how FleetIQ algorithms prioritize game session placement in order to favour a destination based on `Cost`, `Latency`, `Destination order`or `Location`. + +```ts +declare const fleet: gamelift.BuildFleet; +declare const topic: sns.Topic; + +new gamelift.GameSessionQueue(this, 'MyGameSessionQueue', { + gameSessionQueueName: 'test-gameSessionQueue', + customEventData: 'test-event-data', + allowedLocations: ['eu-west-1', 'eu-west-2'], + destinations: [fleet], + notificationTarget: topic, + playerLatencyPolicies: [{ + maximumIndividualPlayerLatency: Duration.millis(100), + policyDuration: Duration.seconds(300), + }], + priorityConfiguration: { + locationOrder: [ + 'eu-west-1', + 'eu-west-2', + ], + priorityOrder: [ + gamelift.PriorityType.LATENCY, + gamelift.PriorityType.COST, + gamelift.PriorityType.DESTINATION, + gamelift.PriorityType.LOCATION, + ], + }, + timeout: Duration.seconds(300), + }); +``` + +See [Setting up GameLift queues for game session placement](https://docs.aws.amazon.com/gamelift/latest/developerguide/realtime-script-uploading.html) +in the *Amazon GameLift Developer Guide*. + ## GameLift FleetIQ The GameLift FleetIQ solution is a game hosting layer that supplements the full diff --git a/packages/@aws-cdk/aws-gamelift/lib/alias.ts b/packages/@aws-cdk/aws-gamelift/lib/alias.ts index cdf61bd97c2a1..a95f0120aedee 100644 --- a/packages/@aws-cdk/aws-gamelift/lib/alias.ts +++ b/packages/@aws-cdk/aws-gamelift/lib/alias.ts @@ -1,12 +1,13 @@ import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { IFleet } from './fleet-base'; +import { IGameSessionQueueDestination } from './game-session-queue'; import { CfnAlias } from './gamelift.generated'; /** * Represents a Gamelift Alias for a Gamelift fleet destination. */ -export interface IAlias extends cdk.IResource { +export interface IAlias extends cdk.IResource, IGameSessionQueueDestination { /** * The Identifier of the alias. @@ -106,6 +107,12 @@ export abstract class AliasBase extends cdk.Resource implements IAlias { * The ARN of the alias */ public abstract readonly aliasArn: string; + /** + * The ARN to put into the destination field of a game session queue + */ + public get resourceArnForDestination() { + return this.aliasArn; + } } /** diff --git a/packages/@aws-cdk/aws-gamelift/lib/fleet-base.ts b/packages/@aws-cdk/aws-gamelift/lib/fleet-base.ts index bf76c6078db1c..9b98993b5d4f5 100644 --- a/packages/@aws-cdk/aws-gamelift/lib/fleet-base.ts +++ b/packages/@aws-cdk/aws-gamelift/lib/fleet-base.ts @@ -4,6 +4,7 @@ import * as iam from '@aws-cdk/aws-iam'; import * as cdk from '@aws-cdk/core'; import { Construct } from 'constructs'; import { Alias, AliasOptions } from './alias'; +import { IGameSessionQueueDestination } from './game-session-queue'; import { GameLiftMetrics } from './gamelift-canned-metrics.generated'; import { CfnFleet } from './gamelift.generated'; @@ -140,7 +141,7 @@ export interface ResourceCreationLimitPolicy { /** * Represents a Gamelift fleet */ -export interface IFleet extends cdk.IResource, iam.IGrantable { +export interface IFleet extends cdk.IResource, iam.IGrantable, IGameSessionQueueDestination { /** * The Identifier of the fleet. * @@ -535,6 +536,13 @@ export abstract class FleetBase extends cdk.Resource implements IFleet { }).attachTo(this); } + /** + * The ARN to put into the destination field of a game session queue + */ + public get resourceArnForDestination() { + return this.fleetArn; + } + /** * Adds a remote locations to deploy additional instances to and manage as part of the fleet. * diff --git a/packages/@aws-cdk/aws-gamelift/lib/game-session-queue.ts b/packages/@aws-cdk/aws-gamelift/lib/game-session-queue.ts new file mode 100644 index 0000000000000..0d8167d1ae262 --- /dev/null +++ b/packages/@aws-cdk/aws-gamelift/lib/game-session-queue.ts @@ -0,0 +1,471 @@ +import * as cloudwatch from '@aws-cdk/aws-cloudwatch'; +import * as sns from '@aws-cdk/aws-sns'; +import * as cdk from '@aws-cdk/core'; +import { Construct } from 'constructs'; +import { CfnGameSessionQueue } from './gamelift.generated'; + +/** + * Represents a game session queue destination + */ +export interface IGameSessionQueueDestination { + /** + * The ARN(s) to put into the destination field for a game session queue. + * + * This property is for cdk modules to consume only. You should not need to use this property. + * Instead, use dedicated identifier on each components. + */ + readonly resourceArnForDestination: string; +} + +/** + * Priority to condider when placing new game sessions + */ +export enum PriorityType { + /** + * FleetIQ prioritizes locations where the average player latency (provided in each game session request) is lowest. + */ + LATENCY = 'LATENCY', + /** + * FleetIQ prioritizes destinations with the lowest current hosting costs. Cost is evaluated based on the location, instance type, and fleet type (Spot or On-Demand) for each destination in the queue. + */ + COST = 'COST', + /** + * FleetIQ prioritizes based on the order that destinations are listed in the queue configuration. + */ + DESTINATION = 'DESTINATION', + /** + * FleetIQ prioritizes based on the provided order of locations, as defined in `LocationOrder` + */ + LOCATION = 'LOCATION' +} + +/** + * Custom prioritization settings for use by a game session queue when placing new game sessions with available game servers. + * When defined, this configuration replaces the default FleetIQ prioritization process, which is as follows: + * + * - If player latency data is included in a game session request, destinations and locations are prioritized first based on lowest average latency (1), then on lowest hosting cost (2), then on destination list order (3), and finally on location (alphabetical) (4). + * This approach ensures that the queue's top priority is to place game sessions where average player latency is lowest, and--if latency is the same--where the hosting cost is less, etc. + * + * - If player latency data is not included, destinations and locations are prioritized first on destination list order (1), and then on location (alphabetical) (2). + * This approach ensures that the queue's top priority is to place game sessions on the first destination fleet listed. If that fleet has multiple locations, the game session is placed on the first location (when listed alphabetically). + * + * Changing the priority order will affect how game sessions are placed. + */ +export interface PriorityConfiguration { + /** + * The prioritization order to use for fleet locations, when the PriorityOrder property includes LOCATION. Locations are identified by AWS Region codes such as `us-west-2. + * + * Each location can only be listed once. + */ + readonly locationOrder: string[]; + /** + * The recommended sequence to use when prioritizing where to place new game sessions. + * Each type can only be listed once. + */ + readonly priorityOrder: PriorityType[]; +} + +/** + * The queue setting that determines the highest latency allowed for individual players when placing a game session. + * When a latency policy is in force, a game session cannot be placed with any fleet in a Region where a player reports latency higher than the cap. + * + * Latency policies are only enforced when the placement request contains player latency information. + */ +export interface PlayerLatencyPolicy { + /** + * The maximum latency value that is allowed for any player, in milliseconds. + * + * All policies must have a value set for this property. + */ + readonly maximumIndividualPlayerLatency: cdk.Duration; + + /** + * The length of time, in seconds, that the policy is enforced while placing a new game session. + * + * @default the policy is enforced until the queue times out. + */ + readonly policyDuration?: cdk.Duration; +} + +/** + * Represents a Gamelift GameSessionQueue for a Gamelift fleet destination. + */ +export interface IGameSessionQueue extends cdk.IResource { + + /** + * The Name of the gameSessionQueue. + * + * @attribute + */ + readonly gameSessionQueueName: string; + + /** + * The ARN of the gameSessionQueue. + * + * @attribute + */ + readonly gameSessionQueueArn: string; + + /** + * Return the given named metric for this fleet. + */ + metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric; + + /** + * Average amount of time that game session placement requests in the queue with status PENDING have been waiting to be fulfilled. + */ + metricAverageWaitTime(props?: cloudwatch.MetricOptions): cloudwatch.Metric; + + /** + * Game session placement requests that were canceled before timing out since the last report. + */ + metricPlacementsCanceled(props?: cloudwatch.MetricOptions): cloudwatch.Metric; + + /** + * Game session placement requests that failed for any reason since the last report. + */ + metricPlacementsFailed(props?: cloudwatch.MetricOptions): cloudwatch.Metric; + + /** + * New game session placement requests that were added to the queue since the last report. + */ + metricPlacementsStarted(props?: cloudwatch.MetricOptions): cloudwatch.Metric; + + /** + * Game session placement requests that resulted in a new game session since the last report. + */ + metricPlacementsSucceeded(props?: cloudwatch.MetricOptions): cloudwatch.Metric; + + /** + * Game session placement requests that reached the queue's timeout limit without being fulfilled since the last report. + */ + metricPlacementsTimedOut(props?: cloudwatch.MetricOptions): cloudwatch.Metric; +} + +/** + * A full specification of an gameSessionQueue that can be used to import it fluently into the CDK application. + */ +export interface GameSessionQueueAttributes { + /** + * The ARN of the gameSessionQueue + * + * At least one of `gameSessionQueueArn` and `gameSessionQueueName` must be provided. + * + * @default derived from `gameSessionQueueName`. + */ + readonly gameSessionQueueArn?: string; + + /** + * The name of the gameSessionQueue + * + * At least one of `gameSessionQueueName` and `gameSessionQueueArn` must be provided. + * + * @default derived from `gameSessionQueueArn`. + */ + readonly gameSessionQueueName?: string; +} + +/** + * Properties for a new Fleet gameSessionQueue + */ +export interface GameSessionQueueProps { + /** + * Name of this gameSessionQueue + */ + readonly gameSessionQueueName: string; + + /** + * Information to be added to all events that are related to this game session queue. + * + * @default no customer event data + */ + readonly customEventData?: string; + + /** + * A list of locations where a queue is allowed to place new game sessions. + * + * Locations are specified in the form of AWS Region codes, such as `us-west-2`. + * + * For queues that have multi-location fleets, you can use a filter configuration allow placement with some, but not all of these locations. + * + * @default game sessions can be placed in any queue location + */ + readonly allowedLocations?: string[]; + + /** + * An SNS topic is set up to receive game session placement notifications. + * + * @default no notification + * + * @see https://docs.aws.amazon.com/gamelift/latest/developerguide/queue-notification.html + */ + readonly notificationTarget?: sns.ITopic; + + /** + * A set of policies that act as a sliding cap on player latency. + * FleetIQ works to deliver low latency for most players in a game session. + * These policies ensure that no individual player can be placed into a game with unreasonably high latency. + * Use multiple policies to gradually relax latency requirements a step at a time. + * Multiple policies are applied based on their maximum allowed latency, starting with the lowest value. + * + * @default no player latency policy + */ + readonly playerLatencyPolicies?: PlayerLatencyPolicy[]; + + /** + * Custom settings to use when prioritizing destinations and locations for game session placements. + * This configuration replaces the FleetIQ default prioritization process. + * + * Priority types that are not explicitly named will be automatically applied at the end of the prioritization process. + * + * @default no priority configuration + */ + readonly priorityConfiguration?: PriorityConfiguration; + + /** + * The maximum time, that a new game session placement request remains in the queue. + * When a request exceeds this time, the game session placement changes to a `TIMED_OUT` status. + * + * @default 50 seconds + */ + readonly timeout?: cdk.Duration; + + /** + * A list of fleets and/or fleet alias that can be used to fulfill game session placement requests in the queue. + * + * Destinations are listed in order of placement preference. + */ + readonly destinations: IGameSessionQueueDestination[]; +} + +/** + * Base class for new and imported GameLift GameSessionQueue. + */ +export abstract class GameSessionQueueBase extends cdk.Resource implements IGameSessionQueue { + /** + * The name of the gameSessionQueue. + */ + public abstract readonly gameSessionQueueName: string; + /** + * The ARN of the gameSessionQueue + */ + public abstract readonly gameSessionQueueArn: string; + + public metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric { + return new cloudwatch.Metric({ + namespace: 'AWS/GameLift', + metricName: metricName, + dimensionsMap: { + GameSessionQueueName: this.gameSessionQueueName, + }, + ...props, + }).attachTo(this); + } + + metricAverageWaitTime(props?: cloudwatch.MetricOptions): cloudwatch.Metric { + return this.metric('AverageWaitTime', props); + } + + metricPlacementsCanceled(props?: cloudwatch.MetricOptions): cloudwatch.Metric { + return this.metric('PlacementsCanceled', props); + } + + metricPlacementsFailed(props?: cloudwatch.MetricOptions): cloudwatch.Metric { + return this.metric('PlacementsFailed', props); + } + + metricPlacementsStarted(props?: cloudwatch.MetricOptions): cloudwatch.Metric { + return this.metric('PlacementsStarted', props); + } + + metricPlacementsSucceeded(props?: cloudwatch.MetricOptions): cloudwatch.Metric { + return this.metric('PlacementsSucceeded', props); + } + + metricPlacementsTimedOut(props?: cloudwatch.MetricOptions): cloudwatch.Metric { + return this.metric('PlacementsTimedOut', props); + } +} + +/** + * The GameSessionQueue resource creates a placement queue that processes requests for new game sessions. + * A queue uses FleetIQ algorithms to determine the best placement locations and find an available game server, then prompts the game server to start a new game session. + * Queues can have destinations (GameLift fleets or gameSessionQueuees), which determine where the queue can place new game sessions. + * A queue can have destinations with varied fleet type (Spot and On-Demand), instance type, and AWS Region. + * + * @resource AWS::GameLift::GameSessionQueue + */ +export class GameSessionQueue extends GameSessionQueueBase { + + /** + * Import an existing gameSessionQueue from its name. + */ + static fromGameSessionQueueName(scope: Construct, id: string, gameSessionQueueName: string): IGameSessionQueue { + return this.fromGameSessionQueueAttributes(scope, id, { gameSessionQueueName }); + } + + /** + * Import an existing gameSessionQueue from its ARN. + */ + static fromGameSessionQueueArn(scope: Construct, id: string, gameSessionQueueArn: string): IGameSessionQueue { + return this.fromGameSessionQueueAttributes(scope, id, { gameSessionQueueArn }); + } + + /** + * Import an existing gameSessionQueue from its attributes. + */ + static fromGameSessionQueueAttributes(scope: Construct, id: string, attrs: GameSessionQueueAttributes): IGameSessionQueue { + if (!attrs.gameSessionQueueName && !attrs.gameSessionQueueArn) { + throw new Error('Either gameSessionQueueName or gameSessionQueueArn must be provided in GameSessionQueueAttributes'); + } + const gameSessionQueueName = attrs.gameSessionQueueName ?? + cdk.Stack.of(scope).splitArn(attrs.gameSessionQueueArn!, cdk.ArnFormat.SLASH_RESOURCE_NAME).resourceName; + + if (!gameSessionQueueName) { + throw new Error(`No gameSessionQueue name found in ARN: '${attrs.gameSessionQueueArn}'`); + } + + const gameSessionQueueArn = attrs.gameSessionQueueArn ?? cdk.Stack.of(scope).formatArn({ + service: 'gamelift', + resource: 'gamesessionqueue', + resourceName: attrs.gameSessionQueueName, + arnFormat: cdk.ArnFormat.SLASH_RESOURCE_NAME, + }); + class Import extends GameSessionQueueBase { + public readonly gameSessionQueueName = gameSessionQueueName!; + public readonly gameSessionQueueArn = gameSessionQueueArn; + + constructor(s: Construct, i: string) { + super(s, i, { + environmentFromArn: gameSessionQueueArn, + }); + } + } + return new Import(scope, id); + } + + /** + * The Identifier of the gameSessionQueue. + */ + public readonly gameSessionQueueName: string; + + /** + * The ARN of the gameSessionQueue. + */ + public readonly gameSessionQueueArn: string; + + private readonly destinations: IGameSessionQueueDestination[] = []; + + constructor(scope: Construct, id: string, props: GameSessionQueueProps) { + super(scope, id, { + physicalName: props.gameSessionQueueName, + }); + + if (!cdk.Token.isUnresolved(props.gameSessionQueueName)) { + if (props.gameSessionQueueName.length > 128) { + throw new Error(`GameSessionQueue name can not be longer than 128 characters but has ${props.gameSessionQueueName.length} characters.`); + } + + if (!/^[a-zA-Z0-9-]+$/.test(props.gameSessionQueueName)) { + throw new Error(`GameSessionQueue name ${props.gameSessionQueueName} can contain only letters, numbers, hyphens with no spaces.`); + } + } + + if (props.customEventData && props.customEventData.length > 256) { + throw new Error(`GameSessionQueue custom event data can not be longer than 256 characters but has ${props.customEventData.length} characters.`); + } + + if (props.allowedLocations && props.allowedLocations.length > 100) { + throw new Error(`No more than 100 allowed locations are allowed per game session queue, given ${props.allowedLocations.length}`); + } + + // Add all destinations + (props.destinations || []).forEach(this.addDestination.bind(this)); + + const resource = new CfnGameSessionQueue(this, 'Resource', { + name: this.physicalName, + customEventData: props.customEventData, + destinations: cdk.Lazy.any({ produce: () => this.parseDestinations() }), + filterConfiguration: this.parseFilterConfiguration(props), + notificationTarget: props.notificationTarget && props.notificationTarget.topicArn, + playerLatencyPolicies: this.parsePlayerLatencyPolicies(props), + priorityConfiguration: this.parsePriorityConfiguration(props), + timeoutInSeconds: props.timeout && props.timeout.toSeconds(), + }); + + this.gameSessionQueueName = this.getResourceNameAttribute(resource.ref); + this.gameSessionQueueArn = cdk.Stack.of(scope).formatArn({ + service: 'gamelift', + resource: 'gamesessionqueue', + resourceName: this.gameSessionQueueName, + arnFormat: cdk.ArnFormat.SLASH_RESOURCE_NAME, + }); + } + + /** + * Adds a destination to fulfill requests for new game sessions + * + * @param destination A destination to add + */ + public addDestination(destination: IGameSessionQueueDestination) { + this.destinations.push(destination); + } + + protected parsePriorityConfiguration(props: GameSessionQueueProps): CfnGameSessionQueue.PriorityConfigurationProperty | undefined { + if (!props.priorityConfiguration) { + return undefined; + } + + if (props.priorityConfiguration.locationOrder.length > 100) { + throw new Error(`No more than 100 locations are allowed per priority configuration, given ${props.priorityConfiguration.locationOrder.length}`); + } + + if (props.priorityConfiguration.priorityOrder.length > 4) { + throw new Error(`No more than 4 priorities are allowed per priority configuration, given ${props.priorityConfiguration.priorityOrder.length}`); + } + + return { + priorityOrder: props.priorityConfiguration.priorityOrder, + locationOrder: props.priorityConfiguration.locationOrder, + }; + } + + protected parsePlayerLatencyPolicies(props: GameSessionQueueProps): CfnGameSessionQueue.PlayerLatencyPolicyProperty[] | undefined { + if (!props.playerLatencyPolicies) { + return undefined; + } + + return props.playerLatencyPolicies.map(parsePlayerLatencyPolicy); + + function parsePlayerLatencyPolicy(playerLatencyPolicy: PlayerLatencyPolicy): CfnGameSessionQueue.PlayerLatencyPolicyProperty { + return { + maximumIndividualPlayerLatencyMilliseconds: playerLatencyPolicy.maximumIndividualPlayerLatency.toMilliseconds(), + policyDurationSeconds: playerLatencyPolicy.policyDuration && playerLatencyPolicy.policyDuration.toSeconds(), + }; + } + } + + protected parseFilterConfiguration(props: GameSessionQueueProps): CfnGameSessionQueue.FilterConfigurationProperty | undefined { + if (!props.allowedLocations) { + return undefined; + } + + return { + allowedLocations: props.allowedLocations, + }; + } + + private parseDestinations(): CfnGameSessionQueue.DestinationProperty[] | undefined { + if (!this.destinations || this.destinations.length === 0) { + return undefined; + } + + return this.destinations.map(parseDestination); + + function parseDestination(destination: IGameSessionQueueDestination): CfnGameSessionQueue.DestinationProperty { + return { + destinationArn: destination.resourceArnForDestination, + }; + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-gamelift/lib/index.ts b/packages/@aws-cdk/aws-gamelift/lib/index.ts index 6a74d01861c05..5f7ab5dcec93e 100644 --- a/packages/@aws-cdk/aws-gamelift/lib/index.ts +++ b/packages/@aws-cdk/aws-gamelift/lib/index.ts @@ -6,6 +6,7 @@ export * from './game-server-group'; export * from './ingress-rule'; export * from './fleet-base'; export * from './build-fleet'; +export * from './game-session-queue'; export * from './matchmaking-ruleset'; export * from './matchmaking-ruleset-body'; diff --git a/packages/@aws-cdk/aws-gamelift/rosetta/default.ts-fixture b/packages/@aws-cdk/aws-gamelift/rosetta/default.ts-fixture index acf0995fb04a8..3f302276c441e 100644 --- a/packages/@aws-cdk/aws-gamelift/rosetta/default.ts-fixture +++ b/packages/@aws-cdk/aws-gamelift/rosetta/default.ts-fixture @@ -4,6 +4,7 @@ import { Duration, Size, Stack, CfnOutput } from '@aws-cdk/core'; import * as gamelift from '@aws-cdk/aws-gamelift'; import * as s3 from '@aws-cdk/aws-s3'; import * as ec2 from '@aws-cdk/aws-ec2'; +import * as sns from '@aws-cdk/aws-sns'; import * as cloudwatch from '@aws-cdk/aws-cloudwatch'; import * as iam from '@aws-cdk/aws-iam'; import * as path from 'path'; diff --git a/packages/@aws-cdk/aws-gamelift/test/game-session-queue.test.ts b/packages/@aws-cdk/aws-gamelift/test/game-session-queue.test.ts new file mode 100644 index 0000000000000..b030c43f95130 --- /dev/null +++ b/packages/@aws-cdk/aws-gamelift/test/game-session-queue.test.ts @@ -0,0 +1,576 @@ + +import * as path from 'path'; +import { Template } from '@aws-cdk/assertions'; +import * as cloudwatch from '@aws-cdk/aws-cloudwatch'; +import * as ec2 from '@aws-cdk/aws-ec2'; +import * as sns from '@aws-cdk/aws-sns'; +import * as cdk from '@aws-cdk/core'; +import * as gamelift from '../lib'; + +describe('gameSessionQueue', () => { + + describe('new', () => { + let stack: cdk.Stack; + let fleet: gamelift.FleetBase; + + beforeEach(() => { + stack = new cdk.Stack(); + fleet = new gamelift.BuildFleet(stack, 'MyBuildFleet', { + fleetName: 'test-fleet', + content: gamelift.Build.fromAsset(stack, 'Build', path.join(__dirname, 'my-game-build')), + instanceType: ec2.InstanceType.of(ec2.InstanceClass.C4, ec2.InstanceSize.LARGE), + runtimeConfiguration: { + serverProcesses: [{ + launchPath: 'test-launch-path', + }], + }, + }); + }); + + test('default fleet gameSessionQueue', () => { + new gamelift.GameSessionQueue(stack, 'MyGameSessionQueue', { + gameSessionQueueName: 'test-gameSessionQueue', + destinations: [fleet], + }); + + Template.fromStack(stack).hasResource('AWS::GameLift::GameSessionQueue', { + Properties: + { + Name: 'test-gameSessionQueue', + Destinations: [ + { + DestinationArn: { + 'Fn::Join': [ + '', + [ + 'arn:', + { + Ref: 'AWS::Partition', + }, + ':gamelift:', + { + Ref: 'AWS::Region', + }, + ':', + { + Ref: 'AWS::AccountId', + }, + ':fleet/', + { + Ref: 'MyBuildFleet0F4EADEC', + }, + ], + ], + }, + }, + ], + }, + }); + }); + + test('default alias gameSessionQueue', () => { + const alias = new gamelift.Alias(stack, 'MyAlias', { + aliasName: 'test-alias', + fleet: fleet, + }); + + new gamelift.GameSessionQueue(stack, 'MyGameSessionQueue', { + gameSessionQueueName: 'test-gameSessionQueue', + destinations: [alias], + }); + + Template.fromStack(stack).hasResource('AWS::GameLift::GameSessionQueue', { + Properties: + { + Name: 'test-gameSessionQueue', + Destinations: [ + { + DestinationArn: { + 'Fn::Join': [ + '', + [ + 'arn:', + { + Ref: 'AWS::Partition', + }, + ':gamelift:', + { + Ref: 'AWS::Region', + }, + ':', + { + Ref: 'AWS::AccountId', + }, + ':alias/', + { + Ref: 'MyAlias9A08CB8C', + }, + ], + ], + }, + }, + ], + }, + }); + }); + + test('add new destination', () => { + const alias = new gamelift.Alias(stack, 'MyAlias', { + aliasName: 'test-alias', + fleet: fleet, + }); + + const queue = new gamelift.GameSessionQueue(stack, 'MyGameSessionQueue', { + gameSessionQueueName: 'test-gameSessionQueue', + destinations: [fleet], + }); + + queue.addDestination(alias); + + Template.fromStack(stack).hasResource('AWS::GameLift::GameSessionQueue', { + Properties: + { + Name: 'test-gameSessionQueue', + Destinations: [ + { + DestinationArn: { + 'Fn::Join': [ + '', + [ + 'arn:', + { + Ref: 'AWS::Partition', + }, + ':gamelift:', + { + Ref: 'AWS::Region', + }, + ':', + { + Ref: 'AWS::AccountId', + }, + ':fleet/', + { + Ref: 'MyBuildFleet0F4EADEC', + }, + ], + ], + }, + }, + { + DestinationArn: { + 'Fn::Join': [ + '', + [ + 'arn:', + { + Ref: 'AWS::Partition', + }, + ':gamelift:', + { + Ref: 'AWS::Region', + }, + ':', + { + Ref: 'AWS::AccountId', + }, + ':alias/', + { + Ref: 'MyAlias9A08CB8C', + }, + ], + ], + }, + }, + ], + }, + }); + }); + + test('with all properties', () => { + const topic = new sns.Topic(stack, 'MyTopic', {}); + + new gamelift.GameSessionQueue(stack, 'MyGameSessionQueue', { + gameSessionQueueName: 'test-gameSessionQueue', + destinations: [fleet], + customEventData: 'test-event-data', + allowedLocations: ['eu-west-1', 'eu-west-2'], + notificationTarget: topic, + playerLatencyPolicies: [{ + maximumIndividualPlayerLatency: cdk.Duration.millis(100), + policyDuration: cdk.Duration.seconds(300), + }], + priorityConfiguration: { + locationOrder: [ + 'eu-west-1', + 'eu-west-2', + ], + priorityOrder: [ + gamelift.PriorityType.LATENCY, + gamelift.PriorityType.COST, + gamelift.PriorityType.DESTINATION, + gamelift.PriorityType.LOCATION, + ], + }, + timeout: cdk.Duration.seconds(300), + + }); + + Template.fromStack(stack).hasResource('AWS::GameLift::GameSessionQueue', { + Properties: + { + Name: 'test-gameSessionQueue', + CustomEventData: 'test-event-data', + FilterConfiguration: { + AllowedLocations: [ + 'eu-west-1', + 'eu-west-2', + ], + }, + NotificationTarget: { Ref: 'MyTopic86869434' }, + PlayerLatencyPolicies: [{ + MaximumIndividualPlayerLatencyMilliseconds: 100, + PolicyDurationSeconds: 300, + }], + PriorityConfiguration: { + LocationOrder: [ + 'eu-west-1', + 'eu-west-2', + ], + PriorityOrder: [ + 'LATENCY', + 'COST', + 'DESTINATION', + 'LOCATION', + ], + }, + TimeoutInSeconds: 300, + Destinations: [ + { + DestinationArn: { + 'Fn::Join': [ + '', + [ + 'arn:', + { + Ref: 'AWS::Partition', + }, + ':gamelift:', + { + Ref: 'AWS::Region', + }, + ':', + { + Ref: 'AWS::AccountId', + }, + ':fleet/', + { + Ref: 'MyBuildFleet0F4EADEC', + }, + ], + ], + }, + }, + ], + }, + }); + }); + + test('with an invlaid priority configuration location order', () => { + let incorrectLocationOrder: string[] = []; + for (let i = 0; i < 101; i++) { + incorrectLocationOrder.push('test-location'); + } + + expect(() => new gamelift.GameSessionQueue(stack, 'MyGameSessionQueue', { + gameSessionQueueName: 'test-name', + destinations: [fleet], + priorityConfiguration: { + locationOrder: incorrectLocationOrder, + priorityOrder: [ + gamelift.PriorityType.COST, + ], + }, + })).toThrow(/No more than 100 locations are allowed per priority configuration, given 101/); + }); + + test('with an invlaid priority configuration priority order', () => { + let incorrectPriorityOrder: gamelift.PriorityType[] = []; + for (let i = 0; i < 5; i++) { + incorrectPriorityOrder.push(gamelift.PriorityType.COST); + } + + expect(() => new gamelift.GameSessionQueue(stack, 'MyGameSessionQueue', { + gameSessionQueueName: 'test-name', + destinations: [fleet], + priorityConfiguration: { + locationOrder: ['eu-west-1', 'eu-west-2'], + priorityOrder: incorrectPriorityOrder, + }, + })).toThrow(/No more than 4 priorities are allowed per priority configuration, given 5/); + }); + + test('with an incorrect name', () => { + let incorrectName = ''; + for (let i = 0; i < 129; i++) { + incorrectName += 'A'; + } + + expect(() => new gamelift.GameSessionQueue(stack, 'MyGameSessionQueue', { + gameSessionQueueName: incorrectName, + destinations: [fleet], + })).toThrow(/GameSessionQueue name can not be longer than 128 characters but has 129 characters./); + }); + + test('with an incorrect name format', () => { + let incorrectName = 'test with space'; + + expect(() => new gamelift.GameSessionQueue(stack, 'MyGameSessionQueue', { + gameSessionQueueName: incorrectName, + destinations: [fleet], + })).toThrow(/GameSessionQueue name test with space can contain only letters, numbers, hyphens with no spaces./); + }); + + test('with an incorrect custom event data', () => { + let incorrectCustomEventData = ''; + for (let i = 0; i < 257; i++) { + incorrectCustomEventData += 'A'; + } + + expect(() => new gamelift.GameSessionQueue(stack, 'MyGameSessionQueue', { + gameSessionQueueName: 'test-name', + destinations: [fleet], + customEventData: incorrectCustomEventData, + })).toThrow(/GameSessionQueue custom event data can not be longer than 256 characters but has 257 characters./); + }); + + test('with an incorrect number of locations', () => { + let incorrectLocations: string[] = []; + for (let i = 0; i < 101; i++) { + incorrectLocations.push('test'); + } + + expect(() => new gamelift.GameSessionQueue(stack, 'MyGameSessionQueue', { + gameSessionQueueName: 'test-name', + destinations: [fleet], + allowedLocations: incorrectLocations, + })).toThrow(/No more than 100 allowed locations are allowed per game session queue, given 101/); + }); + }); + + describe('metric methods provide a Metric with configured and attached properties', () => { + let stack: cdk.Stack; + let fleet: gamelift.BuildFleet; + let gameSessionQueue: gamelift.GameSessionQueue; + + beforeEach(() => { + stack = new cdk.Stack(undefined, undefined, { env: { account: '000000000000', region: 'us-west-1' } }); + fleet = new gamelift.BuildFleet(stack, 'MyBuildFleet', { + fleetName: 'test-fleet', + content: gamelift.Build.fromAsset(stack, 'Build', path.join(__dirname, 'my-game-build')), + instanceType: ec2.InstanceType.of(ec2.InstanceClass.C4, ec2.InstanceSize.LARGE), + runtimeConfiguration: { + serverProcesses: [{ + launchPath: 'test-launch-path', + }], + }, + }); + gameSessionQueue = new gamelift.GameSessionQueue(stack, 'MyGameSessionQueue', { + gameSessionQueueName: 'test-gameSessionQueue', + destinations: [fleet], + }); + }); + + test('metric', () => { + const metric = gameSessionQueue.metric('AverageWaitTime'); + + expect(metric).toMatchObject({ + account: stack.account, + region: stack.region, + namespace: 'AWS/GameLift', + metricName: 'AverageWaitTime', + dimensions: { + GameSessionQueueName: gameSessionQueue.gameSessionQueueName, + }, + }); + }); + + test('metricAverageWaitTime', () => { + const metric = gameSessionQueue.metricAverageWaitTime(); + + expect(metric).toMatchObject({ + account: stack.account, + region: stack.region, + namespace: 'AWS/GameLift', + metricName: 'AverageWaitTime', + statistic: cloudwatch.Stats.AVERAGE, + dimensions: { + GameSessionQueueName: gameSessionQueue.gameSessionQueueName, + }, + }); + }); + + test('metricPlacementsCanceled', () => { + const metric = gameSessionQueue.metricPlacementsCanceled(); + + expect(metric).toMatchObject({ + account: stack.account, + region: stack.region, + namespace: 'AWS/GameLift', + metricName: 'PlacementsCanceled', + statistic: cloudwatch.Stats.AVERAGE, + dimensions: { + GameSessionQueueName: gameSessionQueue.gameSessionQueueName, + }, + }); + }); + + test('metricPlacementsFailed', () => { + const metric = gameSessionQueue.metricPlacementsFailed(); + + expect(metric).toMatchObject({ + account: stack.account, + region: stack.region, + namespace: 'AWS/GameLift', + metricName: 'PlacementsFailed', + statistic: cloudwatch.Stats.AVERAGE, + dimensions: { + GameSessionQueueName: gameSessionQueue.gameSessionQueueName, + }, + }); + }); + + test('metricPlacementsStarted', () => { + const metric = gameSessionQueue.metricPlacementsStarted(); + + expect(metric).toMatchObject({ + account: stack.account, + region: stack.region, + namespace: 'AWS/GameLift', + metricName: 'PlacementsStarted', + statistic: cloudwatch.Stats.AVERAGE, + dimensions: { + GameSessionQueueName: gameSessionQueue.gameSessionQueueName, + }, + }); + }); + + test('metricPlacementsSucceeded', () => { + const metric = gameSessionQueue.metricPlacementsSucceeded(); + + expect(metric).toMatchObject({ + account: stack.account, + region: stack.region, + namespace: 'AWS/GameLift', + metricName: 'PlacementsSucceeded', + statistic: cloudwatch.Stats.AVERAGE, + dimensions: { + GameSessionQueueName: gameSessionQueue.gameSessionQueueName, + }, + }); + }); + + test('metricPlacementsTimedOut', () => { + const metric = gameSessionQueue.metricPlacementsTimedOut(); + + expect(metric).toMatchObject({ + account: stack.account, + region: stack.region, + namespace: 'AWS/GameLift', + metricName: 'PlacementsTimedOut', + statistic: cloudwatch.Stats.AVERAGE, + dimensions: { + GameSessionQueueName: gameSessionQueue.gameSessionQueueName, + }, + }); + }); + + + }); + + describe('test import methods', () => { + test('GameSessionQueue.fromGameSessionQueueArn', () => { + // GIVEN + const stack2 = new cdk.Stack(); + + // WHEN + const imported = gamelift.GameSessionQueue.fromGameSessionQueueArn(stack2, 'Imported', 'arn:aws:gamelift:us-east-1:123456789012:gamesessionqueue/sample-gameSessionQueue-name'); + + // THEN + expect(imported.gameSessionQueueArn).toEqual('arn:aws:gamelift:us-east-1:123456789012:gamesessionqueue/sample-gameSessionQueue-name'); + expect(imported.gameSessionQueueName).toEqual('sample-gameSessionQueue-name'); + }); + + test('GameSessionQueue.fromGameSessionQueueId', () => { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + const imported = gamelift.GameSessionQueue.fromGameSessionQueueName(stack, 'Imported', 'sample-gameSessionQueue-name'); + + // THEN + expect(stack.resolve(imported.gameSessionQueueArn)).toStrictEqual({ + 'Fn::Join': ['', [ + 'arn:', + { Ref: 'AWS::Partition' }, + ':gamelift:', + { Ref: 'AWS::Region' }, + ':', + { Ref: 'AWS::AccountId' }, + ':gamesessionqueue/sample-gameSessionQueue-name', + ]], + }); + expect(stack.resolve(imported.gameSessionQueueName)).toStrictEqual('sample-gameSessionQueue-name'); + }); + }); + + describe('GameSessionQueue.fromGameSessionQueueAttributes()', () => { + let stack: cdk.Stack; + const gameSessionQueueName = 'gameSessionQueue-test-name'; + const gameSessionQueueArn = `arn:aws:gamelift:gameSessionQueue-region:123456789012:gamesessionqueue/${gameSessionQueueName}`; + + beforeEach(() => { + const app = new cdk.App(); + stack = new cdk.Stack(app, 'Base', { + env: { account: '111111111111', region: 'stack-region' }, + }); + }); + + describe('', () => { + test('with required attrs only', () => { + const importedFleet = gamelift.GameSessionQueue.fromGameSessionQueueAttributes(stack, 'ImportedGameSessionQueue', { gameSessionQueueArn }); + + expect(importedFleet.gameSessionQueueName).toEqual(gameSessionQueueName); + expect(importedFleet.gameSessionQueueArn).toEqual(gameSessionQueueArn); + expect(importedFleet.env.account).toEqual('123456789012'); + expect(importedFleet.env.region).toEqual('gameSessionQueue-region'); + }); + + test('with missing attrs', () => { + expect(() => gamelift.GameSessionQueue.fromGameSessionQueueAttributes(stack, 'ImportedGameSessionQueue', { })) + .toThrow(/Either gameSessionQueueName or gameSessionQueueArn must be provided in GameSessionQueueAttributes/); + }); + + test('with invalid ARN', () => { + expect(() => gamelift.GameSessionQueue.fromGameSessionQueueAttributes(stack, 'ImportedGameSessionQueue', { gameSessionQueueArn: 'arn:aws:gamelift:gameSessionQueue-region:123456789012:gamesessionqueue' })) + .toThrow(/No gameSessionQueue name found in ARN: 'arn:aws:gamelift:gameSessionQueue-region:123456789012:gamesessionqueue'/); + }); + }); + + describe('for an gameSessionQueue in a different account and region', () => { + let gameSessionQueue: gamelift.IGameSessionQueue; + + beforeEach(() => { + gameSessionQueue = gamelift.GameSessionQueue.fromGameSessionQueueAttributes(stack, 'ImportedGameSessionQueue', { gameSessionQueueArn }); + }); + + test("the gameSessionQueue's region is taken from the ARN", () => { + expect(gameSessionQueue.env.region).toBe('gameSessionQueue-region'); + }); + + test("the gameSessionQueue's account is taken from the ARN", () => { + expect(gameSessionQueue.env.account).toBe('123456789012'); + }); + }); + }); +}); \ No newline at end of file diff --git a/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/GameSessionQueueDefaultTestDeployAssert72367A40.assets.json b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/GameSessionQueueDefaultTestDeployAssert72367A40.assets.json new file mode 100644 index 0000000000000..8395cfec6c239 --- /dev/null +++ b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/GameSessionQueueDefaultTestDeployAssert72367A40.assets.json @@ -0,0 +1,19 @@ +{ + "version": "22.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "GameSessionQueueDefaultTestDeployAssert72367A40.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/aws-gamelift/test/integ.game-session-queue.js.snapshot/GameSessionQueueDefaultTestDeployAssert72367A40.template.json b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/GameSessionQueueDefaultTestDeployAssert72367A40.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/GameSessionQueueDefaultTestDeployAssert72367A40.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/aws-gamelift/test/integ.game-session-queue.js.snapshot/asset.b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37/TestApplicationServer b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/asset.b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37/TestApplicationServer new file mode 100755 index 0000000000000..a4f885388c109 Binary files /dev/null and b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/asset.b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37/TestApplicationServer differ diff --git a/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/asset.b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37/install.sh b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/asset.b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37/install.sh new file mode 100755 index 0000000000000..1ef448e39373c --- /dev/null +++ b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/asset.b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37/install.sh @@ -0,0 +1,4 @@ +#!/bin/bash +# make sure the gameserver is executable +/usr/bin/chmod +x /local/game/TestApplicationServer +exit 0 diff --git a/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/aws-gamelift-gameSessionQueue.assets.json b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/aws-gamelift-gameSessionQueue.assets.json new file mode 100644 index 0000000000000..9c879907696ad --- /dev/null +++ b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/aws-gamelift-gameSessionQueue.assets.json @@ -0,0 +1,32 @@ +{ + "version": "22.0.0", + "files": { + "b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37": { + "source": { + "path": "asset.b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "5cb96a6837fa171aa6c3da922798ccc4fbf1c2c083c89fe9882dfad8757930dd": { + "source": { + "path": "aws-gamelift-gameSessionQueue.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "5cb96a6837fa171aa6c3da922798ccc4fbf1c2c083c89fe9882dfad8757930dd.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/aws-gamelift/test/integ.game-session-queue.js.snapshot/aws-gamelift-gameSessionQueue.template.json b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/aws-gamelift-gameSessionQueue.template.json new file mode 100644 index 0000000000000..9508d42f02f73 --- /dev/null +++ b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/aws-gamelift-gameSessionQueue.template.json @@ -0,0 +1,280 @@ +{ + "Resources": { + "BuildServiceRole1F57E904": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "gamelift.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "BuildServiceRoleDefaultPolicyCB7101C6": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "s3:GetObject", + "s3:GetObjectVersion" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":s3:::", + { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "/b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37.zip" + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "BuildServiceRoleDefaultPolicyCB7101C6", + "Roles": [ + { + "Ref": "BuildServiceRole1F57E904" + } + ] + } + }, + "Build45A36621": { + "Type": "AWS::GameLift::Build", + "Properties": { + "OperatingSystem": "AMAZON_LINUX_2", + "StorageLocation": { + "Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "Key": "b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37.zip", + "RoleArn": { + "Fn::GetAtt": [ + "BuildServiceRole1F57E904", + "Arn" + ] + } + } + }, + "DependsOn": [ + "BuildServiceRoleDefaultPolicyCB7101C6", + "BuildServiceRole1F57E904" + ] + }, + "BuildFleetServiceRole32D49FB4": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": [ + "ec2.amazonaws.com", + "gamelift.amazonaws.com" + ] + } + } + ], + "Version": "2012-10-17" + } + } + }, + "BuildFleet027ED403": { + "Type": "AWS::GameLift::Fleet", + "Properties": { + "BuildId": { + "Ref": "Build45A36621" + }, + "CertificateConfiguration": { + "CertificateType": "DISABLED" + }, + "EC2InboundPermissions": [ + { + "FromPort": 1935, + "IpRange": "0.0.0.0/0", + "Protocol": "TCP", + "ToPort": 1935 + } + ], + "EC2InstanceType": "c5.large", + "FleetType": "ON_DEMAND", + "InstanceRoleARN": { + "Fn::GetAtt": [ + "BuildFleetServiceRole32D49FB4", + "Arn" + ] + }, + "MaxSize": 1, + "MinSize": 0, + "Name": "test-fleet", + "NewGameSessionProtectionPolicy": "NoProtection", + "RuntimeConfiguration": { + "GameSessionActivationTimeoutSeconds": 300, + "MaxConcurrentGameSessionActivations": 1, + "ServerProcesses": [ + { + "ConcurrentExecutions": 1, + "LaunchPath": "/local/game/TestApplicationServer", + "Parameters": "port:1935 gameSessionLengthSeconds:20" + } + ] + } + } + }, + "BuildFleetAliaslive3FE0BB2F": { + "Type": "AWS::GameLift::Alias", + "Properties": { + "Name": "live", + "RoutingStrategy": { + "FleetId": { + "Ref": "BuildFleet027ED403" + }, + "Type": "SIMPLE" + } + } + }, + "MyTopic86869434": { + "Type": "AWS::SNS::Topic" + }, + "MyGameSessionQueue1A15CE31": { + "Type": "AWS::GameLift::GameSessionQueue", + "Properties": { + "Name": "test-gameSessionQueue", + "CustomEventData": "test-event-data", + "Destinations": [ + { + "DestinationArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":gamelift:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":fleet/", + { + "Ref": "BuildFleet027ED403" + } + ] + ] + } + }, + { + "DestinationArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":gamelift:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":alias/", + { + "Ref": "BuildFleetAliaslive3FE0BB2F" + } + ] + ] + } + } + ], + "FilterConfiguration": { + "AllowedLocations": [ + "eu-west-1", + "eu-west-2" + ] + }, + "NotificationTarget": { + "Ref": "MyTopic86869434" + }, + "PlayerLatencyPolicies": [ + { + "MaximumIndividualPlayerLatencyMilliseconds": 100, + "PolicyDurationSeconds": 300 + } + ], + "PriorityConfiguration": { + "LocationOrder": [ + "eu-west-1", + "eu-west-2" + ], + "PriorityOrder": [ + "LATENCY", + "COST", + "DESTINATION", + "LOCATION" + ] + }, + "TimeoutInSeconds": 300 + } + } + }, + "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/aws-gamelift/test/integ.game-session-queue.js.snapshot/cdk.out b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/cdk.out new file mode 100644 index 0000000000000..145739f539580 --- /dev/null +++ b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/integ.json b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/integ.json new file mode 100644 index 0000000000000..ae846e648bf63 --- /dev/null +++ b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "22.0.0", + "testCases": { + "GameSessionQueue/DefaultTest": { + "stacks": [ + "aws-gamelift-gameSessionQueue" + ], + "assertionStack": "GameSessionQueue/DefaultTest/DeployAssert", + "assertionStackName": "GameSessionQueueDefaultTestDeployAssert72367A40" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/manifest.json b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/manifest.json new file mode 100644 index 0000000000000..ffee6d0974a64 --- /dev/null +++ b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/manifest.json @@ -0,0 +1,153 @@ +{ + "version": "22.0.0", + "artifacts": { + "aws-gamelift-gameSessionQueue.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "aws-gamelift-gameSessionQueue.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "aws-gamelift-gameSessionQueue": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "aws-gamelift-gameSessionQueue.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}/5cb96a6837fa171aa6c3da922798ccc4fbf1c2c083c89fe9882dfad8757930dd.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "aws-gamelift-gameSessionQueue.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-gamelift-gameSessionQueue.assets" + ], + "metadata": { + "/aws-gamelift-gameSessionQueue/Build/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "BuildServiceRole1F57E904" + } + ], + "/aws-gamelift-gameSessionQueue/Build/ServiceRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "BuildServiceRoleDefaultPolicyCB7101C6" + } + ], + "/aws-gamelift-gameSessionQueue/Build/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Build45A36621" + } + ], + "/aws-gamelift-gameSessionQueue/BuildFleet/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "BuildFleetServiceRole32D49FB4" + } + ], + "/aws-gamelift-gameSessionQueue/BuildFleet/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "BuildFleet027ED403" + } + ], + "/aws-gamelift-gameSessionQueue/BuildFleet/Aliaslive/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "BuildFleetAliaslive3FE0BB2F" + } + ], + "/aws-gamelift-gameSessionQueue/MyTopic/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyTopic86869434" + } + ], + "/aws-gamelift-gameSessionQueue/MyGameSessionQueue/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyGameSessionQueue1A15CE31" + } + ], + "/aws-gamelift-gameSessionQueue/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/aws-gamelift-gameSessionQueue/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "aws-gamelift-gameSessionQueue" + }, + "GameSessionQueueDefaultTestDeployAssert72367A40.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "GameSessionQueueDefaultTestDeployAssert72367A40.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "GameSessionQueueDefaultTestDeployAssert72367A40": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "GameSessionQueueDefaultTestDeployAssert72367A40.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": [ + "GameSessionQueueDefaultTestDeployAssert72367A40.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": [ + "GameSessionQueueDefaultTestDeployAssert72367A40.assets" + ], + "metadata": { + "/GameSessionQueue/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/GameSessionQueue/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "GameSessionQueue/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/tree.json b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/tree.json new file mode 100644 index 0000000000000..98d8118a06156 --- /dev/null +++ b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.js.snapshot/tree.json @@ -0,0 +1,534 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "aws-gamelift-gameSessionQueue": { + "id": "aws-gamelift-gameSessionQueue", + "path": "aws-gamelift-gameSessionQueue", + "children": { + "Build": { + "id": "Build", + "path": "aws-gamelift-gameSessionQueue/Build", + "children": { + "ServiceRole": { + "id": "ServiceRole", + "path": "aws-gamelift-gameSessionQueue/Build/ServiceRole", + "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "aws-gamelift-gameSessionQueue/Build/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-gamelift-gameSessionQueue/Build/ServiceRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "gamelift.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-iam.CfnRole", + "version": "0.0.0" + } + }, + "DefaultPolicy": { + "id": "DefaultPolicy", + "path": "aws-gamelift-gameSessionQueue/Build/ServiceRole/DefaultPolicy", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-gamelift-gameSessionQueue/Build/ServiceRole/DefaultPolicy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Policy", + "aws:cdk:cloudformation:props": { + "policyDocument": { + "Statement": [ + { + "Action": [ + "s3:GetObject", + "s3:GetObjectVersion" + ], + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":s3:::", + { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "/b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37.zip" + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "policyName": "BuildServiceRoleDefaultPolicyCB7101C6", + "roles": [ + { + "Ref": "BuildServiceRole1F57E904" + } + ] + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-iam.CfnPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-iam.Policy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-iam.Role", + "version": "0.0.0" + } + }, + "Content": { + "id": "Content", + "path": "aws-gamelift-gameSessionQueue/Build/Content", + "children": { + "Stage": { + "id": "Stage", + "path": "aws-gamelift-gameSessionQueue/Build/Content/Stage", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + }, + "AssetBucket": { + "id": "AssetBucket", + "path": "aws-gamelift-gameSessionQueue/Build/Content/AssetBucket", + "constructInfo": { + "fqn": "@aws-cdk/aws-s3.BucketBase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-s3-assets.Asset", + "version": "0.0.0" + } + }, + "AssetBucket": { + "id": "AssetBucket", + "path": "aws-gamelift-gameSessionQueue/Build/AssetBucket", + "constructInfo": { + "fqn": "@aws-cdk/aws-s3.BucketBase", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-gamelift-gameSessionQueue/Build/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::GameLift::Build", + "aws:cdk:cloudformation:props": { + "operatingSystem": "AMAZON_LINUX_2", + "storageLocation": { + "bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "key": "b95e4173bc399a8f686a4951aa26e01de1ed1e9d981ee1a7f18a15512dbdcb37.zip", + "roleArn": { + "Fn::GetAtt": [ + "BuildServiceRole1F57E904", + "Arn" + ] + } + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-gamelift.CfnBuild", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-gamelift.Build", + "version": "0.0.0" + } + }, + "BuildFleet": { + "id": "BuildFleet", + "path": "aws-gamelift-gameSessionQueue/BuildFleet", + "children": { + "ServiceRole": { + "id": "ServiceRole", + "path": "aws-gamelift-gameSessionQueue/BuildFleet/ServiceRole", + "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "aws-gamelift-gameSessionQueue/BuildFleet/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-gamelift-gameSessionQueue/BuildFleet/ServiceRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": [ + "ec2.amazonaws.com", + "gamelift.amazonaws.com" + ] + } + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-gamelift-gameSessionQueue/BuildFleet/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::GameLift::Fleet", + "aws:cdk:cloudformation:props": { + "buildId": { + "Ref": "Build45A36621" + }, + "certificateConfiguration": { + "certificateType": "DISABLED" + }, + "ec2InboundPermissions": [ + { + "protocol": "TCP", + "fromPort": 1935, + "toPort": 1935, + "ipRange": "0.0.0.0/0" + } + ], + "ec2InstanceType": "c5.large", + "fleetType": "ON_DEMAND", + "instanceRoleArn": { + "Fn::GetAtt": [ + "BuildFleetServiceRole32D49FB4", + "Arn" + ] + }, + "maxSize": 1, + "minSize": 0, + "name": "test-fleet", + "newGameSessionProtectionPolicy": "NoProtection", + "runtimeConfiguration": { + "gameSessionActivationTimeoutSeconds": 300, + "maxConcurrentGameSessionActivations": 1, + "serverProcesses": [ + { + "parameters": "port:1935 gameSessionLengthSeconds:20", + "launchPath": "/local/game/TestApplicationServer", + "concurrentExecutions": 1 + } + ] + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-gamelift.CfnFleet", + "version": "0.0.0" + } + }, + "Aliaslive": { + "id": "Aliaslive", + "path": "aws-gamelift-gameSessionQueue/BuildFleet/Aliaslive", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-gamelift-gameSessionQueue/BuildFleet/Aliaslive/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::GameLift::Alias", + "aws:cdk:cloudformation:props": { + "name": "live", + "routingStrategy": { + "fleetId": { + "Ref": "BuildFleet027ED403" + }, + "type": "SIMPLE" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-gamelift.CfnAlias", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-gamelift.Alias", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-gamelift.BuildFleet", + "version": "0.0.0" + } + }, + "MyTopic": { + "id": "MyTopic", + "path": "aws-gamelift-gameSessionQueue/MyTopic", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-gamelift-gameSessionQueue/MyTopic/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SNS::Topic", + "aws:cdk:cloudformation:props": {} + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-sns.CfnTopic", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-sns.Topic", + "version": "0.0.0" + } + }, + "MyGameSessionQueue": { + "id": "MyGameSessionQueue", + "path": "aws-gamelift-gameSessionQueue/MyGameSessionQueue", + "children": { + "Resource": { + "id": "Resource", + "path": "aws-gamelift-gameSessionQueue/MyGameSessionQueue/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::GameLift::GameSessionQueue", + "aws:cdk:cloudformation:props": { + "name": "test-gameSessionQueue", + "customEventData": "test-event-data", + "destinations": [ + { + "destinationArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":gamelift:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":fleet/", + { + "Ref": "BuildFleet027ED403" + } + ] + ] + } + }, + { + "destinationArn": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":gamelift:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":alias/", + { + "Ref": "BuildFleetAliaslive3FE0BB2F" + } + ] + ] + } + } + ], + "filterConfiguration": { + "allowedLocations": [ + "eu-west-1", + "eu-west-2" + ] + }, + "notificationTarget": { + "Ref": "MyTopic86869434" + }, + "playerLatencyPolicies": [ + { + "maximumIndividualPlayerLatencyMilliseconds": 100, + "policyDurationSeconds": 300 + } + ], + "priorityConfiguration": { + "priorityOrder": [ + "LATENCY", + "COST", + "DESTINATION", + "LOCATION" + ], + "locationOrder": [ + "eu-west-1", + "eu-west-2" + ] + }, + "timeoutInSeconds": 300 + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-gamelift.CfnGameSessionQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-gamelift.GameSessionQueue", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-gamelift-gameSessionQueue/BootstrapVersion", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-gamelift-gameSessionQueue/CheckBootstrapVersion", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + }, + "GameSessionQueue": { + "id": "GameSessionQueue", + "path": "GameSessionQueue", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "GameSessionQueue/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "GameSessionQueue/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "GameSessionQueue/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "GameSessionQueue/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "GameSessionQueue/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.IntegTestCase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.IntegTest", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.ts b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.ts new file mode 100644 index 0000000000000..9e1a6793fb63a --- /dev/null +++ b/packages/@aws-cdk/aws-gamelift/test/integ.game-session-queue.ts @@ -0,0 +1,77 @@ +import * as path from 'path'; +import * as ec2 from '@aws-cdk/aws-ec2'; +import * as sns from '@aws-cdk/aws-sns'; +import * as cdk from '@aws-cdk/core'; +import { Duration } from '@aws-cdk/core'; +import { IntegTest } from '@aws-cdk/integ-tests'; +import { Construct } from 'constructs'; +import * as gamelift from '../lib'; + +class TestStack extends cdk.Stack { + constructor(scope: Construct, id: string, props?: cdk.StackProps) { + super(scope, id, props); + + const build = new gamelift.Build(this, 'Build', { + content: gamelift.Content.fromAsset(path.join(__dirname, 'my-game-build')), + operatingSystem: gamelift.OperatingSystem.AMAZON_LINUX_2, + }); + + const fleet = new gamelift.BuildFleet(this, 'BuildFleet', { + fleetName: 'test-fleet', + content: build, + ingressRules: [{ + source: gamelift.Peer.anyIpv4(), + port: gamelift.Port.tcp(1935), + }], + instanceType: ec2.InstanceType.of(ec2.InstanceClass.C5, ec2.InstanceSize.LARGE), + runtimeConfiguration: { + gameSessionActivationTimeout: Duration.seconds(300), + maxConcurrentGameSessionActivations: 1, + serverProcesses: [{ + launchPath: '/local/game/TestApplicationServer', + parameters: 'port:1935 gameSessionLengthSeconds:20', + concurrentExecutions: 1, + }], + }, + }); + const alias = fleet.addAlias('live'); + + const topic = new sns.Topic(this, 'MyTopic', {}); + + const queue = new gamelift.GameSessionQueue(this, 'MyGameSessionQueue', { + gameSessionQueueName: 'test-gameSessionQueue', + customEventData: 'test-event-data', + allowedLocations: ['eu-west-1', 'eu-west-2'], + destinations: [fleet], + notificationTarget: topic, + playerLatencyPolicies: [{ + maximumIndividualPlayerLatency: cdk.Duration.millis(100), + policyDuration: cdk.Duration.seconds(300), + }], + priorityConfiguration: { + locationOrder: [ + 'eu-west-1', + 'eu-west-2', + ], + priorityOrder: [ + gamelift.PriorityType.LATENCY, + gamelift.PriorityType.COST, + gamelift.PriorityType.DESTINATION, + gamelift.PriorityType.LOCATION, + ], + }, + timeout: cdk.Duration.seconds(300), + }); + + queue.addDestination(alias); + } +} + +// Beginning of the test suite +const app = new cdk.App(); +const stack = new TestStack(app, 'aws-gamelift-gameSessionQueue'); +new IntegTest(app, 'GameSessionQueue', { + testCases: [stack], +}); + +app.synth(); \ No newline at end of file diff --git a/packages/@aws-cdk/aws-glue/README.md b/packages/@aws-cdk/aws-glue/README.md index 31030b9af93a0..d5260e12d771d 100644 --- a/packages/@aws-cdk/aws-glue/README.md +++ b/packages/@aws-cdk/aws-glue/README.md @@ -136,7 +136,6 @@ A `SecurityConfiguration` is a set of security properties that can be used by AW ```ts new glue.SecurityConfiguration(this, 'MySecurityConfiguration', { - securityConfigurationName: 'name', cloudWatchEncryption: { mode: glue.CloudWatchEncryptionMode.KMS, }, @@ -154,7 +153,6 @@ By default, a shared KMS key is created for use with the encryption configuratio ```ts declare const key: kms.Key; new glue.SecurityConfiguration(this, 'MySecurityConfiguration', { - securityConfigurationName: 'name', cloudWatchEncryption: { mode: glue.CloudWatchEncryptionMode.KMS, kmsKey: key, @@ -169,9 +167,7 @@ See [documentation](https://docs.aws.amazon.com/glue/latest/dg/encryption-securi A `Database` is a logical grouping of `Tables` in the Glue Catalog. ```ts -new glue.Database(this, 'MyDatabase', { - databaseName: 'my_database', -}); +new glue.Database(this, 'MyDatabase'); ``` ## Table @@ -182,7 +178,6 @@ A Glue table describes a table of data in S3: its structure (column names and ty declare const myDatabase: glue.Database; new glue.Table(this, 'MyTable', { database: myDatabase, - tableName: 'my_table', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -205,7 +200,6 @@ new glue.Table(this, 'MyTable', { s3Prefix: 'my-table/', // ... database: myDatabase, - tableName: 'my_table', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -224,7 +218,6 @@ To improve query performance, a table can specify `partitionKeys` on which data declare const myDatabase: glue.Database; new glue.Table(this, 'MyTable', { database: myDatabase, - tableName: 'my_table', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -256,7 +249,6 @@ property: declare const myDatabase: glue.Database; new glue.Table(this, 'MyTable', { database: myDatabase, - tableName: 'my_table', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -294,7 +286,6 @@ If you have a table with a large number of partitions that grows over time, cons declare const myDatabase: glue.Database; new glue.Table(this, 'MyTable', { database: myDatabase, - tableName: 'my_table', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -324,7 +315,6 @@ new glue.Table(this, 'MyTable', { encryption: glue.TableEncryption.S3_MANAGED, // ... database: myDatabase, - tableName: 'my_table', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -342,7 +332,6 @@ new glue.Table(this, 'MyTable', { encryption: glue.TableEncryption.KMS, // ... database: myDatabase, - tableName: 'my_table', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -356,7 +345,6 @@ new glue.Table(this, 'MyTable', { encryptionKey: new kms.Key(this, 'MyKey'), // ... database: myDatabase, - tableName: 'my_table', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -373,7 +361,6 @@ new glue.Table(this, 'MyTable', { encryption: glue.TableEncryption.KMS_MANAGED, // ... database: myDatabase, - tableName: 'my_table', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -391,7 +378,6 @@ new glue.Table(this, 'MyTable', { encryption: glue.TableEncryption.CLIENT_SIDE_KMS, // ... database: myDatabase, - tableName: 'my_table', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -405,7 +391,6 @@ new glue.Table(this, 'MyTable', { encryptionKey: new kms.Key(this, 'MyKey'), // ... database: myDatabase, - tableName: 'my_table', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -447,7 +432,6 @@ new glue.Table(this, 'MyTable', { }], // ... database: myDatabase, - tableName: 'my_table', dataFormat: glue.DataFormat.JSON, }); ``` diff --git a/packages/@aws-cdk/aws-glue/lib/database.ts b/packages/@aws-cdk/aws-glue/lib/database.ts index e93afa2a5fc3c..8032dc17315a4 100644 --- a/packages/@aws-cdk/aws-glue/lib/database.ts +++ b/packages/@aws-cdk/aws-glue/lib/database.ts @@ -1,4 +1,4 @@ -import { ArnFormat, IResource, Resource, Stack } from '@aws-cdk/core'; +import { ArnFormat, IResource, Lazy, Names, Resource, Stack } from '@aws-cdk/core'; import { Construct } from 'constructs'; import { CfnDatabase } from './glue.generated'; @@ -31,8 +31,10 @@ export interface IDatabase extends IResource { export interface DatabaseProps { /** * The name of the database. + * + * @default - generated by CDK. */ - readonly databaseName: string; + readonly databaseName?: string; /** * The location of the database (for example, an HDFS path). @@ -86,13 +88,16 @@ export class Database extends Resource implements IDatabase { */ public readonly locationUri?: string; - constructor(scope: Construct, id: string, props: DatabaseProps) { + constructor(scope: Construct, id: string, props: DatabaseProps = {}) { super(scope, id, { - physicalName: props.databaseName, + physicalName: props.databaseName ?? + Lazy.string({ + produce: () => Names.uniqueResourceName(this, {}).toLowerCase(), + }), }); let databaseInput: CfnDatabase.DatabaseInputProperty = { - name: props.databaseName, + name: this.physicalName, }; if (props.locationUri !== undefined) { diff --git a/packages/@aws-cdk/aws-glue/lib/security-configuration.ts b/packages/@aws-cdk/aws-glue/lib/security-configuration.ts index f1e7297147794..b62112f0ce1d6 100644 --- a/packages/@aws-cdk/aws-glue/lib/security-configuration.ts +++ b/packages/@aws-cdk/aws-glue/lib/security-configuration.ts @@ -1,5 +1,6 @@ import * as kms from '@aws-cdk/aws-kms'; import * as cdk from '@aws-cdk/core'; +import { Lazy, Names } from '@aws-cdk/core'; import * as constructs from 'constructs'; import { CfnSecurityConfiguration } from './glue.generated'; @@ -114,8 +115,10 @@ export interface JobBookmarksEncryption { export interface SecurityConfigurationProps { /** * The name of the security configuration. + * + * @default - generated by CDK. */ - readonly securityConfigurationName: string; + readonly securityConfigurationName?: string; /** * The encryption configuration for Amazon CloudWatch Logs. @@ -184,9 +187,12 @@ export class SecurityConfiguration extends cdk.Resource implements ISecurityConf */ public readonly s3EncryptionKey?: kms.IKey; - constructor(scope: constructs.Construct, id: string, props: SecurityConfigurationProps) { + constructor(scope: constructs.Construct, id: string, props: SecurityConfigurationProps = {}) { super(scope, id, { - physicalName: props.securityConfigurationName, + physicalName: props.securityConfigurationName ?? + Lazy.string({ + produce: () => Names.uniqueResourceName(this, {}), + }), }); if (!props.s3Encryption && !props.cloudWatchEncryption && !props.jobBookmarksEncryption) { @@ -230,7 +236,7 @@ export class SecurityConfiguration extends cdk.Resource implements ISecurityConf } const resource = new CfnSecurityConfiguration(this, 'Resource', { - name: props.securityConfigurationName, + name: this.physicalName, encryptionConfiguration: { cloudWatchEncryption, jobBookmarksEncryption, diff --git a/packages/@aws-cdk/aws-glue/lib/table.ts b/packages/@aws-cdk/aws-glue/lib/table.ts index ea958879d816b..0bd08a798b18f 100644 --- a/packages/@aws-cdk/aws-glue/lib/table.ts +++ b/packages/@aws-cdk/aws-glue/lib/table.ts @@ -1,7 +1,7 @@ import * as iam from '@aws-cdk/aws-iam'; import * as kms from '@aws-cdk/aws-kms'; import * as s3 from '@aws-cdk/aws-s3'; -import { ArnFormat, Fn, IResource, Names, Resource, Stack } from '@aws-cdk/core'; +import { ArnFormat, Fn, IResource, Lazy, Names, Resource, Stack } from '@aws-cdk/core'; import * as cr from '@aws-cdk/custom-resources'; import { AwsCustomResource } from '@aws-cdk/custom-resources'; import { Construct } from 'constructs'; @@ -83,8 +83,10 @@ export interface TableAttributes { export interface TableProps { /** * Name of the table. + * + * @default - generated by CDK. */ - readonly tableName: string; + readonly tableName?: string; /** * Description of the table. @@ -282,7 +284,10 @@ export class Table extends Resource implements ITable { constructor(scope: Construct, id: string, props: TableProps) { super(scope, id, { - physicalName: props.tableName, + physicalName: props.tableName ?? + Lazy.string({ + produce: () => Names.uniqueResourceName(this, {}).toLowerCase(), + }), }); this.database = props.database; @@ -306,7 +311,7 @@ export class Table extends Resource implements ITable { tableInput: { name: this.physicalName, - description: props.description || `${props.tableName} generated by CDK`, + description: props.description || `${this.physicalName} generated by CDK`, partitionKeys: renderColumns(props.partitionKeys), diff --git a/packages/@aws-cdk/aws-glue/test/database.test.ts b/packages/@aws-cdk/aws-glue/test/database.test.ts index 6d94eb710131a..637f7cecab8e1 100644 --- a/packages/@aws-cdk/aws-glue/test/database.test.ts +++ b/packages/@aws-cdk/aws-glue/test/database.test.ts @@ -14,9 +14,7 @@ beforeEach( () => { }); test('default database does not create a bucket', () => { - new glue.Database(stack, 'Database', { - databaseName: 'test_database', - }); + new glue.Database(stack, 'Database'); Template.fromStack(stack).templateMatches({ Resources: { @@ -27,7 +25,7 @@ test('default database does not create a bucket', () => { Ref: 'AWS::AccountId', }, DatabaseInput: { - Name: 'test_database', + Name: 'database', }, }, }, @@ -38,7 +36,6 @@ test('default database does not create a bucket', () => { test('explicit locationURI', () => { new glue.Database(stack, 'Database', { - databaseName: 'test_database', locationUri: 's3://my-uri/', }); @@ -52,7 +49,7 @@ test('explicit locationURI', () => { }, DatabaseInput: { LocationUri: 's3://my-uri/', - Name: 'test_database', + Name: 'database', }, }, }, @@ -78,7 +75,6 @@ test('fromDatabase', () => { test('locationUri length must be >= 1', () => { expect(() => new glue.Database(stack, 'Database', { - databaseName: 'test_database', locationUri: '', }), ).toThrow(); @@ -87,8 +83,18 @@ test('locationUri length must be >= 1', () => { test('locationUri length must be <= 1024', () => { expect(() => new glue.Database(stack, 'Database', { - databaseName: 'test_database', locationUri: 'a'.repeat(1025), }), ).toThrow(); }); + +test('can specify a physical name', () => { + new glue.Database(stack, 'Database', { + databaseName: 'my_database', + }); + Template.fromStack(stack).hasResourceProperties('AWS::Glue::Database', { + DatabaseInput: { + Name: 'my_database', + }, + }); +}); diff --git a/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/aws-glue-connection.assets.json b/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/aws-glue-connection.assets.json index 038b458f1930e..8b82f404206c1 100644 --- a/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/aws-glue-connection.assets.json +++ b/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/aws-glue-connection.assets.json @@ -1,5 +1,5 @@ { - "version": "20.0.0", + "version": "22.0.0", "files": { "f076d8bcdf0c659b5885c5698672513188f149a0fe66e8f214a4ff4eaf97fda9": { "source": { diff --git a/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/cdk.out b/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/cdk.out index 588d7b269d34f..145739f539580 100644 --- a/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"20.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/integ.json b/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/integ.json index c1be8a55da270..da91047cc2a94 100644 --- a/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "20.0.0", + "version": "22.0.0", "testCases": { "integ.connection": { "stacks": [ diff --git a/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/manifest.json b/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/manifest.json index 8927a6ad37eae..f289952f0aa43 100644 --- a/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "20.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "aws-glue-connection.assets": { "type": "cdk:asset-manifest", "properties": { @@ -203,6 +197,12 @@ ] }, "displayName": "aws-glue-connection" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/tree.json b/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/tree.json index e3f335fe35e24..d00e8b8a4faea 100644 --- a/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-glue/test/integ.connection.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" - } - }, "aws-glue-connection": { "id": "aws-glue-connection", "path": "aws-glue-connection", @@ -91,8 +83,8 @@ "id": "Acl", "path": "aws-glue-connection/Vpc/PublicSubnet1/Acl", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" } }, "RouteTable": { @@ -258,8 +250,8 @@ "id": "Acl", "path": "aws-glue-connection/Vpc/PublicSubnet2/Acl", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" } }, "RouteTable": { @@ -425,8 +417,8 @@ "id": "Acl", "path": "aws-glue-connection/Vpc/PrivateSubnet1/Acl", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" } }, "RouteTable": { @@ -544,8 +536,8 @@ "id": "Acl", "path": "aws-glue-connection/Vpc/PrivateSubnet2/Acl", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" } }, "RouteTable": { @@ -742,17 +734,41 @@ "fqn": "@aws-cdk/aws-glue.Connection", "version": "0.0.0" } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-glue-connection/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-glue-connection/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } } }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.App", + "version": "0.0.0" } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-glue/test/security-configuration.test.ts b/packages/@aws-cdk/aws-glue/test/security-configuration.test.ts index ca42a4eb53453..1af745354e695 100644 --- a/packages/@aws-cdk/aws-glue/test/security-configuration.test.ts +++ b/packages/@aws-cdk/aws-glue/test/security-configuration.test.ts @@ -6,9 +6,8 @@ import * as glue from '../lib'; test('throws when a security configuration has no encryption config', () => { const stack = new cdk.Stack(); - expect(() => new glue.SecurityConfiguration(stack, 'SecurityConfiguration', { - securityConfigurationName: 'name', - })).toThrowError(/One of cloudWatchEncryption, jobBookmarksEncryption or s3Encryption must be defined/); + expect(() => new glue.SecurityConfiguration(stack, 'SecurityConfiguration')) + .toThrowError(/One of cloudWatchEncryption, jobBookmarksEncryption or s3Encryption must be defined/); }); test('a security configuration with encryption configuration requiring kms key and providing an explicit one', () => { @@ -17,7 +16,6 @@ test('a security configuration with encryption configuration requiring kms key a const key = kms.Key.fromKeyArn(stack, 'ImportedKey', keyArn); const securityConfiguration = new glue.SecurityConfiguration(stack, 'SecurityConfiguration', { - securityConfigurationName: 'name', cloudWatchEncryption: { mode: glue.CloudWatchEncryptionMode.KMS, kmsKey: key, @@ -29,7 +27,7 @@ test('a security configuration with encryption configuration requiring kms key a expect(securityConfiguration.s3EncryptionKey).toBeUndefined(); Template.fromStack(stack).hasResourceProperties('AWS::Glue::SecurityConfiguration', { - Name: 'name', + Name: 'SecurityConfiguration', EncryptionConfiguration: { CloudWatchEncryption: { CloudWatchEncryptionMode: 'SSE-KMS', @@ -43,7 +41,6 @@ test('a security configuration with an encryption configuration requiring kms ke const stack = new cdk.Stack(); const securityConfiguration = new glue.SecurityConfiguration(stack, 'SecurityConfiguration', { - securityConfigurationName: 'name', cloudWatchEncryption: { mode: glue.CloudWatchEncryptionMode.KMS, }, @@ -56,7 +53,7 @@ test('a security configuration with an encryption configuration requiring kms ke Template.fromStack(stack).resourceCountIs('AWS::KMS::Key', 1); Template.fromStack(stack).hasResourceProperties('AWS::Glue::SecurityConfiguration', { - Name: 'name', + Name: 'SecurityConfiguration', EncryptionConfiguration: { CloudWatchEncryption: { CloudWatchEncryptionMode: 'SSE-KMS', @@ -72,7 +69,6 @@ test('a security configuration with all encryption configs and mixed kms key inp const key = kms.Key.fromKeyArn(stack, 'ImportedKey', keyArn); const securityConfiguration = new glue.SecurityConfiguration(stack, 'SecurityConfiguration', { - securityConfigurationName: 'name', cloudWatchEncryption: { mode: glue.CloudWatchEncryptionMode.KMS, }, @@ -92,7 +88,7 @@ test('a security configuration with all encryption configs and mixed kms key inp Template.fromStack(stack).resourceCountIs('AWS::KMS::Key', 1); Template.fromStack(stack).hasResourceProperties('AWS::Glue::SecurityConfiguration', { - Name: 'name', + Name: 'SecurityConfiguration', EncryptionConfiguration: { CloudWatchEncryption: { CloudWatchEncryptionMode: 'SSE-KMS', @@ -119,3 +115,16 @@ test('fromSecurityConfigurationName', () => { expect(securityConfiguration.securityConfigurationName).toEqual(name); }); + +test('can specify a physical name', () => { + const stack = new cdk.Stack(); + new glue.SecurityConfiguration(stack, 'SecurityConfiguration', { + securityConfigurationName: 'MySecurityConfiguration', + cloudWatchEncryption: { + mode: glue.CloudWatchEncryptionMode.KMS, + }, + }); + Template.fromStack(stack).hasResourceProperties('AWS::Glue::SecurityConfiguration', { + Name: 'MySecurityConfiguration', + }); +}); diff --git a/packages/@aws-cdk/aws-glue/test/table.test.ts b/packages/@aws-cdk/aws-glue/test/table.test.ts index 152c489dd520c..520c6a8528f49 100644 --- a/packages/@aws-cdk/aws-glue/test/table.test.ts +++ b/packages/@aws-cdk/aws-glue/test/table.test.ts @@ -10,14 +10,11 @@ import { CfnTable } from '../lib/glue.generated'; test('unpartitioned JSON table', () => { const app = new cdk.App(); const dbStack = new cdk.Stack(app, 'db'); - const database = new glue.Database(dbStack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(dbStack, 'Database'); const tableStack = new cdk.Stack(app, 'table'); const table = new glue.Table(tableStack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -40,8 +37,8 @@ test('unpartitioned JSON table', () => { 'Fn::ImportValue': 'db:ExportsOutputRefDatabaseB269D8BB88F4B1C4', }, TableInput: { - Name: 'table', - Description: 'table generated by CDK', + Name: 'tabletable8fff2c2b', + Description: 'tabletable8fff2c2b generated by CDK', Parameters: { classification: 'json', has_encrypted_data: false, @@ -81,14 +78,11 @@ test('unpartitioned JSON table', () => { test('partitioned JSON table', () => { const app = new cdk.App(); const dbStack = new cdk.Stack(app, 'db'); - const database = new glue.Database(dbStack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(dbStack, 'Database'); const tableStack = new cdk.Stack(app, 'table'); const table = new glue.Table(tableStack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -111,8 +105,8 @@ test('partitioned JSON table', () => { 'Fn::ImportValue': 'db:ExportsOutputRefDatabaseB269D8BB88F4B1C4', }, TableInput: { - Name: 'table', - Description: 'table generated by CDK', + Name: 'tabletable8fff2c2b', + Description: 'tabletable8fff2c2b generated by CDK', Parameters: { classification: 'json', has_encrypted_data: false, @@ -157,13 +151,10 @@ test('partitioned JSON table', () => { test('compressed table', () => { const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -223,14 +214,11 @@ test('compressed table', () => { test('table.node.defaultChild', () => { // GIVEN const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); // WHEN const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -245,13 +233,10 @@ test('table.node.defaultChild', () => { test('encrypted table: SSE-S3', () => { const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -323,13 +308,10 @@ test('encrypted table: SSE-S3', () => { test('encrypted table: SSE-KMS (implicitly created key)', () => { const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -410,16 +392,13 @@ test('encrypted table: SSE-KMS (implicitly created key)', () => { test('encrypted table: SSE-KMS (explicitly created key)', () => { const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const encryptionKey = new kms.Key(stack, 'MyKey', { description: 'OurKey', }); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -502,13 +481,10 @@ test('encrypted table: SSE-KMS (explicitly created key)', () => { test('encrypted table: SSE-KMS_MANAGED', () => { const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -580,13 +556,10 @@ test('encrypted table: SSE-KMS_MANAGED', () => { test('encrypted table: CSE-KMS (implicitly created key)', () => { const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -648,16 +621,13 @@ test('encrypted table: CSE-KMS (implicitly created key)', () => { test('encrypted table: CSE-KMS (explicitly created key)', () => { const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const encryptionKey = new kms.Key(stack, 'MyKey', { description: 'MyKey', }); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -722,9 +692,7 @@ test('encrypted table: CSE-KMS (explicitly created key)', () => { test('encrypted table: CSE-KMS (explicitly passed bucket and key)', () => { const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const bucket = new s3.Bucket(stack, 'Bucket'); const encryptionKey = new kms.Key(stack, 'MyKey', { description: 'MyKey', @@ -732,7 +700,6 @@ test('encrypted table: CSE-KMS (explicitly passed bucket and key)', () => { const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -801,15 +768,12 @@ test('explicit s3 bucket and prefix', () => { const dbStack = new cdk.Stack(app, 'db'); const stack = new cdk.Stack(app, 'app'); const bucket = new s3.Bucket(stack, 'ExplicitBucket'); - const database = new glue.Database(dbStack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(dbStack, 'Database'); new glue.Table(stack, 'Table', { database, bucket, s3Prefix: 'prefix/', - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -825,8 +789,8 @@ test('explicit s3 bucket and prefix', () => { 'Fn::ImportValue': 'db:ExportsOutputRefDatabaseB269D8BB88F4B1C4', }, TableInput: { - Description: 'table generated by CDK', - Name: 'table', + Description: 'apptablecb9c398f generated by CDK', + Name: 'apptablecb9c398f', Parameters: { classification: 'json', has_encrypted_data: false, @@ -868,15 +832,12 @@ test('explicit s3 bucket and with empty prefix', () => { const dbStack = new cdk.Stack(app, 'db'); const stack = new cdk.Stack(app, 'app'); const bucket = new s3.Bucket(stack, 'ExplicitBucket'); - const database = new glue.Database(dbStack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(dbStack, 'Database'); new glue.Table(stack, 'Table', { database, bucket, s3Prefix: '', - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -892,8 +853,8 @@ test('explicit s3 bucket and with empty prefix', () => { 'Fn::ImportValue': 'db:ExportsOutputRefDatabaseB269D8BB88F4B1C4', }, TableInput: { - Description: 'table generated by CDK', - Name: 'table', + Description: 'apptablecb9c398f generated by CDK', + Name: 'apptablecb9c398f', Parameters: { classification: 'json', has_encrypted_data: false, @@ -933,13 +894,10 @@ test('explicit s3 bucket and with empty prefix', () => { describe('add partition index', () => { test('fails if no partition keys', () => { const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -955,13 +913,10 @@ describe('add partition index', () => { test('fails if partition index does not match partition keys', () => { const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -981,13 +936,10 @@ describe('add partition index', () => { test('fails with index name < 1 character', () => { const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -1007,9 +959,7 @@ describe('add partition index', () => { test('fails with > 3 indexes', () => { const stack = new cdk.Stack(); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const indexes: PartitionIndex[] = [{ indexName: 'ind1', @@ -1027,7 +977,6 @@ describe('add partition index', () => { expect(() => new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -1046,13 +995,10 @@ describe('grants', () => { test('custom permissions', () => { const stack = new cdk.Stack(); const user = new iam.User(stack, 'User'); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -1112,13 +1058,10 @@ describe('grants', () => { test('read only', () => { const stack = new cdk.Stack(); const user = new iam.User(stack, 'User'); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -1216,13 +1159,10 @@ describe('grants', () => { test('write only', () => { const stack = new cdk.Stack(); const user = new iam.User(stack, 'User'); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -1322,13 +1262,10 @@ describe('grants', () => { test('read and write', () => { const stack = new cdk.Stack(); const user = new iam.User(stack, 'User'); - const database = new glue.Database(stack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(stack, 'Database'); const table = new glue.Table(stack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -1441,7 +1378,6 @@ describe('validate', () => { expect(() => { createTable({ columns: [], - tableName: 'name', }); }).toThrowError('you must specify at least one column for the table'); @@ -1450,7 +1386,6 @@ describe('validate', () => { test('unique column names', () => { expect(() => { createTable({ - tableName: 'name', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -1466,7 +1401,6 @@ describe('validate', () => { test('unique partition keys', () => { expect(() => { createTable({ - tableName: 'name', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -1486,7 +1420,6 @@ describe('validate', () => { test('column names and partition keys are all unique', () => { expect(() => { createTable({ - tableName: 'name', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -1503,7 +1436,6 @@ describe('validate', () => { test('can not specify an explicit bucket and encryption', () => { expect(() => { createTable({ - tableName: 'name', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -1516,7 +1448,6 @@ describe('validate', () => { test('can explicitly pass bucket if Encryption undefined', () => { expect(() => createTable({ - tableName: 'name', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -1528,7 +1459,6 @@ describe('validate', () => { test('can explicitly pass bucket if Unencrypted', () => { expect(() => createTable({ - tableName: 'name', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -1540,7 +1470,6 @@ describe('validate', () => { test('can explicitly pass bucket if ClientSideKms', () => { expect(() => createTable({ - tableName: 'name', columns: [{ name: 'col1', type: glue.Schema.STRING, @@ -1569,14 +1498,11 @@ test.each([ ])('Partition filtering on table %s', (_, enabled) => { const app = new cdk.App(); const dbStack = new cdk.Stack(app, 'db'); - const database = new glue.Database(dbStack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(dbStack, 'Database'); const tableStack = new cdk.Stack(app, 'table'); new glue.Table(tableStack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -1597,8 +1523,8 @@ test.each([ 'Fn::ImportValue': 'db:ExportsOutputRefDatabaseB269D8BB88F4B1C4', }, TableInput: { - Name: 'table', - Description: 'table generated by CDK', + Name: 'tabletable8fff2c2b', + Description: 'tabletable8fff2c2b generated by CDK', Parameters: { 'classification': 'json', 'has_encrypted_data': false, @@ -1614,14 +1540,11 @@ test.each([ test('Partition filtering on table is not defined (default behavior)', () => { const app = new cdk.App(); const dbStack = new cdk.Stack(app, 'db'); - const database = new glue.Database(dbStack, 'Database', { - databaseName: 'database', - }); + const database = new glue.Database(dbStack, 'Database'); const tableStack = new cdk.Stack(app, 'table'); new glue.Table(tableStack, 'Table', { database, - tableName: 'table', columns: [{ name: 'col', type: glue.Schema.STRING, @@ -1642,8 +1565,8 @@ test('Partition filtering on table is not defined (default behavior)', () => { 'Fn::ImportValue': 'db:ExportsOutputRefDatabaseB269D8BB88F4B1C4', }, TableInput: { - Name: 'table', - Description: 'table generated by CDK', + Name: 'tabletable8fff2c2b', + Description: 'tabletable8fff2c2b generated by CDK', Parameters: { classification: 'json', has_encrypted_data: false, @@ -1655,13 +1578,33 @@ test('Partition filtering on table is not defined (default behavior)', () => { }); }); +test('can specify a physical name', () => { + const app = new cdk.App(); + const stack = new cdk.Stack(app, 'Stack'); + const database = new glue.Database(stack, 'Database'); + new glue.Table(stack, 'Table', { + database, + tableName: 'my_table', + columns: [{ + name: 'col', + type: glue.Schema.STRING, + }], + dataFormat: glue.DataFormat.JSON, + }); + + Template.fromStack(stack).hasResourceProperties('AWS::Glue::Table', { + TableInput: { + Name: 'my_table', + Description: 'my_table generated by CDK', + }, + }); +}); + function createTable(props: Pick>): void { const stack = new cdk.Stack(); new glue.Table(stack, 'table', { ...props, - database: new glue.Database(stack, 'db', { - databaseName: 'database_name', - }), + database: new glue.Database(stack, 'db'), dataFormat: glue.DataFormat.JSON, }); } diff --git a/packages/@aws-cdk/aws-grafana/.eslintrc.js b/packages/@aws-cdk/aws-grafana/.eslintrc.js new file mode 100644 index 0000000000000..2658ee8727166 --- /dev/null +++ b/packages/@aws-cdk/aws-grafana/.eslintrc.js @@ -0,0 +1,3 @@ +const baseConfig = require('@aws-cdk/cdk-build-tools/config/eslintrc'); +baseConfig.parserOptions.project = __dirname + '/tsconfig.json'; +module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-grafana/.gitignore b/packages/@aws-cdk/aws-grafana/.gitignore new file mode 100644 index 0000000000000..62ebc95d75ce6 --- /dev/null +++ b/packages/@aws-cdk/aws-grafana/.gitignore @@ -0,0 +1,19 @@ +*.js +*.js.map +*.d.ts +tsconfig.json +node_modules +*.generated.ts +dist +.jsii + +.LAST_BUILD +.nyc_output +coverage +.nycrc +.LAST_PACKAGE +*.snk +nyc.config.js +!.eslintrc.js +!jest.config.js +junit.xml diff --git a/packages/@aws-cdk/aws-grafana/.npmignore b/packages/@aws-cdk/aws-grafana/.npmignore new file mode 100644 index 0000000000000..f931fede67c44 --- /dev/null +++ b/packages/@aws-cdk/aws-grafana/.npmignore @@ -0,0 +1,29 @@ +# Don't include original .ts files when doing `npm pack` +*.ts +!*.d.ts +coverage +.nyc_output +*.tgz + +dist +.LAST_PACKAGE +.LAST_BUILD +!*.js + +# Include .jsii +!.jsii + +*.snk + +*.tsbuildinfo + +tsconfig.json + +.eslintrc.js +jest.config.js + +# exclude cdk artifacts +**/cdk.out +junit.xml +test/ +!*.lit.ts diff --git a/packages/@aws-cdk/aws-grafana/LICENSE b/packages/@aws-cdk/aws-grafana/LICENSE new file mode 100644 index 0000000000000..82ad00bb02d0b --- /dev/null +++ b/packages/@aws-cdk/aws-grafana/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/@aws-cdk/aws-grafana/NOTICE b/packages/@aws-cdk/aws-grafana/NOTICE new file mode 100644 index 0000000000000..1b7adbb891265 --- /dev/null +++ b/packages/@aws-cdk/aws-grafana/NOTICE @@ -0,0 +1,2 @@ +AWS Cloud Development Kit (AWS CDK) +Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/packages/@aws-cdk/aws-grafana/README.md b/packages/@aws-cdk/aws-grafana/README.md new file mode 100644 index 0000000000000..ce3fc9bd0572a --- /dev/null +++ b/packages/@aws-cdk/aws-grafana/README.md @@ -0,0 +1,39 @@ +# AWS::Grafana Construct Library + + +--- + +![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge) + +> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use. +> +> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib + +--- + + + +This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. + +```ts nofixture +import * as grafana from '@aws-cdk/aws-grafana'; +``` + + + +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: + +- Search [Construct Hub for Grafana construct libraries](https://constructs.dev/search?q=grafana) +- 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::Grafana resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Grafana.html) directly. + + + + +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. + +For more information on the resources and properties available for this service, see the [CloudFormation documentation for AWS::Grafana](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Grafana.html). + +(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.) + + diff --git a/packages/@aws-cdk/aws-grafana/jest.config.js b/packages/@aws-cdk/aws-grafana/jest.config.js new file mode 100644 index 0000000000000..3a2fd93a1228a --- /dev/null +++ b/packages/@aws-cdk/aws-grafana/jest.config.js @@ -0,0 +1,2 @@ +const baseConfig = require('@aws-cdk/cdk-build-tools/config/jest.config'); +module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-grafana/lib/index.ts b/packages/@aws-cdk/aws-grafana/lib/index.ts new file mode 100644 index 0000000000000..b2f061015389f --- /dev/null +++ b/packages/@aws-cdk/aws-grafana/lib/index.ts @@ -0,0 +1,2 @@ +// AWS::Grafana CloudFormation Resources: +export * from './grafana.generated'; diff --git a/packages/@aws-cdk/aws-grafana/package.json b/packages/@aws-cdk/aws-grafana/package.json new file mode 100644 index 0000000000000..3c716514cb42c --- /dev/null +++ b/packages/@aws-cdk/aws-grafana/package.json @@ -0,0 +1,113 @@ +{ + "name": "@aws-cdk/aws-grafana", + "version": "0.0.0", + "description": "AWS::Grafana Construct Library", + "private": true, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "jsii": { + "outdir": "dist", + "projectReferences": true, + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Grafana", + "packageId": "Amazon.CDK.AWS.Grafana", + "signAssembly": true, + "assemblyOriginatorKeyFile": "../../key.snk", + "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/main/logo/default-256-dark.png" + }, + "java": { + "package": "software.amazon.awscdk.services.grafana", + "maven": { + "groupId": "software.amazon.awscdk", + "artifactId": "grafana" + } + }, + "python": { + "classifiers": [ + "Framework :: AWS CDK", + "Framework :: AWS CDK :: 2" + ], + "distName": "aws-cdk.aws-grafana", + "module": "aws_cdk.aws_grafana" + } + }, + "metadata": { + "jsii": { + "rosetta": { + "strict": true + } + } + } + }, + "repository": { + "type": "git", + "url": "https://github.com/aws/aws-cdk.git", + "directory": "packages/@aws-cdk/aws-grafana" + }, + "homepage": "https://github.com/aws/aws-cdk", + "scripts": { + "build": "cdk-build", + "watch": "cdk-watch", + "lint": "cdk-lint", + "test": "cdk-test", + "integ": "cdk-integ", + "pkglint": "pkglint -f", + "package": "cdk-package", + "awslint": "cdk-awslint", + "cfn2ts": "cfn2ts", + "build+test": "yarn build && yarn test", + "build+test+package": "yarn build+test && yarn package", + "compat": "cdk-compat", + "gen": "cfn2ts", + "rosetta:extract": "yarn --silent jsii-rosetta extract", + "build+extract": "yarn build && yarn rosetta:extract", + "build+test+extract": "yarn build+test && yarn rosetta:extract" + }, + "cdk-build": { + "cloudformation": "AWS::Grafana", + "jest": true, + "env": { + "AWSLINT_BASE_CONSTRUCT": "true" + } + }, + "keywords": [ + "aws", + "cdk", + "constructs", + "AWS::Grafana", + "aws-grafana" + ], + "author": { + "name": "Amazon Web Services", + "url": "https://aws.amazon.com", + "organization": true + }, + "license": "Apache-2.0", + "devDependencies": { + "@aws-cdk/assertions": "0.0.0", + "@aws-cdk/cdk-build-tools": "0.0.0", + "@aws-cdk/cfn2ts": "0.0.0", + "@aws-cdk/pkglint": "0.0.0", + "@types/jest": "^27.5.2" + }, + "dependencies": { + "@aws-cdk/core": "0.0.0", + "constructs": "^10.0.0" + }, + "peerDependencies": { + "@aws-cdk/core": "0.0.0", + "constructs": "^10.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "stability": "experimental", + "maturity": "cfn-only", + "awscdkio": { + "announce": false + }, + "publishConfig": { + "tag": "latest" + } +} diff --git a/packages/@aws-cdk/aws-grafana/rosetta/default.ts-fixture b/packages/@aws-cdk/aws-grafana/rosetta/default.ts-fixture new file mode 100644 index 0000000000000..e208762bca03c --- /dev/null +++ b/packages/@aws-cdk/aws-grafana/rosetta/default.ts-fixture @@ -0,0 +1,8 @@ +import { Construct } from 'constructs'; +import { Stack } from '@aws-cdk/core'; + +class MyStack extends Stack { + constructor(scope: Construct, id: string) { + /// here + } +} diff --git a/packages/@aws-cdk/aws-grafana/test/grafana.test.ts b/packages/@aws-cdk/aws-grafana/test/grafana.test.ts new file mode 100644 index 0000000000000..465c7bdea0693 --- /dev/null +++ b/packages/@aws-cdk/aws-grafana/test/grafana.test.ts @@ -0,0 +1,6 @@ +import '@aws-cdk/assertions'; +import {} from '../lib'; + +test('No tests are specified for this package', () => { + expect(true).toBe(true); +}); diff --git a/packages/@aws-cdk/aws-iam/README.md b/packages/@aws-cdk/aws-iam/README.md index f7e7d6e16e258..f300378bffc38 100644 --- a/packages/@aws-cdk/aws-iam/README.md +++ b/packages/@aws-cdk/aws-iam/README.md @@ -11,6 +11,21 @@ +## Security and Safety Dev Guide + +For a detailed guide on CDK security and safety please see the [CDK Security And +Safety Dev Guide](https://github.com/aws/aws-cdk/wiki/Security-And-Safety-Dev-Guide) + +The guide will cover topics like: + +* What permissions to extend to CDK deployments +* How to control the permissions of CDK deployments via IAM identities and policies +* How to use CDK to configure the IAM identities and policies of deployed applications +* Using Permissions Boundaries with CDK + +## Overview + + Define a role and add permissions to it. This will automatically create and attach an IAM policy to the role: @@ -230,6 +245,9 @@ iam.Role.customizeRoles(stack, { }); ``` +For more information on configuring permissions see the [Security And Safety Dev +Guide](https://github.com/aws/aws-cdk/wiki/Security-And-Safety-Dev-Guide) + #### Generating a permissions report It is also possible to generate the report _without_ preventing the role/policy creation. @@ -504,6 +522,9 @@ new Stack(prodStage, 'ProdStack', { }); ``` +For more information on configuring permissions see the [Security And Safety Dev +Guide](https://github.com/aws/aws-cdk/wiki/Security-And-Safety-Dev-Guide) + ### Custom Permissions Boundary It is possible to attach Permissions Boundaries to all Roles created in a construct diff --git a/packages/@aws-cdk/aws-iam/lib/group.ts b/packages/@aws-cdk/aws-iam/lib/group.ts index ea8784524c5c1..0b81c6c572158 100644 --- a/packages/@aws-cdk/aws-iam/lib/group.ts +++ b/packages/@aws-cdk/aws-iam/lib/group.ts @@ -6,8 +6,8 @@ import { IManagedPolicy } from './managed-policy'; import { Policy } from './policy'; import { PolicyStatement } from './policy-statement'; import { AddToPrincipalPolicyResult, ArnPrincipal, IPrincipal, PrincipalPolicyFragment } from './principals'; +import { AttachedPolicies } from './private/util'; import { IUser } from './user'; -import { AttachedPolicies } from './util'; /** * Represents an IAM Group. diff --git a/packages/@aws-cdk/aws-iam/lib/index.ts b/packages/@aws-cdk/aws-iam/lib/index.ts index 7b13245b49f39..bf402b8037830 100644 --- a/packages/@aws-cdk/aws-iam/lib/index.ts +++ b/packages/@aws-cdk/aws-iam/lib/index.ts @@ -14,6 +14,7 @@ export * from './oidc-provider'; export * from './permissions-boundary'; export * from './saml-provider'; export * from './access-key'; +export * from './utils'; // AWS::IAM CloudFormation Resources: export * from './iam.generated'; diff --git a/packages/@aws-cdk/aws-iam/lib/managed-policy.ts b/packages/@aws-cdk/aws-iam/lib/managed-policy.ts index 4aab13017d20b..0b6285cd56323 100644 --- a/packages/@aws-cdk/aws-iam/lib/managed-policy.ts +++ b/packages/@aws-cdk/aws-iam/lib/managed-policy.ts @@ -5,9 +5,9 @@ import { IGroup } from './group'; import { CfnManagedPolicy } from './iam.generated'; import { PolicyDocument } from './policy-document'; import { PolicyStatement } from './policy-statement'; +import { undefinedIfEmpty } from './private/util'; import { IRole } from './role'; import { IUser } from './user'; -import { undefinedIfEmpty } from './util'; /** * A managed policy diff --git a/packages/@aws-cdk/aws-iam/lib/policy-statement.ts b/packages/@aws-cdk/aws-iam/lib/policy-statement.ts index 53eeede5a0e9b..ebba378b92e3a 100644 --- a/packages/@aws-cdk/aws-iam/lib/policy-statement.ts +++ b/packages/@aws-cdk/aws-iam/lib/policy-statement.ts @@ -6,7 +6,7 @@ import { FederatedPrincipal, IPrincipal, PrincipalBase, PrincipalPolicyFragment, ServicePrincipal, ServicePrincipalOpts, validateConditionObject, } from './principals'; import { normalizeStatement } from './private/postprocess-policy-document'; -import { LITERAL_STRING_KEY, mergePrincipal, sum } from './util'; +import { LITERAL_STRING_KEY, mergePrincipal, sum } from './private/util'; const ensureArrayOrUndefined = (field: any) => { if (field === undefined) { diff --git a/packages/@aws-cdk/aws-iam/lib/policy.ts b/packages/@aws-cdk/aws-iam/lib/policy.ts index 2de04f0990b73..f46afbc151ec3 100644 --- a/packages/@aws-cdk/aws-iam/lib/policy.ts +++ b/packages/@aws-cdk/aws-iam/lib/policy.ts @@ -4,9 +4,9 @@ import { IGroup } from './group'; import { CfnPolicy } from './iam.generated'; import { PolicyDocument } from './policy-document'; import { PolicyStatement } from './policy-statement'; +import { generatePolicyName, undefinedIfEmpty } from './private/util'; import { IRole } from './role'; import { IUser } from './user'; -import { generatePolicyName, undefinedIfEmpty } from './util'; /** * Represents an IAM Policy diff --git a/packages/@aws-cdk/aws-iam/lib/principals.ts b/packages/@aws-cdk/aws-iam/lib/principals.ts index d782355902d04..bfdc8a2369644 100644 --- a/packages/@aws-cdk/aws-iam/lib/principals.ts +++ b/packages/@aws-cdk/aws-iam/lib/principals.ts @@ -6,8 +6,8 @@ import { IOpenIdConnectProvider } from './oidc-provider'; import { PolicyDocument } from './policy-document'; import { Condition, Conditions, PolicyStatement } from './policy-statement'; import { defaultAddPrincipalToAssumeRole } from './private/assume-role-policy'; +import { LITERAL_STRING_KEY, mergePrincipal } from './private/util'; import { ISamlProvider } from './saml-provider'; -import { LITERAL_STRING_KEY, mergePrincipal } from './util'; /** * Any object that has an associated principal that a permission can be granted to diff --git a/packages/@aws-cdk/aws-iam/lib/private/util.ts b/packages/@aws-cdk/aws-iam/lib/private/util.ts new file mode 100644 index 0000000000000..aa4bb0a1288a4 --- /dev/null +++ b/packages/@aws-cdk/aws-iam/lib/private/util.ts @@ -0,0 +1,143 @@ +import { captureStackTrace, DefaultTokenResolver, IPostProcessor, IResolvable, IResolveContext, Lazy, StringConcat, Token, Tokenization } from '@aws-cdk/core'; +import { IConstruct } from 'constructs'; +import { IPolicy } from '../policy'; + +const MAX_POLICY_NAME_LEN = 128; + +export const LITERAL_STRING_KEY = 'LiteralString'; + +export function undefinedIfEmpty(f: () => string[]): string[] { + return Lazy.list({ + produce: () => { + const array = f(); + return (array && array.length > 0) ? array : undefined; + }, + }); +} + +/** + * Used to generate a unique policy name based on the policy resource construct. + * The logical ID of the resource is a great candidate as long as it doesn't exceed + * 128 characters, so we take the last 128 characters (in order to make sure the hash + * is there). + */ +export function generatePolicyName(scope: IConstruct, logicalId: string): string { + // as logicalId is itself a Token, resolve it first + const resolvedLogicalId = Tokenization.resolve(logicalId, { + scope, + resolver: new DefaultTokenResolver(new StringConcat()), + }); + return lastNCharacters(resolvedLogicalId, MAX_POLICY_NAME_LEN); +} + +/** + * Returns a string composed of the last n characters of str. + * If str is shorter than n, returns str. + * + * @param str the string to return the last n characters of + * @param n how many characters to return + */ +function lastNCharacters(str: string, n: number) { + const startIndex = Math.max(str.length - n, 0); + return str.substring(startIndex, str.length); +} + +/** + * Helper class that maintains the set of attached policies for a principal. + */ +export class AttachedPolicies { + private policies = new Array(); + + /** + * Adds a policy to the list of attached policies. + * + * If this policy is already, attached, returns false. + * If there is another policy attached with the same name, throws an exception. + */ + public attach(policy: IPolicy) { + if (this.policies.find(p => p === policy)) { + return; // already attached + } + + if (this.policies.find(p => p.policyName === policy.policyName)) { + throw new Error(`A policy named "${policy.policyName}" is already attached`); + } + + this.policies.push(policy); + } +} + +/** + * Merge two dictionaries that represent IAM principals + * + * Does an in-place merge. + */ +export function mergePrincipal(target: { [key: string]: string[] }, source: { [key: string]: string[] }) { + // If one represents a literal string, the other one must be empty + const sourceKeys = Object.keys(source); + const targetKeys = Object.keys(target); + + if ((LITERAL_STRING_KEY in source && targetKeys.some(k => k !== LITERAL_STRING_KEY)) || + (LITERAL_STRING_KEY in target && sourceKeys.some(k => k !== LITERAL_STRING_KEY))) { + throw new Error(`Cannot merge principals ${JSON.stringify(target)} and ${JSON.stringify(source)}; if one uses a literal principal string the other one must be empty`); + } + + for (const key of sourceKeys) { + target[key] = target[key] ?? []; + + let value = source[key]; + if (!Array.isArray(value)) { + value = [value]; + } + + target[key].push(...value); + } + + return target; +} + +/** + * Lazy string set token that dedupes entries + * + * Needs to operate post-resolve, because the inputs could be + * `[ '${Token[TOKEN.9]}', '${Token[TOKEN.10]}', '${Token[TOKEN.20]}' ]`, which + * still all resolve to the same string value. + * + * Needs to JSON.stringify() results because strings could resolve to literal + * strings but could also resolve to `{ Fn::Join: [...] }`. + */ +export class UniqueStringSet implements IResolvable, IPostProcessor { + public static from(fn: () => string[]) { + return Token.asList(new UniqueStringSet(fn)); + } + + public readonly creationStack: string[]; + + private constructor(private readonly fn: () => string[]) { + this.creationStack = captureStackTrace(); + } + + public resolve(context: IResolveContext) { + context.registerPostProcessor(this); + return this.fn(); + } + + public postProcess(input: any, _context: IResolveContext) { + if (!Array.isArray(input)) { return input; } + if (input.length === 0) { return undefined; } + + const uniq: Record = {}; + for (const el of input) { + uniq[JSON.stringify(el)] = el; + } + return Object.values(uniq); + } + + public toString(): string { + return Token.asString(this); + } +} + +export function sum(xs: number[]) { + return xs.reduce((a, b) => a + b, 0); +} diff --git a/packages/@aws-cdk/aws-iam/lib/role.ts b/packages/@aws-cdk/aws-iam/lib/role.ts index c2c0f4c68598e..ff83e13e611ad 100644 --- a/packages/@aws-cdk/aws-iam/lib/role.ts +++ b/packages/@aws-cdk/aws-iam/lib/role.ts @@ -14,7 +14,7 @@ import { ImmutableRole } from './private/immutable-role'; import { ImportedRole } from './private/imported-role'; import { MutatingPolicyDocumentAdapter } from './private/policydoc-adapter'; import { PrecreatedRole } from './private/precreated-role'; -import { AttachedPolicies, UniqueStringSet } from './util'; +import { AttachedPolicies, UniqueStringSet } from './private/util'; const MAX_INLINE_SIZE = 10000; const MAX_MANAGEDPOL_SIZE = 6000; diff --git a/packages/@aws-cdk/aws-iam/lib/user.ts b/packages/@aws-cdk/aws-iam/lib/user.ts index ece9c206a8c56..7909fd3d92404 100644 --- a/packages/@aws-cdk/aws-iam/lib/user.ts +++ b/packages/@aws-cdk/aws-iam/lib/user.ts @@ -7,7 +7,7 @@ import { IManagedPolicy } from './managed-policy'; import { Policy } from './policy'; import { PolicyStatement } from './policy-statement'; import { AddToPrincipalPolicyResult, ArnPrincipal, IPrincipal, PrincipalPolicyFragment } from './principals'; -import { AttachedPolicies, undefinedIfEmpty } from './util'; +import { AttachedPolicies, undefinedIfEmpty } from './private/util'; /** * Represents an IAM user diff --git a/packages/@aws-cdk/aws-iam/lib/utils.ts b/packages/@aws-cdk/aws-iam/lib/utils.ts new file mode 100644 index 0000000000000..45ae5754c8fdc --- /dev/null +++ b/packages/@aws-cdk/aws-iam/lib/utils.ts @@ -0,0 +1,38 @@ +import { Resource } from '@aws-cdk/core'; +import { Construct, IConstruct } from 'constructs'; +import { IPrincipal } from './principals'; + +/** + * Determines whether the given Principal is a newly created resource managed by the CDK, + * or if it's a referenced existing resource. + * + * @param principal the Principal to check + * @returns true if the Principal is a newly created resource, false otherwise. + * Additionally, the type of the principal will now also be IConstruct + * (because a newly created resource must be a construct) + */ +export function principalIsOwnedResource(principal: IPrincipal): principal is IPrincipal & IConstruct { + // a newly created resource will for sure be a construct + if (!isConstruct(principal)) { + return false; + } + + return Resource.isOwnedResource(principal); +} + +/** + * Whether the given object is a Construct + * + * Normally we'd do `x instanceof Construct`, but that is not robust against + * multiple copies of the `constructs` library on disk. This can happen + * when upgrading and downgrading between v2 and v1, and in the use of CDK + * Pipelines is going to an error that says "Can't use Pipeline/Pipeline/Role in + * a cross-environment fashion", which is very confusing. + */ +function isConstruct(x: any): x is IConstruct { + const sym = Symbol.for('constructs.Construct.node'); + return (typeof x === 'object' && x && + (x instanceof Construct // happy fast case + || !!(x as any).node // constructs v10 + || !!(x as any)[sym])); // constructs v3 +} diff --git a/packages/@aws-cdk/aws-iam/package.json b/packages/@aws-cdk/aws-iam/package.json index faef320977602..86f81c22b754a 100644 --- a/packages/@aws-cdk/aws-iam/package.json +++ b/packages/@aws-cdk/aws-iam/package.json @@ -86,7 +86,7 @@ "@aws-cdk/integ-tests": "0.0.0", "@aws-cdk/cfn2ts": "0.0.0", "@aws-cdk/pkglint": "0.0.0", - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/jest": "^27.5.2", "@types/sinon": "^9.0.11", "jest": "^27.5.1", diff --git a/packages/@aws-cdk/aws-kms/lib/key.ts b/packages/@aws-cdk/aws-kms/lib/key.ts index 0dc523fb73c37..2eb86115dd534 100644 --- a/packages/@aws-cdk/aws-kms/lib/key.ts +++ b/packages/@aws-cdk/aws-kms/lib/key.ts @@ -203,12 +203,9 @@ abstract class KeyBase extends Resource implements IKey { */ private granteeStackDependsOnKeyStack(grantee: iam.IGrantable): string | undefined { const grantPrincipal = grantee.grantPrincipal; - if (!isConstruct(grantPrincipal)) { - return undefined; - } // this logic should only apply to newly created // (= not imported) resources - if (!Resource.isOwnedResource(grantPrincipal)) { + if (!iam.principalIsOwnedResource(grantPrincipal)) { return undefined; } const keyStack = Stack.of(this); @@ -223,20 +220,20 @@ abstract class KeyBase extends Resource implements IKey { } private isGranteeFromAnotherRegion(grantee: iam.IGrantable): boolean { - if (!isConstruct(grantee)) { + if (!iam.principalIsOwnedResource(grantee.grantPrincipal)) { return false; } const bucketStack = Stack.of(this); - const identityStack = Stack.of(grantee); + const identityStack = Stack.of(grantee.grantPrincipal); return bucketStack.region !== identityStack.region; } private isGranteeFromAnotherAccount(grantee: iam.IGrantable): boolean { - if (!isConstruct(grantee)) { + if (!iam.principalIsOwnedResource(grantee.grantPrincipal)) { return false; } const bucketStack = Stack.of(this); - const identityStack = Stack.of(grantee); + const identityStack = Stack.of(grantee.grantPrincipal); return bucketStack.account !== identityStack.account; } } @@ -725,20 +722,3 @@ export class Key extends KeyBase { })); } } - -/** - * Whether the given object is a Construct - * - * Normally we'd do `x instanceof Construct`, but that is not robust against - * multiple copies of the `constructs` library on disk. This can happen - * when upgrading and downgrading between v2 and v1, and in the use of CDK - * Pipelines is going to an error that says "Can't use Pipeline/Pipeline/Role in - * a cross-environment fashion", which is very confusing. - */ -function isConstruct(x: any): x is Construct { - const sym = Symbol.for('constructs.Construct.node'); - return (typeof x === 'object' && x && - (x instanceof Construct // happy fast case - || !!(x as any).node // constructs v10 - || !!(x as any)[sym])); // constructs v3 -} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-lambda-event-sources/lib/kafka.ts b/packages/@aws-cdk/aws-lambda-event-sources/lib/kafka.ts index 975cf799c7220..de5e05af66213 100644 --- a/packages/@aws-cdk/aws-lambda-event-sources/lib/kafka.ts +++ b/packages/@aws-cdk/aws-lambda-event-sources/lib/kafka.ts @@ -1,9 +1,9 @@ -import { md5hash } from '@aws-cdk/core/lib/helpers-internal'; import { ISecurityGroup, IVpc, SubnetSelection } from '@aws-cdk/aws-ec2'; import * as iam from '@aws-cdk/aws-iam'; import * as lambda from '@aws-cdk/aws-lambda'; import * as secretsmanager from '@aws-cdk/aws-secretsmanager'; import { Stack, Names } from '@aws-cdk/core'; +import { md5hash } from '@aws-cdk/core/lib/helpers-internal'; import { Construct } from 'constructs'; import { StreamEventSource, BaseStreamEventSourceProps } from './stream'; diff --git a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/__entrypoint__.js b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/__entrypoint__.js new file mode 100644 index 0000000000000..1e3a3093c1706 --- /dev/null +++ b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/__entrypoint__.js @@ -0,0 +1,144 @@ +"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': responseBody.length }, + }; + 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLWVudHJ5cG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJub2RlanMtZW50cnlwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsMkJBQTJCO0FBRTNCLGlCQUFpQjtBQUNKLFFBQUEsUUFBUSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsR0FBRyxFQUFFLFVBQVU7SUFDZixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGdCQUFnQixFQUFFLFNBQVM7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sZ0NBQWdDLEdBQUcsd0RBQXdELENBQUM7QUFDbEcsTUFBTSwwQkFBMEIsR0FBRyw4REFBOEQsQ0FBQztBQVczRixLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWtELEVBQUUsT0FBMEI7SUFDMUcsTUFBTSxjQUFjLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDeEQsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0QsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxhQUFhO0lBQ2IsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssZ0NBQWdDLEVBQUU7UUFDbkcsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUN0RSxNQUFNLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTztLQUNSO0lBRUQsSUFBSTtRQUNGLHlFQUF5RTtRQUN6RSxpRUFBaUU7UUFDakUsd0NBQXdDO1FBQ3hDLGlFQUFpRTtRQUNqRSxNQUFNLFdBQVcsR0FBWSxPQUFPLENBQUMsZ0JBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUQsdURBQXVEO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEQsMkJBQTJCO1FBQzNCLE1BQU0sY0FBYyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUNoRDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsTUFBTSxJQUFJLEdBQWE7WUFDckIsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLGdCQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLHlFQUF5RTtZQUN6RSxtRUFBbUU7WUFDbkUsd0VBQXdFO1lBQ3hFLHFFQUFxRTtZQUNyRSxnQ0FBZ0M7WUFDaEMsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtnQkFDbEMsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsNEdBQTRHLENBQUMsQ0FBQztnQkFDM0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdDQUFnQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNMLGtFQUFrRTtnQkFDbEUsNkRBQTZEO2dCQUM3RCxnQkFBUSxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDcEc7U0FDRjtRQUVELG1FQUFtRTtRQUNuRSxNQUFNLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDdEM7QUFDSCxDQUFDO0FBbkRELDBCQW1EQztBQUVELFNBQVMsY0FBYyxDQUNyQixVQUF5RixFQUN6RixrQkFBMEMsRUFBRztJQUU3QyxzRUFBc0U7SUFDdEUsdUJBQXVCO0lBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO0lBRXZILGtFQUFrRTtJQUNsRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLGtCQUFrQixLQUFLLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtRQUMvRixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxVQUFVLENBQUMsa0JBQWtCLFNBQVMsZUFBZSxDQUFDLGtCQUFrQixtQkFBbUIsQ0FBQyxDQUFDO0tBQ3RLO0lBRUQsMERBQTBEO0lBQzFELE9BQU87UUFDTCxHQUFHLFVBQVU7UUFDYixHQUFHLGVBQWU7UUFDbEIsa0JBQWtCLEVBQUUsa0JBQWtCO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE0QixFQUFFLEtBQWU7SUFDekUsTUFBTSxJQUFJLEdBQW1EO1FBQzNELE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTTtRQUM5QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSwwQkFBMEI7UUFDMUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtRQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0tBQ2pCLENBQUM7SUFFRixnQkFBUSxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHO1FBQ1YsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1FBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRTtLQUN2RSxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUc7UUFDbkIsUUFBUSxFQUFFLENBQUM7UUFDWCxLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUM7SUFDRixNQUFNLFdBQVcsQ0FBQyxZQUFZLEVBQUUsZ0JBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxPQUE2QixFQUFFLFlBQW9CO0lBQ3ZGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNmO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxHQUFHLE1BQWE7SUFDL0Msc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQVNELFNBQWdCLFdBQVcsQ0FBMEIsT0FBcUIsRUFBRSxFQUE0QjtJQUN0RyxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUssRUFBRSxFQUFFO1FBQ3hCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN2QixPQUFPLElBQUksRUFBRTtZQUNYLElBQUk7Z0JBQ0YsT0FBTyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ3hCO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsSUFBSSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ25CLE1BQU0sQ0FBQyxDQUFDO2lCQUNUO2dCQUNELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDVDtTQUNGO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQWhCRCxrQ0FnQkM7QUFFRCxLQUFLLFVBQVUsS0FBSyxDQUFDLEVBQVU7SUFDN0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcblxuLy8gZm9yIHVuaXQgdGVzdHNcbmV4cG9ydCBjb25zdCBleHRlcm5hbCA9IHtcbiAgc2VuZEh0dHBSZXF1ZXN0OiBkZWZhdWx0U2VuZEh0dHBSZXF1ZXN0LFxuICBsb2c6IGRlZmF1bHRMb2csXG4gIGluY2x1ZGVTdGFja1RyYWNlczogdHJ1ZSxcbiAgdXNlckhhbmRsZXJJbmRleDogJy4vaW5kZXgnLFxufTtcblxuY29uc3QgQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVIgPSAnQVdTQ0RLOjpDdXN0b21SZXNvdXJjZVByb3ZpZGVyRnJhbWV3b3JrOjpDUkVBVEVfRkFJTEVEJztcbmNvbnN0IE1JU1NJTkdfUEhZU0lDQUxfSURfTUFSS0VSID0gJ0FXU0NESzo6Q3VzdG9tUmVzb3VyY2VQcm92aWRlckZyYW1ld29yazo6TUlTU0lOR19QSFlTSUNBTF9JRCc7XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlID0gQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCAmIEhhbmRsZXJSZXNwb25zZTtcbmV4cG9ydCB0eXBlIEhhbmRsZXIgPSAoZXZlbnQ6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIGNvbnRleHQ6IEFXU0xhbWJkYS5Db250ZXh0KSA9PiBQcm9taXNlPEhhbmRsZXJSZXNwb25zZSB8IHZvaWQ+O1xuZXhwb3J0IHR5cGUgSGFuZGxlclJlc3BvbnNlID0gdW5kZWZpbmVkIHwge1xuICBEYXRhPzogYW55O1xuICBQaHlzaWNhbFJlc291cmNlSWQ/OiBzdHJpbmc7XG4gIFJlYXNvbj86IHN0cmluZztcbiAgTm9FY2hvPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50LCBjb250ZXh0OiBBV1NMYW1iZGEuQ29udGV4dCkge1xuICBjb25zdCBzYW5pdGl6ZWRFdmVudCA9IHsgLi4uZXZlbnQsIFJlc3BvbnNlVVJMOiAnLi4uJyB9O1xuICBleHRlcm5hbC5sb2coSlNPTi5zdHJpbmdpZnkoc2FuaXRpemVkRXZlbnQsIHVuZGVmaW5lZCwgMikpO1xuXG4gIC8vIGlnbm9yZSBERUxFVEUgZXZlbnQgd2hlbiB0aGUgcGh5c2ljYWwgcmVzb3VyY2UgSUQgaXMgdGhlIG1hcmtlciB0aGF0XG4gIC8vIGluZGljYXRlcyB0aGF0IHRoaXMgREVMRVRFIGlzIGEgc3Vic2VxdWVudCBERUxFVEUgdG8gYSBmYWlsZWQgQ1JFQVRFXG4gIC8vIG9wZXJhdGlvbi5cbiAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSAnRGVsZXRlJyAmJiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgPT09IENSRUFURV9GQUlMRURfUEhZU0lDQUxfSURfTUFSS0VSKSB7XG4gICAgZXh0ZXJuYWwubG9nKCdpZ25vcmluZyBERUxFVEUgZXZlbnQgY2F1c2VkIGJ5IGEgZmFpbGVkIENSRUFURSBldmVudCcpO1xuICAgIGF3YWl0IHN1Ym1pdFJlc3BvbnNlKCdTVUNDRVNTJywgZXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gaW52b2tlIHRoZSB1c2VyIGhhbmRsZXIuIHRoaXMgaXMgaW50ZW50aW9uYWxseSBpbnNpZGUgdGhlIHRyeS1jYXRjaCB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IGlmIHRoZXJlIGlzIGFuIGVycm9yIGl0J3MgcmVwb3J0ZWQgYXMgYSBmYWlsdXJlIHRvXG4gICAgLy8gY2xvdWRmb3JtYXRpb24gKG90aGVyd2lzZSBjZm4gd2FpdHMpLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgY29uc3QgdXNlckhhbmRsZXI6IEhhbmRsZXIgPSByZXF1aXJlKGV4dGVybmFsLnVzZXJIYW5kbGVySW5kZXgpLmhhbmRsZXI7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXNlckhhbmRsZXIoc2FuaXRpemVkRXZlbnQsIGNvbnRleHQpO1xuXG4gICAgLy8gdmFsaWRhdGUgdXNlciByZXNwb25zZSBhbmQgY3JlYXRlIHRoZSBjb21iaW5lZCBldmVudFxuICAgIGNvbnN0IHJlc3BvbnNlRXZlbnQgPSByZW5kZXJSZXNwb25zZShldmVudCwgcmVzdWx0KTtcblxuICAgIC8vIHN1Ym1pdCB0byBjZm4gYXMgc3VjY2Vzc1xuICAgIGF3YWl0IHN1Ym1pdFJlc3BvbnNlKCdTVUNDRVNTJywgcmVzcG9uc2VFdmVudCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCByZXNwOiBSZXNwb25zZSA9IHtcbiAgICAgIC4uLmV2ZW50LFxuICAgICAgUmVhc29uOiBleHRlcm5hbC5pbmNsdWRlU3RhY2tUcmFjZXMgPyBlLnN0YWNrIDogZS5tZXNzYWdlLFxuICAgIH07XG5cbiAgICBpZiAoIXJlc3AuUGh5c2ljYWxSZXNvdXJjZUlkKSB7XG4gICAgICAvLyBzcGVjaWFsIGNhc2U6IGlmIENSRUFURSBmYWlscywgd2hpY2ggdXN1YWxseSBpbXBsaWVzLCB3ZSB1c3VhbGx5IGRvbid0XG4gICAgICAvLyBoYXZlIGEgcGh5c2ljYWwgcmVzb3VyY2UgaWQuIGluIHRoaXMgY2FzZSwgdGhlIHN1YnNlcXVlbnQgREVMRVRFXG4gICAgICAvLyBvcGVyYXRpb24gZG9lcyBub3QgaGF2ZSBhbnkgbWVhbmluZywgYW5kIHdpbGwgbGlrZWx5IGZhaWwgYXMgd2VsbC4gdG9cbiAgICAgIC8vIGFkZHJlc3MgdGhpcywgd2UgdXNlIGEgbWFya2VyIHNvIHRoZSBwcm92aWRlciBmcmFtZXdvcmsgY2FuIHNpbXBseVxuICAgICAgLy8gaWdub3JlIHRoZSBzdWJzZXF1ZW50IERFTEVURS5cbiAgICAgIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gJ0NyZWF0ZScpIHtcbiAgICAgICAgZXh0ZXJuYWwubG9nKCdDUkVBVEUgZmFpbGVkLCByZXNwb25kaW5nIHdpdGggYSBtYXJrZXIgcGh5c2ljYWwgcmVzb3VyY2UgaWQgc28gdGhhdCB0aGUgc3Vic2VxdWVudCBERUxFVEUgd2lsbCBiZSBpZ25vcmVkJyk7XG4gICAgICAgIHJlc3AuUGh5c2ljYWxSZXNvdXJjZUlkID0gQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UsIGlmIFBoeXNpY2FsUmVzb3VyY2VJZCBpcyBub3Qgc3BlY2lmaWVkLCBzb21ldGhpbmcgaXNcbiAgICAgICAgLy8gdGVycmlibHkgd3JvbmcgYmVjYXVzZSBhbGwgb3RoZXIgZXZlbnRzIHNob3VsZCBoYXZlIGFuIElELlxuICAgICAgICBleHRlcm5hbC5sb2coYEVSUk9SOiBNYWxmb3JtZWQgZXZlbnQuIFwiUGh5c2ljYWxSZXNvdXJjZUlkXCIgaXMgcmVxdWlyZWQ6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQpfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMgaXMgYW4gYWN0dWFsIGVycm9yLCBmYWlsIHRoZSBhY3Rpdml0eSBhbHRvZ2V0aGVyIGFuZCBleGlzdC5cbiAgICBhd2FpdCBzdWJtaXRSZXNwb25zZSgnRkFJTEVEJywgcmVzcCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyUmVzcG9uc2UoXG4gIGNmblJlcXVlc3Q6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQgJiB7IFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZyB9LFxuICBoYW5kbGVyUmVzcG9uc2U6IHZvaWQgfCBIYW5kbGVyUmVzcG9uc2UgPSB7IH0pOiBSZXNwb25zZSB7XG5cbiAgLy8gaWYgcGh5c2ljYWwgSUQgaXMgbm90IHJldHVybmVkLCB3ZSBoYXZlIHNvbWUgZGVmYXVsdHMgZm9yIHlvdSBiYXNlZFxuICAvLyBvbiB0aGUgcmVxdWVzdCB0eXBlLlxuICBjb25zdCBwaHlzaWNhbFJlc291cmNlSWQgPSBoYW5kbGVyUmVzcG9uc2UuUGh5c2ljYWxSZXNvdXJjZUlkID8/IGNmblJlcXVlc3QuUGh5c2ljYWxSZXNvdXJjZUlkID8/IGNmblJlcXVlc3QuUmVxdWVzdElkO1xuXG4gIC8vIGlmIHdlIGFyZSBpbiBERUxFVEUgYW5kIHBoeXNpY2FsIElEIHdhcyBjaGFuZ2VkLCBpdCdzIGFuIGVycm9yLlxuICBpZiAoY2ZuUmVxdWVzdC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScgJiYgcGh5c2ljYWxSZXNvdXJjZUlkICE9PSBjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgREVMRVRFOiBjYW5ub3QgY2hhbmdlIHRoZSBwaHlzaWNhbCByZXNvdXJjZSBJRCBmcm9tIFwiJHtjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZH1cIiB0byBcIiR7aGFuZGxlclJlc3BvbnNlLlBoeXNpY2FsUmVzb3VyY2VJZH1cIiBkdXJpbmcgZGVsZXRpb25gKTtcbiAgfVxuXG4gIC8vIG1lcmdlIHJlcXVlc3QgZXZlbnQgYW5kIHJlc3VsdCBldmVudCAocmVzdWx0IHByZXZhaWxzKS5cbiAgcmV0dXJuIHtcbiAgICAuLi5jZm5SZXF1ZXN0LFxuICAgIC4uLmhhbmRsZXJSZXNwb25zZSxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3VibWl0UmVzcG9uc2Uoc3RhdHVzOiAnU1VDQ0VTUycgfCAnRkFJTEVEJywgZXZlbnQ6IFJlc3BvbnNlKSB7XG4gIGNvbnN0IGpzb246IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2UgPSB7XG4gICAgU3RhdHVzOiBzdGF0dXMsXG4gICAgUmVhc29uOiBldmVudC5SZWFzb24gPz8gc3RhdHVzLFxuICAgIFN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gICAgUmVxdWVzdElkOiBldmVudC5SZXF1ZXN0SWQsXG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgfHwgTUlTU0lOR19QSFlTSUNBTF9JRF9NQVJLRVIsXG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIE5vRWNobzogZXZlbnQuTm9FY2hvLFxuICAgIERhdGE6IGV2ZW50LkRhdGEsXG4gIH07XG5cbiAgZXh0ZXJuYWwubG9nKCdzdWJtaXQgcmVzcG9uc2UgdG8gY2xvdWRmb3JtYXRpb24nLCBqc29uKTtcblxuICBjb25zdCByZXNwb25zZUJvZHkgPSBKU09OLnN0cmluZ2lmeShqc29uKTtcbiAgY29uc3QgcGFyc2VkVXJsID0gdXJsLnBhcnNlKGV2ZW50LlJlc3BvbnNlVVJMKTtcbiAgY29uc3QgcmVxID0ge1xuICAgIGhvc3RuYW1lOiBwYXJzZWRVcmwuaG9zdG5hbWUsXG4gICAgcGF0aDogcGFyc2VkVXJsLnBhdGgsXG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICBoZWFkZXJzOiB7ICdjb250ZW50LXR5cGUnOiAnJywgJ2NvbnRlbnQtbGVuZ3RoJzogcmVzcG9uc2VCb2R5Lmxlbmd0aCB9LFxuICB9O1xuXG4gIGNvbnN0IHJldHJ5T3B0aW9ucyA9IHtcbiAgICBhdHRlbXB0czogNSxcbiAgICBzbGVlcDogMTAwMCxcbiAgfTtcbiAgYXdhaXQgd2l0aFJldHJpZXMocmV0cnlPcHRpb25zLCBleHRlcm5hbC5zZW5kSHR0cFJlcXVlc3QpKHJlcSwgcmVzcG9uc2VCb2R5KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdFNlbmRIdHRwUmVxdWVzdChvcHRpb25zOiBodHRwcy5SZXF1ZXN0T3B0aW9ucywgcmVzcG9uc2VCb2R5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucywgXyA9PiByZXNvbHZlKCkpO1xuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgcmVxdWVzdC53cml0ZShyZXNwb25zZUJvZHkpO1xuICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdExvZyhmbXQ6IHN0cmluZywgLi4ucGFyYW1zOiBhbnlbXSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhmbXQsIC4uLnBhcmFtcyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zIHtcbiAgLyoqIEhvdyBtYW55IHJldHJpZXMgKHdpbGwgYXQgbGVhc3QgdHJ5IG9uY2UpICovXG4gIHJlYWRvbmx5IGF0dGVtcHRzOiBudW1iZXI7XG4gIC8qKiBTbGVlcCBiYXNlLCBpbiBtcyAqL1xuICByZWFkb25seSBzbGVlcDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJldHJpZXM8QSBleHRlbmRzIEFycmF5PGFueT4sIEI+KG9wdGlvbnM6IFJldHJ5T3B0aW9ucywgZm46ICguLi54czogQSkgPT4gUHJvbWlzZTxCPik6ICguLi54czogQSkgPT4gUHJvbWlzZTxCPiB7XG4gIHJldHVybiBhc3luYyAoLi4ueHM6IEEpID0+IHtcbiAgICBsZXQgYXR0ZW1wdHMgPSBvcHRpb25zLmF0dGVtcHRzO1xuICAgIGxldCBtcyA9IG9wdGlvbnMuc2xlZXA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbiguLi54cyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChhdHRlbXB0cy0tIDw9IDApIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1zKSk7XG4gICAgICAgIG1zICo9IDI7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2spID0+IHNldFRpbWVvdXQob2ssIG1zKSk7XG59Il19 \ No newline at end of file diff --git a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/index.js b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/index.js new file mode 100644 index 0000000000000..7ce4156d4ba41 --- /dev/null +++ b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/index.js @@ -0,0 +1,78 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.handler = void 0; +// eslint-disable-next-line import/no-extraneous-dependencies +const aws_sdk_1 = require("aws-sdk"); +const AUTO_DELETE_OBJECTS_TAG = 'aws-cdk:auto-delete-objects'; +const s3 = new aws_sdk_1.S3(); +async function handler(event) { + switch (event.RequestType) { + case 'Create': + return; + case 'Update': + return onUpdate(event); + case 'Delete': + return onDelete(event.ResourceProperties?.BucketName); + } +} +exports.handler = handler; +async function onUpdate(event) { + const updateEvent = event; + const oldBucketName = updateEvent.OldResourceProperties?.BucketName; + const newBucketName = updateEvent.ResourceProperties?.BucketName; + const bucketNameHasChanged = newBucketName != null && oldBucketName != null && newBucketName !== oldBucketName; + /* If the name of the bucket has changed, CloudFormation will try to delete the bucket + and create a new one with the new name. So we have to delete the contents of the + bucket so that this operation does not fail. */ + if (bucketNameHasChanged) { + return onDelete(oldBucketName); + } +} +/** + * Recursively delete all items in the bucket + * + * @param bucketName the bucket name + */ +async function emptyBucket(bucketName) { + const listedObjects = await s3.listObjectVersions({ Bucket: bucketName }).promise(); + const contents = [...listedObjects.Versions ?? [], ...listedObjects.DeleteMarkers ?? []]; + if (contents.length === 0) { + return; + } + const records = contents.map((record) => ({ Key: record.Key, VersionId: record.VersionId })); + await s3.deleteObjects({ Bucket: bucketName, Delete: { Objects: records } }).promise(); + if (listedObjects?.IsTruncated) { + await emptyBucket(bucketName); + } +} +async function onDelete(bucketName) { + if (!bucketName) { + throw new Error('No BucketName was provided.'); + } + if (!await isBucketTaggedForDeletion(bucketName)) { + process.stdout.write(`Bucket does not have '${AUTO_DELETE_OBJECTS_TAG}' tag, skipping cleaning.\n`); + return; + } + try { + await emptyBucket(bucketName); + } + catch (e) { + if (e.code !== 'NoSuchBucket') { + throw e; + } + // Bucket doesn't exist. Ignoring + } +} +/** + * The bucket will only be tagged for deletion if it's being deleted in the same + * deployment as this Custom Resource. + * + * If the Custom Resource is every deleted before the bucket, it must be because + * `autoDeleteObjects` has been switched to false, in which case the tag would have + * been removed before we get to this Delete event. + */ +async function isBucketTaggedForDeletion(bucketName) { + const response = await s3.getBucketTagging({ Bucket: bucketName }).promise(); + return response.TagSet.some(tag => tag.Key === AUTO_DELETE_OBJECTS_TAG && tag.Value === 'true'); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2REFBNkQ7QUFDN0QscUNBQTZCO0FBRTdCLE1BQU0sdUJBQXVCLEdBQUcsNkJBQTZCLENBQUM7QUFFOUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxZQUFFLEVBQUUsQ0FBQztBQUViLEtBQUssVUFBVSxPQUFPLENBQUMsS0FBa0Q7SUFDOUUsUUFBUSxLQUFLLENBQUMsV0FBVyxFQUFFO1FBQ3pCLEtBQUssUUFBUTtZQUNYLE9BQU87UUFDVCxLQUFLLFFBQVE7WUFDWCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixLQUFLLFFBQVE7WUFDWCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDekQ7QUFDSCxDQUFDO0FBVEQsMEJBU0M7QUFFRCxLQUFLLFVBQVUsUUFBUSxDQUFDLEtBQWtEO0lBQ3hFLE1BQU0sV0FBVyxHQUFHLEtBQTBELENBQUM7SUFDL0UsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQztJQUNwRSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDO0lBQ2pFLE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxJQUFJLElBQUksSUFBSSxhQUFhLElBQUksSUFBSSxJQUFJLGFBQWEsS0FBSyxhQUFhLENBQUM7SUFFL0c7O3NEQUVrRDtJQUNsRCxJQUFJLG9CQUFvQixFQUFFO1FBQ3hCLE9BQU8sUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ2hDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsV0FBVyxDQUFDLFVBQWtCO0lBQzNDLE1BQU0sYUFBYSxHQUFHLE1BQU0sRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLEdBQUcsYUFBYSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE9BQU87S0FDUjtJQUVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRyxNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFdkYsSUFBSSxhQUFhLEVBQUUsV0FBVyxFQUFFO1FBQzlCLE1BQU0sV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQy9CO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxRQUFRLENBQUMsVUFBbUI7SUFDekMsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNoRDtJQUNELElBQUksQ0FBQyxNQUFNLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ2hELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5Qix1QkFBdUIsNkJBQTZCLENBQUMsQ0FBQztRQUNwRyxPQUFPO0tBQ1I7SUFDRCxJQUFJO1FBQ0YsTUFBTSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDL0I7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7WUFDN0IsTUFBTSxDQUFDLENBQUM7U0FDVDtRQUNELGlDQUFpQztLQUNsQztBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsS0FBSyxVQUFVLHlCQUF5QixDQUFDLFVBQWtCO0lBQ3pELE1BQU0sUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0UsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssdUJBQXVCLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztBQUNsRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHsgUzMgfSBmcm9tICdhd3Mtc2RrJztcblxuY29uc3QgQVVUT19ERUxFVEVfT0JKRUNUU19UQUcgPSAnYXdzLWNkazphdXRvLWRlbGV0ZS1vYmplY3RzJztcblxuY29uc3QgczMgPSBuZXcgUzMoKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQpIHtcbiAgc3dpdGNoIChldmVudC5SZXF1ZXN0VHlwZSkge1xuICAgIGNhc2UgJ0NyZWF0ZSc6XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnVXBkYXRlJzpcbiAgICAgIHJldHVybiBvblVwZGF0ZShldmVudCk7XG4gICAgY2FzZSAnRGVsZXRlJzpcbiAgICAgIHJldHVybiBvbkRlbGV0ZShldmVudC5SZXNvdXJjZVByb3BlcnRpZXM/LkJ1Y2tldE5hbWUpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9uVXBkYXRlKGV2ZW50OiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50KSB7XG4gIGNvbnN0IHVwZGF0ZUV2ZW50ID0gZXZlbnQgYXMgQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VVcGRhdGVFdmVudDtcbiAgY29uc3Qgb2xkQnVja2V0TmFtZSA9IHVwZGF0ZUV2ZW50Lk9sZFJlc291cmNlUHJvcGVydGllcz8uQnVja2V0TmFtZTtcbiAgY29uc3QgbmV3QnVja2V0TmFtZSA9IHVwZGF0ZUV2ZW50LlJlc291cmNlUHJvcGVydGllcz8uQnVja2V0TmFtZTtcbiAgY29uc3QgYnVja2V0TmFtZUhhc0NoYW5nZWQgPSBuZXdCdWNrZXROYW1lICE9IG51bGwgJiYgb2xkQnVja2V0TmFtZSAhPSBudWxsICYmIG5ld0J1Y2tldE5hbWUgIT09IG9sZEJ1Y2tldE5hbWU7XG5cbiAgLyogSWYgdGhlIG5hbWUgb2YgdGhlIGJ1Y2tldCBoYXMgY2hhbmdlZCwgQ2xvdWRGb3JtYXRpb24gd2lsbCB0cnkgdG8gZGVsZXRlIHRoZSBidWNrZXRcbiAgICAgYW5kIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGUgbmV3IG5hbWUuIFNvIHdlIGhhdmUgdG8gZGVsZXRlIHRoZSBjb250ZW50cyBvZiB0aGVcbiAgICAgYnVja2V0IHNvIHRoYXQgdGhpcyBvcGVyYXRpb24gZG9lcyBub3QgZmFpbC4gKi9cbiAgaWYgKGJ1Y2tldE5hbWVIYXNDaGFuZ2VkKSB7XG4gICAgcmV0dXJuIG9uRGVsZXRlKG9sZEJ1Y2tldE5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgZGVsZXRlIGFsbCBpdGVtcyBpbiB0aGUgYnVja2V0XG4gKlxuICogQHBhcmFtIGJ1Y2tldE5hbWUgdGhlIGJ1Y2tldCBuYW1lXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVtcHR5QnVja2V0KGJ1Y2tldE5hbWU6IHN0cmluZykge1xuICBjb25zdCBsaXN0ZWRPYmplY3RzID0gYXdhaXQgczMubGlzdE9iamVjdFZlcnNpb25zKHsgQnVja2V0OiBidWNrZXROYW1lIH0pLnByb21pc2UoKTtcbiAgY29uc3QgY29udGVudHMgPSBbLi4ubGlzdGVkT2JqZWN0cy5WZXJzaW9ucyA/PyBbXSwgLi4ubGlzdGVkT2JqZWN0cy5EZWxldGVNYXJrZXJzID8/IFtdXTtcbiAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZHMgPSBjb250ZW50cy5tYXAoKHJlY29yZDogYW55KSA9PiAoeyBLZXk6IHJlY29yZC5LZXksIFZlcnNpb25JZDogcmVjb3JkLlZlcnNpb25JZCB9KSk7XG4gIGF3YWl0IHMzLmRlbGV0ZU9iamVjdHMoeyBCdWNrZXQ6IGJ1Y2tldE5hbWUsIERlbGV0ZTogeyBPYmplY3RzOiByZWNvcmRzIH0gfSkucHJvbWlzZSgpO1xuXG4gIGlmIChsaXN0ZWRPYmplY3RzPy5Jc1RydW5jYXRlZCkge1xuICAgIGF3YWl0IGVtcHR5QnVja2V0KGJ1Y2tldE5hbWUpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9uRGVsZXRlKGJ1Y2tldE5hbWU/OiBzdHJpbmcpIHtcbiAgaWYgKCFidWNrZXROYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBCdWNrZXROYW1lIHdhcyBwcm92aWRlZC4nKTtcbiAgfVxuICBpZiAoIWF3YWl0IGlzQnVja2V0VGFnZ2VkRm9yRGVsZXRpb24oYnVja2V0TmFtZSkpIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgQnVja2V0IGRvZXMgbm90IGhhdmUgJyR7QVVUT19ERUxFVEVfT0JKRUNUU19UQUd9JyB0YWcsIHNraXBwaW5nIGNsZWFuaW5nLlxcbmApO1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGVtcHR5QnVja2V0KGJ1Y2tldE5hbWUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUuY29kZSAhPT0gJ05vU3VjaEJ1Y2tldCcpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIC8vIEJ1Y2tldCBkb2Vzbid0IGV4aXN0LiBJZ25vcmluZ1xuICB9XG59XG5cbi8qKlxuICogVGhlIGJ1Y2tldCB3aWxsIG9ubHkgYmUgdGFnZ2VkIGZvciBkZWxldGlvbiBpZiBpdCdzIGJlaW5nIGRlbGV0ZWQgaW4gdGhlIHNhbWVcbiAqIGRlcGxveW1lbnQgYXMgdGhpcyBDdXN0b20gUmVzb3VyY2UuXG4gKlxuICogSWYgdGhlIEN1c3RvbSBSZXNvdXJjZSBpcyBldmVyeSBkZWxldGVkIGJlZm9yZSB0aGUgYnVja2V0LCBpdCBtdXN0IGJlIGJlY2F1c2VcbiAqIGBhdXRvRGVsZXRlT2JqZWN0c2AgaGFzIGJlZW4gc3dpdGNoZWQgdG8gZmFsc2UsIGluIHdoaWNoIGNhc2UgdGhlIHRhZyB3b3VsZCBoYXZlXG4gKiBiZWVuIHJlbW92ZWQgYmVmb3JlIHdlIGdldCB0byB0aGlzIERlbGV0ZSBldmVudC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaXNCdWNrZXRUYWdnZWRGb3JEZWxldGlvbihidWNrZXROYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5nZXRCdWNrZXRUYWdnaW5nKHsgQnVja2V0OiBidWNrZXROYW1lIH0pLnByb21pc2UoKTtcbiAgcmV0dXJuIHJlc3BvbnNlLlRhZ1NldC5zb21lKHRhZyA9PiB0YWcuS2V5ID09PSBBVVRPX0RFTEVURV9PQkpFQ1RTX1RBRyAmJiB0YWcuVmFsdWUgPT09ICd0cnVlJyk7XG59Il19 \ No newline at end of file diff --git a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/__entrypoint__.js b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/__entrypoint__.js deleted file mode 100644 index 9df94382cc74e..0000000000000 --- a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/__entrypoint__.js +++ /dev/null @@ -1,118 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -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': responseBody.length }, - }; - await 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); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLWVudHJ5cG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJub2RlanMtZW50cnlwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsMkJBQTJCO0FBRTNCLGlCQUFpQjtBQUNKLFFBQUEsUUFBUSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsR0FBRyxFQUFFLFVBQVU7SUFDZixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGdCQUFnQixFQUFFLFNBQVM7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sZ0NBQWdDLEdBQUcsd0RBQXdELENBQUM7QUFDbEcsTUFBTSwwQkFBMEIsR0FBRyw4REFBOEQsQ0FBQztBQVczRixLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWtELEVBQUUsT0FBMEI7SUFDMUcsTUFBTSxjQUFjLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDeEQsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0QsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxhQUFhO0lBQ2IsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssZ0NBQWdDLEVBQUU7UUFDbkcsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUN0RSxNQUFNLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTztLQUNSO0lBRUQsSUFBSTtRQUNGLHlFQUF5RTtRQUN6RSxpRUFBaUU7UUFDakUsd0NBQXdDO1FBQ3hDLGlFQUFpRTtRQUNqRSxNQUFNLFdBQVcsR0FBWSxPQUFPLENBQUMsZ0JBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUQsdURBQXVEO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEQsMkJBQTJCO1FBQzNCLE1BQU0sY0FBYyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUNoRDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsTUFBTSxJQUFJLEdBQWE7WUFDckIsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLGdCQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLHlFQUF5RTtZQUN6RSxtRUFBbUU7WUFDbkUsd0VBQXdFO1lBQ3hFLHFFQUFxRTtZQUNyRSxnQ0FBZ0M7WUFDaEMsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtnQkFDbEMsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsNEdBQTRHLENBQUMsQ0FBQztnQkFDM0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdDQUFnQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNMLGtFQUFrRTtnQkFDbEUsNkRBQTZEO2dCQUM3RCxnQkFBUSxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDcEc7U0FDRjtRQUVELG1FQUFtRTtRQUNuRSxNQUFNLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDdEM7QUFDSCxDQUFDO0FBbkRELDBCQW1EQztBQUVELFNBQVMsY0FBYyxDQUNyQixVQUF5RixFQUN6RixrQkFBMEMsRUFBRztJQUU3QyxzRUFBc0U7SUFDdEUsdUJBQXVCO0lBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO0lBRXZILGtFQUFrRTtJQUNsRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLGtCQUFrQixLQUFLLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtRQUMvRixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxVQUFVLENBQUMsa0JBQWtCLFNBQVMsZUFBZSxDQUFDLGtCQUFrQixtQkFBbUIsQ0FBQyxDQUFDO0tBQ3RLO0lBRUQsMERBQTBEO0lBQzFELE9BQU87UUFDTCxHQUFHLFVBQVU7UUFDYixHQUFHLGVBQWU7UUFDbEIsa0JBQWtCLEVBQUUsa0JBQWtCO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE0QixFQUFFLEtBQWU7SUFDekUsTUFBTSxJQUFJLEdBQW1EO1FBQzNELE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTTtRQUM5QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSwwQkFBMEI7UUFDMUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtRQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0tBQ2pCLENBQUM7SUFFRixnQkFBUSxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHO1FBQ1YsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1FBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRTtLQUN2RSxDQUFDO0lBRUYsTUFBTSxnQkFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVELEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxPQUE2QixFQUFFLFlBQW9CO0lBQ3ZGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNmO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxHQUFHLE1BQWE7SUFDL0Msc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuXG4vLyBmb3IgdW5pdCB0ZXN0c1xuZXhwb3J0IGNvbnN0IGV4dGVybmFsID0ge1xuICBzZW5kSHR0cFJlcXVlc3Q6IGRlZmF1bHRTZW5kSHR0cFJlcXVlc3QsXG4gIGxvZzogZGVmYXVsdExvZyxcbiAgaW5jbHVkZVN0YWNrVHJhY2VzOiB0cnVlLFxuICB1c2VySGFuZGxlckluZGV4OiAnLi9pbmRleCcsXG59O1xuXG5jb25zdCBDUkVBVEVfRkFJTEVEX1BIWVNJQ0FMX0lEX01BUktFUiA9ICdBV1NDREs6OkN1c3RvbVJlc291cmNlUHJvdmlkZXJGcmFtZXdvcms6OkNSRUFURV9GQUlMRUQnO1xuY29uc3QgTUlTU0lOR19QSFlTSUNBTF9JRF9NQVJLRVIgPSAnQVdTQ0RLOjpDdXN0b21SZXNvdXJjZVByb3ZpZGVyRnJhbWV3b3JrOjpNSVNTSU5HX1BIWVNJQ0FMX0lEJztcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50ICYgSGFuZGxlclJlc3BvbnNlO1xuZXhwb3J0IHR5cGUgSGFuZGxlciA9IChldmVudDogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgY29udGV4dDogQVdTTGFtYmRhLkNvbnRleHQpID0+IFByb21pc2U8SGFuZGxlclJlc3BvbnNlIHwgdm9pZD47XG5leHBvcnQgdHlwZSBIYW5kbGVyUmVzcG9uc2UgPSB1bmRlZmluZWQgfCB7XG4gIERhdGE/OiBhbnk7XG4gIFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZztcbiAgUmVhc29uPzogc3RyaW5nO1xuICBOb0VjaG8/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIGNvbnRleHQ6IEFXU0xhbWJkYS5Db250ZXh0KSB7XG4gIGNvbnN0IHNhbml0aXplZEV2ZW50ID0geyAuLi5ldmVudCwgUmVzcG9uc2VVUkw6ICcuLi4nIH07XG4gIGV4dGVybmFsLmxvZyhKU09OLnN0cmluZ2lmeShzYW5pdGl6ZWRFdmVudCwgdW5kZWZpbmVkLCAyKSk7XG5cbiAgLy8gaWdub3JlIERFTEVURSBldmVudCB3aGVuIHRoZSBwaHlzaWNhbCByZXNvdXJjZSBJRCBpcyB0aGUgbWFya2VyIHRoYXRcbiAgLy8gaW5kaWNhdGVzIHRoYXQgdGhpcyBERUxFVEUgaXMgYSBzdWJzZXF1ZW50IERFTEVURSB0byBhIGZhaWxlZCBDUkVBVEVcbiAgLy8gb3BlcmF0aW9uLlxuICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnICYmIGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCA9PT0gQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVIpIHtcbiAgICBleHRlcm5hbC5sb2coJ2lnbm9yaW5nIERFTEVURSBldmVudCBjYXVzZWQgYnkgYSBmYWlsZWQgQ1JFQVRFIGV2ZW50Jyk7XG4gICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ1NVQ0NFU1MnLCBldmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBpbnZva2UgdGhlIHVzZXIgaGFuZGxlci4gdGhpcyBpcyBpbnRlbnRpb25hbGx5IGluc2lkZSB0aGUgdHJ5LWNhdGNoIHRvXG4gICAgLy8gZW5zdXJlIHRoYXQgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaXQncyByZXBvcnRlZCBhcyBhIGZhaWx1cmUgdG9cbiAgICAvLyBjbG91ZGZvcm1hdGlvbiAob3RoZXJ3aXNlIGNmbiB3YWl0cykuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICBjb25zdCB1c2VySGFuZGxlcjogSGFuZGxlciA9IHJlcXVpcmUoZXh0ZXJuYWwudXNlckhhbmRsZXJJbmRleCkuaGFuZGxlcjtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1c2VySGFuZGxlcihzYW5pdGl6ZWRFdmVudCwgY29udGV4dCk7XG5cbiAgICAvLyB2YWxpZGF0ZSB1c2VyIHJlc3BvbnNlIGFuZCBjcmVhdGUgdGhlIGNvbWJpbmVkIGV2ZW50XG4gICAgY29uc3QgcmVzcG9uc2VFdmVudCA9IHJlbmRlclJlc3BvbnNlKGV2ZW50LCByZXN1bHQpO1xuXG4gICAgLy8gc3VibWl0IHRvIGNmbiBhcyBzdWNjZXNzXG4gICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ1NVQ0NFU1MnLCByZXNwb25zZUV2ZW50KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IHJlc3A6IFJlc3BvbnNlID0ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICBSZWFzb246IGV4dGVybmFsLmluY2x1ZGVTdGFja1RyYWNlcyA/IGUuc3RhY2sgOiBlLm1lc3NhZ2UsXG4gICAgfTtcblxuICAgIGlmICghcmVzcC5QaHlzaWNhbFJlc291cmNlSWQpIHtcbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogaWYgQ1JFQVRFIGZhaWxzLCB3aGljaCB1c3VhbGx5IGltcGxpZXMsIHdlIHVzdWFsbHkgZG9uJ3RcbiAgICAgIC8vIGhhdmUgYSBwaHlzaWNhbCByZXNvdXJjZSBpZC4gaW4gdGhpcyBjYXNlLCB0aGUgc3Vic2VxdWVudCBERUxFVEVcbiAgICAgIC8vIG9wZXJhdGlvbiBkb2VzIG5vdCBoYXZlIGFueSBtZWFuaW5nLCBhbmQgd2lsbCBsaWtlbHkgZmFpbCBhcyB3ZWxsLiB0b1xuICAgICAgLy8gYWRkcmVzcyB0aGlzLCB3ZSB1c2UgYSBtYXJrZXIgc28gdGhlIHByb3ZpZGVyIGZyYW1ld29yayBjYW4gc2ltcGx5XG4gICAgICAvLyBpZ25vcmUgdGhlIHN1YnNlcXVlbnQgREVMRVRFLlxuICAgICAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSAnQ3JlYXRlJykge1xuICAgICAgICBleHRlcm5hbC5sb2coJ0NSRUFURSBmYWlsZWQsIHJlc3BvbmRpbmcgd2l0aCBhIG1hcmtlciBwaHlzaWNhbCByZXNvdXJjZSBpZCBzbyB0aGF0IHRoZSBzdWJzZXF1ZW50IERFTEVURSB3aWxsIGJlIGlnbm9yZWQnKTtcbiAgICAgICAgcmVzcC5QaHlzaWNhbFJlc291cmNlSWQgPSBDUkVBVEVfRkFJTEVEX1BIWVNJQ0FMX0lEX01BUktFUjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSwgaWYgUGh5c2ljYWxSZXNvdXJjZUlkIGlzIG5vdCBzcGVjaWZpZWQsIHNvbWV0aGluZyBpc1xuICAgICAgICAvLyB0ZXJyaWJseSB3cm9uZyBiZWNhdXNlIGFsbCBvdGhlciBldmVudHMgc2hvdWxkIGhhdmUgYW4gSUQuXG4gICAgICAgIGV4dGVybmFsLmxvZyhgRVJST1I6IE1hbGZvcm1lZCBldmVudC4gXCJQaHlzaWNhbFJlc291cmNlSWRcIiBpcyByZXF1aXJlZDogJHtKU09OLnN0cmluZ2lmeShldmVudCl9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhpcyBpcyBhbiBhY3R1YWwgZXJyb3IsIGZhaWwgdGhlIGFjdGl2aXR5IGFsdG9nZXRoZXIgYW5kIGV4aXN0LlxuICAgIGF3YWl0IHN1Ym1pdFJlc3BvbnNlKCdGQUlMRUQnLCByZXNwKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJSZXNwb25zZShcbiAgY2ZuUmVxdWVzdDogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCAmIHsgUGh5c2ljYWxSZXNvdXJjZUlkPzogc3RyaW5nIH0sXG4gIGhhbmRsZXJSZXNwb25zZTogdm9pZCB8IEhhbmRsZXJSZXNwb25zZSA9IHsgfSk6IFJlc3BvbnNlIHtcblxuICAvLyBpZiBwaHlzaWNhbCBJRCBpcyBub3QgcmV0dXJuZWQsIHdlIGhhdmUgc29tZSBkZWZhdWx0cyBmb3IgeW91IGJhc2VkXG4gIC8vIG9uIHRoZSByZXF1ZXN0IHR5cGUuXG4gIGNvbnN0IHBoeXNpY2FsUmVzb3VyY2VJZCA9IGhhbmRsZXJSZXNwb25zZS5QaHlzaWNhbFJlc291cmNlSWQgPz8gY2ZuUmVxdWVzdC5QaHlzaWNhbFJlc291cmNlSWQgPz8gY2ZuUmVxdWVzdC5SZXF1ZXN0SWQ7XG5cbiAgLy8gaWYgd2UgYXJlIGluIERFTEVURSBhbmQgcGh5c2ljYWwgSUQgd2FzIGNoYW5nZWQsIGl0J3MgYW4gZXJyb3IuXG4gIGlmIChjZm5SZXF1ZXN0LlJlcXVlc3RUeXBlID09PSAnRGVsZXRlJyAmJiBwaHlzaWNhbFJlc291cmNlSWQgIT09IGNmblJlcXVlc3QuUGh5c2ljYWxSZXNvdXJjZUlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBERUxFVEU6IGNhbm5vdCBjaGFuZ2UgdGhlIHBoeXNpY2FsIHJlc291cmNlIElEIGZyb20gXCIke2NmblJlcXVlc3QuUGh5c2ljYWxSZXNvdXJjZUlkfVwiIHRvIFwiJHtoYW5kbGVyUmVzcG9uc2UuUGh5c2ljYWxSZXNvdXJjZUlkfVwiIGR1cmluZyBkZWxldGlvbmApO1xuICB9XG5cbiAgLy8gbWVyZ2UgcmVxdWVzdCBldmVudCBhbmQgcmVzdWx0IGV2ZW50IChyZXN1bHQgcHJldmFpbHMpLlxuICByZXR1cm4ge1xuICAgIC4uLmNmblJlcXVlc3QsXG4gICAgLi4uaGFuZGxlclJlc3BvbnNlLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogcGh5c2ljYWxSZXNvdXJjZUlkLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdWJtaXRSZXNwb25zZShzdGF0dXM6ICdTVUNDRVNTJyB8ICdGQUlMRUQnLCBldmVudDogUmVzcG9uc2UpIHtcbiAgY29uc3QganNvbjogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSA9IHtcbiAgICBTdGF0dXM6IHN0YXR1cyxcbiAgICBSZWFzb246IGV2ZW50LlJlYXNvbiA/PyBzdGF0dXMsXG4gICAgU3RhY2tJZDogZXZlbnQuU3RhY2tJZCxcbiAgICBSZXF1ZXN0SWQ6IGV2ZW50LlJlcXVlc3RJZCxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCB8fCBNSVNTSU5HX1BIWVNJQ0FMX0lEX01BUktFUixcbiAgICBMb2dpY2FsUmVzb3VyY2VJZDogZXZlbnQuTG9naWNhbFJlc291cmNlSWQsXG4gICAgTm9FY2hvOiBldmVudC5Ob0VjaG8sXG4gICAgRGF0YTogZXZlbnQuRGF0YSxcbiAgfTtcblxuICBleHRlcm5hbC5sb2coJ3N1Ym1pdCByZXNwb25zZSB0byBjbG91ZGZvcm1hdGlvbicsIGpzb24pO1xuXG4gIGNvbnN0IHJlc3BvbnNlQm9keSA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xuICBjb25zdCBwYXJzZWRVcmwgPSB1cmwucGFyc2UoZXZlbnQuUmVzcG9uc2VVUkwpO1xuICBjb25zdCByZXEgPSB7XG4gICAgaG9zdG5hbWU6IHBhcnNlZFVybC5ob3N0bmFtZSxcbiAgICBwYXRoOiBwYXJzZWRVcmwucGF0aCxcbiAgICBtZXRob2Q6ICdQVVQnLFxuICAgIGhlYWRlcnM6IHsgJ2NvbnRlbnQtdHlwZSc6ICcnLCAnY29udGVudC1sZW5ndGgnOiByZXNwb25zZUJvZHkubGVuZ3RoIH0sXG4gIH07XG5cbiAgYXdhaXQgZXh0ZXJuYWwuc2VuZEh0dHBSZXF1ZXN0KHJlcSwgcmVzcG9uc2VCb2R5KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdFNlbmRIdHRwUmVxdWVzdChvcHRpb25zOiBodHRwcy5SZXF1ZXN0T3B0aW9ucywgcmVzcG9uc2VCb2R5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucywgXyA9PiByZXNvbHZlKCkpO1xuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgcmVxdWVzdC53cml0ZShyZXNwb25zZUJvZHkpO1xuICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdExvZyhmbXQ6IHN0cmluZywgLi4ucGFyYW1zOiBhbnlbXSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhmbXQsIC4uLnBhcmFtcyk7XG59XG4iXX0= \ No newline at end of file diff --git a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.d.ts b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.d.ts deleted file mode 100644 index 3554dc94d4617..0000000000000 --- a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function handler(event: AWSLambda.CloudFormationCustomResourceEvent): Promise; diff --git a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.ts b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.ts deleted file mode 100644 index 2459d44ab1d18..0000000000000 --- a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26/index.ts +++ /dev/null @@ -1,82 +0,0 @@ -// eslint-disable-next-line import/no-extraneous-dependencies -import { S3 } from 'aws-sdk'; - -const AUTO_DELETE_OBJECTS_TAG = 'aws-cdk:auto-delete-objects'; - -const s3 = new S3(); - -export async function handler(event: AWSLambda.CloudFormationCustomResourceEvent) { - switch (event.RequestType) { - case 'Create': - return; - case 'Update': - return onUpdate(event); - case 'Delete': - return onDelete(event.ResourceProperties?.BucketName); - } -} - -async function onUpdate(event: AWSLambda.CloudFormationCustomResourceEvent) { - const updateEvent = event as AWSLambda.CloudFormationCustomResourceUpdateEvent; - const oldBucketName = updateEvent.OldResourceProperties?.BucketName; - const newBucketName = updateEvent.ResourceProperties?.BucketName; - const bucketNameHasChanged = newBucketName != null && oldBucketName != null && newBucketName !== oldBucketName; - - /* If the name of the bucket has changed, CloudFormation will try to delete the bucket - and create a new one with the new name. So we have to delete the contents of the - bucket so that this operation does not fail. */ - if (bucketNameHasChanged) { - return onDelete(oldBucketName); - } -} - -/** - * Recursively delete all items in the bucket - * - * @param bucketName the bucket name - */ -async function emptyBucket(bucketName: string) { - const listedObjects = await s3.listObjectVersions({ Bucket: bucketName }).promise(); - const contents = [...listedObjects.Versions ?? [], ...listedObjects.DeleteMarkers ?? []]; - if (contents.length === 0) { - return; - } - - const records = contents.map((record: any) => ({ Key: record.Key, VersionId: record.VersionId })); - await s3.deleteObjects({ Bucket: bucketName, Delete: { Objects: records } }).promise(); - - if (listedObjects?.IsTruncated) { - await emptyBucket(bucketName); - } -} - -async function onDelete(bucketName?: string) { - if (!bucketName) { - throw new Error('No BucketName was provided.'); - } - if (!await isBucketTaggedForDeletion(bucketName)) { - process.stdout.write(`Bucket does not have '${AUTO_DELETE_OBJECTS_TAG}' tag, skipping cleaning.\n`); - return; - } - try { - await emptyBucket(bucketName); - } catch (e) { - if (e.code !== 'NoSuchBucket') { - throw e; - } - // Bucket doesn't exist. Ignoring - } -} - -/** - * The bucket will only be tagged for deletion if it's being deleted in the same - * deployment as this Custom Resource. - * - * If the Custom Resource is every deleted before the bucket, it must be because - * `autoDeleteObjects` has been switched to false, in which case the tag would have - * been removed before we get to this Delete event. - */ -async function isBucketTaggedForDeletion(bucketName: string) { - const response = await s3.getBucketTagging({ Bucket: bucketName }).promise(); - return response.TagSet.some(tag => tag.Key === AUTO_DELETE_OBJECTS_TAG && tag.Value === 'true'); -} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/cdk.out b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/cdk.out index 588d7b269d34f..145739f539580 100644 --- a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"20.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/integ.json b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/integ.json index 956034c5f6c55..76097913a4f8e 100644 --- a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "20.0.0", + "version": "22.0.0", "testCases": { "integ.s3": { "stacks": [ diff --git a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/lambda-event-source-s3.assets.json b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/lambda-event-source-s3.assets.json index 1c3951e0b9a30..4e3d6e92f1bc7 100644 --- a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/lambda-event-source-s3.assets.json +++ b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/lambda-event-source-s3.assets.json @@ -1,20 +1,20 @@ { - "version": "20.0.0", + "version": "22.0.0", "files": { - "60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26": { + "33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c": { "source": { - "path": "asset.60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26", + "path": "asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26.zip", + "objectKey": "33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "0bd7f56caf58087052c78e8b8dfb76284423c45fe7556ed0ca3c5f9c47d6b79b": { + "88cd97cf8b61eb834d47062d3a923e447d47131e886b9487a06833f23868a9ec": { "source": { "path": "lambda-event-source-s3.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "0bd7f56caf58087052c78e8b8dfb76284423c45fe7556ed0ca3c5f9c47d6b79b.json", + "objectKey": "88cd97cf8b61eb834d47062d3a923e447d47131e886b9487a06833f23868a9ec.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/lambda-event-source-s3.template.json b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/lambda-event-source-s3.template.json index 31157a4538911..a56780a2ae5f0 100644 --- a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/lambda-event-source-s3.template.json +++ b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/lambda-event-source-s3.template.json @@ -227,7 +227,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "60767da3831353fede3cfe92efef10580a600592dec8ccbb06c051e95b9c1b26.zip" + "S3Key": "33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c.zip" }, "Timeout": 900, "MemorySize": 128, @@ -322,7 +322,7 @@ "Arn" ] }, - "Runtime": "python3.7", + "Runtime": "python3.9", "Timeout": 300 }, "DependsOn": [ diff --git a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/manifest.json b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/manifest.json index 4fa5986eb0e3b..ca7dc94c277ff 100644 --- a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "20.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "lambda-event-source-s3.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,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}/0bd7f56caf58087052c78e8b8dfb76284423c45fe7556ed0ca3c5f9c47d6b79b.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/88cd97cf8b61eb834d47062d3a923e447d47131e886b9487a06833f23868a9ec.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -125,6 +119,12 @@ ] }, "displayName": "lambda-event-source-s3" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/tree.json b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/tree.json index 18e6355a7bd8f..270aefa79f621 100644 --- a/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-lambda-event-sources/test/integ.s3.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" - } - }, "lambda-event-source-s3": { "id": "lambda-event-source-s3", "path": "lambda-event-source-s3", @@ -24,6 +16,14 @@ "id": "ServiceRole", "path": "lambda-event-source-s3/F/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "lambda-event-source-s3/F/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-event-source-s3/F/ServiceRole/Resource", @@ -199,14 +199,14 @@ "id": "Default", "path": "lambda-event-source-s3/B/AutoDeleteObjectsCustomResource/Default", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CustomResource", + "version": "0.0.0" } }, "Notifications": { @@ -217,14 +217,14 @@ "id": "Resource", "path": "lambda-event-source-s3/B/Notifications/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } }, "AllowBucketNotificationsTolambdaeventsources3F74160805": { @@ -271,30 +271,30 @@ "id": "Staging", "path": "lambda-event-source-s3/Custom::S3AutoDeleteObjectsCustomResourceProvider/Staging", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.AssetStaging", + "version": "0.0.0" } }, "Role": { "id": "Role", "path": "lambda-event-source-s3/Custom::S3AutoDeleteObjectsCustomResourceProvider/Role", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } }, "Handler": { "id": "Handler", "path": "lambda-event-source-s3/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CustomResourceProvider", + "version": "0.0.0" } }, "BucketNotificationsHandler050a0587b7544547bf325f094a3db834": { @@ -305,6 +305,14 @@ "id": "Role", "path": "lambda-event-source-s3/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role", "children": { + "ImportRole": { + "id": "ImportRole", + "path": "lambda-event-source-s3/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/ImportRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-event-source-s3/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/Resource", @@ -393,26 +401,50 @@ "id": "Resource", "path": "lambda-event-source-s3/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "lambda-event-source-s3/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "lambda-event-source-s3/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" } } }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.App", + "version": "0.0.0" } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-lambda-go/README.md b/packages/@aws-cdk/aws-lambda-go/README.md index f79d8c8a862ec..748ab32256ec0 100644 --- a/packages/@aws-cdk/aws-lambda-go/README.md +++ b/packages/@aws-cdk/aws-lambda-go/README.md @@ -183,6 +183,21 @@ new go.GoFunction(this, 'GoFunction', { }); ``` +You can set additional Docker options to configure the build environment: + + ```ts +new go.GoFunction(this, 'GoFunction', { + entry: 'app/cmd/api', + bundling: { + network: 'host', + securityOpt: 'no-new-privileges', + user: 'user:group', + volumesFrom: ['777f7dc92da7'], + volumes: [{ hostPath: '/host-path', containerPath: '/container-path' }], + }, +}); +``` + ## Command hooks It is possible to run additional commands by specifying the `commandHooks` prop: diff --git a/packages/@aws-cdk/aws-lambda-go/lib/bundling.ts b/packages/@aws-cdk/aws-lambda-go/lib/bundling.ts index d30c753df7839..62645d0ae8cc6 100644 --- a/packages/@aws-cdk/aws-lambda-go/lib/bundling.ts +++ b/packages/@aws-cdk/aws-lambda-go/lib/bundling.ts @@ -78,6 +78,13 @@ export class Bundling implements cdk.BundlingOptions { command: bundling.command, environment: bundling.environment, local: bundling.local, + entrypoint: bundling.entrypoint, + volumes: bundling.volumes, + volumesFrom: bundling.volumesFrom, + workingDirectory: bundling.workingDirectory, + user: bundling.user, + securityOpt: bundling.securityOpt, + network: bundling.network, }, }); } @@ -93,6 +100,13 @@ export class Bundling implements cdk.BundlingOptions { public readonly command: string[]; public readonly environment?: { [key: string]: string }; public readonly local?: cdk.ILocalBundling; + public readonly entrypoint?: string[] + public readonly volumes?: cdk.DockerVolume[]; + public readonly volumesFrom?: string[]; + public readonly workingDirectory?: string; + public readonly user?: string; + public readonly securityOpt?: string; + public readonly network?: string; private readonly relativeEntryPath: string; @@ -131,8 +145,15 @@ export class Bundling implements cdk.BundlingOptions { : cdk.DockerImage.fromRegistry('dummy'); // Do not build if we don't need to const bundlingCommand = this.createBundlingCommand(cdk.AssetStaging.BUNDLING_INPUT_DIR, cdk.AssetStaging.BUNDLING_OUTPUT_DIR); - this.command = ['bash', '-c', bundlingCommand]; + this.command = props.command ?? ['bash', '-c', bundlingCommand]; this.environment = environment; + this.entrypoint = props.entrypoint; + this.volumes = props.volumes; + this.volumesFrom = props.volumesFrom; + this.workingDirectory = props.workingDirectory; + this.user = props.user; + this.securityOpt = props.securityOpt; + this.network = props.network; // Local bundling if (!props.forcedDockerBundling) { // only if Docker is not forced diff --git a/packages/@aws-cdk/aws-lambda-go/lib/types.ts b/packages/@aws-cdk/aws-lambda-go/lib/types.ts index c754cbdbcf664..5dc7beb8f886c 100644 --- a/packages/@aws-cdk/aws-lambda-go/lib/types.ts +++ b/packages/@aws-cdk/aws-lambda-go/lib/types.ts @@ -1,16 +1,9 @@ -import { AssetHashType, DockerImage } from '@aws-cdk/core'; +import { AssetHashType, DockerImage, DockerRunOptions } from '@aws-cdk/core'; /** * Bundling options */ -export interface BundlingOptions { - /** - * Environment variables defined when go runs. - * - * @default - no environment variables are defined. - */ - readonly environment?: { [key: string]: string; }; - +export interface BundlingOptions extends DockerRunOptions { /** * Force bundling in a Docker container even if local bundling is * possible. diff --git a/packages/@aws-cdk/aws-lambda-go/test/bundling.test.ts b/packages/@aws-cdk/aws-lambda-go/test/bundling.test.ts index 73dfec99b45c1..134dd0f51716f 100644 --- a/packages/@aws-cdk/aws-lambda-go/test/bundling.test.ts +++ b/packages/@aws-cdk/aws-lambda-go/test/bundling.test.ts @@ -335,3 +335,129 @@ test('with command hooks', () => { }), }); }); + +test('Custom bundling entrypoint', () => { + Bundling.bundle({ + entry, + moduleDir, + runtime: Runtime.GO_1_X, + architecture: Architecture.X86_64, + forcedDockerBundling: true, + entrypoint: ['/cool/entrypoint', '--cool-entrypoint-arg'], + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + entrypoint: ['/cool/entrypoint', '--cool-entrypoint-arg'], + }), + }); +}); + +test('Custom bundling volumes', () => { + Bundling.bundle({ + entry, + moduleDir, + runtime: Runtime.GO_1_X, + architecture: Architecture.X86_64, + forcedDockerBundling: true, + volumes: [{ hostPath: '/host-path', containerPath: '/container-path' }], + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + volumes: [{ hostPath: '/host-path', containerPath: '/container-path' }], + }), + }); +}); + +test('Custom bundling volumesFrom', () => { + Bundling.bundle({ + entry, + moduleDir, + runtime: Runtime.GO_1_X, + architecture: Architecture.X86_64, + forcedDockerBundling: true, + volumesFrom: ['777f7dc92da7'], + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + volumesFrom: ['777f7dc92da7'], + }), + }); +}); + +test('Custom bundling workingDirectory', () => { + Bundling.bundle({ + entry, + moduleDir, + runtime: Runtime.GO_1_X, + architecture: Architecture.X86_64, + forcedDockerBundling: true, + workingDirectory: '/working-directory', + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + workingDirectory: '/working-directory', + }), + }); +}); + +test('Custom bundling user', () => { + Bundling.bundle({ + entry, + moduleDir, + runtime: Runtime.GO_1_X, + architecture: Architecture.X86_64, + forcedDockerBundling: true, + user: 'user:group', + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + user: 'user:group', + }), + }); +}); + +test('Custom bundling securityOpt', () => { + Bundling.bundle({ + entry, + moduleDir, + runtime: Runtime.GO_1_X, + architecture: Architecture.X86_64, + forcedDockerBundling: true, + securityOpt: 'no-new-privileges', + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + securityOpt: 'no-new-privileges', + }), + }); +}); + +test('Custom bundling network', () => { + Bundling.bundle({ + entry, + moduleDir, + runtime: Runtime.GO_1_X, + architecture: Architecture.X86_64, + forcedDockerBundling: true, + network: 'host', + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + network: 'host', + }), + }); +}); diff --git a/packages/@aws-cdk/aws-lambda-nodejs/README.md b/packages/@aws-cdk/aws-lambda-nodejs/README.md index 3953bd225aaca..24d6582d67732 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/README.md +++ b/packages/@aws-cdk/aws-lambda-nodejs/README.md @@ -307,6 +307,20 @@ should also have `npm`, `yarn` or `pnpm` depending on the lock file you're using Use the [default image provided by `@aws-cdk/aws-lambda-nodejs`](https://github.com/aws/aws-cdk/blob/main/packages/%40aws-cdk/aws-lambda-nodejs/lib/Dockerfile) as a source of inspiration. +You can set additional Docker options to configure the build environment: + + ```ts +new nodejs.NodejsFunction(this, 'my-handler', { + bundling: { + network: 'host', + securityOpt: 'no-new-privileges', + user: 'user:group', + volumesFrom: ['777f7dc92da7'], + volumes: [{ hostPath: '/host-path', containerPath: '/container-path' }], + }, +}); +``` + ## Asset hash By default the asset hash will be calculated based on the bundled output (`AssetHashType.OUTPUT`). diff --git a/packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts b/packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts index 2c16103b0863c..8809166a6e57b 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts @@ -73,9 +73,15 @@ export class Bundling implements cdk.BundlingOptions { // Core bundling options public readonly image: cdk.DockerImage; + public readonly entrypoint?: string[] public readonly command: string[]; + public readonly volumes?: cdk.DockerVolume[]; + public readonly volumesFrom?: string[]; public readonly environment?: { [key: string]: string }; public readonly workingDirectory: string; + public readonly user?: string; + public readonly securityOpt?: string; + public readonly network?: string; public readonly local?: cdk.ILocalBundling; private readonly projectRoot: string; @@ -137,11 +143,17 @@ export class Bundling implements cdk.BundlingOptions { tscRunner: 'tsc', // tsc is installed globally in the docker image osPlatform: 'linux', // linux docker image }); - this.command = ['bash', '-c', bundlingCommand]; + this.command = props.command ?? ['bash', '-c', bundlingCommand]; this.environment = props.environment; // Bundling sets the working directory to cdk.AssetStaging.BUNDLING_INPUT_DIR // and we want to force npx to use the globally installed esbuild. - this.workingDirectory = '/'; + this.workingDirectory = props.workingDirectory ?? '/'; + this.entrypoint = props.entrypoint; + this.volumes = props.volumes; + this.volumesFrom = props.volumesFrom; + this.user = props.user; + this.securityOpt = props.securityOpt; + this.network = props.network; // Local bundling if (!props.forceDockerBundling) { // only if Docker is not forced diff --git a/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts b/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts index c0096404b2511..0d79db703287e 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts @@ -1,9 +1,9 @@ -import { DockerImage } from '@aws-cdk/core'; +import { DockerImage, DockerRunOptions } from '@aws-cdk/core'; /** * Bundling options */ -export interface BundlingOptions { +export interface BundlingOptions extends DockerRunOptions { /** * Whether to minify files when bundling. * @@ -161,13 +161,6 @@ export interface BundlingOptions { */ readonly charset?: Charset; - /** - * Environment variables defined when bundling runs. - * - * @default - no environment variables are defined. - */ - readonly environment?: { [key: string]: string; }; - /** * Replace global identifiers with constant expressions. * diff --git a/packages/@aws-cdk/aws-lambda-nodejs/package.json b/packages/@aws-cdk/aws-lambda-nodejs/package.json index fb276e1290ec3..5f483e81d1cc4 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/package.json +++ b/packages/@aws-cdk/aws-lambda-nodejs/package.json @@ -80,7 +80,7 @@ "@aws-cdk/pkglint": "0.0.0", "@types/jest": "^27.5.2", "delay": "5.0.0", - "esbuild": "^0.15.15" + "esbuild": "^0.16.6" }, "dependencies": { "@aws-cdk/aws-lambda": "0.0.0", diff --git a/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts b/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts index 0259180de8a54..83029ec601590 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts @@ -668,3 +668,137 @@ test('with custom hash', () => { assetHashType: AssetHashType.CUSTOM, })); }); + +test('Custom bundling entrypoint', () => { + Bundling.bundle({ + entry, + projectRoot, + depsLockFilePath, + runtime: Runtime.NODEJS_14_X, + architecture: Architecture.X86_64, + forceDockerBundling: true, + entrypoint: ['/cool/entrypoint', '--cool-entrypoint-arg'], + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + entrypoint: ['/cool/entrypoint', '--cool-entrypoint-arg'], + }), + }); +}); + +test('Custom bundling volumes', () => { + Bundling.bundle({ + entry, + projectRoot, + depsLockFilePath, + runtime: Runtime.NODEJS_14_X, + architecture: Architecture.X86_64, + forceDockerBundling: true, + volumes: [{ hostPath: '/host-path', containerPath: '/container-path' }], + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + volumes: [{ hostPath: '/host-path', containerPath: '/container-path' }], + }), + }); +}); + +test('Custom bundling volumesFrom', () => { + Bundling.bundle({ + entry, + projectRoot, + depsLockFilePath, + runtime: Runtime.NODEJS_14_X, + architecture: Architecture.X86_64, + forceDockerBundling: true, + volumesFrom: ['777f7dc92da7'], + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + volumesFrom: ['777f7dc92da7'], + }), + }); +}); + + +test('Custom bundling workingDirectory', () => { + Bundling.bundle({ + entry, + projectRoot, + depsLockFilePath, + runtime: Runtime.NODEJS_14_X, + architecture: Architecture.X86_64, + forceDockerBundling: true, + workingDirectory: '/working-directory', + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + workingDirectory: '/working-directory', + }), + }); +}); + +test('Custom bundling user', () => { + Bundling.bundle({ + entry, + projectRoot, + depsLockFilePath, + runtime: Runtime.NODEJS_14_X, + architecture: Architecture.X86_64, + forceDockerBundling: true, + user: 'user:group', + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + user: 'user:group', + }), + }); +}); + +test('Custom bundling securityOpt', () => { + Bundling.bundle({ + entry, + projectRoot, + depsLockFilePath, + runtime: Runtime.NODEJS_14_X, + architecture: Architecture.X86_64, + forceDockerBundling: true, + securityOpt: 'no-new-privileges', + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + securityOpt: 'no-new-privileges', + }), + }); +}); + +test('Custom bundling network', () => { + Bundling.bundle({ + entry, + projectRoot, + depsLockFilePath, + runtime: Runtime.NODEJS_14_X, + architecture: Architecture.X86_64, + forceDockerBundling: true, + network: 'host', + }); + + expect(Code.fromAsset).toHaveBeenCalledWith('/project', { + assetHashType: AssetHashType.OUTPUT, + bundling: expect.objectContaining({ + network: 'host', + }), + }); +}); diff --git a/packages/@aws-cdk/aws-lambda-python/README.md b/packages/@aws-cdk/aws-lambda-python/README.md index fc68cbce9d837..f7ca29de39e0a 100644 --- a/packages/@aws-cdk/aws-lambda-python/README.md +++ b/packages/@aws-cdk/aws-lambda-python/README.md @@ -145,6 +145,24 @@ new python.PythonFunction(this, 'function', { }); ``` +You can set additional Docker options to configure the build environment: + + ```ts +const entry = '/path/to/function'; + +new python.PythonFunction(this, 'function', { + entry, + runtime: Runtime.PYTHON_3_8, + bundling: { + network: 'host', + securityOpt: 'no-new-privileges', + user: 'user:group', + volumesFrom: ['777f7dc92da7'], + volumes: [{ hostPath: '/host-path', containerPath: '/container-path' }], + }, +}); +``` + ## Custom Bundling with Code Artifact To use a Code Artifact PyPI repo, the `PIP_INDEX_URL` for bundling the function can be customized (requires AWS CLI in the build environment): @@ -198,3 +216,39 @@ new python.PythonFunction(this, 'function', { }, }); ``` + +## Command hooks + +It is possible to run additional commands by specifying the `commandHooks` prop: + +```ts +const entry = '/path/to/function'; +new python.PythonFunction(this, 'function', { + entry, + runtime: Runtime.PYTHON_3_8, + bundling: { + commandHooks: { + // run tests + beforeBundling(inputDir: string): string[] { + return ['pytest']; + }, + afterBundling(inputDir: string): string[] { + return ['pylint']; + }, + // ... + }, + }, +}); +``` + +The following hooks are available: + +- `beforeBundling`: runs before all bundling commands +- `afterBundling`: runs after all bundling commands + +They all receive the directory containing the dependencies file (`inputDir`) and the +directory where the bundled asset will be output (`outputDir`). They must return +an array of commands to run. Commands are chained with `&&`. + +The commands will run in the environment in which bundling occurs: inside the +container for Docker bundling or on the host OS for local bundling. diff --git a/packages/@aws-cdk/aws-lambda-python/lib/bundling.ts b/packages/@aws-cdk/aws-lambda-python/lib/bundling.ts index 726b72c5bc2b8..f83756a334fe8 100644 --- a/packages/@aws-cdk/aws-lambda-python/lib/bundling.ts +++ b/packages/@aws-cdk/aws-lambda-python/lib/bundling.ts @@ -1,8 +1,8 @@ import * as path from 'path'; import { Architecture, AssetCode, Code, Runtime } from '@aws-cdk/aws-lambda'; -import { AssetStaging, BundlingOptions as CdkBundlingOptions, DockerImage } from '@aws-cdk/core'; +import { AssetStaging, BundlingOptions as CdkBundlingOptions, DockerImage, DockerVolume } from '@aws-cdk/core'; import { Packaging, DependenciesFile } from './packaging'; -import { BundlingOptions } from './types'; +import { BundlingOptions, ICommandHooks } from './types'; /** * Dependency files to exclude from the asset hash. @@ -57,8 +57,15 @@ export class Bundling implements CdkBundlingOptions { } public readonly image: DockerImage; + public readonly entrypoint?: string[] public readonly command: string[]; + public readonly volumes?: DockerVolume[]; + public readonly volumesFrom?: string[]; public readonly environment?: { [key: string]: string }; + public readonly workingDirectory?: string; + public readonly user?: string; + public readonly securityOpt?: string; + public readonly network?: string; constructor(props: BundlingProps) { const { @@ -68,6 +75,7 @@ export class Bundling implements CdkBundlingOptions { outputPathSuffix = '', image, poetryIncludeHashes, + commandHooks, } = props; const outputPath = path.posix.join(AssetStaging.BUNDLING_OUTPUT_DIR, outputPathSuffix); @@ -77,6 +85,7 @@ export class Bundling implements CdkBundlingOptions { inputDir: AssetStaging.BUNDLING_INPUT_DIR, outputDir: outputPath, poetryIncludeHashes, + commandHooks, }); this.image = image ?? DockerImage.fromBuild(path.join(__dirname, '../lib'), { @@ -86,19 +95,28 @@ export class Bundling implements CdkBundlingOptions { }, platform: architecture.dockerPlatform, }); - this.command = ['bash', '-c', chain(bundlingCommands)]; + this.command = props.command ?? ['bash', '-c', chain(bundlingCommands)]; + this.entrypoint = props.entrypoint; + this.volumes = props.volumes; + this.volumesFrom = props.volumesFrom; this.environment = props.environment; + this.workingDirectory = props.workingDirectory; + this.user = props.user; + this.securityOpt = props.securityOpt; + this.network = props.network; } private createBundlingCommand(options: BundlingCommandOptions): string[] { const packaging = Packaging.fromEntry(options.entry, options.poetryIncludeHashes); let bundlingCommands: string[] = []; + bundlingCommands.push(...options.commandHooks?.beforeBundling(options.inputDir, options.outputDir) ?? []); bundlingCommands.push(`cp -rTL ${options.inputDir}/ ${options.outputDir}`); bundlingCommands.push(`cd ${options.outputDir}`); bundlingCommands.push(packaging.exportCommand ?? ''); if (packaging.dependenciesFile) { bundlingCommands.push(`python -m pip install -r ${DependenciesFile.PIP} -t ${options.outputDir}`); } + bundlingCommands.push(...options.commandHooks?.afterBundling(options.inputDir, options.outputDir) ?? []); return bundlingCommands; } } @@ -108,6 +126,7 @@ interface BundlingCommandOptions { readonly inputDir: string; readonly outputDir: string; readonly poetryIncludeHashes?: boolean; + readonly commandHooks?: ICommandHooks } /** diff --git a/packages/@aws-cdk/aws-lambda-python/lib/types.ts b/packages/@aws-cdk/aws-lambda-python/lib/types.ts index 3689c43335959..ad0ff6f8ce09d 100644 --- a/packages/@aws-cdk/aws-lambda-python/lib/types.ts +++ b/packages/@aws-cdk/aws-lambda-python/lib/types.ts @@ -1,10 +1,10 @@ -import { AssetHashType, DockerImage } from '@aws-cdk/core'; +import { AssetHashType, DockerImage, DockerRunOptions } from '@aws-cdk/core'; /** * Options for bundling */ -export interface BundlingOptions { +export interface BundlingOptions extends DockerRunOptions { /** * Whether to export Poetry dependencies with hashes. Note that this can cause builds to fail if not all dependencies @@ -40,13 +40,6 @@ export interface BundlingOptions { */ readonly buildArgs?: { [key: string]: string }; - /** - * Environment variables defined when bundling runs. - * - * @default - no environment variables are defined. - */ - readonly environment?: { [key: string]: string; }; - /** * Determines how asset hash is calculated. Assets will get rebuild and * uploaded only if their hash has changed. @@ -86,4 +79,45 @@ export interface BundlingOptions { * @default - Based on `assetHashType` */ readonly assetHash?: string; + + /** + * Command hooks + * + * @default - do not run additional commands + */ + readonly commandHooks?: ICommandHooks; +} + +/** + * Command hooks + * + * These commands will run in the environment in which bundling occurs: inside + * the container for Docker bundling or on the host OS for local bundling. + * + * Commands are chained with `&&`. + * + * ```text + * { + * // Run tests prior to bundling + * beforeBundling(inputDir: string, outputDir: string): string[] { + * return [`pytest`]; + * } + * // ... + * } + * ``` + */ +export interface ICommandHooks { + /** + * Returns commands to run before bundling. + * + * Commands are chained with `&&`. + */ + beforeBundling(inputDir: string, outputDir: string): string[]; + + /** + * Returns commands to run after bundling. + * + * Commands are chained with `&&`. + */ + afterBundling(inputDir: string, outputDir: string): string[]; } diff --git a/packages/@aws-cdk/aws-lambda-python/test/bundling.test.ts b/packages/@aws-cdk/aws-lambda-python/test/bundling.test.ts index 5626a3f02d2a4..d6172ccfb705b 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/bundling.test.ts +++ b/packages/@aws-cdk/aws-lambda-python/test/bundling.test.ts @@ -278,6 +278,102 @@ test('Bundling with custom environment vars`', () => { })); }); +test('Bundling with volumes from other container', () => { + const entry = path.join(__dirname, 'lambda-handler'); + Bundling.bundle({ + entry: entry, + runtime: Runtime.PYTHON_3_7, + volumesFrom: ['777f7dc92da7'], + + }); + + expect(Code.fromAsset).toHaveBeenCalledWith(entry, expect.objectContaining({ + bundling: expect.objectContaining({ + volumesFrom: ['777f7dc92da7'], + }), + })); +}); + +test('Bundling with custom volume paths', () => { + const entry = path.join(__dirname, 'lambda-handler'); + Bundling.bundle({ + entry: entry, + runtime: Runtime.PYTHON_3_7, + volumes: [{ hostPath: '/host-path', containerPath: '/container-path' }], + + }); + + expect(Code.fromAsset).toHaveBeenCalledWith(entry, expect.objectContaining({ + bundling: expect.objectContaining({ + volumes: [{ hostPath: '/host-path', containerPath: '/container-path' }], + }), + })); +}); + +test('Bundling with custom working directory', () => { + const entry = path.join(__dirname, 'lambda-handler'); + Bundling.bundle({ + entry: entry, + runtime: Runtime.PYTHON_3_7, + workingDirectory: '/my-dir', + + }); + + expect(Code.fromAsset).toHaveBeenCalledWith(entry, expect.objectContaining({ + bundling: expect.objectContaining({ + workingDirectory: '/my-dir', + }), + })); +}); + +test('Bundling with custom user', () => { + const entry = path.join(__dirname, 'lambda-handler'); + Bundling.bundle({ + entry: entry, + runtime: Runtime.PYTHON_3_7, + user: 'user:group', + + }); + + expect(Code.fromAsset).toHaveBeenCalledWith(entry, expect.objectContaining({ + bundling: expect.objectContaining({ + user: 'user:group', + }), + })); +}); + +test('Bundling with custom securityOpt', () => { + const entry = path.join(__dirname, 'lambda-handler'); + Bundling.bundle({ + entry: entry, + runtime: Runtime.PYTHON_3_7, + securityOpt: 'no-new-privileges', + + }); + + expect(Code.fromAsset).toHaveBeenCalledWith(entry, expect.objectContaining({ + bundling: expect.objectContaining({ + securityOpt: 'no-new-privileges', + }), + })); +}); + +test('Bundling with custom network', () => { + const entry = path.join(__dirname, 'lambda-handler'); + Bundling.bundle({ + entry: entry, + runtime: Runtime.PYTHON_3_7, + network: 'host', + + }); + + expect(Code.fromAsset).toHaveBeenCalledWith(entry, expect.objectContaining({ + bundling: expect.objectContaining({ + network: 'host', + }), + })); +}); + test('Do not build docker image when skipping bundling', () => { const entry = path.join(__dirname, 'lambda-handler'); Bundling.bundle({ @@ -299,3 +395,32 @@ test('Build docker image when bundling is not skipped', () => { expect(DockerImage.fromBuild).toHaveBeenCalled(); }); + +test('with command hooks', () => { + const entry = path.join(__dirname, 'lambda-handler'); + Bundling.bundle({ + entry: entry, + runtime: Runtime.PYTHON_3_7, + skip: false, + commandHooks: { + beforeBundling(inputDir: string, outputDir: string): string[] { + return [ + `echo hello > ${inputDir}/a.txt`, + `cp ${inputDir}/a.txt ${outputDir}`, + ]; + }, + afterBundling(inputDir: string, outputDir: string): string[] { + return [`cp ${inputDir}/b.txt ${outputDir}/txt`]; + }, + }, + }); + + expect(Code.fromAsset).toHaveBeenCalledWith(entry, expect.objectContaining({ + bundling: expect.objectContaining({ + command: [ + 'bash', '-c', + expect.stringMatching(/^echo hello > \/asset-input\/a.txt && cp \/asset-input\/a.txt \/asset-output && .+ && cp \/asset-input\/b.txt \/asset-output\/txt$/), + ], + }), + })); +}); diff --git a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build/requirements.txt b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build/requirements.txt index 4fcd85719fe3a..d9a8c0518bf37 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build/requirements.txt +++ b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build/requirements.txt @@ -1,5 +1,5 @@ # Lock versions of pip packages -certifi==2020.6.20 +certifi==2022.12.7 chardet==3.0.4 idna==2.10 urllib3==1.26.7 diff --git a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-pipenv/Pipfile.lock b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-pipenv/Pipfile.lock index 441acc679505f..1a9abf9618a62 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-pipenv/Pipfile.lock +++ b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-pipenv/Pipfile.lock @@ -16,26 +16,27 @@ "default": { "certifi": { "hashes": [ - "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", - "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569" + "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", + "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" ], - "version": "==2021.10.8" + "index": "pypi", + "version": "==2022.12.7" }, "charset-normalizer": { "hashes": [ - "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd", - "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455" + "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", + "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" ], "markers": "python_version >= '3'", - "version": "==2.0.10" + "version": "==2.0.12" }, "idna": { "hashes": [ - "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", - "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" ], "markers": "python_version >= '3'", - "version": "==3.3" + "version": "==3.4" }, "requests": { "hashes": [ @@ -47,11 +48,11 @@ }, "urllib3": { "hashes": [ - "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed", - "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c" + "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", + "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", - "version": "==1.26.8" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==1.26.13" } }, "develop": {} diff --git a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-poetry/poetry.lock b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-poetry/poetry.lock index 6b59241f10c2d..892273ecf8556 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-poetry/poetry.lock +++ b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-poetry/poetry.lock @@ -1,10 +1,10 @@ [[package]] name = "certifi" -version = "2021.10.8" +version = "2022.12.7" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "charset-normalizer" @@ -15,7 +15,7 @@ optional = false python-versions = ">=3.5.0" [package.extras] -unicode_backport = ["unicodedata2"] +unicode-backport = ["unicodedata2"] [[package]] name = "idna" @@ -41,7 +41,7 @@ urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<5)"] [[package]] name = "urllib3" @@ -53,18 +53,18 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" [package.extras] brotli = ["brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [metadata] lock-version = "1.1" python-versions = "^3.6" -content-hash = "cf158be6b11f3c989228cb0acf2bbb120599853ed83b562d267bfc135eed126a" +content-hash = "0688bcc269cb32eab2edeadcb342631e24cf30fd9ef54f8710010cc06cd523c5" [metadata.files] certifi = [ - {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, - {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, ] charset-normalizer = [ {file = "charset-normalizer-2.0.9.tar.gz", hash = "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c"}, diff --git a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-project/lambda/requirements.txt b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-project/lambda/requirements.txt index 4fcd85719fe3a..d9a8c0518bf37 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-project/lambda/requirements.txt +++ b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-project/lambda/requirements.txt @@ -1,5 +1,5 @@ # Lock versions of pip packages -certifi==2020.6.20 +certifi==2022.12.7 chardet==3.0.4 idna==2.10 urllib3==1.26.7 diff --git a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-project/shared/requirements.txt b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-project/shared/requirements.txt index eff24435fa632..1678183412fa0 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-project/shared/requirements.txt +++ b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-project/shared/requirements.txt @@ -1,5 +1,5 @@ # Lock versions of pip packages -certifi==2020.6.20 +certifi==2022.12.7 chardet==3.0.4 idna==2.10 urllib3==1.26.7 diff --git a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler/requirements.txt b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler/requirements.txt index 4fcd85719fe3a..d9a8c0518bf37 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler/requirements.txt +++ b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler/requirements.txt @@ -1,5 +1,5 @@ # Lock versions of pip packages -certifi==2020.6.20 +certifi==2022.12.7 chardet==3.0.4 idna==2.10 urllib3==1.26.7 diff --git a/packages/@aws-cdk/aws-lambda/package.json b/packages/@aws-cdk/aws-lambda/package.json index ff47846594671..f7191f7ed90e6 100644 --- a/packages/@aws-cdk/aws-lambda/package.json +++ b/packages/@aws-cdk/aws-lambda/package.json @@ -91,9 +91,9 @@ "@aws-cdk/cfn2ts": "0.0.0", "@aws-cdk/cfnspec": "0.0.0", "@aws-cdk/pkglint": "0.0.0", - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/jest": "^27.5.2", - "@types/lodash": "^4.14.189", + "@types/lodash": "^4.14.191", "jest": "^27.5.1", "lodash": "^4.17.21" }, diff --git a/packages/@aws-cdk/aws-logs/package.json b/packages/@aws-cdk/aws-logs/package.json index 262f02cac7d0e..4cf3291ddd89c 100644 --- a/packages/@aws-cdk/aws-logs/package.json +++ b/packages/@aws-cdk/aws-logs/package.json @@ -86,7 +86,7 @@ "@aws-cdk/integ-tests": "0.0.0", "@aws-cdk/cfn2ts": "0.0.0", "@aws-cdk/pkglint": "0.0.0", - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/jest": "^27.5.2", "@types/sinon": "^9.0.11", "aws-sdk": "^2.1211.0", diff --git a/packages/@aws-cdk/aws-opensearchserverless/.eslintrc.js b/packages/@aws-cdk/aws-opensearchserverless/.eslintrc.js new file mode 100644 index 0000000000000..2658ee8727166 --- /dev/null +++ b/packages/@aws-cdk/aws-opensearchserverless/.eslintrc.js @@ -0,0 +1,3 @@ +const baseConfig = require('@aws-cdk/cdk-build-tools/config/eslintrc'); +baseConfig.parserOptions.project = __dirname + '/tsconfig.json'; +module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-opensearchserverless/.gitignore b/packages/@aws-cdk/aws-opensearchserverless/.gitignore new file mode 100644 index 0000000000000..62ebc95d75ce6 --- /dev/null +++ b/packages/@aws-cdk/aws-opensearchserverless/.gitignore @@ -0,0 +1,19 @@ +*.js +*.js.map +*.d.ts +tsconfig.json +node_modules +*.generated.ts +dist +.jsii + +.LAST_BUILD +.nyc_output +coverage +.nycrc +.LAST_PACKAGE +*.snk +nyc.config.js +!.eslintrc.js +!jest.config.js +junit.xml diff --git a/packages/@aws-cdk/aws-opensearchserverless/.npmignore b/packages/@aws-cdk/aws-opensearchserverless/.npmignore new file mode 100644 index 0000000000000..f931fede67c44 --- /dev/null +++ b/packages/@aws-cdk/aws-opensearchserverless/.npmignore @@ -0,0 +1,29 @@ +# Don't include original .ts files when doing `npm pack` +*.ts +!*.d.ts +coverage +.nyc_output +*.tgz + +dist +.LAST_PACKAGE +.LAST_BUILD +!*.js + +# Include .jsii +!.jsii + +*.snk + +*.tsbuildinfo + +tsconfig.json + +.eslintrc.js +jest.config.js + +# exclude cdk artifacts +**/cdk.out +junit.xml +test/ +!*.lit.ts diff --git a/packages/@aws-cdk/aws-opensearchserverless/LICENSE b/packages/@aws-cdk/aws-opensearchserverless/LICENSE new file mode 100644 index 0000000000000..82ad00bb02d0b --- /dev/null +++ b/packages/@aws-cdk/aws-opensearchserverless/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/@aws-cdk/aws-opensearchserverless/NOTICE b/packages/@aws-cdk/aws-opensearchserverless/NOTICE new file mode 100644 index 0000000000000..1b7adbb891265 --- /dev/null +++ b/packages/@aws-cdk/aws-opensearchserverless/NOTICE @@ -0,0 +1,2 @@ +AWS Cloud Development Kit (AWS CDK) +Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/packages/@aws-cdk/aws-opensearchserverless/README.md b/packages/@aws-cdk/aws-opensearchserverless/README.md new file mode 100644 index 0000000000000..5cb981bb37e81 --- /dev/null +++ b/packages/@aws-cdk/aws-opensearchserverless/README.md @@ -0,0 +1,39 @@ +# AWS::OpenSearchServerless Construct Library + + +--- + +![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge) + +> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use. +> +> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib + +--- + + + +This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. + +```ts nofixture +import * as opensearchserverless from '@aws-cdk/aws-opensearchserverless'; +``` + + + +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: + +- Search [Construct Hub for OpenSearchServerless construct libraries](https://constructs.dev/search?q=opensearchserverless) +- 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::OpenSearchServerless resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_OpenSearchServerless.html) directly. + + + + +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. + +For more information on the resources and properties available for this service, see the [CloudFormation documentation for AWS::OpenSearchServerless](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_OpenSearchServerless.html). + +(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.) + + diff --git a/packages/@aws-cdk/aws-opensearchserverless/jest.config.js b/packages/@aws-cdk/aws-opensearchserverless/jest.config.js new file mode 100644 index 0000000000000..3a2fd93a1228a --- /dev/null +++ b/packages/@aws-cdk/aws-opensearchserverless/jest.config.js @@ -0,0 +1,2 @@ +const baseConfig = require('@aws-cdk/cdk-build-tools/config/jest.config'); +module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-opensearchserverless/lib/index.ts b/packages/@aws-cdk/aws-opensearchserverless/lib/index.ts new file mode 100644 index 0000000000000..8baf8a08b7489 --- /dev/null +++ b/packages/@aws-cdk/aws-opensearchserverless/lib/index.ts @@ -0,0 +1,2 @@ +// AWS::OpenSearchServerless CloudFormation Resources: +export * from './opensearchserverless.generated'; diff --git a/packages/@aws-cdk/aws-opensearchserverless/package.json b/packages/@aws-cdk/aws-opensearchserverless/package.json new file mode 100644 index 0000000000000..185609c787fce --- /dev/null +++ b/packages/@aws-cdk/aws-opensearchserverless/package.json @@ -0,0 +1,113 @@ +{ + "name": "@aws-cdk/aws-opensearchserverless", + "version": "0.0.0", + "description": "AWS::OpenSearchServerless Construct Library", + "private": true, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "jsii": { + "outdir": "dist", + "projectReferences": true, + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.OpenSearchServerless", + "packageId": "Amazon.CDK.AWS.OpenSearchServerless", + "signAssembly": true, + "assemblyOriginatorKeyFile": "../../key.snk", + "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/main/logo/default-256-dark.png" + }, + "java": { + "package": "software.amazon.awscdk.services.opensearchserverless", + "maven": { + "groupId": "software.amazon.awscdk", + "artifactId": "opensearchserverless" + } + }, + "python": { + "classifiers": [ + "Framework :: AWS CDK", + "Framework :: AWS CDK :: 2" + ], + "distName": "aws-cdk.aws-opensearchserverless", + "module": "aws_cdk.aws_opensearchserverless" + } + }, + "metadata": { + "jsii": { + "rosetta": { + "strict": true + } + } + } + }, + "repository": { + "type": "git", + "url": "https://github.com/aws/aws-cdk.git", + "directory": "packages/@aws-cdk/aws-opensearchserverless" + }, + "homepage": "https://github.com/aws/aws-cdk", + "scripts": { + "build": "cdk-build", + "watch": "cdk-watch", + "lint": "cdk-lint", + "test": "cdk-test", + "integ": "cdk-integ", + "pkglint": "pkglint -f", + "package": "cdk-package", + "awslint": "cdk-awslint", + "cfn2ts": "cfn2ts", + "build+test": "yarn build && yarn test", + "build+test+package": "yarn build+test && yarn package", + "compat": "cdk-compat", + "gen": "cfn2ts", + "rosetta:extract": "yarn --silent jsii-rosetta extract", + "build+extract": "yarn build && yarn rosetta:extract", + "build+test+extract": "yarn build+test && yarn rosetta:extract" + }, + "cdk-build": { + "cloudformation": "AWS::OpenSearchServerless", + "jest": true, + "env": { + "AWSLINT_BASE_CONSTRUCT": "true" + } + }, + "keywords": [ + "aws", + "cdk", + "constructs", + "AWS::OpenSearchServerless", + "aws-opensearchserverless" + ], + "author": { + "name": "Amazon Web Services", + "url": "https://aws.amazon.com", + "organization": true + }, + "license": "Apache-2.0", + "devDependencies": { + "@aws-cdk/assertions": "0.0.0", + "@aws-cdk/cdk-build-tools": "0.0.0", + "@aws-cdk/cfn2ts": "0.0.0", + "@aws-cdk/pkglint": "0.0.0", + "@types/jest": "^27.5.2" + }, + "dependencies": { + "@aws-cdk/core": "0.0.0", + "constructs": "^10.0.0" + }, + "peerDependencies": { + "@aws-cdk/core": "0.0.0", + "constructs": "^10.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "stability": "experimental", + "maturity": "cfn-only", + "awscdkio": { + "announce": false + }, + "publishConfig": { + "tag": "latest" + } +} diff --git a/packages/@aws-cdk/aws-opensearchserverless/rosetta/default.ts-fixture b/packages/@aws-cdk/aws-opensearchserverless/rosetta/default.ts-fixture new file mode 100644 index 0000000000000..e208762bca03c --- /dev/null +++ b/packages/@aws-cdk/aws-opensearchserverless/rosetta/default.ts-fixture @@ -0,0 +1,8 @@ +import { Construct } from 'constructs'; +import { Stack } from '@aws-cdk/core'; + +class MyStack extends Stack { + constructor(scope: Construct, id: string) { + /// here + } +} diff --git a/packages/@aws-cdk/aws-opensearchserverless/test/opensearchserverless.test.ts b/packages/@aws-cdk/aws-opensearchserverless/test/opensearchserverless.test.ts new file mode 100644 index 0000000000000..465c7bdea0693 --- /dev/null +++ b/packages/@aws-cdk/aws-opensearchserverless/test/opensearchserverless.test.ts @@ -0,0 +1,6 @@ +import '@aws-cdk/assertions'; +import {} from '../lib'; + +test('No tests are specified for this package', () => { + expect(true).toBe(true); +}); diff --git a/packages/@aws-cdk/aws-opensearchservice/README.md b/packages/@aws-cdk/aws-opensearchservice/README.md index 0e372d1eebdc1..5b68e6e770214 100644 --- a/packages/@aws-cdk/aws-opensearchservice/README.md +++ b/packages/@aws-cdk/aws-opensearchservice/README.md @@ -22,8 +22,6 @@ Higher level constructs for Domain | ![Stable](https://img.shields.io/badge/stab -Amazon OpenSearch Service is the successor to Amazon Elasticsearch Service. - See [Migrating to OpenSearch](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-elasticsearch-readme.html#migrating-to-opensearch) for migration instructions from `@aws-cdk/aws-elasticsearch` to this module, `@aws-cdk/aws-opensearchservice`. ## Quick start diff --git a/packages/@aws-cdk/aws-opensearchservice/lib/domain.ts b/packages/@aws-cdk/aws-opensearchservice/lib/domain.ts index 06d450320890f..7ea759f7e82d0 100644 --- a/packages/@aws-cdk/aws-opensearchservice/lib/domain.ts +++ b/packages/@aws-cdk/aws-opensearchservice/lib/domain.ts @@ -1235,8 +1235,11 @@ export class Domain extends DomainBase implements IDomain, ec2.IConnectable { let securityGroups: ec2.ISecurityGroup[] | undefined; let subnets: ec2.ISubnet[] | undefined; + let skipZoneAwarenessCheck: boolean = false; if (props.vpc) { - subnets = selectSubnets(props.vpc, props.vpcSubnets ?? [{ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }]); + const subnetSelections = props.vpcSubnets ?? [{ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }]; + subnets = selectSubnets(props.vpc, subnetSelections); + skipZoneAwarenessCheck = zoneAwarenessCheckShouldBeSkipped(props.vpc, subnetSelections); securityGroups = props.securityGroups ?? [new ec2.SecurityGroup(this, 'SecurityGroup', { vpc: props.vpc, description: `Security group for domain ${this.node.id}`, @@ -1248,8 +1251,12 @@ export class Domain extends DomainBase implements IDomain, ec2.IConnectable { } } - // If VPC options are supplied ensure that the number of subnets matches the number AZ - if (subnets && zoneAwarenessEnabled && new Set(subnets.map((subnet) => subnet.availabilityZone)).size < availabilityZoneCount) { + // If VPC options are supplied ensure that the number of subnets matches the number AZ (only if the vpc is not imported from another stack) + if (subnets && + zoneAwarenessEnabled && + !skipZoneAwarenessCheck && + new Set(subnets.map((subnet) => subnet.availabilityZone)).size < availabilityZoneCount + ) { throw new Error('When providing vpc options you need to provide a subnet for each AZ you are using'); } @@ -1776,6 +1783,22 @@ function selectSubnets(vpc: ec2.IVpc, vpcSubnets: ec2.SubnetSelection[]): ec2.IS return selected; } +/** + * Check if any of the subnets are pending lookups. If so, the zone awareness check should be skipped, otherwise it will always throw an error + * + * @param vpc The vpc to which the subnets apply + * @param vpcSubnets The vpc subnets that should be checked + * @returns true if there are pending lookups for the subnets + */ +function zoneAwarenessCheckShouldBeSkipped(vpc: ec2.IVpc, vpcSubnets: ec2.SubnetSelection[]): boolean { + for (const selection of vpcSubnets) { + if (vpc.selectSubnets(selection).isPendingLookup) { + return true; + }; + } + return false; +} + /** * Initializes an instance type. * diff --git a/packages/@aws-cdk/aws-opensearchservice/test/domain.test.ts b/packages/@aws-cdk/aws-opensearchservice/test/domain.test.ts index 6260678513600..6e983d88baf7e 100644 --- a/packages/@aws-cdk/aws-opensearchservice/test/domain.test.ts +++ b/packages/@aws-cdk/aws-opensearchservice/test/domain.test.ts @@ -2,7 +2,7 @@ import { Match, Template } from '@aws-cdk/assertions'; import * as acm from '@aws-cdk/aws-certificatemanager'; import { Metric, Statistic } from '@aws-cdk/aws-cloudwatch'; -import { Vpc, EbsDeviceVolumeType, Port, SecurityGroup } from '@aws-cdk/aws-ec2'; +import { Vpc, EbsDeviceVolumeType, Port, SecurityGroup, SubnetType } from '@aws-cdk/aws-ec2'; import * as iam from '@aws-cdk/aws-iam'; import * as kms from '@aws-cdk/aws-kms'; import * as logs from '@aws-cdk/aws-logs'; @@ -1406,6 +1406,27 @@ describe('custom error responses', () => { })).toThrow(/you need to provide a subnet for each AZ you are using/); }); + test('Imported VPC with subnets that are still pending lookup won\'t throw Az count mismatch', () => { + const vpc = Vpc.fromLookup(stack, 'ExampleVpc', { + vpcId: 'vpc-123', + }); + let subnets = vpc.selectSubnets({ + subnetType: SubnetType.PRIVATE_WITH_EGRESS, + }); + + new Domain(stack, 'Domain1', { + version: defaultVersion, + vpc, + vpcSubnets: [subnets], + zoneAwareness: { + enabled: true, + availabilityZoneCount: 3, + }, + }); + + Template.fromStack(stack).resourceCountIs('AWS::OpenSearchService::Domain', 1); + }); + test('error when master, data or Ultra Warm instance types do not end with .search', () => { const error = /instance types must end with ".search"/; expect(() => new Domain(stack, 'Domain1', { diff --git a/packages/@aws-cdk/aws-pipes/.eslintrc.js b/packages/@aws-cdk/aws-pipes/.eslintrc.js new file mode 100644 index 0000000000000..2658ee8727166 --- /dev/null +++ b/packages/@aws-cdk/aws-pipes/.eslintrc.js @@ -0,0 +1,3 @@ +const baseConfig = require('@aws-cdk/cdk-build-tools/config/eslintrc'); +baseConfig.parserOptions.project = __dirname + '/tsconfig.json'; +module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-pipes/.gitignore b/packages/@aws-cdk/aws-pipes/.gitignore new file mode 100644 index 0000000000000..62ebc95d75ce6 --- /dev/null +++ b/packages/@aws-cdk/aws-pipes/.gitignore @@ -0,0 +1,19 @@ +*.js +*.js.map +*.d.ts +tsconfig.json +node_modules +*.generated.ts +dist +.jsii + +.LAST_BUILD +.nyc_output +coverage +.nycrc +.LAST_PACKAGE +*.snk +nyc.config.js +!.eslintrc.js +!jest.config.js +junit.xml diff --git a/packages/@aws-cdk/aws-pipes/.npmignore b/packages/@aws-cdk/aws-pipes/.npmignore new file mode 100644 index 0000000000000..f931fede67c44 --- /dev/null +++ b/packages/@aws-cdk/aws-pipes/.npmignore @@ -0,0 +1,29 @@ +# Don't include original .ts files when doing `npm pack` +*.ts +!*.d.ts +coverage +.nyc_output +*.tgz + +dist +.LAST_PACKAGE +.LAST_BUILD +!*.js + +# Include .jsii +!.jsii + +*.snk + +*.tsbuildinfo + +tsconfig.json + +.eslintrc.js +jest.config.js + +# exclude cdk artifacts +**/cdk.out +junit.xml +test/ +!*.lit.ts diff --git a/packages/@aws-cdk/aws-pipes/LICENSE b/packages/@aws-cdk/aws-pipes/LICENSE new file mode 100644 index 0000000000000..82ad00bb02d0b --- /dev/null +++ b/packages/@aws-cdk/aws-pipes/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/@aws-cdk/aws-pipes/NOTICE b/packages/@aws-cdk/aws-pipes/NOTICE new file mode 100644 index 0000000000000..1b7adbb891265 --- /dev/null +++ b/packages/@aws-cdk/aws-pipes/NOTICE @@ -0,0 +1,2 @@ +AWS Cloud Development Kit (AWS CDK) +Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/packages/@aws-cdk/aws-pipes/README.md b/packages/@aws-cdk/aws-pipes/README.md new file mode 100644 index 0000000000000..e2f26a95a16a9 --- /dev/null +++ b/packages/@aws-cdk/aws-pipes/README.md @@ -0,0 +1,39 @@ +# AWS::Pipes Construct Library + + +--- + +![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge) + +> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use. +> +> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib + +--- + + + +This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. + +```ts nofixture +import * as pipes from '@aws-cdk/aws-pipes'; +``` + + + +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: + +- Search [Construct Hub for Pipes construct libraries](https://constructs.dev/search?q=pipes) +- 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::Pipes resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Pipes.html) directly. + + + + +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. + +For more information on the resources and properties available for this service, see the [CloudFormation documentation for AWS::Pipes](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Pipes.html). + +(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.) + + diff --git a/packages/@aws-cdk/aws-pipes/jest.config.js b/packages/@aws-cdk/aws-pipes/jest.config.js new file mode 100644 index 0000000000000..3a2fd93a1228a --- /dev/null +++ b/packages/@aws-cdk/aws-pipes/jest.config.js @@ -0,0 +1,2 @@ +const baseConfig = require('@aws-cdk/cdk-build-tools/config/jest.config'); +module.exports = baseConfig; diff --git a/packages/@aws-cdk/aws-pipes/lib/index.ts b/packages/@aws-cdk/aws-pipes/lib/index.ts new file mode 100644 index 0000000000000..3dab377f93b15 --- /dev/null +++ b/packages/@aws-cdk/aws-pipes/lib/index.ts @@ -0,0 +1,2 @@ +// AWS::Pipes CloudFormation Resources: +export * from './pipes.generated'; diff --git a/packages/@aws-cdk/aws-pipes/package.json b/packages/@aws-cdk/aws-pipes/package.json new file mode 100644 index 0000000000000..811b5c54f3034 --- /dev/null +++ b/packages/@aws-cdk/aws-pipes/package.json @@ -0,0 +1,113 @@ +{ + "name": "@aws-cdk/aws-pipes", + "version": "0.0.0", + "description": "AWS::Pipes Construct Library", + "private": true, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "jsii": { + "outdir": "dist", + "projectReferences": true, + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Pipes", + "packageId": "Amazon.CDK.AWS.Pipes", + "signAssembly": true, + "assemblyOriginatorKeyFile": "../../key.snk", + "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/main/logo/default-256-dark.png" + }, + "java": { + "package": "software.amazon.awscdk.services.pipes", + "maven": { + "groupId": "software.amazon.awscdk", + "artifactId": "pipes" + } + }, + "python": { + "classifiers": [ + "Framework :: AWS CDK", + "Framework :: AWS CDK :: 2" + ], + "distName": "aws-cdk.aws-pipes", + "module": "aws_cdk.aws_pipes" + } + }, + "metadata": { + "jsii": { + "rosetta": { + "strict": true + } + } + } + }, + "repository": { + "type": "git", + "url": "https://github.com/aws/aws-cdk.git", + "directory": "packages/@aws-cdk/aws-pipes" + }, + "homepage": "https://github.com/aws/aws-cdk", + "scripts": { + "build": "cdk-build", + "watch": "cdk-watch", + "lint": "cdk-lint", + "test": "cdk-test", + "integ": "cdk-integ", + "pkglint": "pkglint -f", + "package": "cdk-package", + "awslint": "cdk-awslint", + "cfn2ts": "cfn2ts", + "build+test": "yarn build && yarn test", + "build+test+package": "yarn build+test && yarn package", + "compat": "cdk-compat", + "gen": "cfn2ts", + "rosetta:extract": "yarn --silent jsii-rosetta extract", + "build+extract": "yarn build && yarn rosetta:extract", + "build+test+extract": "yarn build+test && yarn rosetta:extract" + }, + "cdk-build": { + "cloudformation": "AWS::Pipes", + "jest": true, + "env": { + "AWSLINT_BASE_CONSTRUCT": "true" + } + }, + "keywords": [ + "aws", + "cdk", + "constructs", + "AWS::Pipes", + "aws-pipes" + ], + "author": { + "name": "Amazon Web Services", + "url": "https://aws.amazon.com", + "organization": true + }, + "license": "Apache-2.0", + "devDependencies": { + "@aws-cdk/assertions": "0.0.0", + "@aws-cdk/cdk-build-tools": "0.0.0", + "@aws-cdk/cfn2ts": "0.0.0", + "@aws-cdk/pkglint": "0.0.0", + "@types/jest": "^27.5.2" + }, + "dependencies": { + "@aws-cdk/core": "0.0.0", + "constructs": "^10.0.0" + }, + "peerDependencies": { + "@aws-cdk/core": "0.0.0", + "constructs": "^10.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "stability": "experimental", + "maturity": "cfn-only", + "awscdkio": { + "announce": false + }, + "publishConfig": { + "tag": "latest" + } +} diff --git a/packages/@aws-cdk/aws-pipes/rosetta/default.ts-fixture b/packages/@aws-cdk/aws-pipes/rosetta/default.ts-fixture new file mode 100644 index 0000000000000..e208762bca03c --- /dev/null +++ b/packages/@aws-cdk/aws-pipes/rosetta/default.ts-fixture @@ -0,0 +1,8 @@ +import { Construct } from 'constructs'; +import { Stack } from '@aws-cdk/core'; + +class MyStack extends Stack { + constructor(scope: Construct, id: string) { + /// here + } +} diff --git a/packages/@aws-cdk/aws-pipes/test/pipes.test.ts b/packages/@aws-cdk/aws-pipes/test/pipes.test.ts new file mode 100644 index 0000000000000..465c7bdea0693 --- /dev/null +++ b/packages/@aws-cdk/aws-pipes/test/pipes.test.ts @@ -0,0 +1,6 @@ +import '@aws-cdk/assertions'; +import {} from '../lib'; + +test('No tests are specified for this package', () => { + expect(true).toBe(true); +}); diff --git a/packages/@aws-cdk/aws-route53/package.json b/packages/@aws-cdk/aws-route53/package.json index 59734714e5f18..d5f6e8f4a5deb 100644 --- a/packages/@aws-cdk/aws-route53/package.json +++ b/packages/@aws-cdk/aws-route53/package.json @@ -85,7 +85,7 @@ "@aws-cdk/integ-runner": "0.0.0", "@aws-cdk/cfn2ts": "0.0.0", "@aws-cdk/pkglint": "0.0.0", - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/jest": "^27.5.2", "aws-sdk": "^2.1211.0", "jest": "^27.5.1" diff --git a/packages/@aws-cdk/aws-s3-deployment/README.md b/packages/@aws-cdk/aws-s3-deployment/README.md index b9048b820e0f8..8e445f13bb67b 100644 --- a/packages/@aws-cdk/aws-s3-deployment/README.md +++ b/packages/@aws-cdk/aws-s3-deployment/README.md @@ -61,6 +61,20 @@ new ConstructThatReadsFromTheBucket(this, 'Consumer', { }); ``` +It is also possible to add additional sources using the `addSource` method. + +```ts +declare const websiteBucket: s3.IBucket; + +const deployment = new s3deploy.BucketDeployment(this, 'DeployWebsite', { + sources: [s3deploy.Source.asset('./website-dist')], + destinationBucket: websiteBucket, + destinationKeyPrefix: 'web/static', // optional prefix in destination bucket +}); + +deployment.addSource(s3deploy.Source.asset('./another-asset')); +``` + ## Supported sources The following source types are supported for bucket deployments: diff --git a/packages/@aws-cdk/aws-s3-deployment/lib/bucket-deployment.ts b/packages/@aws-cdk/aws-s3-deployment/lib/bucket-deployment.ts index 209cc46e87f64..35e9819a2b334 100644 --- a/packages/@aws-cdk/aws-s3-deployment/lib/bucket-deployment.ts +++ b/packages/@aws-cdk/aws-s3-deployment/lib/bucket-deployment.ts @@ -253,6 +253,8 @@ export class BucketDeployment extends Construct { private readonly cr: cdk.CustomResource; private _deployedBucket?: s3.IBucket; private requestDestinationArn: boolean = false; + private readonly sources: SourceConfig[]; + private readonly handlerRole: iam.IRole; constructor(scope: Construct, id: string, props: BucketDeploymentProps) { super(scope, id); @@ -327,8 +329,9 @@ export class BucketDeployment extends Construct { const handlerRole = handler.role; if (!handlerRole) { throw new Error('lambda.SingletonFunction should have created a Role'); } + this.handlerRole = handlerRole; - const sources: SourceConfig[] = props.sources.map((source: ISource) => source.bind(this, { handlerRole })); + this.sources = props.sources.map((source: ISource) => source.bind(this, { handlerRole: this.handlerRole })); props.destinationBucket.grantReadWrite(handler); if (props.accessControl) { @@ -342,24 +345,35 @@ export class BucketDeployment extends Construct { })); } - // to avoid redundant stack updates, only include "SourceMarkers" if one of - // the sources actually has markers. - const hasMarkers = sources.some(source => source.markers); - // Markers are not replaced if zip sources are not extracted, so throw an error // if extraction is not wanted and sources have markers. - if (hasMarkers && props.extract == false) { - throw new Error('Some sources are incompatible with extract=false; sources with deploy-time values (such as \'snsTopic.topicArn\') must be extracted.'); - } + const _this = this; + this.node.addValidation({ + validate(): string[] { + if (_this.sources.some(source => source.markers) && props.extract == false) { + return ['Some sources are incompatible with extract=false; sources with deploy-time values (such as \'snsTopic.topicArn\') must be extracted.']; + } + return []; + }, + }); const crUniqueId = `CustomResource${this.renderUniqueId(props.memoryLimit, props.ephemeralStorageSize, props.vpc)}`; this.cr = new cdk.CustomResource(this, crUniqueId, { serviceToken: handler.functionArn, resourceType: 'Custom::CDKBucketDeployment', properties: { - SourceBucketNames: sources.map(source => source.bucket.bucketName), - SourceObjectKeys: sources.map(source => source.zipObjectKey), - SourceMarkers: hasMarkers ? sources.map(source => source.markers ?? {}) : undefined, + SourceBucketNames: cdk.Lazy.list({ produce: () => this.sources.map(source => source.bucket.bucketName) }), + SourceObjectKeys: cdk.Lazy.list({ produce: () => this.sources.map(source => source.zipObjectKey) }), + SourceMarkers: cdk.Lazy.any({ + produce: () => { + return this.sources.reduce((acc, source) => { + if (source.markers) { + acc.push(source.markers); + } + return acc; + }, [] as Array>); + }, + }, { omitEmptyArray: true }), DestinationBucketName: props.destinationBucket.bucketName, DestinationBucketKeyPrefix: props.destinationKeyPrefix, RetainOnDelete: props.retainOnDelete, @@ -465,6 +479,22 @@ export class BucketDeployment extends Construct { return objectKeys; } + /** + * Add an additional source to the bucket deployment + * + * @example + * declare const websiteBucket: s3.IBucket; + * const deployment = new s3deploy.BucketDeployment(this, 'Deployment', { + * sources: [s3deploy.Source.asset('./website-dist')], + * destinationBucket: websiteBucket, + * }); + * + * deployment.addSource(s3deploy.Source.asset('./another-asset')); + */ + public addSource(source: ISource): void { + this.sources.push(source.bind(this, { handlerRole: this.handlerRole })); + } + private renderUniqueId(memoryLimit?: number, ephemeralStorageSize?: cdk.Size, vpc?: ec2.IVpc) { let uuid = ''; diff --git a/packages/@aws-cdk/aws-s3-deployment/test/bucket-deployment.test.ts b/packages/@aws-cdk/aws-s3-deployment/test/bucket-deployment.test.ts index c153cfc7ff64f..d3312d9b58a49 100644 --- a/packages/@aws-cdk/aws-s3-deployment/test/bucket-deployment.test.ts +++ b/packages/@aws-cdk/aws-s3-deployment/test/bucket-deployment.test.ts @@ -997,14 +997,15 @@ test('given a source with markers and extract is false, BucketDeployment throws }, }, }); + new s3deploy.BucketDeployment(stack, 'Deploy', { + sources: [file], + destinationBucket: bucket, + extract: false, + }); // THEN expect(() => { - new s3deploy.BucketDeployment(stack, 'Deploy', { - sources: [file], - destinationBucket: bucket, - extract: false, - }); + Template.fromStack(stack); }).toThrow('Some sources are incompatible with extract=false; sources with deploy-time values (such as \'snsTopic.topicArn\') must be extracted.'); }); @@ -1360,6 +1361,29 @@ test('Source.jsonData() can be used to create a file with a JSON object', () => }); }); +test('can add sources with addSource', () => { + const app = new cdk.App(); + const stack = new cdk.Stack(app, 'Test'); + const bucket = new s3.Bucket(stack, 'Bucket'); + const deployment = new s3deploy.BucketDeployment(stack, 'Deploy', { + sources: [s3deploy.Source.data('my/path.txt', 'helloWorld')], + destinationBucket: bucket, + }); + deployment.addSource(s3deploy.Source.data('my/other/path.txt', 'hello world')); + + const result = app.synth(); + const content = readDataFile(result, 'my/path.txt'); + const content2 = readDataFile(result, 'my/other/path.txt'); + expect(content).toStrictEqual('helloWorld'); + expect(content2).toStrictEqual('hello world'); + Template.fromStack(stack).hasResourceProperties('Custom::CDKBucketDeployment', { + SourceMarkers: [ + {}, + {}, + ], + }); +}); + function readDataFile(casm: cxapi.CloudAssembly, relativePath: string): string { const assetDirs = readdirSync(casm.directory).filter(f => f.startsWith('asset.')); diff --git a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-data.ts b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-data.ts index 2f9781bf38036..3cdf333cded63 100644 --- a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-data.ts +++ b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-data.ts @@ -10,13 +10,14 @@ const file1 = Source.data('file1.txt', 'boom'); const file2 = Source.data('path/to/file2.txt', `bam! ${bucket.bucketName}`); const file3 = Source.jsonData('my/config.json', { website_url: bucket.bucketWebsiteUrl }); -new BucketDeployment(stack, 'DeployMeHere', { +const deployment = new BucketDeployment(stack, 'DeployMeHere', { destinationBucket: bucket, - sources: [file1, file2, file3], + sources: [file1, file2], destinationKeyPrefix: 'deploy/here/', retainOnDelete: false, // default is true, which will block the integration test cleanup }); +deployment.addSource(file3); new CfnOutput(stack, 'BucketName', { value: bucket.bucketName }); -app.synth(); \ No newline at end of file +app.synth(); diff --git a/packages/@aws-cdk/aws-s3-notifications/package.json b/packages/@aws-cdk/aws-s3-notifications/package.json index 11574d04b2e4c..4272fbebfea58 100644 --- a/packages/@aws-cdk/aws-s3-notifications/package.json +++ b/packages/@aws-cdk/aws-s3-notifications/package.json @@ -75,6 +75,7 @@ "@aws-cdk/assertions": "0.0.0", "@aws-cdk/cdk-build-tools": "0.0.0", "@aws-cdk/integ-runner": "0.0.0", + "@aws-cdk/integ-tests": "0.0.0", "@aws-cdk/pkglint": "0.0.0", "@types/jest": "^27.5.2", "jest": "^27.5.1" diff --git a/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/cdk.out b/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/cdk.out index 588d7b269d34f..145739f539580 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"20.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/integ.json b/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/integ.json index 948870630bb0f..13ef71e0667cc 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "20.0.0", + "version": "22.0.0", "testCases": { "integ.notifications": { "stacks": [ diff --git a/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/manifest.json b/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/manifest.json index 54456d6c35a99..7f3378d54fe9e 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "20.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "test-3.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,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}/e6a3bb19aac621a188addf660a6e2508099e3ad541966b68bebdac0a33cea832.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/97cca28a44b1b15020334dbab2b4a40d222d6664e65b52d6a98c6c84ed2cd331.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -131,6 +125,12 @@ ] }, "displayName": "test-3" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/test-3.assets.json b/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/test-3.assets.json index d8c19ca56fe0a..1d7b5eb75b903 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/test-3.assets.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/test-3.assets.json @@ -1,7 +1,7 @@ { - "version": "20.0.0", + "version": "22.0.0", "files": { - "e6a3bb19aac621a188addf660a6e2508099e3ad541966b68bebdac0a33cea832": { + "97cca28a44b1b15020334dbab2b4a40d222d6664e65b52d6a98c6c84ed2cd331": { "source": { "path": "test-3.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "e6a3bb19aac621a188addf660a6e2508099e3ad541966b68bebdac0a33cea832.json", + "objectKey": "97cca28a44b1b15020334dbab2b4a40d222d6664e65b52d6a98c6c84ed2cd331.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/test-3.template.json b/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/test-3.template.json index ec1af7e815fb3..a2b4a8005ebc6 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/test-3.template.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/test-3.template.json @@ -254,7 +254,7 @@ "Arn" ] }, - "Runtime": "python3.7", + "Runtime": "python3.9", "Timeout": 300 }, "DependsOn": [ diff --git a/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/tree.json b/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/tree.json index 9b35f84095e57..f8f8709d44611 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/integ.notifications.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" - } - }, "test-3": { "id": "test-3", "path": "test-3", @@ -40,14 +32,14 @@ "id": "Resource", "path": "test-3/Bucket/Notifications/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, @@ -267,6 +259,14 @@ "id": "Role", "path": "test-3/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role", "children": { + "ImportRole": { + "id": "ImportRole", + "path": "test-3/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/ImportRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "test-3/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/Resource", @@ -358,14 +358,14 @@ "id": "Resource", "path": "test-3/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } }, "Bucket2": { @@ -392,14 +392,14 @@ "id": "Resource", "path": "test-3/Bucket2/Notifications/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, @@ -442,14 +442,14 @@ "id": "Resource", "path": "test-3/Bucket3Imported/Notifications/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, @@ -457,17 +457,41 @@ "fqn": "@aws-cdk/aws-s3.BucketBase", "version": "0.0.0" } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "test-3/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "test-3/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } } }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.App", + "version": "0.0.0" } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/cdk.out b/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/cdk.out index 588d7b269d34f..145739f539580 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"20.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/integ.json b/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/integ.json index 596333eaccd4f..6c1147696e446 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "20.0.0", + "version": "22.0.0", "testCases": { "integ.bucket-notifications": { "stacks": [ diff --git a/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/lambda-bucket-notifications.assets.json b/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/lambda-bucket-notifications.assets.json index 9af0cc15cff42..b4bfb2a6b5b13 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/lambda-bucket-notifications.assets.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/lambda-bucket-notifications.assets.json @@ -1,7 +1,7 @@ { - "version": "20.0.0", + "version": "22.0.0", "files": { - "4bc6a69496fe870e29071262705663aff373748a3ac47559ed4de1dcecd8962b": { + "86df893b461c8389fafc71f1a25f31ba6a371a1afb0d4222ba396ba271b2df8a": { "source": { "path": "lambda-bucket-notifications.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "4bc6a69496fe870e29071262705663aff373748a3ac47559ed4de1dcecd8962b.json", + "objectKey": "86df893b461c8389fafc71f1a25f31ba6a371a1afb0d4222ba396ba271b2df8a.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/lambda-bucket-notifications.template.json b/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/lambda-bucket-notifications.template.json index e9315e7cda3a2..08cb2fea64cce 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/lambda-bucket-notifications.template.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/lambda-bucket-notifications.template.json @@ -246,7 +246,7 @@ "Arn" ] }, - "Runtime": "python3.7", + "Runtime": "python3.9", "Timeout": 300 }, "DependsOn": [ diff --git a/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/manifest.json b/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/manifest.json index 688251ab1646f..5205c2571c734 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "20.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "lambda-bucket-notifications.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,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}/4bc6a69496fe870e29071262705663aff373748a3ac47559ed4de1dcecd8962b.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/86df893b461c8389fafc71f1a25f31ba6a371a1afb0d4222ba396ba271b2df8a.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -119,6 +113,12 @@ ] }, "displayName": "lambda-bucket-notifications" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/tree.json b/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/tree.json index 1881797ca5064..ff0372d4c3bee 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/lambda/integ.bucket-notifications.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" - } - }, "lambda-bucket-notifications": { "id": "lambda-bucket-notifications", "path": "lambda-bucket-notifications", @@ -40,14 +32,14 @@ "id": "Resource", "path": "lambda-bucket-notifications/MyBucket/Notifications/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } }, "AllowBucketNotificationsTolambdabucketnotificationsMyFunction4086861C": { @@ -94,6 +86,14 @@ "id": "ServiceRole", "path": "lambda-bucket-notifications/MyFunction/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "lambda-bucket-notifications/MyFunction/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-bucket-notifications/MyFunction/ServiceRole/Resource", @@ -193,14 +193,14 @@ "id": "Resource", "path": "lambda-bucket-notifications/YourBucket/Notifications/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } }, "AllowBucketNotificationsTolambdabucketnotificationsMyFunction4086861C": { @@ -247,6 +247,14 @@ "id": "Role", "path": "lambda-bucket-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role", "children": { + "ImportRole": { + "id": "ImportRole", + "path": "lambda-bucket-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/ImportRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-bucket-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/Resource", @@ -335,26 +343,50 @@ "id": "Resource", "path": "lambda-bucket-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "lambda-bucket-notifications/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "lambda-bucket-notifications/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" } } }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.App", + "version": "0.0.0" } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/cdk.out b/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/cdk.out index 588d7b269d34f..145739f539580 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"20.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/integ.json b/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/integ.json index cc84d48c51f0a..989b27c9c552a 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "20.0.0", + "version": "22.0.0", "testCases": { "integ.sns-bucket-notifications": { "stacks": [ diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/manifest.json b/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/manifest.json index b222fc2704e94..3232a572b799c 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "20.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "sns-bucket-notifications.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,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}/039f62daf27394c59265dd45600756ce2bce7cafed289c12eced8668ff87140a.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/88df37172d4084ec83f30c0d40a37fb78b106a5e2f402f4e609b08c5e1406c8e.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -107,6 +101,12 @@ ] }, "displayName": "sns-bucket-notifications" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/sns-bucket-notifications.assets.json b/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/sns-bucket-notifications.assets.json index 138437daf4824..67f76660ca2db 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/sns-bucket-notifications.assets.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/sns-bucket-notifications.assets.json @@ -1,7 +1,7 @@ { - "version": "20.0.0", + "version": "22.0.0", "files": { - "039f62daf27394c59265dd45600756ce2bce7cafed289c12eced8668ff87140a": { + "88df37172d4084ec83f30c0d40a37fb78b106a5e2f402f4e609b08c5e1406c8e": { "source": { "path": "sns-bucket-notifications.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "039f62daf27394c59265dd45600756ce2bce7cafed289c12eced8668ff87140a.json", + "objectKey": "88df37172d4084ec83f30c0d40a37fb78b106a5e2f402f4e609b08c5e1406c8e.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/sns-bucket-notifications.template.json b/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/sns-bucket-notifications.template.json index a4b34bdb8d428..9d938dab1786c 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/sns-bucket-notifications.template.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/sns-bucket-notifications.template.json @@ -204,7 +204,7 @@ "Arn" ] }, - "Runtime": "python3.7", + "Runtime": "python3.9", "Timeout": 300 }, "DependsOn": [ diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/tree.json b/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/tree.json index fd8b8a55efc7e..5ff860a1bbbfe 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/sns/integ.sns-bucket-notifications.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" - } - }, "sns-bucket-notifications": { "id": "sns-bucket-notifications", "path": "sns-bucket-notifications", @@ -192,14 +184,14 @@ "id": "Resource", "path": "sns-bucket-notifications/MyBucket/Notifications/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, @@ -216,6 +208,14 @@ "id": "Role", "path": "sns-bucket-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role", "children": { + "ImportRole": { + "id": "ImportRole", + "path": "sns-bucket-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/ImportRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "sns-bucket-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/Resource", @@ -304,26 +304,50 @@ "id": "Resource", "path": "sns-bucket-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "sns-bucket-notifications/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "sns-bucket-notifications/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" } } }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.App", + "version": "0.0.0" } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E.assets.json b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E.assets.json new file mode 100644 index 0000000000000..e5e74e84afeaa --- /dev/null +++ b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E.assets.json @@ -0,0 +1,32 @@ +{ + "version": "22.0.0", + "files": { + "382ba2a8fd0a13f6782aec5543e465f988f5c100f35ed20f90cd96b8ee53f674": { + "source": { + "path": "asset.382ba2a8fd0a13f6782aec5543e465f988f5c100f35ed20f90cd96b8ee53f674.bundle", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "382ba2a8fd0a13f6782aec5543e465f988f5c100f35ed20f90cd96b8ee53f674.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "7cc78f8c6bc32beeb66e815b2c296332a773fb978275a2d9c432d156d56604d3": { + "source": { + "path": "SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "7cc78f8c6bc32beeb66e815b2c296332a773fb978275a2d9c432d156d56604d3.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/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E.template.json b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E.template.json new file mode 100644 index 0000000000000..d3db0588d52d5 --- /dev/null +++ b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E.template.json @@ -0,0 +1,207 @@ +{ + "Resources": { + "AwsApiCallSQSpurgeQueue": { + "Type": "Custom::DeployAssert@SdkCallSQSpurgeQueue", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "SingletonFunction1488541a7b23466481b69b4408076b81HandlerCD40AE9F", + "Arn" + ] + }, + "service": "SQS", + "api": "purgeQueue", + "parameters": { + "QueueUrl": { + "Fn::ImportValue": "sqs-bucket-notifications:ExportsOutputRefMyQueueE6CA623512A57419" + } + }, + "flattenResponse": "false", + "salt": "1670432831869" + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "SingletonFunction1488541a7b23466481b69b4408076b81Role37ABCE73": { + "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": [ + { + "Action": [ + "sqs:PurgeQueue" + ], + "Effect": "Allow", + "Resource": [ + "*" + ] + }, + { + "Action": [ + "s3:PutObject" + ], + "Effect": "Allow", + "Resource": [ + "*" + ] + }, + { + "Action": [ + "sqs:ReceiveMessage" + ], + "Effect": "Allow", + "Resource": [ + "*" + ] + } + ] + } + } + ] + } + }, + "SingletonFunction1488541a7b23466481b69b4408076b81HandlerCD40AE9F": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Runtime": "nodejs14.x", + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "382ba2a8fd0a13f6782aec5543e465f988f5c100f35ed20f90cd96b8ee53f674.zip" + }, + "Timeout": 120, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "SingletonFunction1488541a7b23466481b69b4408076b81Role37ABCE73", + "Arn" + ] + } + } + }, + "AwsApiCallS3putObject": { + "Type": "Custom::DeployAssert@SdkCallS3putObject", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "SingletonFunction1488541a7b23466481b69b4408076b81HandlerCD40AE9F", + "Arn" + ] + }, + "service": "S3", + "api": "putObject", + "parameters": { + "Bucket": { + "Fn::ImportValue": "sqs-bucket-notifications:ExportsOutputRefBucket25524B414E77B0447" + }, + "Key": "image.png", + "Body": "Some content" + }, + "flattenResponse": "false", + "salt": "1670432831870" + }, + "DependsOn": [ + "AwsApiCallSQSpurgeQueue" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "AwsApiCallSQSreceiveMessage": { + "Type": "Custom::DeployAssert@SdkCallSQSreceiveMessage", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "SingletonFunction1488541a7b23466481b69b4408076b81HandlerCD40AE9F", + "Arn" + ] + }, + "service": "SQS", + "api": "receiveMessage", + "expected": "{\"$StringLike\":\"image\\\\.png\"}", + "actualPath": "Messages.0.Body.Records.0.s3.object.key", + "parameters": { + "QueueUrl": { + "Fn::ImportValue": "sqs-bucket-notifications:ExportsOutputRefMyQueueE6CA623512A57419" + }, + "WaitTimeSeconds": 20 + }, + "flattenResponse": "true", + "outputPaths": [ + "Messages.0.Body.Records.0.s3.object.key" + ], + "salt": "1670432831870" + }, + "DependsOn": [ + "AwsApiCallS3putObject" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + }, + "Outputs": { + "AssertionResultsAwsApiCallSQSreceiveMessage": { + "Value": { + "Fn::GetAtt": [ + "AwsApiCallSQSreceiveMessage", + "assertion" + ] + } + } + }, + "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/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/__entrypoint__.js b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/__entrypoint__.js new file mode 100644 index 0000000000000..1e3a3093c1706 --- /dev/null +++ b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/__entrypoint__.js @@ -0,0 +1,144 @@ +"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': responseBody.length }, + }; + 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLWVudHJ5cG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJub2RlanMtZW50cnlwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsMkJBQTJCO0FBRTNCLGlCQUFpQjtBQUNKLFFBQUEsUUFBUSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsR0FBRyxFQUFFLFVBQVU7SUFDZixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGdCQUFnQixFQUFFLFNBQVM7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sZ0NBQWdDLEdBQUcsd0RBQXdELENBQUM7QUFDbEcsTUFBTSwwQkFBMEIsR0FBRyw4REFBOEQsQ0FBQztBQVczRixLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWtELEVBQUUsT0FBMEI7SUFDMUcsTUFBTSxjQUFjLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDeEQsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0QsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxhQUFhO0lBQ2IsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssZ0NBQWdDLEVBQUU7UUFDbkcsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUN0RSxNQUFNLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTztLQUNSO0lBRUQsSUFBSTtRQUNGLHlFQUF5RTtRQUN6RSxpRUFBaUU7UUFDakUsd0NBQXdDO1FBQ3hDLGlFQUFpRTtRQUNqRSxNQUFNLFdBQVcsR0FBWSxPQUFPLENBQUMsZ0JBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUQsdURBQXVEO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEQsMkJBQTJCO1FBQzNCLE1BQU0sY0FBYyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztLQUNoRDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsTUFBTSxJQUFJLEdBQWE7WUFDckIsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLGdCQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLHlFQUF5RTtZQUN6RSxtRUFBbUU7WUFDbkUsd0VBQXdFO1lBQ3hFLHFFQUFxRTtZQUNyRSxnQ0FBZ0M7WUFDaEMsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtnQkFDbEMsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsNEdBQTRHLENBQUMsQ0FBQztnQkFDM0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGdDQUFnQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNMLGtFQUFrRTtnQkFDbEUsNkRBQTZEO2dCQUM3RCxnQkFBUSxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDcEc7U0FDRjtRQUVELG1FQUFtRTtRQUNuRSxNQUFNLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDdEM7QUFDSCxDQUFDO0FBbkRELDBCQW1EQztBQUVELFNBQVMsY0FBYyxDQUNyQixVQUF5RixFQUN6RixrQkFBMEMsRUFBRztJQUU3QyxzRUFBc0U7SUFDdEUsdUJBQXVCO0lBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO0lBRXZILGtFQUFrRTtJQUNsRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLGtCQUFrQixLQUFLLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtRQUMvRixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxVQUFVLENBQUMsa0JBQWtCLFNBQVMsZUFBZSxDQUFDLGtCQUFrQixtQkFBbUIsQ0FBQyxDQUFDO0tBQ3RLO0lBRUQsMERBQTBEO0lBQzFELE9BQU87UUFDTCxHQUFHLFVBQVU7UUFDYixHQUFHLGVBQWU7UUFDbEIsa0JBQWtCLEVBQUUsa0JBQWtCO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE0QixFQUFFLEtBQWU7SUFDekUsTUFBTSxJQUFJLEdBQW1EO1FBQzNELE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTTtRQUM5QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSwwQkFBMEI7UUFDMUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtRQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0tBQ2pCLENBQUM7SUFFRixnQkFBUSxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHO1FBQ1YsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1FBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRTtLQUN2RSxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUc7UUFDbkIsUUFBUSxFQUFFLENBQUM7UUFDWCxLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUM7SUFDRixNQUFNLFdBQVcsQ0FBQyxZQUFZLEVBQUUsZ0JBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxPQUE2QixFQUFFLFlBQW9CO0lBQ3ZGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNmO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxHQUFHLE1BQWE7SUFDL0Msc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQVNELFNBQWdCLFdBQVcsQ0FBMEIsT0FBcUIsRUFBRSxFQUE0QjtJQUN0RyxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUssRUFBRSxFQUFFO1FBQ3hCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN2QixPQUFPLElBQUksRUFBRTtZQUNYLElBQUk7Z0JBQ0YsT0FBTyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ3hCO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsSUFBSSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ25CLE1BQU0sQ0FBQyxDQUFDO2lCQUNUO2dCQUNELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDVDtTQUNGO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQWhCRCxrQ0FnQkM7QUFFRCxLQUFLLFVBQVUsS0FBSyxDQUFDLEVBQVU7SUFDN0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcblxuLy8gZm9yIHVuaXQgdGVzdHNcbmV4cG9ydCBjb25zdCBleHRlcm5hbCA9IHtcbiAgc2VuZEh0dHBSZXF1ZXN0OiBkZWZhdWx0U2VuZEh0dHBSZXF1ZXN0LFxuICBsb2c6IGRlZmF1bHRMb2csXG4gIGluY2x1ZGVTdGFja1RyYWNlczogdHJ1ZSxcbiAgdXNlckhhbmRsZXJJbmRleDogJy4vaW5kZXgnLFxufTtcblxuY29uc3QgQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVIgPSAnQVdTQ0RLOjpDdXN0b21SZXNvdXJjZVByb3ZpZGVyRnJhbWV3b3JrOjpDUkVBVEVfRkFJTEVEJztcbmNvbnN0IE1JU1NJTkdfUEhZU0lDQUxfSURfTUFSS0VSID0gJ0FXU0NESzo6Q3VzdG9tUmVzb3VyY2VQcm92aWRlckZyYW1ld29yazo6TUlTU0lOR19QSFlTSUNBTF9JRCc7XG5cbmV4cG9ydCB0eXBlIFJlc3BvbnNlID0gQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCAmIEhhbmRsZXJSZXNwb25zZTtcbmV4cG9ydCB0eXBlIEhhbmRsZXIgPSAoZXZlbnQ6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIGNvbnRleHQ6IEFXU0xhbWJkYS5Db250ZXh0KSA9PiBQcm9taXNlPEhhbmRsZXJSZXNwb25zZSB8IHZvaWQ+O1xuZXhwb3J0IHR5cGUgSGFuZGxlclJlc3BvbnNlID0gdW5kZWZpbmVkIHwge1xuICBEYXRhPzogYW55O1xuICBQaHlzaWNhbFJlc291cmNlSWQ/OiBzdHJpbmc7XG4gIFJlYXNvbj86IHN0cmluZztcbiAgTm9FY2hvPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50LCBjb250ZXh0OiBBV1NMYW1iZGEuQ29udGV4dCkge1xuICBjb25zdCBzYW5pdGl6ZWRFdmVudCA9IHsgLi4uZXZlbnQsIFJlc3BvbnNlVVJMOiAnLi4uJyB9O1xuICBleHRlcm5hbC5sb2coSlNPTi5zdHJpbmdpZnkoc2FuaXRpemVkRXZlbnQsIHVuZGVmaW5lZCwgMikpO1xuXG4gIC8vIGlnbm9yZSBERUxFVEUgZXZlbnQgd2hlbiB0aGUgcGh5c2ljYWwgcmVzb3VyY2UgSUQgaXMgdGhlIG1hcmtlciB0aGF0XG4gIC8vIGluZGljYXRlcyB0aGF0IHRoaXMgREVMRVRFIGlzIGEgc3Vic2VxdWVudCBERUxFVEUgdG8gYSBmYWlsZWQgQ1JFQVRFXG4gIC8vIG9wZXJhdGlvbi5cbiAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSAnRGVsZXRlJyAmJiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgPT09IENSRUFURV9GQUlMRURfUEhZU0lDQUxfSURfTUFSS0VSKSB7XG4gICAgZXh0ZXJuYWwubG9nKCdpZ25vcmluZyBERUxFVEUgZXZlbnQgY2F1c2VkIGJ5IGEgZmFpbGVkIENSRUFURSBldmVudCcpO1xuICAgIGF3YWl0IHN1Ym1pdFJlc3BvbnNlKCdTVUNDRVNTJywgZXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gaW52b2tlIHRoZSB1c2VyIGhhbmRsZXIuIHRoaXMgaXMgaW50ZW50aW9uYWxseSBpbnNpZGUgdGhlIHRyeS1jYXRjaCB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IGlmIHRoZXJlIGlzIGFuIGVycm9yIGl0J3MgcmVwb3J0ZWQgYXMgYSBmYWlsdXJlIHRvXG4gICAgLy8gY2xvdWRmb3JtYXRpb24gKG90aGVyd2lzZSBjZm4gd2FpdHMpLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgY29uc3QgdXNlckhhbmRsZXI6IEhhbmRsZXIgPSByZXF1aXJlKGV4dGVybmFsLnVzZXJIYW5kbGVySW5kZXgpLmhhbmRsZXI7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXNlckhhbmRsZXIoc2FuaXRpemVkRXZlbnQsIGNvbnRleHQpO1xuXG4gICAgLy8gdmFsaWRhdGUgdXNlciByZXNwb25zZSBhbmQgY3JlYXRlIHRoZSBjb21iaW5lZCBldmVudFxuICAgIGNvbnN0IHJlc3BvbnNlRXZlbnQgPSByZW5kZXJSZXNwb25zZShldmVudCwgcmVzdWx0KTtcblxuICAgIC8vIHN1Ym1pdCB0byBjZm4gYXMgc3VjY2Vzc1xuICAgIGF3YWl0IHN1Ym1pdFJlc3BvbnNlKCdTVUNDRVNTJywgcmVzcG9uc2VFdmVudCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCByZXNwOiBSZXNwb25zZSA9IHtcbiAgICAgIC4uLmV2ZW50LFxuICAgICAgUmVhc29uOiBleHRlcm5hbC5pbmNsdWRlU3RhY2tUcmFjZXMgPyBlLnN0YWNrIDogZS5tZXNzYWdlLFxuICAgIH07XG5cbiAgICBpZiAoIXJlc3AuUGh5c2ljYWxSZXNvdXJjZUlkKSB7XG4gICAgICAvLyBzcGVjaWFsIGNhc2U6IGlmIENSRUFURSBmYWlscywgd2hpY2ggdXN1YWxseSBpbXBsaWVzLCB3ZSB1c3VhbGx5IGRvbid0XG4gICAgICAvLyBoYXZlIGEgcGh5c2ljYWwgcmVzb3VyY2UgaWQuIGluIHRoaXMgY2FzZSwgdGhlIHN1YnNlcXVlbnQgREVMRVRFXG4gICAgICAvLyBvcGVyYXRpb24gZG9lcyBub3QgaGF2ZSBhbnkgbWVhbmluZywgYW5kIHdpbGwgbGlrZWx5IGZhaWwgYXMgd2VsbC4gdG9cbiAgICAgIC8vIGFkZHJlc3MgdGhpcywgd2UgdXNlIGEgbWFya2VyIHNvIHRoZSBwcm92aWRlciBmcmFtZXdvcmsgY2FuIHNpbXBseVxuICAgICAgLy8gaWdub3JlIHRoZSBzdWJzZXF1ZW50IERFTEVURS5cbiAgICAgIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gJ0NyZWF0ZScpIHtcbiAgICAgICAgZXh0ZXJuYWwubG9nKCdDUkVBVEUgZmFpbGVkLCByZXNwb25kaW5nIHdpdGggYSBtYXJrZXIgcGh5c2ljYWwgcmVzb3VyY2UgaWQgc28gdGhhdCB0aGUgc3Vic2VxdWVudCBERUxFVEUgd2lsbCBiZSBpZ25vcmVkJyk7XG4gICAgICAgIHJlc3AuUGh5c2ljYWxSZXNvdXJjZUlkID0gQ1JFQVRFX0ZBSUxFRF9QSFlTSUNBTF9JRF9NQVJLRVI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UsIGlmIFBoeXNpY2FsUmVzb3VyY2VJZCBpcyBub3Qgc3BlY2lmaWVkLCBzb21ldGhpbmcgaXNcbiAgICAgICAgLy8gdGVycmlibHkgd3JvbmcgYmVjYXVzZSBhbGwgb3RoZXIgZXZlbnRzIHNob3VsZCBoYXZlIGFuIElELlxuICAgICAgICBleHRlcm5hbC5sb2coYEVSUk9SOiBNYWxmb3JtZWQgZXZlbnQuIFwiUGh5c2ljYWxSZXNvdXJjZUlkXCIgaXMgcmVxdWlyZWQ6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQpfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMgaXMgYW4gYWN0dWFsIGVycm9yLCBmYWlsIHRoZSBhY3Rpdml0eSBhbHRvZ2V0aGVyIGFuZCBleGlzdC5cbiAgICBhd2FpdCBzdWJtaXRSZXNwb25zZSgnRkFJTEVEJywgcmVzcCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyUmVzcG9uc2UoXG4gIGNmblJlcXVlc3Q6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQgJiB7IFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZyB9LFxuICBoYW5kbGVyUmVzcG9uc2U6IHZvaWQgfCBIYW5kbGVyUmVzcG9uc2UgPSB7IH0pOiBSZXNwb25zZSB7XG5cbiAgLy8gaWYgcGh5c2ljYWwgSUQgaXMgbm90IHJldHVybmVkLCB3ZSBoYXZlIHNvbWUgZGVmYXVsdHMgZm9yIHlvdSBiYXNlZFxuICAvLyBvbiB0aGUgcmVxdWVzdCB0eXBlLlxuICBjb25zdCBwaHlzaWNhbFJlc291cmNlSWQgPSBoYW5kbGVyUmVzcG9uc2UuUGh5c2ljYWxSZXNvdXJjZUlkID8/IGNmblJlcXVlc3QuUGh5c2ljYWxSZXNvdXJjZUlkID8/IGNmblJlcXVlc3QuUmVxdWVzdElkO1xuXG4gIC8vIGlmIHdlIGFyZSBpbiBERUxFVEUgYW5kIHBoeXNpY2FsIElEIHdhcyBjaGFuZ2VkLCBpdCdzIGFuIGVycm9yLlxuICBpZiAoY2ZuUmVxdWVzdC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScgJiYgcGh5c2ljYWxSZXNvdXJjZUlkICE9PSBjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgREVMRVRFOiBjYW5ub3QgY2hhbmdlIHRoZSBwaHlzaWNhbCByZXNvdXJjZSBJRCBmcm9tIFwiJHtjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZH1cIiB0byBcIiR7aGFuZGxlclJlc3BvbnNlLlBoeXNpY2FsUmVzb3VyY2VJZH1cIiBkdXJpbmcgZGVsZXRpb25gKTtcbiAgfVxuXG4gIC8vIG1lcmdlIHJlcXVlc3QgZXZlbnQgYW5kIHJlc3VsdCBldmVudCAocmVzdWx0IHByZXZhaWxzKS5cbiAgcmV0dXJuIHtcbiAgICAuLi5jZm5SZXF1ZXN0LFxuICAgIC4uLmhhbmRsZXJSZXNwb25zZSxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3VibWl0UmVzcG9uc2Uoc3RhdHVzOiAnU1VDQ0VTUycgfCAnRkFJTEVEJywgZXZlbnQ6IFJlc3BvbnNlKSB7XG4gIGNvbnN0IGpzb246IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2UgPSB7XG4gICAgU3RhdHVzOiBzdGF0dXMsXG4gICAgUmVhc29uOiBldmVudC5SZWFzb24gPz8gc3RhdHVzLFxuICAgIFN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gICAgUmVxdWVzdElkOiBldmVudC5SZXF1ZXN0SWQsXG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgfHwgTUlTU0lOR19QSFlTSUNBTF9JRF9NQVJLRVIsXG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIE5vRWNobzogZXZlbnQuTm9FY2hvLFxuICAgIERhdGE6IGV2ZW50LkRhdGEsXG4gIH07XG5cbiAgZXh0ZXJuYWwubG9nKCdzdWJtaXQgcmVzcG9uc2UgdG8gY2xvdWRmb3JtYXRpb24nLCBqc29uKTtcblxuICBjb25zdCByZXNwb25zZUJvZHkgPSBKU09OLnN0cmluZ2lmeShqc29uKTtcbiAgY29uc3QgcGFyc2VkVXJsID0gdXJsLnBhcnNlKGV2ZW50LlJlc3BvbnNlVVJMKTtcbiAgY29uc3QgcmVxID0ge1xuICAgIGhvc3RuYW1lOiBwYXJzZWRVcmwuaG9zdG5hbWUsXG4gICAgcGF0aDogcGFyc2VkVXJsLnBhdGgsXG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICBoZWFkZXJzOiB7ICdjb250ZW50LXR5cGUnOiAnJywgJ2NvbnRlbnQtbGVuZ3RoJzogcmVzcG9uc2VCb2R5Lmxlbmd0aCB9LFxuICB9O1xuXG4gIGNvbnN0IHJldHJ5T3B0aW9ucyA9IHtcbiAgICBhdHRlbXB0czogNSxcbiAgICBzbGVlcDogMTAwMCxcbiAgfTtcbiAgYXdhaXQgd2l0aFJldHJpZXMocmV0cnlPcHRpb25zLCBleHRlcm5hbC5zZW5kSHR0cFJlcXVlc3QpKHJlcSwgcmVzcG9uc2VCb2R5KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdFNlbmRIdHRwUmVxdWVzdChvcHRpb25zOiBodHRwcy5SZXF1ZXN0T3B0aW9ucywgcmVzcG9uc2VCb2R5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Qob3B0aW9ucywgXyA9PiByZXNvbHZlKCkpO1xuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgcmVxdWVzdC53cml0ZShyZXNwb25zZUJvZHkpO1xuICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdExvZyhmbXQ6IHN0cmluZywgLi4ucGFyYW1zOiBhbnlbXSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhmbXQsIC4uLnBhcmFtcyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zIHtcbiAgLyoqIEhvdyBtYW55IHJldHJpZXMgKHdpbGwgYXQgbGVhc3QgdHJ5IG9uY2UpICovXG4gIHJlYWRvbmx5IGF0dGVtcHRzOiBudW1iZXI7XG4gIC8qKiBTbGVlcCBiYXNlLCBpbiBtcyAqL1xuICByZWFkb25seSBzbGVlcDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJldHJpZXM8QSBleHRlbmRzIEFycmF5PGFueT4sIEI+KG9wdGlvbnM6IFJldHJ5T3B0aW9ucywgZm46ICguLi54czogQSkgPT4gUHJvbWlzZTxCPik6ICguLi54czogQSkgPT4gUHJvbWlzZTxCPiB7XG4gIHJldHVybiBhc3luYyAoLi4ueHM6IEEpID0+IHtcbiAgICBsZXQgYXR0ZW1wdHMgPSBvcHRpb25zLmF0dGVtcHRzO1xuICAgIGxldCBtcyA9IG9wdGlvbnMuc2xlZXA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbiguLi54cyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChhdHRlbXB0cy0tIDw9IDApIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHNsZWVwKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1zKSk7XG4gICAgICAgIG1zICo9IDI7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2spID0+IHNldFRpbWVvdXQob2ssIG1zKSk7XG59Il19 \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/index.js b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/index.js new file mode 100644 index 0000000000000..7ce4156d4ba41 --- /dev/null +++ b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c/index.js @@ -0,0 +1,78 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.handler = void 0; +// eslint-disable-next-line import/no-extraneous-dependencies +const aws_sdk_1 = require("aws-sdk"); +const AUTO_DELETE_OBJECTS_TAG = 'aws-cdk:auto-delete-objects'; +const s3 = new aws_sdk_1.S3(); +async function handler(event) { + switch (event.RequestType) { + case 'Create': + return; + case 'Update': + return onUpdate(event); + case 'Delete': + return onDelete(event.ResourceProperties?.BucketName); + } +} +exports.handler = handler; +async function onUpdate(event) { + const updateEvent = event; + const oldBucketName = updateEvent.OldResourceProperties?.BucketName; + const newBucketName = updateEvent.ResourceProperties?.BucketName; + const bucketNameHasChanged = newBucketName != null && oldBucketName != null && newBucketName !== oldBucketName; + /* If the name of the bucket has changed, CloudFormation will try to delete the bucket + and create a new one with the new name. So we have to delete the contents of the + bucket so that this operation does not fail. */ + if (bucketNameHasChanged) { + return onDelete(oldBucketName); + } +} +/** + * Recursively delete all items in the bucket + * + * @param bucketName the bucket name + */ +async function emptyBucket(bucketName) { + const listedObjects = await s3.listObjectVersions({ Bucket: bucketName }).promise(); + const contents = [...listedObjects.Versions ?? [], ...listedObjects.DeleteMarkers ?? []]; + if (contents.length === 0) { + return; + } + const records = contents.map((record) => ({ Key: record.Key, VersionId: record.VersionId })); + await s3.deleteObjects({ Bucket: bucketName, Delete: { Objects: records } }).promise(); + if (listedObjects?.IsTruncated) { + await emptyBucket(bucketName); + } +} +async function onDelete(bucketName) { + if (!bucketName) { + throw new Error('No BucketName was provided.'); + } + if (!await isBucketTaggedForDeletion(bucketName)) { + process.stdout.write(`Bucket does not have '${AUTO_DELETE_OBJECTS_TAG}' tag, skipping cleaning.\n`); + return; + } + try { + await emptyBucket(bucketName); + } + catch (e) { + if (e.code !== 'NoSuchBucket') { + throw e; + } + // Bucket doesn't exist. Ignoring + } +} +/** + * The bucket will only be tagged for deletion if it's being deleted in the same + * deployment as this Custom Resource. + * + * If the Custom Resource is every deleted before the bucket, it must be because + * `autoDeleteObjects` has been switched to false, in which case the tag would have + * been removed before we get to this Delete event. + */ +async function isBucketTaggedForDeletion(bucketName) { + const response = await s3.getBucketTagging({ Bucket: bucketName }).promise(); + return response.TagSet.some(tag => tag.Key === AUTO_DELETE_OBJECTS_TAG && tag.Value === 'true'); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2REFBNkQ7QUFDN0QscUNBQTZCO0FBRTdCLE1BQU0sdUJBQXVCLEdBQUcsNkJBQTZCLENBQUM7QUFFOUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxZQUFFLEVBQUUsQ0FBQztBQUViLEtBQUssVUFBVSxPQUFPLENBQUMsS0FBa0Q7SUFDOUUsUUFBUSxLQUFLLENBQUMsV0FBVyxFQUFFO1FBQ3pCLEtBQUssUUFBUTtZQUNYLE9BQU87UUFDVCxLQUFLLFFBQVE7WUFDWCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixLQUFLLFFBQVE7WUFDWCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDekQ7QUFDSCxDQUFDO0FBVEQsMEJBU0M7QUFFRCxLQUFLLFVBQVUsUUFBUSxDQUFDLEtBQWtEO0lBQ3hFLE1BQU0sV0FBVyxHQUFHLEtBQTBELENBQUM7SUFDL0UsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQztJQUNwRSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDO0lBQ2pFLE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxJQUFJLElBQUksSUFBSSxhQUFhLElBQUksSUFBSSxJQUFJLGFBQWEsS0FBSyxhQUFhLENBQUM7SUFFL0c7O3NEQUVrRDtJQUNsRCxJQUFJLG9CQUFvQixFQUFFO1FBQ3hCLE9BQU8sUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ2hDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsV0FBVyxDQUFDLFVBQWtCO0lBQzNDLE1BQU0sYUFBYSxHQUFHLE1BQU0sRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLEdBQUcsYUFBYSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE9BQU87S0FDUjtJQUVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRyxNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFdkYsSUFBSSxhQUFhLEVBQUUsV0FBVyxFQUFFO1FBQzlCLE1BQU0sV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQy9CO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxRQUFRLENBQUMsVUFBbUI7SUFDekMsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNoRDtJQUNELElBQUksQ0FBQyxNQUFNLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ2hELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5Qix1QkFBdUIsNkJBQTZCLENBQUMsQ0FBQztRQUNwRyxPQUFPO0tBQ1I7SUFDRCxJQUFJO1FBQ0YsTUFBTSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDL0I7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7WUFDN0IsTUFBTSxDQUFDLENBQUM7U0FDVDtRQUNELGlDQUFpQztLQUNsQztBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsS0FBSyxVQUFVLHlCQUF5QixDQUFDLFVBQWtCO0lBQ3pELE1BQU0sUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0UsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssdUJBQXVCLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztBQUNsRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHsgUzMgfSBmcm9tICdhd3Mtc2RrJztcblxuY29uc3QgQVVUT19ERUxFVEVfT0JKRUNUU19UQUcgPSAnYXdzLWNkazphdXRvLWRlbGV0ZS1vYmplY3RzJztcblxuY29uc3QgczMgPSBuZXcgUzMoKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQpIHtcbiAgc3dpdGNoIChldmVudC5SZXF1ZXN0VHlwZSkge1xuICAgIGNhc2UgJ0NyZWF0ZSc6XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnVXBkYXRlJzpcbiAgICAgIHJldHVybiBvblVwZGF0ZShldmVudCk7XG4gICAgY2FzZSAnRGVsZXRlJzpcbiAgICAgIHJldHVybiBvbkRlbGV0ZShldmVudC5SZXNvdXJjZVByb3BlcnRpZXM/LkJ1Y2tldE5hbWUpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9uVXBkYXRlKGV2ZW50OiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50KSB7XG4gIGNvbnN0IHVwZGF0ZUV2ZW50ID0gZXZlbnQgYXMgQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VVcGRhdGVFdmVudDtcbiAgY29uc3Qgb2xkQnVja2V0TmFtZSA9IHVwZGF0ZUV2ZW50Lk9sZFJlc291cmNlUHJvcGVydGllcz8uQnVja2V0TmFtZTtcbiAgY29uc3QgbmV3QnVja2V0TmFtZSA9IHVwZGF0ZUV2ZW50LlJlc291cmNlUHJvcGVydGllcz8uQnVja2V0TmFtZTtcbiAgY29uc3QgYnVja2V0TmFtZUhhc0NoYW5nZWQgPSBuZXdCdWNrZXROYW1lICE9IG51bGwgJiYgb2xkQnVja2V0TmFtZSAhPSBudWxsICYmIG5ld0J1Y2tldE5hbWUgIT09IG9sZEJ1Y2tldE5hbWU7XG5cbiAgLyogSWYgdGhlIG5hbWUgb2YgdGhlIGJ1Y2tldCBoYXMgY2hhbmdlZCwgQ2xvdWRGb3JtYXRpb24gd2lsbCB0cnkgdG8gZGVsZXRlIHRoZSBidWNrZXRcbiAgICAgYW5kIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGUgbmV3IG5hbWUuIFNvIHdlIGhhdmUgdG8gZGVsZXRlIHRoZSBjb250ZW50cyBvZiB0aGVcbiAgICAgYnVja2V0IHNvIHRoYXQgdGhpcyBvcGVyYXRpb24gZG9lcyBub3QgZmFpbC4gKi9cbiAgaWYgKGJ1Y2tldE5hbWVIYXNDaGFuZ2VkKSB7XG4gICAgcmV0dXJuIG9uRGVsZXRlKG9sZEJ1Y2tldE5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgZGVsZXRlIGFsbCBpdGVtcyBpbiB0aGUgYnVja2V0XG4gKlxuICogQHBhcmFtIGJ1Y2tldE5hbWUgdGhlIGJ1Y2tldCBuYW1lXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVtcHR5QnVja2V0KGJ1Y2tldE5hbWU6IHN0cmluZykge1xuICBjb25zdCBsaXN0ZWRPYmplY3RzID0gYXdhaXQgczMubGlzdE9iamVjdFZlcnNpb25zKHsgQnVja2V0OiBidWNrZXROYW1lIH0pLnByb21pc2UoKTtcbiAgY29uc3QgY29udGVudHMgPSBbLi4ubGlzdGVkT2JqZWN0cy5WZXJzaW9ucyA/PyBbXSwgLi4ubGlzdGVkT2JqZWN0cy5EZWxldGVNYXJrZXJzID8/IFtdXTtcbiAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZHMgPSBjb250ZW50cy5tYXAoKHJlY29yZDogYW55KSA9PiAoeyBLZXk6IHJlY29yZC5LZXksIFZlcnNpb25JZDogcmVjb3JkLlZlcnNpb25JZCB9KSk7XG4gIGF3YWl0IHMzLmRlbGV0ZU9iamVjdHMoeyBCdWNrZXQ6IGJ1Y2tldE5hbWUsIERlbGV0ZTogeyBPYmplY3RzOiByZWNvcmRzIH0gfSkucHJvbWlzZSgpO1xuXG4gIGlmIChsaXN0ZWRPYmplY3RzPy5Jc1RydW5jYXRlZCkge1xuICAgIGF3YWl0IGVtcHR5QnVja2V0KGJ1Y2tldE5hbWUpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9uRGVsZXRlKGJ1Y2tldE5hbWU/OiBzdHJpbmcpIHtcbiAgaWYgKCFidWNrZXROYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBCdWNrZXROYW1lIHdhcyBwcm92aWRlZC4nKTtcbiAgfVxuICBpZiAoIWF3YWl0IGlzQnVja2V0VGFnZ2VkRm9yRGVsZXRpb24oYnVja2V0TmFtZSkpIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgQnVja2V0IGRvZXMgbm90IGhhdmUgJyR7QVVUT19ERUxFVEVfT0JKRUNUU19UQUd9JyB0YWcsIHNraXBwaW5nIGNsZWFuaW5nLlxcbmApO1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGVtcHR5QnVja2V0KGJ1Y2tldE5hbWUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUuY29kZSAhPT0gJ05vU3VjaEJ1Y2tldCcpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIC8vIEJ1Y2tldCBkb2Vzbid0IGV4aXN0LiBJZ25vcmluZ1xuICB9XG59XG5cbi8qKlxuICogVGhlIGJ1Y2tldCB3aWxsIG9ubHkgYmUgdGFnZ2VkIGZvciBkZWxldGlvbiBpZiBpdCdzIGJlaW5nIGRlbGV0ZWQgaW4gdGhlIHNhbWVcbiAqIGRlcGxveW1lbnQgYXMgdGhpcyBDdXN0b20gUmVzb3VyY2UuXG4gKlxuICogSWYgdGhlIEN1c3RvbSBSZXNvdXJjZSBpcyBldmVyeSBkZWxldGVkIGJlZm9yZSB0aGUgYnVja2V0LCBpdCBtdXN0IGJlIGJlY2F1c2VcbiAqIGBhdXRvRGVsZXRlT2JqZWN0c2AgaGFzIGJlZW4gc3dpdGNoZWQgdG8gZmFsc2UsIGluIHdoaWNoIGNhc2UgdGhlIHRhZyB3b3VsZCBoYXZlXG4gKiBiZWVuIHJlbW92ZWQgYmVmb3JlIHdlIGdldCB0byB0aGlzIERlbGV0ZSBldmVudC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaXNCdWNrZXRUYWdnZWRGb3JEZWxldGlvbihidWNrZXROYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5nZXRCdWNrZXRUYWdnaW5nKHsgQnVja2V0OiBidWNrZXROYW1lIH0pLnByb21pc2UoKTtcbiAgcmV0dXJuIHJlc3BvbnNlLlRhZ1NldC5zb21lKHRhZyA9PiB0YWcuS2V5ID09PSBBVVRPX0RFTEVURV9PQkpFQ1RTX1RBRyAmJiB0YWcuVmFsdWUgPT09ICd0cnVlJyk7XG59Il19 \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/asset.382ba2a8fd0a13f6782aec5543e465f988f5c100f35ed20f90cd96b8ee53f674.bundle/index.js b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/asset.382ba2a8fd0a13f6782aec5543e465f988f5c100f35ed20f90cd96b8ee53f674.bundle/index.js new file mode 100644 index 0000000000000..ffbf23bc9533f --- /dev/null +++ b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/asset.382ba2a8fd0a13f6782aec5543e465f988f5c100f35ed20f90cd96b8ee53f674.bundle/index.js @@ -0,0 +1,783 @@ +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// lib/assertions/providers/lambda-handler/index.ts +var lambda_handler_exports = {}; +__export(lambda_handler_exports, { + handler: () => handler, + isComplete: () => isComplete, + onTimeout: () => onTimeout +}); +module.exports = __toCommonJS(lambda_handler_exports); + +// ../assertions/lib/matcher.ts +var Matcher = class { + static isMatcher(x) { + return x && x instanceof Matcher; + } +}; +var MatchResult = class { + constructor(target) { + this.failures = []; + this.captures = /* @__PURE__ */ new Map(); + this.finalized = false; + this.target = target; + } + push(matcher, path, message) { + return this.recordFailure({ matcher, path, message }); + } + recordFailure(failure) { + this.failures.push(failure); + return this; + } + hasFailed() { + return this.failures.length !== 0; + } + get failCount() { + return this.failures.length; + } + compose(id, inner) { + const innerF = inner.failures; + this.failures.push(...innerF.map((f) => { + return { path: [id, ...f.path], message: f.message, matcher: f.matcher }; + })); + inner.captures.forEach((vals, capture) => { + vals.forEach((value) => this.recordCapture({ capture, value })); + }); + return this; + } + finished() { + if (this.finalized) { + return this; + } + if (this.failCount === 0) { + this.captures.forEach((vals, cap) => cap._captured.push(...vals)); + } + this.finalized = true; + return this; + } + toHumanStrings() { + return this.failures.map((r) => { + const loc = r.path.length === 0 ? "" : ` at ${r.path.join("")}`; + return "" + r.message + loc + ` (using ${r.matcher.name} matcher)`; + }); + } + recordCapture(options) { + let values = this.captures.get(options.capture); + if (values === void 0) { + values = []; + } + values.push(options.value); + this.captures.set(options.capture, values); + } +}; + +// ../assertions/lib/private/matchers/absent.ts +var AbsentMatch = class extends Matcher { + constructor(name) { + super(); + this.name = name; + } + test(actual) { + const result = new MatchResult(actual); + if (actual !== void 0) { + result.recordFailure({ + matcher: this, + path: [], + message: `Received ${actual}, but key should be absent` + }); + } + return result; + } +}; + +// ../assertions/lib/private/type.ts +function getType(obj) { + return Array.isArray(obj) ? "array" : typeof obj; +} + +// ../assertions/lib/match.ts +var Match = class { + static absent() { + return new AbsentMatch("absent"); + } + static arrayWith(pattern) { + return new ArrayMatch("arrayWith", pattern); + } + static arrayEquals(pattern) { + return new ArrayMatch("arrayEquals", pattern, { subsequence: false }); + } + static exact(pattern) { + return new LiteralMatch("exact", pattern, { partialObjects: false }); + } + static objectLike(pattern) { + return new ObjectMatch("objectLike", pattern); + } + static objectEquals(pattern) { + return new ObjectMatch("objectEquals", pattern, { partial: false }); + } + static not(pattern) { + return new NotMatch("not", pattern); + } + static serializedJson(pattern) { + return new SerializedJson("serializedJson", pattern); + } + static anyValue() { + return new AnyMatch("anyValue"); + } + static stringLikeRegexp(pattern) { + return new StringLikeRegexpMatch("stringLikeRegexp", pattern); + } +}; +var LiteralMatch = class extends Matcher { + constructor(name, pattern, options = {}) { + super(); + this.name = name; + this.pattern = pattern; + this.partialObjects = options.partialObjects ?? false; + if (Matcher.isMatcher(this.pattern)) { + throw new Error("LiteralMatch cannot directly contain another matcher. Remove the top-level matcher or nest it more deeply."); + } + } + test(actual) { + if (Array.isArray(this.pattern)) { + return new ArrayMatch(this.name, this.pattern, { subsequence: false, partialObjects: this.partialObjects }).test(actual); + } + if (typeof this.pattern === "object") { + return new ObjectMatch(this.name, this.pattern, { partial: this.partialObjects }).test(actual); + } + const result = new MatchResult(actual); + if (typeof this.pattern !== typeof actual) { + result.recordFailure({ + matcher: this, + path: [], + message: `Expected type ${typeof this.pattern} but received ${getType(actual)}` + }); + return result; + } + if (actual !== this.pattern) { + result.recordFailure({ + matcher: this, + path: [], + message: `Expected ${this.pattern} but received ${actual}` + }); + } + return result; + } +}; +var ArrayMatch = class extends Matcher { + constructor(name, pattern, options = {}) { + super(); + this.name = name; + this.pattern = pattern; + this.subsequence = options.subsequence ?? true; + this.partialObjects = options.partialObjects ?? false; + } + test(actual) { + if (!Array.isArray(actual)) { + return new MatchResult(actual).recordFailure({ + matcher: this, + path: [], + message: `Expected type array but received ${getType(actual)}` + }); + } + if (!this.subsequence && this.pattern.length !== actual.length) { + return new MatchResult(actual).recordFailure({ + matcher: this, + path: [], + message: `Expected array of length ${this.pattern.length} but received ${actual.length}` + }); + } + let patternIdx = 0; + let actualIdx = 0; + const result = new MatchResult(actual); + while (patternIdx < this.pattern.length && actualIdx < actual.length) { + const patternElement = this.pattern[patternIdx]; + const matcher = Matcher.isMatcher(patternElement) ? patternElement : new LiteralMatch(this.name, patternElement, { partialObjects: this.partialObjects }); + const matcherName = matcher.name; + if (this.subsequence && (matcherName == "absent" || matcherName == "anyValue")) { + throw new Error(`The Matcher ${matcherName}() cannot be nested within arrayWith()`); + } + const innerResult = matcher.test(actual[actualIdx]); + if (!this.subsequence || !innerResult.hasFailed()) { + result.compose(`[${actualIdx}]`, innerResult); + patternIdx++; + actualIdx++; + } else { + actualIdx++; + } + } + for (; patternIdx < this.pattern.length; patternIdx++) { + const pattern = this.pattern[patternIdx]; + const element = Matcher.isMatcher(pattern) || typeof pattern === "object" ? " " : ` [${pattern}] `; + result.recordFailure({ + matcher: this, + path: [], + message: `Missing element${element}at pattern index ${patternIdx}` + }); + } + return result; + } +}; +var ObjectMatch = class extends Matcher { + constructor(name, pattern, options = {}) { + super(); + this.name = name; + this.pattern = pattern; + this.partial = options.partial ?? true; + } + test(actual) { + if (typeof actual !== "object" || Array.isArray(actual)) { + return new MatchResult(actual).recordFailure({ + matcher: this, + path: [], + message: `Expected type object but received ${getType(actual)}` + }); + } + const result = new MatchResult(actual); + if (!this.partial) { + for (const a of Object.keys(actual)) { + if (!(a in this.pattern)) { + result.recordFailure({ + matcher: this, + path: [`/${a}`], + message: "Unexpected key" + }); + } + } + } + for (const [patternKey, patternVal] of Object.entries(this.pattern)) { + if (!(patternKey in actual) && !(patternVal instanceof AbsentMatch)) { + result.recordFailure({ + matcher: this, + path: [`/${patternKey}`], + message: `Missing key '${patternKey}' among {${Object.keys(actual).join(",")}}` + }); + continue; + } + const matcher = Matcher.isMatcher(patternVal) ? patternVal : new LiteralMatch(this.name, patternVal, { partialObjects: this.partial }); + const inner = matcher.test(actual[patternKey]); + result.compose(`/${patternKey}`, inner); + } + return result; + } +}; +var SerializedJson = class extends Matcher { + constructor(name, pattern) { + super(); + this.name = name; + this.pattern = pattern; + } + test(actual) { + const result = new MatchResult(actual); + if (getType(actual) !== "string") { + result.recordFailure({ + matcher: this, + path: [], + message: `Expected JSON as a string but found ${getType(actual)}` + }); + return result; + } + let parsed; + try { + parsed = JSON.parse(actual); + } catch (err) { + if (err instanceof SyntaxError) { + result.recordFailure({ + matcher: this, + path: [], + message: `Invalid JSON string: ${actual}` + }); + return result; + } else { + throw err; + } + } + const matcher = Matcher.isMatcher(this.pattern) ? this.pattern : new LiteralMatch(this.name, this.pattern); + const innerResult = matcher.test(parsed); + result.compose(`(${this.name})`, innerResult); + return result; + } +}; +var NotMatch = class extends Matcher { + constructor(name, pattern) { + super(); + this.name = name; + this.pattern = pattern; + } + test(actual) { + const matcher = Matcher.isMatcher(this.pattern) ? this.pattern : new LiteralMatch(this.name, this.pattern); + const innerResult = matcher.test(actual); + const result = new MatchResult(actual); + if (innerResult.failCount === 0) { + result.recordFailure({ + matcher: this, + path: [], + message: `Found unexpected match: ${JSON.stringify(actual, void 0, 2)}` + }); + } + return result; + } +}; +var AnyMatch = class extends Matcher { + constructor(name) { + super(); + this.name = name; + } + test(actual) { + const result = new MatchResult(actual); + if (actual == null) { + result.recordFailure({ + matcher: this, + path: [], + message: "Expected a value but found none" + }); + } + return result; + } +}; +var StringLikeRegexpMatch = class extends Matcher { + constructor(name, pattern) { + super(); + this.name = name; + this.pattern = pattern; + } + test(actual) { + const result = new MatchResult(actual); + const regex = new RegExp(this.pattern, "gm"); + if (typeof actual !== "string") { + result.recordFailure({ + matcher: this, + path: [], + message: `Expected a string, but got '${typeof actual}'` + }); + } + if (!regex.test(actual)) { + result.recordFailure({ + matcher: this, + path: [], + message: `String '${actual}' did not match pattern '${this.pattern}'` + }); + } + return result; + } +}; + +// lib/assertions/providers/lambda-handler/base.ts +var https = __toESM(require("https")); +var url = __toESM(require("url")); +var AWS = __toESM(require("aws-sdk")); +var CustomResourceHandler = class { + constructor(event, context) { + this.event = event; + this.context = context; + this.timedOut = false; + this.timeout = setTimeout(async () => { + await this.respond({ + status: "FAILED", + reason: "Lambda Function Timeout", + data: this.context.logStreamName + }); + this.timedOut = true; + }, context.getRemainingTimeInMillis() - 1200); + this.event = event; + this.physicalResourceId = extractPhysicalResourceId(event); + } + async handle() { + try { + if ("stateMachineArn" in this.event.ResourceProperties) { + const req = { + stateMachineArn: this.event.ResourceProperties.stateMachineArn, + name: this.event.RequestId, + input: JSON.stringify(this.event) + }; + await this.startExecution(req); + return; + } else { + const response = await this.processEvent(this.event.ResourceProperties); + return response; + } + } catch (e) { + console.log(e); + throw e; + } finally { + clearTimeout(this.timeout); + } + } + async handleIsComplete() { + try { + const result = await this.processEvent(this.event.ResourceProperties); + return result; + } catch (e) { + console.log(e); + return; + } finally { + clearTimeout(this.timeout); + } + } + async startExecution(req) { + try { + const sfn = new AWS.StepFunctions(); + await sfn.startExecution(req).promise(); + } finally { + clearTimeout(this.timeout); + } + } + respond(response) { + if (this.timedOut) { + return; + } + const cfResponse = { + Status: response.status, + Reason: response.reason, + PhysicalResourceId: this.physicalResourceId, + StackId: this.event.StackId, + RequestId: this.event.RequestId, + LogicalResourceId: this.event.LogicalResourceId, + NoEcho: false, + Data: response.data + }; + const responseBody = JSON.stringify(cfResponse); + console.log("Responding to CloudFormation", responseBody); + const parsedUrl = url.parse(this.event.ResponseURL); + const requestOptions = { + hostname: parsedUrl.hostname, + path: parsedUrl.path, + method: "PUT", + headers: { "content-type": "", "content-length": responseBody.length } + }; + return new Promise((resolve, reject) => { + try { + const request2 = https.request(requestOptions, resolve); + request2.on("error", reject); + request2.write(responseBody); + request2.end(); + } catch (e) { + reject(e); + } finally { + clearTimeout(this.timeout); + } + }); + } +}; +function extractPhysicalResourceId(event) { + switch (event.RequestType) { + case "Create": + return event.LogicalResourceId; + case "Update": + case "Delete": + return event.PhysicalResourceId; + } +} + +// lib/assertions/providers/lambda-handler/assertion.ts +var AssertionHandler = class extends CustomResourceHandler { + async processEvent(request2) { + let actual = decodeCall(request2.actual); + const expected = decodeCall(request2.expected); + let result; + const matcher = new MatchCreator(expected).getMatcher(); + console.log(`Testing equality between ${JSON.stringify(request2.actual)} and ${JSON.stringify(request2.expected)}`); + const matchResult = matcher.test(actual); + matchResult.finished(); + if (matchResult.hasFailed()) { + result = { + failed: true, + assertion: JSON.stringify({ + status: "fail", + message: [ + ...matchResult.toHumanStrings(), + JSON.stringify(matchResult.target, void 0, 2) + ].join("\n") + }) + }; + if (request2.failDeployment) { + throw new Error(result.assertion); + } + } else { + result = { + assertion: JSON.stringify({ + status: "success" + }) + }; + } + return result; + } +}; +var MatchCreator = class { + constructor(obj) { + this.parsedObj = { + matcher: obj + }; + } + getMatcher() { + try { + const final = JSON.parse(JSON.stringify(this.parsedObj), function(_k, v) { + const nested = Object.keys(v)[0]; + switch (nested) { + case "$ArrayWith": + return Match.arrayWith(v[nested]); + case "$ObjectLike": + return Match.objectLike(v[nested]); + case "$StringLike": + return Match.stringLikeRegexp(v[nested]); + default: + return v; + } + }); + if (Matcher.isMatcher(final.matcher)) { + return final.matcher; + } + return Match.exact(final.matcher); + } catch { + return Match.exact(this.parsedObj.matcher); + } + } +}; +function decodeCall(call) { + if (!call) { + return void 0; + } + try { + const parsed = JSON.parse(call); + return parsed; + } catch (e) { + return call; + } +} + +// lib/assertions/providers/lambda-handler/utils.ts +function decode(object) { + return JSON.parse(JSON.stringify(object), (_k, v) => { + switch (v) { + case "TRUE:BOOLEAN": + return true; + case "FALSE:BOOLEAN": + return false; + default: + return v; + } + }); +} + +// lib/assertions/providers/lambda-handler/sdk.ts +function flatten(object) { + return Object.assign( + {}, + ...function _flatten(child, path = []) { + return [].concat(...Object.keys(child).map((key) => { + let childKey = Buffer.isBuffer(child[key]) ? child[key].toString("utf8") : child[key]; + if (typeof childKey === "string") { + childKey = isJsonString(childKey); + } + return typeof childKey === "object" && childKey !== null ? _flatten(childKey, path.concat([key])) : { [path.concat([key]).join(".")]: childKey }; + })); + }(object) + ); +} +var AwsApiCallHandler = class extends CustomResourceHandler { + async processEvent(request2) { + const AWS2 = require("aws-sdk"); + console.log(`AWS SDK VERSION: ${AWS2.VERSION}`); + if (!Object.prototype.hasOwnProperty.call(AWS2, request2.service)) { + throw Error(`Service ${request2.service} does not exist in AWS SDK version ${AWS2.VERSION}.`); + } + const service = new AWS2[request2.service](); + const response = await service[request2.api](request2.parameters && decode(request2.parameters)).promise(); + console.log(`SDK response received ${JSON.stringify(response)}`); + delete response.ResponseMetadata; + const respond = { + apiCallResponse: response + }; + const flatData = { + ...flatten(respond) + }; + let resp = respond; + if (request2.outputPaths) { + resp = filterKeys(flatData, request2.outputPaths); + } else if (request2.flattenResponse === "true") { + resp = flatData; + } + console.log(`Returning result ${JSON.stringify(resp)}`); + return resp; + } +}; +function filterKeys(object, searchStrings) { + return Object.entries(object).reduce((filteredObject, [key, value]) => { + for (const searchString of searchStrings) { + if (key.startsWith(`apiCallResponse.${searchString}`)) { + filteredObject[key] = value; + } + } + return filteredObject; + }, {}); +} +function isJsonString(value) { + try { + return JSON.parse(value); + } catch { + return value; + } +} + +// lib/assertions/providers/lambda-handler/types.ts +var ASSERT_RESOURCE_TYPE = "Custom::DeployAssert@AssertEquals"; +var SDK_RESOURCE_TYPE_PREFIX = "Custom::DeployAssert@SdkCall"; + +// lib/assertions/providers/lambda-handler/index.ts +async function handler(event, context) { + console.log(`Event: ${JSON.stringify({ ...event, ResponseURL: "..." })}`); + const provider = createResourceHandler(event, context); + try { + if (event.RequestType === "Delete") { + await provider.respond({ + status: "SUCCESS", + reason: "OK" + }); + return; + } + const result = await provider.handle(); + if ("stateMachineArn" in event.ResourceProperties) { + console.info('Found "stateMachineArn", waiter statemachine started'); + return; + } else if ("expected" in event.ResourceProperties) { + console.info('Found "expected", testing assertions'); + const actualPath = event.ResourceProperties.actualPath; + const actual = actualPath ? result[`apiCallResponse.${actualPath}`] : result.apiCallResponse; + const assertion = new AssertionHandler({ + ...event, + ResourceProperties: { + ServiceToken: event.ServiceToken, + actual, + expected: event.ResourceProperties.expected + } + }, context); + try { + const assertionResult = await assertion.handle(); + await provider.respond({ + status: "SUCCESS", + reason: "OK", + data: { + ...assertionResult, + ...result + } + }); + return; + } catch (e) { + await provider.respond({ + status: "FAILED", + reason: e.message ?? "Internal Error" + }); + return; + } + } + await provider.respond({ + status: "SUCCESS", + reason: "OK", + data: result + }); + } catch (e) { + await provider.respond({ + status: "FAILED", + reason: e.message ?? "Internal Error" + }); + return; + } + return; +} +async function onTimeout(timeoutEvent) { + const isCompleteRequest = JSON.parse(JSON.parse(timeoutEvent.Cause).errorMessage); + const provider = createResourceHandler(isCompleteRequest, standardContext); + await provider.respond({ + status: "FAILED", + reason: "Operation timed out: " + JSON.stringify(isCompleteRequest) + }); +} +async function isComplete(event, context) { + console.log(`Event: ${JSON.stringify({ ...event, ResponseURL: "..." })}`); + const provider = createResourceHandler(event, context); + try { + const result = await provider.handleIsComplete(); + const actualPath = event.ResourceProperties.actualPath; + if (result) { + const actual = actualPath ? result[`apiCallResponse.${actualPath}`] : result.apiCallResponse; + if ("expected" in event.ResourceProperties) { + const assertion = new AssertionHandler({ + ...event, + ResourceProperties: { + ServiceToken: event.ServiceToken, + actual, + expected: event.ResourceProperties.expected + } + }, context); + const assertionResult = await assertion.handleIsComplete(); + if (!(assertionResult == null ? void 0 : assertionResult.failed)) { + await provider.respond({ + status: "SUCCESS", + reason: "OK", + data: { + ...assertionResult, + ...result + } + }); + return; + } else { + console.log(`Assertion Failed: ${JSON.stringify(assertionResult)}`); + throw new Error(JSON.stringify(event)); + } + } + await provider.respond({ + status: "SUCCESS", + reason: "OK", + data: result + }); + } else { + console.log("No result"); + throw new Error(JSON.stringify(event)); + } + return; + } catch (e) { + console.log(e); + throw new Error(JSON.stringify(event)); + } +} +function createResourceHandler(event, context) { + if (event.ResourceType.startsWith(SDK_RESOURCE_TYPE_PREFIX)) { + return new AwsApiCallHandler(event, context); + } else if (event.ResourceType.startsWith(ASSERT_RESOURCE_TYPE)) { + return new AssertionHandler(event, context); + } else { + throw new Error(`Unsupported resource type "${event.ResourceType}`); + } +} +var standardContext = { + getRemainingTimeInMillis: () => 9e4 +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + handler, + isComplete, + onTimeout +}); diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/cdk.out b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/cdk.out index 588d7b269d34f..145739f539580 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"20.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/integ.json b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/integ.json index 5f1ffa7eb69cc..0dd0afd7c35b7 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/integ.json @@ -1,14 +1,12 @@ { - "version": "20.0.0", + "version": "22.0.0", "testCases": { - "integ.bucket-notifications": { + "SQSBucketNotificationsTest/DefaultTest": { "stacks": [ "sqs-bucket-notifications" ], - "diffAssets": false, - "stackUpdateWorkflow": true + "assertionStack": "SQSBucketNotificationsTest/DefaultTest/DeployAssert", + "assertionStackName": "SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E" } - }, - "synthContext": {}, - "enableLookups": false + } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/manifest.json b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/manifest.json index eb246aa7d2a5a..cac430914a7c5 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "20.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "sqs-bucket-notifications.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,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}/8c78d320c89f08a4f37938acc709dabdceea75fe1529f82b9859d6103fb0ea20.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/0a02ffa02e0eb3cddd1052b3914c6a93854a8a287abcc3f753db1cb229cd101c.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -87,12 +81,36 @@ "data": "Bucket25524B414" } ], + "/sqs-bucket-notifications/Bucket2/Policy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "Bucket2Policy945B22E3" + } + ], + "/sqs-bucket-notifications/Bucket2/AutoDeleteObjectsCustomResource/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "Bucket2AutoDeleteObjectsCustomResourceF4462BA8" + } + ], "/sqs-bucket-notifications/Bucket2/Notifications/Resource": [ { "type": "aws:cdk:logicalId", "data": "Bucket2NotificationsD9BA2A77" } ], + "/sqs-bucket-notifications/Custom::S3AutoDeleteObjectsCustomResourceProvider/Role": [ + { + "type": "aws:cdk:logicalId", + "data": "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + } + ], + "/sqs-bucket-notifications/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler": [ + { + "type": "aws:cdk:logicalId", + "data": "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F" + } + ], "/sqs-bucket-notifications/EncryptedQueue/Key/Resource": [ { "type": "aws:cdk:logicalId", @@ -111,6 +129,18 @@ "data": "EncryptedQueuePolicy8AEB1708" } ], + "/sqs-bucket-notifications/Exports/Output{\"Ref\":\"MyQueueE6CA6235\"}": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportsOutputRefMyQueueE6CA623512A57419" + } + ], + "/sqs-bucket-notifications/Exports/Output{\"Ref\":\"Bucket25524B414\"}": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportsOutputRefBucket25524B414E77B0447" + } + ], "/sqs-bucket-notifications/BootstrapVersion": [ { "type": "aws:cdk:logicalId", @@ -125,6 +155,96 @@ ] }, "displayName": "sqs-bucket-notifications" + }, + "SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E.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}/7cc78f8c6bc32beeb66e815b2c296332a773fb978275a2d9c432d156d56604d3.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E.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": [ + "sqs-bucket-notifications", + "SQSBucketNotificationsTestDefaultTestDeployAssert53BCF57E.assets" + ], + "metadata": { + "/SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSpurgeQueue/Default/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "AwsApiCallSQSpurgeQueue" + } + ], + "/SQSBucketNotificationsTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Role": [ + { + "type": "aws:cdk:logicalId", + "data": "SingletonFunction1488541a7b23466481b69b4408076b81Role37ABCE73" + } + ], + "/SQSBucketNotificationsTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Handler": [ + { + "type": "aws:cdk:logicalId", + "data": "SingletonFunction1488541a7b23466481b69b4408076b81HandlerCD40AE9F" + } + ], + "/SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallS3putObject/Default/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "AwsApiCallS3putObject" + } + ], + "/SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSreceiveMessage/Default/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "AwsApiCallSQSreceiveMessage" + } + ], + "/SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSreceiveMessage/AssertionResults": [ + { + "type": "aws:cdk:logicalId", + "data": "AssertionResultsAwsApiCallSQSreceiveMessage" + } + ], + "/SQSBucketNotificationsTest/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/SQSBucketNotificationsTest/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "SQSBucketNotificationsTest/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/sqs-bucket-notifications.assets.json b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/sqs-bucket-notifications.assets.json index b4ccbf1b47b66..6455fa0160125 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/sqs-bucket-notifications.assets.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/sqs-bucket-notifications.assets.json @@ -1,7 +1,20 @@ { - "version": "20.0.0", + "version": "22.0.0", "files": { - "8c78d320c89f08a4f37938acc709dabdceea75fe1529f82b9859d6103fb0ea20": { + "33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c": { + "source": { + "path": "asset.33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "0a02ffa02e0eb3cddd1052b3914c6a93854a8a287abcc3f753db1cb229cd101c": { "source": { "path": "sqs-bucket-notifications.template.json", "packaging": "file" @@ -9,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "8c78d320c89f08a4f37938acc709dabdceea75fe1529f82b9859d6103fb0ea20.json", + "objectKey": "0a02ffa02e0eb3cddd1052b3914c6a93854a8a287abcc3f753db1cb229cd101c.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/sqs-bucket-notifications.template.json b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/sqs-bucket-notifications.template.json index ec3493650a0c1..f3ed939117ed6 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/sqs-bucket-notifications.template.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/sqs-bucket-notifications.template.json @@ -193,7 +193,7 @@ "Arn" ] }, - "Runtime": "python3.7", + "Runtime": "python3.9", "Timeout": 300 }, "DependsOn": [ @@ -203,6 +203,84 @@ }, "Bucket25524B414": { "Type": "AWS::S3::Bucket", + "Properties": { + "Tags": [ + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "Bucket2Policy945B22E3": { + "Type": "AWS::S3::BucketPolicy", + "Properties": { + "Bucket": { + "Ref": "Bucket25524B414" + }, + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:List*" + ], + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + } + }, + "Resource": [ + { + "Fn::GetAtt": [ + "Bucket25524B414", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "Bucket25524B414", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + } + } + }, + "Bucket2AutoDeleteObjectsCustomResourceF4462BA8": { + "Type": "Custom::S3AutoDeleteObjects", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "Arn" + ] + }, + "BucketName": { + "Ref": "Bucket25524B414" + } + }, + "DependsOn": [ + "Bucket2Policy945B22E3" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" }, @@ -250,6 +328,64 @@ "MyQueueE6CA6235" ] }, + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": { + "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" + } + ] + } + }, + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "33e2651435a0d472a75c1e033c9832b21321d9e56711926b04c5705e5f63874c.zip" + }, + "Timeout": 900, + "MemorySize": 128, + "Handler": "__entrypoint__.handler", + "Role": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + }, + "Runtime": "nodejs14.x", + "Description": { + "Fn::Join": [ + "", + [ + "Lambda function for auto-deleting objects in ", + { + "Ref": "Bucket25524B414" + }, + " S3 bucket." + ] + ] + } + }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ] + }, "EncryptedQueueKey6F4FD304": { "Type": "AWS::KMS::Key", "Properties": { @@ -376,6 +512,24 @@ } } }, + "Outputs": { + "ExportsOutputRefMyQueueE6CA623512A57419": { + "Value": { + "Ref": "MyQueueE6CA6235" + }, + "Export": { + "Name": "sqs-bucket-notifications:ExportsOutputRefMyQueueE6CA623512A57419" + } + }, + "ExportsOutputRefBucket25524B414E77B0447": { + "Value": { + "Ref": "Bucket25524B414" + }, + "Export": { + "Name": "sqs-bucket-notifications:ExportsOutputRefBucket25524B414E77B0447" + } + } + }, "Parameters": { "BootstrapVersion": { "Type": "AWS::SSM::Parameter::Value", diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/tree.json b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/tree.json index 3bed0cf09bcbb..8346d96c238f0 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" - } - }, "sqs-bucket-notifications": { "id": "sqs-bucket-notifications", "path": "sqs-bucket-notifications", @@ -40,14 +32,14 @@ "id": "Resource", "path": "sqs-bucket-notifications/Bucket1/Notifications/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, @@ -173,6 +165,14 @@ "id": "Role", "path": "sqs-bucket-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role", "children": { + "ImportRole": { + "id": "ImportRole", + "path": "sqs-bucket-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/ImportRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "sqs-bucket-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/Resource", @@ -261,14 +261,14 @@ "id": "Resource", "path": "sqs-bucket-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } }, "Bucket2": { @@ -280,13 +280,107 @@ "path": "sqs-bucket-notifications/Bucket2/Resource", "attributes": { "aws:cdk:cloudformation:type": "AWS::S3::Bucket", - "aws:cdk:cloudformation:props": {} + "aws:cdk:cloudformation:props": { + "tags": [ + { + "key": "aws-cdk:auto-delete-objects", + "value": "true" + } + ] + } }, "constructInfo": { "fqn": "@aws-cdk/aws-s3.CfnBucket", "version": "0.0.0" } }, + "Policy": { + "id": "Policy", + "path": "sqs-bucket-notifications/Bucket2/Policy", + "children": { + "Resource": { + "id": "Resource", + "path": "sqs-bucket-notifications/Bucket2/Policy/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::S3::BucketPolicy", + "aws:cdk:cloudformation:props": { + "bucket": { + "Ref": "Bucket25524B414" + }, + "policyDocument": { + "Statement": [ + { + "Action": [ + "s3:DeleteObject*", + "s3:GetBucket*", + "s3:List*" + ], + "Effect": "Allow", + "Principal": { + "AWS": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + } + }, + "Resource": [ + { + "Fn::GetAtt": [ + "Bucket25524B414", + "Arn" + ] + }, + { + "Fn::Join": [ + "", + [ + { + "Fn::GetAtt": [ + "Bucket25524B414", + "Arn" + ] + }, + "/*" + ] + ] + } + ] + } + ], + "Version": "2012-10-17" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-s3.CfnBucketPolicy", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/aws-s3.BucketPolicy", + "version": "0.0.0" + } + }, + "AutoDeleteObjectsCustomResource": { + "id": "AutoDeleteObjectsCustomResource", + "path": "sqs-bucket-notifications/Bucket2/AutoDeleteObjectsCustomResource", + "children": { + "Default": { + "id": "Default", + "path": "sqs-bucket-notifications/Bucket2/AutoDeleteObjectsCustomResource/Default", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.CustomResource", + "version": "0.0.0" + } + }, "Notifications": { "id": "Notifications", "path": "sqs-bucket-notifications/Bucket2/Notifications", @@ -295,14 +389,14 @@ "id": "Resource", "path": "sqs-bucket-notifications/Bucket2/Notifications/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, @@ -311,6 +405,40 @@ "version": "0.0.0" } }, + "Custom::S3AutoDeleteObjectsCustomResourceProvider": { + "id": "Custom::S3AutoDeleteObjectsCustomResourceProvider", + "path": "sqs-bucket-notifications/Custom::S3AutoDeleteObjectsCustomResourceProvider", + "children": { + "Staging": { + "id": "Staging", + "path": "sqs-bucket-notifications/Custom::S3AutoDeleteObjectsCustomResourceProvider/Staging", + "constructInfo": { + "fqn": "@aws-cdk/core.AssetStaging", + "version": "0.0.0" + } + }, + "Role": { + "id": "Role", + "path": "sqs-bucket-notifications/Custom::S3AutoDeleteObjectsCustomResourceProvider/Role", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + }, + "Handler": { + "id": "Handler", + "path": "sqs-bucket-notifications/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.CustomResourceProvider", + "version": "0.0.0" + } + }, "EncryptedQueue": { "id": "EncryptedQueue", "path": "sqs-bucket-notifications/EncryptedQueue", @@ -485,17 +613,301 @@ "fqn": "@aws-cdk/aws-sqs.Queue", "version": "0.0.0" } + }, + "Exports": { + "id": "Exports", + "path": "sqs-bucket-notifications/Exports", + "children": { + "Output{\"Ref\":\"MyQueueE6CA6235\"}": { + "id": "Output{\"Ref\":\"MyQueueE6CA6235\"}", + "path": "sqs-bucket-notifications/Exports/Output{\"Ref\":\"MyQueueE6CA6235\"}", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnOutput", + "version": "0.0.0" + } + }, + "Output{\"Ref\":\"Bucket25524B414\"}": { + "id": "Output{\"Ref\":\"Bucket25524B414\"}", + "path": "sqs-bucket-notifications/Exports/Output{\"Ref\":\"Bucket25524B414\"}", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnOutput", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "sqs-bucket-notifications/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "sqs-bucket-notifications/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } } }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + }, + "SQSBucketNotificationsTest": { + "id": "SQSBucketNotificationsTest", + "path": "SQSBucketNotificationsTest", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "SQSBucketNotificationsTest/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "SQSBucketNotificationsTest/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert", + "children": { + "AwsApiCallSQSpurgeQueue": { + "id": "AwsApiCallSQSpurgeQueue", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSpurgeQueue", + "children": { + "SdkProvider": { + "id": "SdkProvider", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSpurgeQueue/SdkProvider", + "children": { + "AssertionsProvider": { + "id": "AssertionsProvider", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSpurgeQueue/SdkProvider/AssertionsProvider", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.AssertionsProvider", + "version": "0.0.0" + } + }, + "Default": { + "id": "Default", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSpurgeQueue/Default", + "children": { + "Default": { + "id": "Default", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSpurgeQueue/Default/Default", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.CustomResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.AwsApiCall", + "version": "0.0.0" + } + }, + "SingletonFunction1488541a7b23466481b69b4408076b81": { + "id": "SingletonFunction1488541a7b23466481b69b4408076b81", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81", + "children": { + "Staging": { + "id": "Staging", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Staging", + "constructInfo": { + "fqn": "@aws-cdk/core.AssetStaging", + "version": "0.0.0" + } + }, + "Role": { + "id": "Role", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Role", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + }, + "Handler": { + "id": "Handler", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Handler", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + }, + "AwsApiCallS3putObject": { + "id": "AwsApiCallS3putObject", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallS3putObject", + "children": { + "SdkProvider": { + "id": "SdkProvider", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallS3putObject/SdkProvider", + "children": { + "AssertionsProvider": { + "id": "AssertionsProvider", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallS3putObject/SdkProvider/AssertionsProvider", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.AssertionsProvider", + "version": "0.0.0" + } + }, + "Default": { + "id": "Default", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallS3putObject/Default", + "children": { + "Default": { + "id": "Default", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallS3putObject/Default/Default", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.CustomResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.AwsApiCall", + "version": "0.0.0" + } + }, + "AwsApiCallSQSreceiveMessage": { + "id": "AwsApiCallSQSreceiveMessage", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSreceiveMessage", + "children": { + "SdkProvider": { + "id": "SdkProvider", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSreceiveMessage/SdkProvider", + "children": { + "AssertionsProvider": { + "id": "AssertionsProvider", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSreceiveMessage/SdkProvider/AssertionsProvider", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.AssertionsProvider", + "version": "0.0.0" + } + }, + "Default": { + "id": "Default", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSreceiveMessage/Default", + "children": { + "Default": { + "id": "Default", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSreceiveMessage/Default/Default", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.CustomResource", + "version": "0.0.0" + } + }, + "AssertionResults": { + "id": "AssertionResults", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/AwsApiCallSQSreceiveMessage/AssertionResults", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnOutput", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.AwsApiCall", + "version": "0.0.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "SQSBucketNotificationsTest/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.IntegTestCase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.IntegTest", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.App", + "version": "0.0.0" } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.ts b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.ts index cddba2b35d9ac..3d6a11354182c 100644 --- a/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.ts +++ b/packages/@aws-cdk/aws-s3-notifications/test/sqs/integ.bucket-notifications.ts @@ -1,6 +1,7 @@ import * as s3 from '@aws-cdk/aws-s3'; import * as sqs from '@aws-cdk/aws-sqs'; import * as cdk from '@aws-cdk/core'; +import * as integ from '@aws-cdk/integ-tests'; import * as s3n from '../../lib'; const app = new cdk.App(); @@ -16,10 +17,34 @@ bucket1.addObjectCreatedNotification(new s3n.SqsDestination(queue)); const bucket2 = new s3.Bucket(stack, 'Bucket2', { removalPolicy: cdk.RemovalPolicy.DESTROY, + autoDeleteObjects: true, }); bucket2.addObjectCreatedNotification(new s3n.SqsDestination(queue), { suffix: '.png' }); const encryptedQueue = new sqs.Queue(stack, 'EncryptedQueue', { encryption: sqs.QueueEncryption.KMS }); bucket1.addObjectRemovedNotification(new s3n.SqsDestination(encryptedQueue)); + +const integTest = new integ.IntegTest(app, 'SQSBucketNotificationsTest', { + testCases: [stack], +}); + +integTest.assertions + // First remove the test notifications + .awsApiCall('SQS', 'purgeQueue', { + QueueUrl: queue.queueUrl, + }) + .next(integTest.assertions + .awsApiCall('S3', 'putObject', { + Bucket: bucket2.bucketName, + Key: 'image.png', + Body: 'Some content', + })) + .next(integTest.assertions + .awsApiCall('SQS', 'receiveMessage', { + QueueUrl: queue.queueUrl, + WaitTimeSeconds: 20, + }) + .assertAtPath('Messages.0.Body.Records.0.s3.object.key', integ.ExpectedResult.stringLikeRegexp('image\\.png'))); + app.synth(); diff --git a/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts b/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts index cb213d51e247e..a10048d5c5454 100644 --- a/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts +++ b/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts @@ -98,7 +98,7 @@ export class NotificationsResourceHandler extends Construct { Code: { ZipFile: handlerSourceWithoutComments }, Handler: 'index.handler', Role: this.role.roleArn, - Runtime: 'python3.7', + Runtime: 'python3.9', Timeout: 300, }, }); diff --git a/packages/@aws-cdk/aws-s3/package.json b/packages/@aws-cdk/aws-s3/package.json index e33ac988fd8f8..d5066ab6e879e 100644 --- a/packages/@aws-cdk/aws-s3/package.json +++ b/packages/@aws-cdk/aws-s3/package.json @@ -83,9 +83,10 @@ "@aws-cdk/assertions": "0.0.0", "@aws-cdk/cdk-build-tools": "0.0.0", "@aws-cdk/integ-runner": "0.0.0", + "@aws-cdk/integ-tests": "0.0.0", "@aws-cdk/cfn2ts": "0.0.0", "@aws-cdk/pkglint": "0.0.0", - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/jest": "^27.5.2", "jest": "^27.5.1" }, diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/NotificationTestDefaultTestDeployAssertBFB81666.assets.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/NotificationTestDefaultTestDeployAssertBFB81666.assets.json new file mode 100644 index 0000000000000..eee5ef607d9db --- /dev/null +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/NotificationTestDefaultTestDeployAssertBFB81666.assets.json @@ -0,0 +1,19 @@ +{ + "version": "22.0.0", + "files": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { + "source": { + "path": "NotificationTestDefaultTestDeployAssertBFB81666.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/aws-s3/test/integ.bucket.notifications.js.snapshot/NotificationTestDefaultTestDeployAssertBFB81666.template.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/NotificationTestDefaultTestDeployAssertBFB81666.template.json new file mode 100644 index 0000000000000..ad9d0fb73d1dd --- /dev/null +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/NotificationTestDefaultTestDeployAssertBFB81666.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/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.assets.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.assets.json index d6487fe62b263..9db394e3de998 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.assets.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.assets.json @@ -1,7 +1,7 @@ { - "version": "20.0.0", + "version": "22.0.0", "files": { - "61a3a9ee337bb9ad72389718da2aff2589bcadc056e4a5a942c4ef95ad60c38f": { + "0950e270b55171f331f16b0a63f107106782d89c7816c2ec3ba14a69c11be52d": { "source": { "path": "aws-cdk-s3-notifications.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "61a3a9ee337bb9ad72389718da2aff2589bcadc056e4a5a942c4ef95ad60c38f.json", + "objectKey": "0950e270b55171f331f16b0a63f107106782d89c7816c2ec3ba14a69c11be52d.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.template.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.template.json index 6f29d5a88f3d7..e47657af41b21 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.template.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.template.json @@ -89,7 +89,7 @@ "Arn" ] }, - "Runtime": "python3.7", + "Runtime": "python3.9", "Timeout": 300 }, "DependsOn": [ diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/cdk.out b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/cdk.out index 588d7b269d34f..145739f539580 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"20.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/integ.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/integ.json index e61cb0677c88b..786c78b96c982 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/integ.json @@ -1,14 +1,12 @@ { - "version": "20.0.0", + "version": "22.0.0", "testCases": { - "integ.bucket.notifications": { + "NotificationTest/DefaultTest": { "stacks": [ "aws-cdk-s3-notifications" ], - "diffAssets": false, - "stackUpdateWorkflow": true + "assertionStack": "NotificationTest/DefaultTest/DeployAssert", + "assertionStackName": "NotificationTestDefaultTestDeployAssertBFB81666" } - }, - "synthContext": {}, - "enableLookups": false + } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/manifest.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/manifest.json index d70d747fb4244..9068079d380c6 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "20.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "aws-cdk-s3-notifications.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,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}/61a3a9ee337bb9ad72389718da2aff2589bcadc056e4a5a942c4ef95ad60c38f.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/0950e270b55171f331f16b0a63f107106782d89c7816c2ec3ba14a69c11be52d.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -83,6 +77,59 @@ ] }, "displayName": "aws-cdk-s3-notifications" + }, + "NotificationTestDefaultTestDeployAssertBFB81666.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "NotificationTestDefaultTestDeployAssertBFB81666.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "NotificationTestDefaultTestDeployAssertBFB81666": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "NotificationTestDefaultTestDeployAssertBFB81666.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": [ + "NotificationTestDefaultTestDeployAssertBFB81666.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": [ + "NotificationTestDefaultTestDeployAssertBFB81666.assets" + ], + "metadata": { + "/NotificationTest/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/NotificationTest/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "NotificationTest/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/tree.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/tree.json index 06b4190ddc12c..2f81d672269cf 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" - } - }, "aws-cdk-s3-notifications": { "id": "aws-cdk-s3-notifications", "path": "aws-cdk-s3-notifications", @@ -40,14 +32,14 @@ "id": "Resource", "path": "aws-cdk-s3-notifications/MyEventBridgeBucket/Notifications/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, @@ -64,6 +56,14 @@ "id": "Role", "path": "aws-cdk-s3-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role", "children": { + "ImportRole": { + "id": "ImportRole", + "path": "aws-cdk-s3-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/ImportRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "aws-cdk-s3-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/Resource", @@ -152,26 +152,104 @@ "id": "Resource", "path": "aws-cdk-s3-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-cdk-s3-notifications/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-cdk-s3-notifications/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" } } }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + }, + "NotificationTest": { + "id": "NotificationTest", + "path": "NotificationTest", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "NotificationTest/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "NotificationTest/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "NotificationTest/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "NotificationTest/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "NotificationTest/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.IntegTestCase", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests.IntegTest", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.App", + "version": "0.0.0" } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.ts b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.ts index 3180b491f6250..59092658fb929 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.ts +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.ts @@ -1,5 +1,6 @@ #!/usr/bin/env node import * as cdk from '@aws-cdk/core'; +import * as integ from '@aws-cdk/integ-tests'; import * as s3 from '../lib'; const app = new cdk.App(); @@ -11,4 +12,8 @@ new s3.Bucket(stack, 'MyEventBridgeBucket', { removalPolicy: cdk.RemovalPolicy.DESTROY, }); +new integ.IntegTest(app, 'NotificationTest', { + testCases: [stack], +}); + app.synth(); diff --git a/packages/@aws-cdk/aws-s3/test/notification.test.ts b/packages/@aws-cdk/aws-s3/test/notification.test.ts index a32b6c8c0eab9..081d5443a2160 100644 --- a/packages/@aws-cdk/aws-s3/test/notification.test.ts +++ b/packages/@aws-cdk/aws-s3/test/notification.test.ts @@ -164,4 +164,25 @@ describe('notification', () => { }, }); }); + test('check notifications handler runtime version', () => { + const stack = new cdk.Stack(); + + const importedRole = iam.Role.fromRoleArn(stack, 'role', 'arn:aws:iam::111111111111:role/DevsNotAllowedToTouch'); + + const bucket = s3.Bucket.fromBucketAttributes(stack, 'MyBucket', { + bucketName: 'foo-bar', + notificationsHandlerRole: importedRole, + }); + + bucket.addEventNotification(s3.EventType.OBJECT_CREATED, { + bind: () => ({ + arn: 'ARN', + type: s3.BucketNotificationDestinationType.TOPIC, + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::Lambda::Function', { + Runtime: 'python3.9', + }); + }); }); diff --git a/packages/@aws-cdk/aws-s3objectlambda/lib/access-point.ts b/packages/@aws-cdk/aws-s3objectlambda/lib/access-point.ts index 7d0804aa3367a..7136bd3d267a7 100644 --- a/packages/@aws-cdk/aws-s3objectlambda/lib/access-point.ts +++ b/packages/@aws-cdk/aws-s3objectlambda/lib/access-point.ts @@ -232,9 +232,9 @@ export class AccessPoint extends AccessPointBase { { actions: ['GetObject'], contentTransformation: { - AwsLambda: { - FunctionArn: props.handler.functionArn, - FunctionPayload: props.payload ? JSON.stringify(props.payload) : undefined, + awsLambda: { + functionArn: props.handler.functionArn, + functionPayload: props.payload ? JSON.stringify(props.payload) : undefined, }, }, }, diff --git a/packages/@aws-cdk/aws-servicecatalogappregistry/lib/application.ts b/packages/@aws-cdk/aws-servicecatalogappregistry/lib/application.ts index eb5112e45287e..ee0465eae5d12 100644 --- a/packages/@aws-cdk/aws-servicecatalogappregistry/lib/application.ts +++ b/packages/@aws-cdk/aws-servicecatalogappregistry/lib/application.ts @@ -134,7 +134,6 @@ abstract class ApplicationBase extends cdk.Resource implements IApplication { /** * Associate stack with the application in the stack passed as parameter. * - * If the stack is already associated, it will ignore duplicate request. * A stack can only be associated with one application. */ public associateApplicationWithStack(stack: cdk.Stack): void { @@ -146,7 +145,7 @@ abstract class ApplicationBase extends cdk.Resource implements IApplication { }); this.associatedResources.add(stack.node.addr); - if (stack !== cdk.Stack.of(this) && this.isSameAccount(stack) && !this.isStageScope(stack)) { + if (stack !== cdk.Stack.of(this) && this.isSameAccount(stack) && !this.isStageScope(stack) && !stack.nested) { stack.addDependency(cdk.Stack.of(this)); } } @@ -251,6 +250,11 @@ export class Application extends ApplicationBase { }); } + /** + * Application manager URL for the Application. + * @attribute + */ + public readonly applicationManagerUrl?: cdk.CfnOutput; public readonly applicationArn: string; public readonly applicationId: string; public readonly applicationName?: string; @@ -270,6 +274,11 @@ export class Application extends ApplicationBase { this.applicationId = application.attrId; this.applicationName = props.applicationName; this.nodeAddress = cdk.Names.nodeUniqueId(application.node); + + this.applicationManagerUrl = new cdk.CfnOutput(this, 'ApplicationManagerUrl', { + value: `https://${this.env.region}.console.aws.amazon.com/systems-manager/appmanager/application/AWS_AppRegistry_Application-${this.applicationName}`, + description: `Application manager url for application ${this.applicationName}`, + }); } protected generateUniqueHash(resourceAddress: string): string { diff --git a/packages/@aws-cdk/aws-servicecatalogappregistry/test/application.test.ts b/packages/@aws-cdk/aws-servicecatalogappregistry/test/application.test.ts index dce0d1147ec44..7a14cda920d28 100644 --- a/packages/@aws-cdk/aws-servicecatalogappregistry/test/application.test.ts +++ b/packages/@aws-cdk/aws-servicecatalogappregistry/test/application.test.ts @@ -34,11 +34,13 @@ describe('Application', () => { test('application with explicit description', () => { const description = 'my test application description'; - new appreg.Application(stack, 'MyApplication', { + const application = new appreg.Application(stack, 'MyApplication', { applicationName: 'testApplication', description: description, }); + Template.fromStack(stack).hasOutput('MyApplicationApplicationManagerUrlB79EF34D', {}); + expect(application.applicationManagerUrl?.value).toContain('AWS_AppRegistry_Application-testApplication'); Template.fromStack(stack).hasResourceProperties('AWS::ServiceCatalogAppRegistry::Application', { Description: description, }); @@ -254,7 +256,7 @@ describe('Application', () => { Template.fromStack(stack).hasResourceProperties('AWS::RAM::ResourceShare', { AllowExternalPrincipals: false, - Name: 'RAMSharee6e0e560e6f8', + Name: 'RAMShare5bb637032063', Principals: ['arn:aws:organizations::123456789012:organization/o-70oi5564q1'], ResourceArns: [{ 'Fn::GetAtt': ['MyApplication5C63EC1D', 'Arn'] }], PermissionArns: ['arn:aws:ram::aws:permission/AWSRAMPermissionServiceCatalogAppRegistryApplicationReadOnly'], @@ -268,7 +270,7 @@ describe('Application', () => { Template.fromStack(stack).hasResourceProperties('AWS::RAM::ResourceShare', { AllowExternalPrincipals: false, - Name: 'RAMSharee6e0e560e6f8', + Name: 'RAMShare5bb637032063', Principals: ['123456789012'], ResourceArns: [{ 'Fn::GetAtt': ['MyApplication5C63EC1D', 'Arn'] }], PermissionArns: ['arn:aws:ram::aws:permission/AWSRAMPermissionServiceCatalogAppRegistryApplicationReadOnly'], @@ -284,7 +286,7 @@ describe('Application', () => { Template.fromStack(stack).hasResourceProperties('AWS::RAM::ResourceShare', { AllowExternalPrincipals: false, - Name: 'RAMSharee6e0e560e6f8', + Name: 'RAMShare5bb637032063', Principals: ['arn:aws:iam::123456789012:role/myRole'], ResourceArns: [{ 'Fn::GetAtt': ['MyApplication5C63EC1D', 'Arn'] }], PermissionArns: ['arn:aws:ram::aws:permission/AWSRAMPermissionServiceCatalogAppRegistryApplicationReadOnly'], @@ -300,7 +302,7 @@ describe('Application', () => { Template.fromStack(stack).hasResourceProperties('AWS::RAM::ResourceShare', { AllowExternalPrincipals: false, - Name: 'RAMSharee6e0e560e6f8', + Name: 'RAMShare5bb637032063', Principals: ['arn:aws:iam::123456789012:user/myUser'], ResourceArns: [{ 'Fn::GetAtt': ['MyApplication5C63EC1D', 'Arn'] }], PermissionArns: ['arn:aws:ram::aws:permission/AWSRAMPermissionServiceCatalogAppRegistryApplicationReadOnly'], @@ -315,7 +317,7 @@ describe('Application', () => { Template.fromStack(stack).hasResourceProperties('AWS::RAM::ResourceShare', { AllowExternalPrincipals: false, - Name: 'RAMSharee6e0e560e6f8', + Name: 'RAMShare5bb637032063', Principals: ['arn:aws:organizations::123456789012:organization/o-70oi5564q1'], ResourceArns: [{ 'Fn::GetAtt': ['MyApplication5C63EC1D', 'Arn'] }], PermissionArns: ['arn:aws:ram::aws:permission/AWSRAMPermissionServiceCatalogAppRegistryApplicationReadOnly'], @@ -330,7 +332,7 @@ describe('Application', () => { Template.fromStack(stack).hasResourceProperties('AWS::RAM::ResourceShare', { AllowExternalPrincipals: false, - Name: 'RAMSharee6e0e560e6f8', + Name: 'RAMShare5bb637032063', Principals: ['arn:aws:organizations::123456789012:organization/o-70oi5564q1'], ResourceArns: [{ 'Fn::GetAtt': ['MyApplication5C63EC1D', 'Arn'] }], PermissionArns: ['arn:aws:ram::aws:permission/AWSRAMPermissionServiceCatalogAppRegistryApplicationAllowAssociation'], @@ -446,8 +448,59 @@ describe('Scope based Associations with Application with Cross Region/Account', }); }); +describe('Conditional nested stack Associations with Application within Same Account', () => { + let app: cdk.App; + beforeEach(() => { + app = new cdk.App({ + context: { + '@aws-cdk/core:newStyleStackSynthesis': false, + }, + }); + }); + + test('Associate conditional nested stack with application', () => { + const stack = new MainStack(app, 'cdkApplication'); + const application = new appreg.Application(stack, 'MyApplication', { + applicationName: 'MyApplication', + }); + application.associateApplicationWithStack(stack); + application.associateApplicationWithStack(stack.nestedStack); + Template.fromStack(stack.nestedStack).hasResource('AWS::ServiceCatalogAppRegistry::ResourceAssociation', { + Properties: { + Application: 'MyApplication', + Resource: { Ref: 'AWS::StackId' }, + ResourceType: 'CFN_STACK', + }, + }); + Template.fromStack(stack.nestedStack).hasCondition('ShouldCreateStackCondition', { + 'Fn::Equals': ['us-east-1'], + }); + }); + +}); + + class AppRegistrySampleStack extends cdk.Stack { public constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); } } + +class MainStack extends cdk.Stack { + public readonly nestedStack: cdk.Stack; + public constructor(parent: cdk.App, id: string, props?: cdk.StackProps) { + super(parent, id, props); + this.nestedStack = new AppRegistryNestedStack(this, 'nested-stack'); + } +} + +class AppRegistryNestedStack extends cdk.NestedStack { + public constructor(scope: Construct, id: string, props?: cdk.NestedStackProps) { + super(scope, id, props); + + const shouldCreateStack = new cdk.CfnCondition(this, 'ShouldCreateStackCondition', { + expression: cdk.Fn.conditionEquals(process.env.CDK_DEFAULT_REGION, 'us-east-1'), + }); + (this.nestedStackResource as cdk.CfnStack).cfnOptions.condition = shouldCreateStack; + } +} diff --git a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/cdk.out b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/integ-servicecatalogappregistry-application.assets.json b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/integ-servicecatalogappregistry-application.assets.json index 7f5db7d1e1328..225ef80716295 100644 --- a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/integ-servicecatalogappregistry-application.assets.json +++ b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/integ-servicecatalogappregistry-application.assets.json @@ -1,7 +1,7 @@ { - "version": "20.0.0", + "version": "22.0.0", "files": { - "d03aa6239eb3b20f4b72fb3dd44a4082d06d7a5451d0ac3855bd1aa78aecfbe9": { + "806ae543572346400832fe865c1bdfa243ef2c1f07c3ce10aa0bd27ed4613a42": { "source": { "path": "integ-servicecatalogappregistry-application.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "d03aa6239eb3b20f4b72fb3dd44a4082d06d7a5451d0ac3855bd1aa78aecfbe9.json", + "objectKey": "806ae543572346400832fe865c1bdfa243ef2c1f07c3ce10aa0bd27ed4613a42.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/integ-servicecatalogappregistry-application.template.json b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/integ-servicecatalogappregistry-application.template.json index e36d7a3b58794..33f4f2a1912fb 100644 --- a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/integ-servicecatalogappregistry-application.template.json +++ b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/integ-servicecatalogappregistry-application.template.json @@ -3,7 +3,7 @@ "TestApplication2FBC585F": { "Type": "AWS::ServiceCatalogAppRegistry::Application", "Properties": { - "Name": "myApplicationtest", + "Name": "myCdkApplication", "Description": "my application description" } }, @@ -39,10 +39,10 @@ } } }, - "TestApplicationRAMSharead8ba81b8cdd40199FD1": { + "TestApplicationRAMShare3dc6227daec11BF3E108": { "Type": "AWS::RAM::ResourceShare", "Properties": { - "Name": "RAMSharead8ba81b8cdd", + "Name": "RAMShare3dc6227daec1", "AllowExternalPrincipals": false, "PermissionArns": [ "arn:aws:ram::aws:permission/AWSRAMPermissionServiceCatalogAppRegistryApplicationReadOnly" @@ -84,7 +84,7 @@ "release": "go time" } }, - "Name": "myAttributeGroupTest", + "Name": "myCdkAttributeGroup", "Description": "my attribute group description" } }, @@ -121,6 +121,23 @@ } } }, + "Outputs": { + "TestApplicationApplicationManagerUrlE1058321": { + "Description": "Application manager url for application myCdkApplication", + "Value": { + "Fn::Join": [ + "", + [ + "https://", + { + "Ref": "AWS::Region" + }, + ".console.aws.amazon.com/systems-manager/appmanager/application/AWS_AppRegistry_Application-myCdkApplication" + ] + ] + } + } + }, "Parameters": { "BootstrapVersion": { "Type": "AWS::SSM::Parameter::Value", diff --git a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/integ.json b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/integ.json index 5178be112c70a..7db84c3e5dfa8 100644 --- a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "20.0.0", + "version": "22.0.0", "testCases": { "integ.application": { "stacks": [ diff --git a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/manifest.json b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/manifest.json index d78791dfe49aa..a8cd9a83688d7 100644 --- a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "20.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "integ-servicecatalogappregistry-application.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,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}/d03aa6239eb3b20f4b72fb3dd44a4082d06d7a5451d0ac3855bd1aa78aecfbe9.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/806ae543572346400832fe865c1bdfa243ef2c1f07c3ce10aa0bd27ed4613a42.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -45,6 +39,12 @@ "data": "TestApplication2FBC585F" } ], + "/integ-servicecatalogappregistry-application/TestApplication/ApplicationManagerUrl": [ + { + "type": "aws:cdk:logicalId", + "data": "TestApplicationApplicationManagerUrlE1058321" + } + ], "/integ-servicecatalogappregistry-application/TestApplication/ResourceAssociationd232b63e52a8": [ { "type": "aws:cdk:logicalId", @@ -57,10 +57,10 @@ "data": "TestApplicationAttributeGroupAssociation4ba7f5842818B8EE1C6F" } ], - "/integ-servicecatalogappregistry-application/TestApplication/RAMSharead8ba81b8cdd": [ + "/integ-servicecatalogappregistry-application/TestApplication/RAMShare3dc6227daec1": [ { "type": "aws:cdk:logicalId", - "data": "TestApplicationRAMSharead8ba81b8cdd40199FD1" + "data": "TestApplicationRAMShare3dc6227daec11BF3E108" } ], "/integ-servicecatalogappregistry-application/TestAttributeGroup/Resource": [ @@ -89,6 +89,12 @@ ] }, "displayName": "integ-servicecatalogappregistry-application" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/tree.json b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/tree.json index f54792dcdef5c..da9f344585ed2 100644 --- a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" - } - }, "integ-servicecatalogappregistry-application": { "id": "integ-servicecatalogappregistry-application", "path": "integ-servicecatalogappregistry-application", @@ -26,7 +18,7 @@ "attributes": { "aws:cdk:cloudformation:type": "AWS::ServiceCatalogAppRegistry::Application", "aws:cdk:cloudformation:props": { - "name": "myApplicationtest", + "name": "myCdkApplication", "description": "my application description" } }, @@ -35,6 +27,14 @@ "version": "0.0.0" } }, + "ApplicationManagerUrl": { + "id": "ApplicationManagerUrl", + "path": "integ-servicecatalogappregistry-application/TestApplication/ApplicationManagerUrl", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnOutput", + "version": "0.0.0" + } + }, "ResourceAssociationd232b63e52a8": { "id": "ResourceAssociationd232b63e52a8", "path": "integ-servicecatalogappregistry-application/TestApplication/ResourceAssociationd232b63e52a8", @@ -83,13 +83,13 @@ "version": "0.0.0" } }, - "RAMSharead8ba81b8cdd": { - "id": "RAMSharead8ba81b8cdd", - "path": "integ-servicecatalogappregistry-application/TestApplication/RAMSharead8ba81b8cdd", + "RAMShare3dc6227daec1": { + "id": "RAMShare3dc6227daec1", + "path": "integ-servicecatalogappregistry-application/TestApplication/RAMShare3dc6227daec1", "attributes": { "aws:cdk:cloudformation:type": "AWS::RAM::ResourceShare", "aws:cdk:cloudformation:props": { - "name": "RAMSharead8ba81b8cdd", + "name": "RAMShare3dc6227daec1", "allowExternalPrincipals": false, "permissionArns": [ "arn:aws:ram::aws:permission/AWSRAMPermissionServiceCatalogAppRegistryApplicationReadOnly" @@ -149,7 +149,7 @@ "release": "go time" } }, - "name": "myAttributeGroupTest", + "name": "myCdkAttributeGroup", "description": "my attribute group description" } }, @@ -168,6 +168,14 @@ "id": "MyRole", "path": "integ-servicecatalogappregistry-application/MyRole", "children": { + "ImportMyRole": { + "id": "ImportMyRole", + "path": "integ-servicecatalogappregistry-application/MyRole/ImportMyRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "integ-servicecatalogappregistry-application/MyRole/Resource", @@ -213,17 +221,41 @@ "fqn": "@aws-cdk/aws-iam.Role", "version": "0.0.0" } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "integ-servicecatalogappregistry-application/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "integ-servicecatalogappregistry-application/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } } }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.App", + "version": "0.0.0" } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.ts b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.ts index d51cad051252c..30f5e2bb88829 100644 --- a/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.ts +++ b/packages/@aws-cdk/aws-servicecatalogappregistry/test/integ.application.ts @@ -6,12 +6,12 @@ const app = new cdk.App(); const stack = new cdk.Stack(app, 'integ-servicecatalogappregistry-application'); const application = new appreg.Application(stack, 'TestApplication', { - applicationName: 'myApplicationtest', + applicationName: 'myCdkApplication', description: 'my application description', }); const attributeGroup = new appreg.AttributeGroup(stack, 'TestAttributeGroup', { - attributeGroupName: 'myAttributeGroupTest', + attributeGroupName: 'myCdkAttributeGroup', description: 'my attribute group description', attributes: { stage: 'alpha', diff --git a/packages/@aws-cdk/aws-ses/package.json b/packages/@aws-cdk/aws-ses/package.json index c747fca0de91b..97c4f2b99be02 100644 --- a/packages/@aws-cdk/aws-ses/package.json +++ b/packages/@aws-cdk/aws-ses/package.json @@ -86,7 +86,7 @@ "@aws-cdk/integ-runner": "0.0.0", "@aws-cdk/cfn2ts": "0.0.0", "@aws-cdk/pkglint": "0.0.0", - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/jest": "^27.5.2", "jest": "^27.5.1" }, diff --git a/packages/@aws-cdk/aws-ssm/lib/parameter.ts b/packages/@aws-cdk/aws-ssm/lib/parameter.ts index 5721cd30e922d..cf44b574bb1ea 100644 --- a/packages/@aws-cdk/aws-ssm/lib/parameter.ts +++ b/packages/@aws-cdk/aws-ssm/lib/parameter.ts @@ -729,7 +729,7 @@ export class StringListParameter extends ParameterBase implements IStringListPar name: this.physicalName, tier: props.tier, type: ParameterType.STRING_LIST, - value: props.stringListValue.join(','), + value: Fn.join(',', props.stringListValue), }); this.parameterName = this.getResourceNameAttribute(resource.ref); this.parameterArn = arnForParameterName(this, this.parameterName, { diff --git a/packages/@aws-cdk/cfnspec/CHANGELOG.md b/packages/@aws-cdk/cfnspec/CHANGELOG.md index 4ccb627a68e3a..5d7427860b735 100644 --- a/packages/@aws-cdk/cfnspec/CHANGELOG.md +++ b/packages/@aws-cdk/cfnspec/CHANGELOG.md @@ -1,3 +1,2028 @@ +# CloudFormation Resource Specification v101.0.0 + +## New Resource Types + +* AWS::AmplifyUIBuilder::Form +* AWS::AppFlow::Connector +* AWS::Connect::Rule +* AWS::EC2::NetworkPerformanceMetricSubscription +* AWS::GameLift::Location +* AWS::Grafana::Workspace +* AWS::OpenSearchServerless::AccessPolicy +* AWS::OpenSearchServerless::Collection +* AWS::OpenSearchServerless::SecurityConfig +* AWS::OpenSearchServerless::SecurityPolicy +* AWS::OpenSearchServerless::VpcEndpoint +* AWS::Pipes::Pipe + +## Attribute Changes + +* AWS::Amplify::Domain AutoSubDomainCreationPatterns.DuplicatesAllowed (__deleted__) +* AWS::ApiGateway::RestApi RestApiId (__added__) +* AWS::Backup::Framework CreationTime.PrimitiveType (__changed__) + * Old: Double + * New: String +* AWS::EC2::NetworkInsightsAnalysis SuggestedAccounts.DuplicatesAllowed (__deleted__) +* AWS::EC2::NetworkInterface SecondaryPrivateIpAddresses.DuplicatesAllowed (__deleted__) +* AWS::EC2::Subnet Ipv6CidrBlocks.DuplicatesAllowed (__deleted__) +* AWS::EC2::TransitGatewayPeeringAttachment Status (__added__) +* AWS::EC2::TransitGatewayPeeringAttachment Status.Code (__added__) +* AWS::EC2::TransitGatewayPeeringAttachment Status.Message (__added__) +* AWS::EC2::VPC CidrBlockAssociations.DuplicatesAllowed (__deleted__) +* AWS::EC2::VPC Ipv6CidrBlocks.DuplicatesAllowed (__deleted__) +* AWS::HealthLake::FHIRDatastore CreatedAt (__added__) +* AWS::HealthLake::FHIRDatastore CreatedAt.Nanos (__added__) +* AWS::HealthLake::FHIRDatastore CreatedAt.Seconds (__added__) +* AWS::IoTTwinMaker::ComponentType Status (__added__) +* AWS::IoTTwinMaker::ComponentType Status.Error (__added__) +* AWS::IoTTwinMaker::ComponentType Status.Error.Code (__added__) +* AWS::IoTTwinMaker::ComponentType Status.Error.Message (__added__) +* AWS::IoTTwinMaker::ComponentType Status.State (__added__) +* AWS::IoTTwinMaker::Entity Status (__added__) +* AWS::IoTTwinMaker::Entity Status.Error (__added__) +* AWS::IoTTwinMaker::Entity Status.Error.Code (__added__) +* AWS::IoTTwinMaker::Entity Status.Error.Message (__added__) +* AWS::IoTTwinMaker::Entity Status.State (__added__) +* AWS::IoTWireless::PartnerAccount SidewalkResponse (__added__) +* AWS::IoTWireless::PartnerAccount SidewalkResponse.AmazonId (__added__) +* AWS::IoTWireless::PartnerAccount SidewalkResponse.Arn (__added__) +* AWS::IoTWireless::PartnerAccount SidewalkResponse.Fingerprint (__added__) +* AWS::Lambda::Function SnapStartResponse (__added__) +* AWS::Lambda::Function SnapStartResponse.ApplyOn (__added__) +* AWS::Lambda::Function SnapStartResponse.OptimizationStatus (__added__) +* AWS::Lightsail::Disk Location (__added__) +* AWS::Lightsail::Disk Location.AvailabilityZone (__added__) +* AWS::Lightsail::Disk Location.RegionName (__added__) +* AWS::MediaPackage::Channel HlsIngest (__added__) +* AWS::MediaPackage::Channel HlsIngest.ingestEndpoints (__added__) +* AWS::NetworkManager::ConnectAttachment ProposedSegmentChange (__added__) +* AWS::NetworkManager::ConnectAttachment ProposedSegmentChange.AttachmentPolicyRuleNumber (__added__) +* AWS::NetworkManager::ConnectAttachment ProposedSegmentChange.SegmentName (__added__) +* AWS::NetworkManager::ConnectAttachment ProposedSegmentChange.Tags (__added__) +* AWS::NetworkManager::ConnectPeer Configuration (__added__) +* AWS::NetworkManager::ConnectPeer Configuration.BgpConfigurations (__added__) +* AWS::NetworkManager::ConnectPeer Configuration.CoreNetworkAddress (__added__) +* AWS::NetworkManager::ConnectPeer Configuration.InsideCidrBlocks (__added__) +* AWS::NetworkManager::ConnectPeer Configuration.PeerAddress (__added__) +* AWS::NetworkManager::ConnectPeer Configuration.Protocol (__added__) +* AWS::NetworkManager::SiteToSiteVpnAttachment ProposedSegmentChange (__added__) +* AWS::NetworkManager::SiteToSiteVpnAttachment ProposedSegmentChange.AttachmentPolicyRuleNumber (__added__) +* AWS::NetworkManager::SiteToSiteVpnAttachment ProposedSegmentChange.SegmentName (__added__) +* AWS::NetworkManager::SiteToSiteVpnAttachment ProposedSegmentChange.Tags (__added__) +* AWS::NetworkManager::VpcAttachment ProposedSegmentChange (__added__) +* AWS::NetworkManager::VpcAttachment ProposedSegmentChange.AttachmentPolicyRuleNumber (__added__) +* AWS::NetworkManager::VpcAttachment ProposedSegmentChange.SegmentName (__added__) +* AWS::NetworkManager::VpcAttachment ProposedSegmentChange.Tags (__added__) +* AWS::NimbleStudio::StreamingImage EncryptionConfiguration (__added__) +* AWS::NimbleStudio::StreamingImage EncryptionConfiguration.KeyArn (__added__) +* AWS::NimbleStudio::StreamingImage EncryptionConfiguration.KeyType (__added__) +* AWS::OpenSearchService::Domain DomainEndpoints (__added__) +* AWS::OpenSearchService::Domain ServiceSoftwareOptions (__added__) +* AWS::OpenSearchService::Domain ServiceSoftwareOptions.AutomatedUpdateDate (__added__) +* AWS::OpenSearchService::Domain ServiceSoftwareOptions.Cancellable (__added__) +* AWS::OpenSearchService::Domain ServiceSoftwareOptions.CurrentVersion (__added__) +* AWS::OpenSearchService::Domain ServiceSoftwareOptions.Description (__added__) +* AWS::OpenSearchService::Domain ServiceSoftwareOptions.NewVersion (__added__) +* AWS::OpenSearchService::Domain ServiceSoftwareOptions.OptionalDeployment (__added__) +* AWS::OpenSearchService::Domain ServiceSoftwareOptions.UpdateAvailable (__added__) +* AWS::OpenSearchService::Domain ServiceSoftwareOptions.UpdateStatus (__added__) +* AWS::QuickSight::Dashboard Version (__added__) +* AWS::QuickSight::Dashboard Version.Arn (__added__) +* AWS::QuickSight::Dashboard Version.CreatedTime (__added__) +* AWS::QuickSight::Dashboard Version.DataSetArns (__added__) +* AWS::QuickSight::Dashboard Version.Description (__added__) +* AWS::QuickSight::Dashboard Version.Errors (__added__) +* AWS::QuickSight::Dashboard Version.Sheets (__added__) +* AWS::QuickSight::Dashboard Version.SourceEntityArn (__added__) +* AWS::QuickSight::Dashboard Version.Status (__added__) +* AWS::QuickSight::Dashboard Version.ThemeArn (__added__) +* AWS::QuickSight::Dashboard Version.VersionNumber (__added__) +* AWS::QuickSight::Template Version (__added__) +* AWS::QuickSight::Template Version.CreatedTime (__added__) +* AWS::QuickSight::Template Version.DataSetConfigurations (__added__) +* AWS::QuickSight::Template Version.Description (__added__) +* AWS::QuickSight::Template Version.Errors (__added__) +* AWS::QuickSight::Template Version.Sheets (__added__) +* AWS::QuickSight::Template Version.SourceEntityArn (__added__) +* AWS::QuickSight::Template Version.Status (__added__) +* AWS::QuickSight::Template Version.ThemeArn (__added__) +* AWS::QuickSight::Template Version.VersionNumber (__added__) +* AWS::QuickSight::Theme Version (__added__) +* AWS::QuickSight::Theme Version.Arn (__added__) +* AWS::QuickSight::Theme Version.BaseThemeId (__added__) +* AWS::QuickSight::Theme Version.Configuration (__added__) +* AWS::QuickSight::Theme Version.Configuration.DataColorPalette (__added__) +* AWS::QuickSight::Theme Version.Configuration.Sheet (__added__) +* AWS::QuickSight::Theme Version.Configuration.Typography (__added__) +* AWS::QuickSight::Theme Version.Configuration.UIColorPalette (__added__) +* AWS::QuickSight::Theme Version.CreatedTime (__added__) +* AWS::QuickSight::Theme Version.Description (__added__) +* AWS::QuickSight::Theme Version.Errors (__added__) +* AWS::QuickSight::Theme Version.Status (__added__) +* AWS::QuickSight::Theme Version.VersionNumber (__added__) +* AWS::RDS::DBCluster DBClusterResourceId (__added__) +* AWS::RDS::DBCluster Endpoint (__added__) +* AWS::Redshift::EndpointAccess VpcEndpoint.VpcEndpointId (__added__) +* AWS::Redshift::EndpointAccess VpcEndpoint.VpcId (__added__) +* AWS::Redshift::EventSubscription EventCategoriesList.DuplicatesAllowed (__deleted__) +* AWS::RedshiftServerless::Namespace Namespace (__added__) +* AWS::RedshiftServerless::Namespace Namespace.AdminUsername (__added__) +* AWS::RedshiftServerless::Namespace Namespace.CreationDate (__added__) +* AWS::RedshiftServerless::Namespace Namespace.DbName (__added__) +* AWS::RedshiftServerless::Namespace Namespace.DefaultIamRoleArn (__added__) +* AWS::RedshiftServerless::Namespace Namespace.IamRoles (__added__) +* AWS::RedshiftServerless::Namespace Namespace.KmsKeyId (__added__) +* AWS::RedshiftServerless::Namespace Namespace.LogExports (__added__) +* AWS::RedshiftServerless::Namespace Namespace.NamespaceArn (__added__) +* AWS::RedshiftServerless::Namespace Namespace.NamespaceId (__added__) +* AWS::RedshiftServerless::Namespace Namespace.NamespaceName (__added__) +* AWS::RedshiftServerless::Namespace Namespace.Status (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.BaseCapacity (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.ConfigParameters (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.CreationDate (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.Endpoint (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.Endpoint.Address (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.Endpoint.Port (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.Endpoint.VpcEndpoints (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.EnhancedVpcRouting (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.NamespaceName (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.PubliclyAccessible (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.SecurityGroupIds (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.Status (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.SubnetIds (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.WorkgroupArn (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.WorkgroupId (__added__) +* AWS::RedshiftServerless::Workgroup Workgroup.WorkgroupName (__added__) +* AWS::Route53::HostedZone NameServers.DuplicatesAllowed (__deleted__) +* AWS::Route53Resolver::ResolverRule TargetIps.DuplicatesAllowed (__deleted__) +* AWS::S3::MultiRegionAccessPointPolicy PolicyStatus (__added__) +* AWS::S3::MultiRegionAccessPointPolicy PolicyStatus.IsPublic (__added__) +* AWS::S3ObjectLambda::AccessPoint PolicyStatus (__added__) +* AWS::S3ObjectLambda::AccessPoint PolicyStatus.IsPublic (__added__) +* AWS::S3ObjectLambda::AccessPoint PublicAccessBlockConfiguration (__added__) +* AWS::S3ObjectLambda::AccessPoint PublicAccessBlockConfiguration.BlockPublicAcls (__added__) +* AWS::S3ObjectLambda::AccessPoint PublicAccessBlockConfiguration.BlockPublicPolicy (__added__) +* AWS::S3ObjectLambda::AccessPoint PublicAccessBlockConfiguration.IgnorePublicAcls (__added__) +* AWS::S3ObjectLambda::AccessPoint PublicAccessBlockConfiguration.RestrictPublicBuckets (__added__) +* AWS::S3Outposts::Endpoint NetworkInterfaces.DuplicatesAllowed (__deleted__) +* AWS::SageMaker::Project ServiceCatalogProvisionedProductDetails (__added__) +* AWS::SageMaker::Project ServiceCatalogProvisionedProductDetails.ProvisionedProductId (__added__) +* AWS::SageMaker::Project ServiceCatalogProvisionedProductDetails.ProvisionedProductStatusMessage (__added__) +* AWS::ServiceCatalog::CloudFormationProvisionedProduct Outputs (__added__) + +## Property Changes + +* AWS::ACMPCA::CertificateAuthority Tags.DuplicatesAllowed (__added__) +* AWS::ACMPCA::Permission Actions.DuplicatesAllowed (__added__) +* AWS::AccessAnalyzer::Analyzer ArchiveRules.DuplicatesAllowed (__added__) +* AWS::AmplifyUIBuilder::Component Children.DuplicatesAllowed (__added__) +* AWS::AmplifyUIBuilder::Component Overrides.ItemType (__deleted__) +* AWS::AmplifyUIBuilder::Component Overrides.Type (__deleted__) +* AWS::AmplifyUIBuilder::Component Overrides.PrimitiveType (__added__) +* AWS::AmplifyUIBuilder::Component Variants.DuplicatesAllowed (__added__) +* AWS::AmplifyUIBuilder::Theme Overrides.DuplicatesAllowed (__added__) +* AWS::AmplifyUIBuilder::Theme Values.DuplicatesAllowed (__added__) +* AWS::ApiGateway::BasePathMapping Id (__added__) +* AWS::ApiGateway::DomainName Tags.DuplicatesAllowed (__added__) +* AWS::ApiGateway::RestApi Parameters.DuplicatesAllowed (__deleted__) +* AWS::AppConfig::Deployment Tags.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::AppFlow::Flow MetadataCatalogConfig (__added__) +* AWS::AppFlow::Flow DestinationFlowConfigList.DuplicatesAllowed (__added__) +* AWS::AppFlow::Flow Tags.DuplicatesAllowed (__added__) +* AWS::AppFlow::Flow Tasks.DuplicatesAllowed (__added__) +* AWS::AppIntegrations::DataIntegration Tags.DuplicatesAllowed (__added__) +* AWS::AppIntegrations::EventIntegration Tags.DuplicatesAllowed (__added__) +* AWS::AppRunner::ObservabilityConfiguration Tags.DuplicatesAllowed (__added__) +* AWS::AppRunner::Service Tags.DuplicatesAllowed (__added__) +* AWS::AppRunner::VpcConnector Tags.DuplicatesAllowed (__added__) +* AWS::AppRunner::VpcIngressConnection Tags.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application ComponentMonitoringSettings.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application CustomComponents.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application LogPatternSets.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application Tags.DuplicatesAllowed (__added__) +* AWS::Athena::DataCatalog Tags.DuplicatesAllowed (__added__) +* AWS::Athena::WorkGroup Tags.DuplicatesAllowed (__added__) +* AWS::AuditManager::Assessment Roles.DuplicatesAllowed (__added__) +* AWS::AuditManager::Assessment Tags.DuplicatesAllowed (__added__) +* AWS::AutoScaling::LaunchConfiguration ClassicLinkVPCSecurityGroups.DuplicatesAllowed (__added__) +* AWS::AutoScaling::LaunchConfiguration SecurityGroups.DuplicatesAllowed (__added__) +* AWS::Backup::Framework FrameworkTags.DuplicatesAllowed (__added__) +* AWS::Backup::ReportPlan ReportDeliveryChannel.PrimitiveType (__deleted__) +* AWS::Backup::ReportPlan ReportDeliveryChannel.Type (__added__) +* AWS::Backup::ReportPlan ReportPlanTags.DuplicatesAllowed (__added__) +* AWS::Backup::ReportPlan ReportSetting.PrimitiveType (__deleted__) +* AWS::Backup::ReportPlan ReportSetting.Type (__added__) +* AWS::BillingConductor::PricingPlan PricingRuleArns.DuplicatesAllowed (__added__) +* AWS::BillingConductor::PricingRule Tiering (__added__) +* AWS::BillingConductor::PricingRule ModifierPercentage.Required (__changed__) + * Old: true + * New: false +* AWS::Budgets::BudgetsAction Subscribers.DuplicatesAllowed (__added__) +* AWS::CE::AnomalyMonitor ResourceTags.DuplicatesAllowed (__added__) +* AWS::CE::AnomalySubscription MonitorArnList.DuplicatesAllowed (__added__) +* AWS::CE::AnomalySubscription ResourceTags.DuplicatesAllowed (__added__) +* AWS::CE::AnomalySubscription Subscribers.DuplicatesAllowed (__added__) +* AWS::CUR::ReportDefinition AdditionalArtifacts.DuplicatesAllowed (__added__) +* AWS::CUR::ReportDefinition AdditionalSchemaElements.DuplicatesAllowed (__added__) +* AWS::Chatbot::SlackChannelConfiguration GuardrailPolicies.DuplicatesAllowed (__added__) +* AWS::Chatbot::SlackChannelConfiguration SnsTopicArns.DuplicatesAllowed (__added__) +* AWS::CloudFormation::StackSet ManagedExecution.PrimitiveType (__deleted__) +* AWS::CloudFormation::StackSet ManagedExecution.Type (__added__) +* AWS::CloudFront::Function FunctionMetadata (__added__) +* AWS::CloudWatch::CompositeAlarm AlarmActions.DuplicatesAllowed (__added__) +* AWS::CloudWatch::CompositeAlarm InsufficientDataActions.DuplicatesAllowed (__added__) +* AWS::CloudWatch::CompositeAlarm OKActions.DuplicatesAllowed (__added__) +* AWS::CodeArtifact::Domain Tags.DuplicatesAllowed (__added__) +* AWS::CodeArtifact::Repository ExternalConnections.DuplicatesAllowed (__added__) +* AWS::CodeArtifact::Repository Tags.DuplicatesAllowed (__added__) +* AWS::CodeArtifact::Repository Upstreams.DuplicatesAllowed (__added__) +* AWS::CodeGuruProfiler::ProfilingGroup AgentPermissions.PrimitiveType (__deleted__) +* AWS::CodeGuruProfiler::ProfilingGroup AgentPermissions.Type (__added__) +* AWS::CodeGuruProfiler::ProfilingGroup AnomalyDetectionNotificationConfiguration.DuplicatesAllowed (__added__) +* AWS::CodeStarConnections::Connection Tags.DuplicatesAllowed (__added__) +* AWS::Config::ConformancePack ConformancePackInputParameters.DuplicatesAllowed (__added__) +* AWS::Config::ConformancePack TemplateSSMDocumentDetails.PrimitiveType (__deleted__) +* AWS::Config::ConformancePack TemplateSSMDocumentDetails.Type (__added__) +* AWS::Config::OrganizationConformancePack ConformancePackInputParameters.DuplicatesAllowed (__added__) +* AWS::Config::OrganizationConformancePack ExcludedAccounts.DuplicatesAllowed (__added__) +* AWS::Connect::TaskTemplate Constraints.PrimitiveType (__deleted__) +* AWS::Connect::TaskTemplate Constraints.Type (__added__) +* AWS::Connect::TaskTemplate Defaults.DuplicatesAllowed (__added__) +* AWS::Connect::TaskTemplate Fields.DuplicatesAllowed (__added__) +* AWS::CustomerProfiles::Domain Tags.DuplicatesAllowed (__added__) +* AWS::CustomerProfiles::Integration ObjectTypeNames.DuplicatesAllowed (__added__) +* AWS::CustomerProfiles::Integration Tags.DuplicatesAllowed (__added__) +* AWS::CustomerProfiles::ObjectType Fields.DuplicatesAllowed (__added__) +* AWS::CustomerProfiles::ObjectType Keys.DuplicatesAllowed (__added__) +* AWS::CustomerProfiles::ObjectType Tags.DuplicatesAllowed (__added__) +* AWS::DataBrew::Job DataCatalogOutputs.DuplicatesAllowed (__added__) +* AWS::DataBrew::Job DatabaseOutputs.DuplicatesAllowed (__added__) +* AWS::DataBrew::Job Outputs.DuplicatesAllowed (__added__) +* AWS::DataBrew::Job ValidationConfigurations.DuplicatesAllowed (__added__) +* AWS::DataBrew::Recipe Steps.DuplicatesAllowed (__added__) +* AWS::DataBrew::Ruleset Rules.DuplicatesAllowed (__added__) +* AWS::DataSync::Agent SecurityGroupArns.DuplicatesAllowed (__added__) +* AWS::DataSync::Agent SubnetArns.DuplicatesAllowed (__added__) +* AWS::DataSync::LocationFSxLustre SecurityGroupArns.DuplicatesAllowed (__added__) +* AWS::DataSync::LocationFSxONTAP SecurityGroupArns.DuplicatesAllowed (__added__) +* AWS::DataSync::LocationFSxOpenZFS SecurityGroupArns.DuplicatesAllowed (__added__) +* AWS::DataSync::LocationFSxWindows SecurityGroupArns.DuplicatesAllowed (__added__) +* AWS::DataSync::LocationHDFS AgentArns.DuplicatesAllowed (__added__) +* AWS::DataSync::LocationHDFS NameNodes.DuplicatesAllowed (__added__) +* AWS::DataSync::LocationObjectStorage AgentArns.DuplicatesAllowed (__added__) +* AWS::DataSync::LocationSMB AgentArns.DuplicatesAllowed (__added__) +* AWS::DataSync::Task Excludes.DuplicatesAllowed (__added__) +* AWS::DataSync::Task Includes.DuplicatesAllowed (__added__) +* AWS::Detective::Graph Tags.DuplicatesAllowed (__added__) +* AWS::EC2::FlowLog DestinationOptions.PrimitiveType (__deleted__) +* AWS::EC2::FlowLog DestinationOptions.Type (__added__) +* AWS::EC2::NetworkInsightsAccessScope ExcludePaths.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAccessScope MatchPaths.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAccessScope Tags.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAccessScopeAnalysis Tags.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis FilterInArns.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis Tags.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsPath Tags.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInterface PrivateIpAddresses.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::EC2::PrefixList Entries.DuplicatesAllowed (__added__) +* AWS::EC2::PrefixList Tags.DuplicatesAllowed (__added__) +* AWS::EC2::Subnet Ipv6CidrBlock.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::EC2::Subnet PrivateDnsNameOptionsOnLaunch.PrimitiveType (__deleted__) +* AWS::EC2::Subnet PrivateDnsNameOptionsOnLaunch.Type (__added__) +* AWS::EC2::TransitGateway TransitGatewayCidrBlocks.DuplicatesAllowed (__added__) +* AWS::EC2::TransitGatewayAttachment Options.PrimitiveType (__deleted__) +* AWS::EC2::TransitGatewayAttachment Options.Type (__added__) +* AWS::EC2::TransitGatewayConnect Tags.DuplicatesAllowed (__added__) +* AWS::EC2::TransitGatewayMulticastDomain Options.PrimitiveType (__deleted__) +* AWS::EC2::TransitGatewayMulticastDomain Options.Type (__added__) +* AWS::EC2::TransitGatewayMulticastDomain Tags.DuplicatesAllowed (__added__) +* AWS::EC2::TransitGatewayPeeringAttachment Tags.DuplicatesAllowed (__added__) +* AWS::EC2::TransitGatewayVpcAttachment Options.PrimitiveType (__deleted__) +* AWS::EC2::TransitGatewayVpcAttachment Options.Type (__added__) +* AWS::EC2::VPC InstanceTenancy.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::ECR::PublicRepository RepositoryCatalogData.PrimitiveType (__deleted__) +* AWS::ECR::PublicRepository RepositoryCatalogData.Type (__added__) +* AWS::ECS::CapacityProvider Tags.DuplicatesAllowed (__added__) +* AWS::ECS::Cluster CapacityProviders.DuplicatesAllowed (__added__) +* AWS::ECS::Cluster ClusterSettings.DuplicatesAllowed (__added__) +* AWS::ECS::Cluster DefaultCapacityProviderStrategy.DuplicatesAllowed (__added__) +* AWS::ECS::Cluster Tags.DuplicatesAllowed (__added__) +* AWS::ECS::ClusterCapacityProviderAssociations DefaultCapacityProviderStrategy.DuplicatesAllowed (__added__) +* AWS::ECS::Service CapacityProviderStrategy.DuplicatesAllowed (__added__) +* AWS::ECS::Service LoadBalancers.DuplicatesAllowed (__added__) +* AWS::ECS::Service PlacementConstraints.DuplicatesAllowed (__added__) +* AWS::ECS::Service PlacementStrategies.DuplicatesAllowed (__added__) +* AWS::ECS::Service ServiceRegistries.DuplicatesAllowed (__added__) +* AWS::ECS::Service Tags.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition Tags.DuplicatesAllowed (__added__) +* AWS::ECS::TaskSet LoadBalancers.DuplicatesAllowed (__added__) +* AWS::ECS::TaskSet ServiceRegistries.DuplicatesAllowed (__added__) +* AWS::EKS::Cluster EncryptionConfig.DuplicatesAllowed (__added__) +* AWS::EKS::FargateProfile Selectors.DuplicatesAllowed (__added__) +* AWS::EKS::FargateProfile Subnets.DuplicatesAllowed (__added__) +* AWS::EKS::Nodegroup Taints.DuplicatesAllowed (__added__) +* AWS::EMR::Studio SubnetIds.DuplicatesAllowed (__added__) +* AWS::ElastiCache::User AuthenticationMode.PrimitiveType (__deleted__) +* AWS::ElastiCache::User AuthenticationMode.Type (__added__) +* AWS::ElasticLoadBalancingV2::Listener AlpnPolicy.DuplicatesAllowed (__added__) +* AWS::Events::Endpoint EventBuses.DuplicatesAllowed (__added__) +* AWS::FIS::ExperimentTemplate StopConditions.DuplicatesAllowed (__added__) +* AWS::FMS::Policy ResourceTags.DuplicatesAllowed (__added__) +* AWS::FMS::Policy ResourceTypeList.DuplicatesAllowed (__added__) +* AWS::FMS::Policy Tags.DuplicatesAllowed (__added__) +* AWS::Forecast::Dataset EncryptionConfig.PrimitiveType (__deleted__) +* AWS::Forecast::Dataset EncryptionConfig.Type (__added__) +* AWS::Forecast::Dataset Schema.PrimitiveType (__deleted__) +* AWS::Forecast::Dataset Schema.Type (__added__) +* AWS::Forecast::Dataset Tags.PrimitiveItemType (__deleted__) +* AWS::Forecast::Dataset Tags.DuplicatesAllowed (__added__) +* AWS::Forecast::Dataset Tags.ItemType (__added__) +* AWS::Forecast::DatasetGroup DatasetArns.DuplicatesAllowed (__added__) +* AWS::Forecast::DatasetGroup Tags.DuplicatesAllowed (__added__) +* AWS::GameLift::Fleet AnywhereConfiguration (__added__) +* AWS::GameLift::Fleet ComputeType (__added__) +* AWS::GameLift::Fleet EC2InboundPermissions.DuplicatesAllowed (__added__) +* AWS::GameLift::Fleet Locations.DuplicatesAllowed (__added__) +* AWS::GameLift::Fleet MetricGroups.DuplicatesAllowed (__added__) +* AWS::GameLift::Fleet Name.Required (__changed__) + * Old: false + * New: true +* AWS::GameLift::GameServerGroup InstanceDefinitions.DuplicatesAllowed (__added__) +* AWS::GameLift::GameServerGroup Tags.DuplicatesAllowed (__added__) +* AWS::GameLift::GameServerGroup VpcSubnets.DuplicatesAllowed (__added__) +* AWS::GlobalAccelerator::Accelerator IpAddresses.DuplicatesAllowed (__added__) +* AWS::GlobalAccelerator::Accelerator Tags.DuplicatesAllowed (__added__) +* AWS::GlobalAccelerator::EndpointGroup EndpointConfigurations.DuplicatesAllowed (__added__) +* AWS::GlobalAccelerator::EndpointGroup PortOverrides.DuplicatesAllowed (__added__) +* AWS::GlobalAccelerator::Listener PortRanges.DuplicatesAllowed (__added__) +* AWS::Glue::Registry Tags.DuplicatesAllowed (__added__) +* AWS::Glue::Schema Tags.DuplicatesAllowed (__added__) +* AWS::GroundStation::Config Tags.DuplicatesAllowed (__added__) +* AWS::GroundStation::DataflowEndpointGroup EndpointDetails.DuplicatesAllowed (__added__) +* AWS::GroundStation::DataflowEndpointGroup Tags.DuplicatesAllowed (__added__) +* AWS::GroundStation::MissionProfile DataflowEdges.DuplicatesAllowed (__added__) +* AWS::GroundStation::MissionProfile Tags.DuplicatesAllowed (__added__) +* AWS::HealthLake::FHIRDatastore Tags.DuplicatesAllowed (__added__) +* AWS::IAM::OIDCProvider ClientIdList.DuplicatesAllowed (__added__) +* AWS::IAM::OIDCProvider ThumbprintList.DuplicatesAllowed (__added__) +* AWS::IVS::PlaybackKeyPair PublicKeyMaterial.Required (__changed__) + * Old: true + * New: false +* AWS::ImageBuilder::Component SupportedOsVersions.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::ContainerRecipe Components.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::DistributionConfiguration Distributions.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::ImageRecipe BlockDeviceMappings.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::ImageRecipe Components.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::InfrastructureConfiguration InstanceTypes.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::InfrastructureConfiguration SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::IoT::Authorizer Tags.DuplicatesAllowed (__added__) +* AWS::IoT::DomainConfiguration ServerCertificateArns.DuplicatesAllowed (__added__) +* AWS::IoT::DomainConfiguration Tags.DuplicatesAllowed (__added__) +* AWS::IoT::JobTemplate AbortConfig.PrimitiveType (__deleted__) +* AWS::IoT::JobTemplate AbortConfig.Type (__added__) +* AWS::IoT::JobTemplate JobExecutionsRolloutConfig.PrimitiveType (__deleted__) +* AWS::IoT::JobTemplate JobExecutionsRolloutConfig.Type (__added__) +* AWS::IoT::JobTemplate PresignedUrlConfig.PrimitiveType (__deleted__) +* AWS::IoT::JobTemplate PresignedUrlConfig.Type (__added__) +* AWS::IoT::JobTemplate TimeoutConfig.PrimitiveType (__deleted__) +* AWS::IoT::JobTemplate TimeoutConfig.Type (__added__) +* AWS::IoT::ProvisioningTemplate Tags.DuplicatesAllowed (__added__) +* AWS::IoT::RoleAlias Tags.DuplicatesAllowed (__added__) +* AWS::IoT::TopicRule Tags.DuplicatesAllowed (__added__) +* AWS::IoTCoreDeviceAdvisor::SuiteDefinition SuiteDefinitionConfiguration.PrimitiveType (__deleted__) +* AWS::IoTCoreDeviceAdvisor::SuiteDefinition SuiteDefinitionConfiguration.Type (__added__) +* AWS::IoTFleetWise::Campaign DataExtraDimensions.DuplicatesAllowed (__added__) +* AWS::IoTFleetWise::Campaign SignalsToCollect.DuplicatesAllowed (__added__) +* AWS::IoTFleetWise::DecoderManifest NetworkInterfaces.PrimitiveItemType (__deleted__) +* AWS::IoTFleetWise::DecoderManifest NetworkInterfaces.DuplicatesAllowed (__added__) +* AWS::IoTFleetWise::DecoderManifest NetworkInterfaces.ItemType (__added__) +* AWS::IoTFleetWise::DecoderManifest SignalDecoders.PrimitiveItemType (__deleted__) +* AWS::IoTFleetWise::DecoderManifest SignalDecoders.DuplicatesAllowed (__added__) +* AWS::IoTFleetWise::DecoderManifest SignalDecoders.ItemType (__added__) +* AWS::IoTFleetWise::SignalCatalog NodeCounts (__added__) +* AWS::IoTSiteWise::Asset AssetHierarchies.DuplicatesAllowed (__added__) +* AWS::IoTSiteWise::Asset AssetProperties.DuplicatesAllowed (__added__) +* AWS::IoTSiteWise::AssetModel AssetModelCompositeModels.DuplicatesAllowed (__added__) +* AWS::IoTSiteWise::AssetModel AssetModelHierarchies.DuplicatesAllowed (__added__) +* AWS::IoTSiteWise::AssetModel AssetModelProperties.DuplicatesAllowed (__added__) +* AWS::IoTSiteWise::AssetModel Tags.DuplicatesAllowed (__added__) +* AWS::IoTSiteWise::Portal Alarms.PrimitiveType (__deleted__) +* AWS::IoTSiteWise::Portal Alarms.Type (__added__) +* AWS::IoTWireless::NetworkAnalyzerConfiguration TraceContent.PrimitiveType (__deleted__) +* AWS::IoTWireless::NetworkAnalyzerConfiguration TraceContent.Type (__added__) +* AWS::IoTWireless::NetworkAnalyzerConfiguration WirelessDevices.DuplicatesAllowed (__added__) +* AWS::IoTWireless::NetworkAnalyzerConfiguration WirelessGateways.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource Tags.DuplicatesAllowed (__added__) +* AWS::Kendra::Faq Tags.DuplicatesAllowed (__added__) +* AWS::Kendra::Index DocumentMetadataConfigurations.DuplicatesAllowed (__added__) +* AWS::Kendra::Index Tags.DuplicatesAllowed (__added__) +* AWS::Kendra::Index UserTokenConfigurations.DuplicatesAllowed (__added__) +* AWS::KinesisFirehose::DeliveryStream Tags.DuplicatesAllowed (__added__) +* AWS::LakeFormation::DataCellsFilter ColumnNames.DuplicatesAllowed (__added__) +* AWS::LakeFormation::PrincipalPermissions Permissions.DuplicatesAllowed (__added__) +* AWS::LakeFormation::PrincipalPermissions PermissionsWithGrantOption.DuplicatesAllowed (__added__) +* AWS::LakeFormation::Tag TagValues.DuplicatesAllowed (__added__) +* AWS::LakeFormation::TagAssociation LFTags.DuplicatesAllowed (__added__) +* AWS::Lambda::EventSourceMapping ScalingConfig (__added__) +* AWS::Lambda::Function FileSystemConfigs.DuplicatesAllowed (__added__) +* AWS::Lex::Bot DataPrivacy.PrimitiveType (__deleted__) +* AWS::Lex::Bot DataPrivacy.Type (__added__) +* AWS::Lex::BotAlias SentimentAnalysisSettings.PrimitiveType (__deleted__) +* AWS::Lex::BotAlias SentimentAnalysisSettings.Type (__added__) +* AWS::Lex::BotVersion BotVersionLocaleSpecification.DuplicatesAllowed (__added__) +* AWS::Lex::ResourcePolicy Policy.Type (__deleted__) +* AWS::Lex::ResourcePolicy Policy.PrimitiveType (__added__) +* AWS::Lightsail::Disk AddOns.DuplicatesAllowed (__added__) +* AWS::Lightsail::Instance Location (__added__) +* AWS::Lightsail::Instance State (__added__) +* AWS::Lightsail::Instance AddOns.DuplicatesAllowed (__added__) +* AWS::Logs::MetricFilter MetricTransformations.DuplicatesAllowed (__added__) +* AWS::Logs::QueryDefinition LogGroupNames.DuplicatesAllowed (__added__) +* AWS::LookoutEquipment::InferenceScheduler DataInputConfiguration.PrimitiveType (__deleted__) +* AWS::LookoutEquipment::InferenceScheduler DataInputConfiguration.Type (__added__) +* AWS::LookoutEquipment::InferenceScheduler DataOutputConfiguration.PrimitiveType (__deleted__) +* AWS::LookoutEquipment::InferenceScheduler DataOutputConfiguration.Type (__added__) +* AWS::LookoutMetrics::AnomalyDetector MetricSetList.DuplicatesAllowed (__added__) +* AWS::M2::Environment SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::M2::Environment StorageConfigurations.DuplicatesAllowed (__added__) +* AWS::M2::Environment SubnetIds.DuplicatesAllowed (__added__) +* AWS::MSK::BatchScramSecret SecretArnList.DuplicatesAllowed (__added__) +* AWS::MSK::Configuration KafkaVersionsList.DuplicatesAllowed (__added__) +* AWS::Macie::AllowList Tags.DuplicatesAllowed (__added__) +* AWS::Macie::CustomDataIdentifier IgnoreWords.DuplicatesAllowed (__added__) +* AWS::Macie::CustomDataIdentifier Keywords.DuplicatesAllowed (__added__) +* AWS::MediaConnect::FlowEntitlement Subscribers.DuplicatesAllowed (__added__) +* AWS::MediaConnect::FlowOutput CidrAllowList.DuplicatesAllowed (__added__) +* AWS::MediaConnect::FlowVpcInterface SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::MediaPackage::OriginEndpoint Whitelist.DuplicatesAllowed (__added__) +* AWS::MediaTailor::PlaybackConfiguration HlsConfiguration (__added__) +* AWS::MemoryDB::Cluster ClusterEndpoint (__added__) +* AWS::MemoryDB::User AuthenticationMode.PrimitiveType (__deleted__) +* AWS::MemoryDB::User AuthenticationMode.Type (__added__) +* AWS::NetworkManager::ConnectAttachment CoreNetworkId.Required (__changed__) + * Old: false + * New: true +* AWS::NetworkManager::ConnectAttachment EdgeLocation.Required (__changed__) + * Old: false + * New: true +* AWS::NetworkManager::ConnectAttachment Options.Required (__changed__) + * Old: false + * New: true +* AWS::NetworkManager::ConnectAttachment Tags.DuplicatesAllowed (__added__) +* AWS::NetworkManager::ConnectAttachment TransportAttachmentId.Required (__changed__) + * Old: false + * New: true +* AWS::NetworkManager::ConnectPeer InsideCidrBlocks.DuplicatesAllowed (__added__) +* AWS::NetworkManager::ConnectPeer Tags.DuplicatesAllowed (__added__) +* AWS::NetworkManager::CoreNetwork Tags.DuplicatesAllowed (__added__) +* AWS::NetworkManager::Device Tags.DuplicatesAllowed (__added__) +* AWS::NetworkManager::GlobalNetwork Tags.DuplicatesAllowed (__added__) +* AWS::NetworkManager::Link Tags.DuplicatesAllowed (__added__) +* AWS::NetworkManager::Site Tags.DuplicatesAllowed (__added__) +* AWS::NetworkManager::SiteToSiteVpnAttachment Tags.DuplicatesAllowed (__added__) +* AWS::NetworkManager::VpcAttachment CoreNetworkId.Required (__changed__) + * Old: false + * New: true +* AWS::NetworkManager::VpcAttachment SubnetArns.DuplicatesAllowed (__added__) +* AWS::NetworkManager::VpcAttachment SubnetArns.Required (__changed__) + * Old: false + * New: true +* AWS::NetworkManager::VpcAttachment Tags.DuplicatesAllowed (__added__) +* AWS::NetworkManager::VpcAttachment VpcArn.Required (__changed__) + * Old: false + * New: true +* AWS::NimbleStudio::LaunchProfile Ec2SubnetIds.DuplicatesAllowed (__added__) +* AWS::NimbleStudio::LaunchProfile LaunchProfileProtocolVersions.DuplicatesAllowed (__added__) +* AWS::NimbleStudio::LaunchProfile StudioComponentIds.DuplicatesAllowed (__added__) +* AWS::Panorama::Package StorageLocation (__added__) +* AWS::Pinpoint::InAppTemplate Content.DuplicatesAllowed (__added__) +* AWS::QuickSight::Analysis Errors.DuplicatesAllowed (__added__) +* AWS::QuickSight::Analysis Permissions.DuplicatesAllowed (__added__) +* AWS::QuickSight::Analysis Tags.DuplicatesAllowed (__added__) +* AWS::QuickSight::Dashboard Permissions.DuplicatesAllowed (__added__) +* AWS::QuickSight::Dashboard Tags.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet ColumnGroups.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet ColumnLevelPermissionRules.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet Permissions.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet Tags.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSource AlternateDataSourceParameters.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSource Permissions.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSource Tags.DuplicatesAllowed (__added__) +* AWS::QuickSight::Template Permissions.DuplicatesAllowed (__added__) +* AWS::QuickSight::Template Tags.DuplicatesAllowed (__added__) +* AWS::QuickSight::Theme Permissions.DuplicatesAllowed (__added__) +* AWS::QuickSight::Theme Tags.DuplicatesAllowed (__added__) +* AWS::RDS::DBCluster Engine.Required (__changed__) + * Old: true + * New: false +* AWS::RDS::DBClusterParameterGroup Tags.DuplicatesAllowed (__added__) +* AWS::RDS::DBInstance Endpoint (__added__) +* AWS::RDS::DBInstance AssociatedRoles.DuplicatesAllowed (__added__) +* AWS::RDS::DBInstance AutoMinorVersionUpgrade.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::RDS::DBInstance AvailabilityZone.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::RDS::DBInstance BackupRetentionPeriod.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::RDS::DBInstance DBParameterGroupName.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::RDS::DBInstance DBSnapshotIdentifier.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::RDS::DBInstance EnableCloudwatchLogsExports.DuplicatesAllowed (__added__) +* AWS::RDS::DBInstance Engine.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::RDS::DBInstance MultiAZ.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::RDS::DBInstance PerformanceInsightsKMSKeyId.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::RDS::DBInstance PreferredMaintenanceWindow.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::RDS::DBInstance ProcessorFeatures.DuplicatesAllowed (__added__) +* AWS::RDS::DBInstance SourceDBInstanceIdentifier.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::RDS::DBInstance StorageType.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::RDS::DBProxy Auth.DuplicatesAllowed (__added__) +* AWS::RDS::DBProxy Tags.DuplicatesAllowed (__added__) +* AWS::RDS::DBProxy VpcSecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::RDS::DBProxy VpcSubnetIds.DuplicatesAllowed (__added__) +* AWS::RDS::DBProxyEndpoint Tags.DuplicatesAllowed (__added__) +* AWS::RDS::DBProxyEndpoint VpcSecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::RDS::DBProxyEndpoint VpcSubnetIds.DuplicatesAllowed (__added__) +* AWS::RDS::DBProxyTargetGroup DBClusterIdentifiers.DuplicatesAllowed (__added__) +* AWS::RDS::DBProxyTargetGroup DBInstanceIdentifiers.DuplicatesAllowed (__added__) +* AWS::RDS::OptionGroup OptionConfigurations.DuplicatesAllowed (__added__) +* AWS::RDS::OptionGroup Tags.DuplicatesAllowed (__added__) +* AWS::Redshift::Cluster Endpoint (__added__) +* AWS::Redshift::Cluster IamRoles.DuplicatesAllowed (__added__) +* AWS::Redshift::ClusterParameterGroup Parameters.DuplicatesAllowed (__added__) +* AWS::Redshift::ClusterParameterGroup Tags.DuplicatesAllowed (__added__) +* AWS::Redshift::ClusterSubnetGroup SubnetIds.DuplicatesAllowed (__added__) +* AWS::Redshift::ClusterSubnetGroup Tags.DuplicatesAllowed (__added__) +* AWS::Redshift::EndpointAccess VpcEndpoint.PrimitiveType (__deleted__) +* AWS::Redshift::EndpointAccess VpcEndpoint.Type (__added__) +* AWS::Redshift::EndpointAccess VpcSecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::Redshift::EndpointAccess VpcSecurityGroups.DuplicatesAllowed (__added__) +* AWS::Redshift::EndpointAuthorization VpcIds.DuplicatesAllowed (__added__) +* AWS::Redshift::EventSubscription SourceIds.DuplicatesAllowed (__added__) +* AWS::Redshift::EventSubscription Tags.DuplicatesAllowed (__added__) +* AWS::RedshiftServerless::Namespace IamRoles.DuplicatesAllowed (__added__) +* AWS::RedshiftServerless::Namespace LogExports.DuplicatesAllowed (__added__) +* AWS::RedshiftServerless::Namespace Tags.DuplicatesAllowed (__added__) +* AWS::RedshiftServerless::Workgroup SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::RedshiftServerless::Workgroup SubnetIds.DuplicatesAllowed (__added__) +* AWS::RedshiftServerless::Workgroup Tags.DuplicatesAllowed (__added__) +* AWS::RefactorSpaces::Application Tags.DuplicatesAllowed (__added__) +* AWS::RefactorSpaces::Environment Tags.DuplicatesAllowed (__added__) +* AWS::RefactorSpaces::Route Tags.DuplicatesAllowed (__added__) +* AWS::RefactorSpaces::Service Tags.DuplicatesAllowed (__added__) +* AWS::Rekognition::StreamProcessor PolygonRegionsOfInterest.DuplicatesAllowed (__deleted__) +* AWS::Rekognition::StreamProcessor PolygonRegionsOfInterest.ItemType (__deleted__) +* AWS::Rekognition::StreamProcessor PolygonRegionsOfInterest.Type (__deleted__) +* AWS::Rekognition::StreamProcessor PolygonRegionsOfInterest.PrimitiveType (__added__) +* AWS::ResourceExplorer2::View IncludedProperties.DuplicatesAllowed (__added__) +* AWS::ResourceGroups::Group Configuration.DuplicatesAllowed (__added__) +* AWS::ResourceGroups::Group Resources.DuplicatesAllowed (__added__) +* AWS::ResourceGroups::Group Tags.DuplicatesAllowed (__added__) +* AWS::RoboMaker::RobotApplication Sources.DuplicatesAllowed (__added__) +* AWS::RoboMaker::SimulationApplication Sources.DuplicatesAllowed (__added__) +* AWS::RolesAnywhere::CRL Tags.DuplicatesAllowed (__added__) +* AWS::RolesAnywhere::Profile ManagedPolicyArns.DuplicatesAllowed (__added__) +* AWS::RolesAnywhere::Profile RoleArns.DuplicatesAllowed (__added__) +* AWS::RolesAnywhere::Profile Tags.DuplicatesAllowed (__added__) +* AWS::RolesAnywhere::TrustAnchor Tags.DuplicatesAllowed (__added__) +* AWS::Route53::HealthCheck HealthCheckConfig.PrimitiveType (__deleted__) +* AWS::Route53::HealthCheck HealthCheckConfig.Type (__added__) +* AWS::Route53RecoveryControl::Cluster Tags.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryControl::ControlPanel Tags.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryControl::SafetyRule Tags.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryReadiness::Cell Cells.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryReadiness::Cell Tags.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryReadiness::ReadinessCheck Tags.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryReadiness::RecoveryGroup Cells.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryReadiness::RecoveryGroup Tags.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryReadiness::ResourceSet Resources.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryReadiness::ResourceSet Tags.DuplicatesAllowed (__added__) +* AWS::S3::AccessPoint PolicyStatus.PrimitiveType (__deleted__) +* AWS::S3::AccessPoint PolicyStatus.Type (__added__) +* AWS::SES::ContactList Tags.DuplicatesAllowed (__added__) +* AWS::SES::ContactList Topics.DuplicatesAllowed (__added__) +* AWS::SSM::Association CalendarNames.DuplicatesAllowed (__added__) +* AWS::SSM::Association Parameters.PrimitiveItemType (__deleted__) +* AWS::SSM::Association Parameters.Type (__deleted__) +* AWS::SSM::Association Parameters.PrimitiveType (__added__) +* AWS::SSM::Association Targets.DuplicatesAllowed (__added__) +* AWS::SSM::Document Attachments.DuplicatesAllowed (__added__) +* AWS::SSM::Document Requires.DuplicatesAllowed (__added__) +* AWS::SSM::Document Tags.DuplicatesAllowed (__added__) +* AWS::SSMContacts::Contact Plan.DuplicatesAllowed (__added__) +* AWS::SSMIncidents::ResponsePlan Integrations (__added__) +* AWS::SSO::InstanceAccessControlAttributeConfiguration AccessControlAttributes.DuplicatesAllowed (__added__) +* AWS::SSO::PermissionSet CustomerManagedPolicyReferences.DuplicatesAllowed (__added__) +* AWS::SSO::PermissionSet ManagedPolicies.DuplicatesAllowed (__added__) +* AWS::SSO::PermissionSet Tags.DuplicatesAllowed (__added__) +* AWS::SageMaker::DataQualityJobDefinition Tags.DuplicatesAllowed (__added__) +* AWS::SageMaker::Device Tags.DuplicatesAllowed (__added__) +* AWS::SageMaker::DeviceFleet Tags.DuplicatesAllowed (__added__) +* AWS::SageMaker::EndpointConfig ShadowProductionVariants (__added__) +* AWS::SageMaker::FeatureGroup OfflineStoreConfig.PrimitiveType (__deleted__) +* AWS::SageMaker::FeatureGroup OfflineStoreConfig.Type (__added__) +* AWS::SageMaker::FeatureGroup OnlineStoreConfig.PrimitiveType (__deleted__) +* AWS::SageMaker::FeatureGroup OnlineStoreConfig.Type (__added__) +* AWS::SageMaker::Image Tags.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelBiasJobDefinition Tags.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelExplainabilityJobDefinition Tags.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage AdditionalInferenceSpecifications.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage AdditionalInferenceSpecificationsToAdd.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage Tags.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackageGroup Tags.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelQualityJobDefinition Tags.DuplicatesAllowed (__added__) +* AWS::SageMaker::MonitoringSchedule Tags.DuplicatesAllowed (__added__) +* AWS::SageMaker::Pipeline ParallelismConfiguration.PrimitiveType (__deleted__) +* AWS::SageMaker::Pipeline ParallelismConfiguration.Type (__added__) +* AWS::SageMaker::Pipeline PipelineDefinition.PrimitiveType (__deleted__) +* AWS::SageMaker::Pipeline PipelineDefinition.Type (__added__) +* AWS::SageMaker::Project ServiceCatalogProvisioningDetails.PrimitiveType (__deleted__) +* AWS::SageMaker::Project ServiceCatalogProvisioningDetails.Type (__added__) +* AWS::SageMaker::Project Tags.DuplicatesAllowed (__added__) +* AWS::Scheduler::ScheduleGroup Tags.DuplicatesAllowed (__added__) +* AWS::ServiceCatalog::CloudFormationProvisionedProduct ProvisioningParameters.DuplicatesAllowed (__added__) +* AWS::ServiceCatalog::CloudFormationProvisionedProduct Tags.DuplicatesAllowed (__added__) +* AWS::ServiceCatalog::ServiceAction Definition.DuplicatesAllowed (__added__) +* AWS::Signer::SigningProfile Tags.DuplicatesAllowed (__added__) +* AWS::StepFunctions::StateMachine Definition.Type (__deleted__) +* AWS::StepFunctions::StateMachine Definition.PrimitiveType (__added__) +* AWS::Timestream::Database Tags.DuplicatesAllowed (__added__) +* AWS::Timestream::ScheduledQuery Tags.DuplicatesAllowed (__added__) +* AWS::Timestream::Table MagneticStoreWriteProperties.PrimitiveType (__deleted__) +* AWS::Timestream::Table MagneticStoreWriteProperties.Type (__added__) +* AWS::Timestream::Table RetentionProperties.PrimitiveType (__deleted__) +* AWS::Timestream::Table RetentionProperties.Type (__added__) +* AWS::Timestream::Table Tags.DuplicatesAllowed (__added__) +* AWS::Transfer::Connector As2Config.PrimitiveType (__deleted__) +* AWS::Transfer::Connector As2Config.Type (__added__) +* AWS::Transfer::Profile CertificateIds.DuplicatesAllowed (__added__) +* AWS::VoiceID::Domain Tags.DuplicatesAllowed (__added__) +* AWS::WAFv2::IPSet Addresses.DuplicatesAllowed (__added__) +* AWS::WAFv2::IPSet Tags.DuplicatesAllowed (__added__) +* AWS::WAFv2::LoggingConfiguration LogDestinationConfigs.DuplicatesAllowed (__added__) +* AWS::WAFv2::LoggingConfiguration LoggingFilter.PrimitiveType (__deleted__) +* AWS::WAFv2::LoggingConfiguration LoggingFilter.Type (__added__) +* AWS::WAFv2::LoggingConfiguration RedactedFields.DuplicatesAllowed (__added__) +* AWS::WAFv2::RegexPatternSet RegularExpressionList.DuplicatesAllowed (__added__) +* AWS::WAFv2::RegexPatternSet Tags.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup Rules.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup Tags.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL Rules.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL Tags.DuplicatesAllowed (__added__) +* AWS::XRay::Group Tags.PrimitiveItemType (__deleted__) +* AWS::XRay::Group Tags.DuplicatesAllowed (__added__) +* AWS::XRay::Group Tags.ItemType (__added__) +* AWS::XRay::SamplingRule Tags.PrimitiveItemType (__deleted__) +* AWS::XRay::SamplingRule Tags.DuplicatesAllowed (__added__) +* AWS::XRay::SamplingRule Tags.ItemType (__added__) + +## Property Type Changes + +* AWS::AmplifyUIBuilder::Component.ComponentEvents (__removed__) +* AWS::AmplifyUIBuilder::Component.ComponentOverrides (__removed__) +* AWS::AmplifyUIBuilder::Component.ComponentOverridesValue (__removed__) +* AWS::AmplifyUIBuilder::Component.ComponentProperties (__removed__) +* AWS::AmplifyUIBuilder::Component.ComponentVariantValues (__removed__) +* AWS::AmplifyUIBuilder::Component.FormBindings (__removed__) +* AWS::AppFlow::ConnectorProfile.CredentialsMap (__removed__) +* AWS::AppFlow::ConnectorProfile.ProfileProperties (__removed__) +* AWS::AppFlow::ConnectorProfile.TokenUrlCustomProperties (__removed__) +* AWS::AppFlow::Flow.CustomProperties (__removed__) +* AWS::DataBrew::Job.ParameterMap (__removed__) +* AWS::DataBrew::Recipe.ParameterMap (__removed__) +* AWS::IoTAnalytics::Channel.ServiceManagedS3 (__removed__) +* AWS::IoTAnalytics::Datastore.JsonConfiguration (__removed__) +* AWS::IoTAnalytics::Datastore.ServiceManagedS3 (__removed__) +* AWS::IoTFleetWise::DecoderManifest.CanNetworkInterface (__removed__) +* AWS::IoTFleetWise::DecoderManifest.CanSignalDecoder (__removed__) +* AWS::IoTFleetWise::DecoderManifest.ObdNetworkInterface (__removed__) +* AWS::IoTFleetWise::DecoderManifest.ObdSignalDecoder (__removed__) +* AWS::LakeFormation::PrincipalPermissions.CatalogResource (__removed__) +* AWS::LakeFormation::PrincipalPermissions.TableWildcard (__removed__) +* AWS::LakeFormation::TagAssociation.CatalogResource (__removed__) +* AWS::LakeFormation::TagAssociation.TableWildcard (__removed__) +* AWS::Lex::ResourcePolicy.Policy (__removed__) +* AWS::M2::Application.Content (__removed__) +* AWS::M2::Application.S3Location (__removed__) +* AWS::Macie::FindingsFilter.Criterion (__removed__) +* AWS::Rekognition::StreamProcessor.Point (__removed__) +* AWS::Rekognition::StreamProcessor.Polygon (__removed__) +* AWS::SageMaker::ModelPackage.Environment (__removed__) +* AWS::Scheduler::Schedule.TagMap (__removed__) +* AWS::StepFunctions::StateMachine.Definition (__removed__) +* AWS::AmplifyUIBuilder::Component.FormBindingElement (__added__) +* AWS::AppFlow::ConnectorProfile.OAuthCredentials (__added__) +* AWS::AppFlow::Flow.GlueDataCatalog (__added__) +* AWS::AppFlow::Flow.MetadataCatalogConfig (__added__) +* AWS::Backup::BackupSelection.ConditionParameter (__added__) +* AWS::Backup::BackupSelection.Conditions (__added__) +* AWS::Backup::Framework.ControlScope (__added__) +* AWS::Backup::ReportPlan.ReportDeliveryChannel (__added__) +* AWS::Backup::ReportPlan.ReportSetting (__added__) +* AWS::BillingConductor::PricingRule.FreeTier (__added__) +* AWS::BillingConductor::PricingRule.Tiering (__added__) +* AWS::CloudFormation::StackSet.ManagedExecution (__added__) +* AWS::CodeGuruProfiler::ProfilingGroup.AgentPermissions (__added__) +* AWS::Config::ConformancePack.TemplateSSMDocumentDetails (__added__) +* AWS::Connect::TaskTemplate.Constraints (__added__) +* AWS::Connect::TaskTemplate.InvisibleFieldInfo (__added__) +* AWS::Connect::TaskTemplate.ReadOnlyFieldInfo (__added__) +* AWS::Connect::TaskTemplate.RequiredFieldInfo (__added__) +* AWS::DataBrew::Recipe.Input (__added__) +* AWS::EC2::FlowLog.DestinationOptions (__added__) +* AWS::EC2::Subnet.PrivateDnsNameOptionsOnLaunch (__added__) +* AWS::EC2::TransitGatewayAttachment.Options (__added__) +* AWS::EC2::TransitGatewayMulticastDomain.Options (__added__) +* AWS::EC2::TransitGatewayPeeringAttachment.PeeringAttachmentStatus (__added__) +* AWS::EC2::TransitGatewayVpcAttachment.Options (__added__) +* AWS::ECR::PublicRepository.RepositoryCatalogData (__added__) +* AWS::ElastiCache::User.AuthenticationMode (__added__) +* AWS::FIS::ExperimentTemplate.CloudWatchLogsConfiguration (__added__) +* AWS::FIS::ExperimentTemplate.S3Configuration (__added__) +* AWS::Forecast::Dataset.AttributesItems (__added__) +* AWS::Forecast::Dataset.EncryptionConfig (__added__) +* AWS::Forecast::Dataset.Schema (__added__) +* AWS::Forecast::Dataset.TagsItems (__added__) +* AWS::GameLift::Fleet.AnywhereConfiguration (__added__) +* AWS::HealthLake::FHIRDatastore.CreatedAt (__added__) +* AWS::IoT::JobTemplate.AbortConfig (__added__) +* AWS::IoT::JobTemplate.AbortCriteria (__added__) +* AWS::IoT::JobTemplate.ExponentialRolloutRate (__added__) +* AWS::IoT::JobTemplate.JobExecutionsRolloutConfig (__added__) +* AWS::IoT::JobTemplate.PresignedUrlConfig (__added__) +* AWS::IoT::JobTemplate.RateIncreaseCriteria (__added__) +* AWS::IoT::JobTemplate.TimeoutConfig (__added__) +* AWS::IoTCoreDeviceAdvisor::SuiteDefinition.DeviceUnderTest (__added__) +* AWS::IoTCoreDeviceAdvisor::SuiteDefinition.SuiteDefinitionConfiguration (__added__) +* AWS::IoTFleetWise::DecoderManifest.NetworkInterfacesItems (__added__) +* AWS::IoTFleetWise::DecoderManifest.SignalDecodersItems (__added__) +* AWS::IoTSiteWise::Portal.Alarms (__added__) +* AWS::IoTTwinMaker::ComponentType.Error (__added__) +* AWS::IoTTwinMaker::ComponentType.RelationshipValue (__added__) +* AWS::IoTTwinMaker::ComponentType.Status (__added__) +* AWS::IoTTwinMaker::Entity.DataType (__added__) +* AWS::IoTTwinMaker::Entity.Definition (__added__) +* AWS::IoTTwinMaker::Entity.Error (__added__) +* AWS::IoTTwinMaker::Entity.Relationship (__added__) +* AWS::IoTTwinMaker::Entity.RelationshipValue (__added__) +* AWS::IoTWireless::NetworkAnalyzerConfiguration.TraceContent (__added__) +* AWS::IoTWireless::PartnerAccount.SidewalkAccountInfoWithFingerprint (__added__) +* AWS::Lambda::EventSourceMapping.ScalingConfig (__added__) +* AWS::Lambda::Function.SnapStartResponse (__added__) +* AWS::Lex::Bot.DataPrivacy (__added__) +* AWS::Lex::Bot.SentimentAnalysisSettings (__added__) +* AWS::Lex::BotAlias.SentimentAnalysisSettings (__added__) +* AWS::Lightsail::Disk.Location (__added__) +* AWS::LookoutEquipment::InferenceScheduler.DataInputConfiguration (__added__) +* AWS::LookoutEquipment::InferenceScheduler.DataOutputConfiguration (__added__) +* AWS::LookoutEquipment::InferenceScheduler.InputNameConfiguration (__added__) +* AWS::LookoutEquipment::InferenceScheduler.S3InputConfiguration (__added__) +* AWS::LookoutEquipment::InferenceScheduler.S3OutputConfiguration (__added__) +* AWS::MSK::Cluster.VpcConnectivity (__added__) +* AWS::MSK::Cluster.VpcConnectivityClientAuthentication (__added__) +* AWS::MSK::Cluster.VpcConnectivityIam (__added__) +* AWS::MSK::Cluster.VpcConnectivitySasl (__added__) +* AWS::MSK::Cluster.VpcConnectivityScram (__added__) +* AWS::MSK::Cluster.VpcConnectivityTls (__added__) +* AWS::Macie::FindingsFilter.CriterionAdditionalProperties (__added__) +* AWS::MediaConnect::Flow.SourcePriority (__added__) +* AWS::MediaPackage::Channel.HlsIngest (__added__) +* AWS::MediaPackage::Channel.IngestEndpoint (__added__) +* AWS::MemoryDB::User.AuthenticationMode (__added__) +* AWS::NetworkManager::ConnectAttachment.ProposedSegmentChange (__added__) +* AWS::NetworkManager::ConnectPeer.ConnectPeerBgpConfiguration (__added__) +* AWS::NetworkManager::ConnectPeer.ConnectPeerConfiguration (__added__) +* AWS::NetworkManager::SiteToSiteVpnAttachment.ProposedSegmentChange (__added__) +* AWS::NetworkManager::VpcAttachment.ProposedSegmentChange (__added__) +* AWS::NimbleStudio::StreamingImage.StreamingImageEncryptionConfiguration (__added__) +* AWS::OpenSearchService::Domain.ServiceSoftwareOptions (__added__) +* AWS::Personalize::Dataset.DataSource (__added__) +* AWS::Personalize::Solution.AlgorithmHyperParameterRanges (__added__) +* AWS::Personalize::Solution.AutoMLConfig (__added__) +* AWS::Personalize::Solution.CategoricalHyperParameterRange (__added__) +* AWS::Personalize::Solution.ContinuousHyperParameterRange (__added__) +* AWS::Personalize::Solution.HpoConfig (__added__) +* AWS::Personalize::Solution.HpoObjective (__added__) +* AWS::Personalize::Solution.HpoResourceConfig (__added__) +* AWS::Personalize::Solution.IntegerHyperParameterRange (__added__) +* AWS::QuickSight::Dashboard.DashboardError (__added__) +* AWS::QuickSight::Dashboard.DashboardVersion (__added__) +* AWS::QuickSight::Dashboard.Sheet (__added__) +* AWS::QuickSight::Template.ColumnGroupColumnSchema (__added__) +* AWS::QuickSight::Template.ColumnGroupSchema (__added__) +* AWS::QuickSight::Template.ColumnSchema (__added__) +* AWS::QuickSight::Template.DataSetConfiguration (__added__) +* AWS::QuickSight::Template.DataSetSchema (__added__) +* AWS::QuickSight::Template.Sheet (__added__) +* AWS::QuickSight::Template.TemplateError (__added__) +* AWS::QuickSight::Template.TemplateVersion (__added__) +* AWS::QuickSight::Theme.ThemeError (__added__) +* AWS::QuickSight::Theme.ThemeVersion (__added__) +* AWS::RDS::DBCluster.Endpoint (__added__) +* AWS::Redshift::EndpointAccess.NetworkInterface (__added__) +* AWS::Redshift::EndpointAccess.VpcEndpoint (__added__) +* AWS::RedshiftServerless::Namespace.Namespace (__added__) +* AWS::RedshiftServerless::Workgroup.Endpoint (__added__) +* AWS::RedshiftServerless::Workgroup.NetworkInterface (__added__) +* AWS::RedshiftServerless::Workgroup.VpcEndpoint (__added__) +* AWS::RedshiftServerless::Workgroup.Workgroup (__added__) +* AWS::Route53::HealthCheck.AlarmIdentifier (__added__) +* AWS::Route53::HealthCheck.HealthCheckConfig (__added__) +* AWS::S3::AccessPoint.PolicyStatus (__added__) +* AWS::S3::MultiRegionAccessPointPolicy.PolicyStatus (__added__) +* AWS::S3ObjectLambda::AccessPoint.AwsLambda (__added__) +* AWS::S3ObjectLambda::AccessPoint.ContentTransformation (__added__) +* AWS::S3ObjectLambda::AccessPoint.PolicyStatus (__added__) +* AWS::S3ObjectLambda::AccessPoint.PublicAccessBlockConfiguration (__added__) +* AWS::S3Outposts::Bucket.Filter (__added__) +* AWS::S3Outposts::Bucket.FilterAndOperator (__added__) +* AWS::S3Outposts::Bucket.FilterTag (__added__) +* AWS::SSMIncidents::ResponsePlan.Integration (__added__) +* AWS::SSMIncidents::ResponsePlan.PagerDutyConfiguration (__added__) +* AWS::SSMIncidents::ResponsePlan.PagerDutyIncidentConfiguration (__added__) +* AWS::SageMaker::FeatureGroup.DataCatalogConfig (__added__) +* AWS::SageMaker::FeatureGroup.OfflineStoreConfig (__added__) +* AWS::SageMaker::FeatureGroup.OnlineStoreConfig (__added__) +* AWS::SageMaker::FeatureGroup.OnlineStoreSecurityConfig (__added__) +* AWS::SageMaker::FeatureGroup.S3StorageConfig (__added__) +* AWS::SageMaker::ModelPackage.ModelInput (__added__) +* AWS::SageMaker::Pipeline.ParallelismConfiguration (__added__) +* AWS::SageMaker::Pipeline.PipelineDefinition (__added__) +* AWS::SageMaker::Pipeline.S3Location (__added__) +* AWS::SageMaker::Project.ProvisioningParameter (__added__) +* AWS::SageMaker::Project.ServiceCatalogProvisionedProductDetails (__added__) +* AWS::SageMaker::Project.ServiceCatalogProvisioningDetails (__added__) +* AWS::Timestream::Table.MagneticStoreRejectedDataLocation (__added__) +* AWS::Timestream::Table.MagneticStoreWriteProperties (__added__) +* AWS::Timestream::Table.RetentionProperties (__added__) +* AWS::Timestream::Table.S3Configuration (__added__) +* AWS::Transfer::Connector.As2Config (__added__) +* AWS::Transfer::Workflow.CopyStepDetails (__added__) +* AWS::Transfer::Workflow.CustomStepDetails (__added__) +* AWS::Transfer::Workflow.DeleteStepDetails (__added__) +* AWS::Transfer::Workflow.InputFileLocation (__added__) +* AWS::Transfer::Workflow.S3InputFileLocation (__added__) +* AWS::Transfer::Workflow.S3Tag (__added__) +* AWS::Transfer::Workflow.TagStepDetails (__added__) +* AWS::WAFv2::LoggingConfiguration.ActionCondition (__added__) +* AWS::WAFv2::LoggingConfiguration.Condition (__added__) +* AWS::WAFv2::LoggingConfiguration.Filter (__added__) +* AWS::WAFv2::LoggingConfiguration.JsonBody (__added__) +* AWS::WAFv2::LoggingConfiguration.LabelNameCondition (__added__) +* AWS::WAFv2::LoggingConfiguration.LoggingFilter (__added__) +* AWS::WAFv2::LoggingConfiguration.MatchPattern (__added__) +* AWS::WAFv2::LoggingConfiguration.SingleHeader (__added__) +* AWS::WAFv2::RuleGroup.Allow (__added__) +* AWS::WAFv2::RuleGroup.Block (__added__) +* AWS::WAFv2::RuleGroup.Captcha (__added__) +* AWS::WAFv2::RuleGroup.Count (__added__) +* AWS::WAFv2::RuleGroup.CustomHTTPHeader (__added__) +* AWS::WAFv2::RuleGroup.CustomRequestHandling (__added__) +* AWS::WAFv2::RuleGroup.CustomResponse (__added__) +* AWS::WAFv2::RuleGroup.SingleHeader (__added__) +* AWS::WAFv2::RuleGroup.SingleQueryArgument (__added__) +* AWS::WAFv2::WebACL.SingleHeader (__added__) +* AWS::WAFv2::WebACL.SingleQueryArgument (__added__) +* AWS::XRay::Group.TagsItems (__added__) +* AWS::XRay::SamplingRule.TagsItems (__added__) +* AWS::ACMPCA::Certificate.Extensions CertificatePolicies.DuplicatesAllowed (__added__) +* AWS::ACMPCA::Certificate.Extensions CustomExtensions.DuplicatesAllowed (__added__) +* AWS::ACMPCA::Certificate.Extensions ExtendedKeyUsage.DuplicatesAllowed (__added__) +* AWS::ACMPCA::Certificate.Extensions SubjectAlternativeNames.DuplicatesAllowed (__added__) +* AWS::ACMPCA::Certificate.PolicyInformation PolicyQualifiers.DuplicatesAllowed (__added__) +* AWS::ACMPCA::Certificate.Subject CustomAttributes.DuplicatesAllowed (__added__) +* AWS::ACMPCA::CertificateAuthority.CsrExtensions SubjectInformationAccess.DuplicatesAllowed (__added__) +* AWS::ACMPCA::CertificateAuthority.Subject CustomAttributes.DuplicatesAllowed (__added__) +* AWS::AccessAnalyzer::Analyzer.ArchiveRule Filter.DuplicatesAllowed (__added__) +* AWS::AccessAnalyzer::Analyzer.Filter Contains.DuplicatesAllowed (__added__) +* AWS::AccessAnalyzer::Analyzer.Filter Eq.DuplicatesAllowed (__added__) +* AWS::AccessAnalyzer::Analyzer.Filter Neq.DuplicatesAllowed (__added__) +* AWS::AmplifyUIBuilder::Component.ActionParameters Fields.ItemType (__added__) +* AWS::AmplifyUIBuilder::Component.ActionParameters Fields.Type (__changed__) + * Old: ComponentProperties + * New: Map +* AWS::AmplifyUIBuilder::Component.ComponentBindingPropertiesValueProperties Predicates.DuplicatesAllowed (__added__) +* AWS::AmplifyUIBuilder::Component.ComponentChild Children.DuplicatesAllowed (__added__) +* AWS::AmplifyUIBuilder::Component.ComponentChild Events.ItemType (__added__) +* AWS::AmplifyUIBuilder::Component.ComponentChild Events.Type (__changed__) + * Old: ComponentEvents + * New: Map +* AWS::AmplifyUIBuilder::Component.ComponentChild Properties.ItemType (__added__) +* AWS::AmplifyUIBuilder::Component.ComponentChild Properties.Type (__changed__) + * Old: ComponentProperties + * New: Map +* AWS::AmplifyUIBuilder::Component.ComponentDataConfiguration Identifiers.DuplicatesAllowed (__added__) +* AWS::AmplifyUIBuilder::Component.ComponentDataConfiguration Sort.DuplicatesAllowed (__added__) +* AWS::AmplifyUIBuilder::Component.ComponentProperty Bindings.ItemType (__added__) +* AWS::AmplifyUIBuilder::Component.ComponentProperty Bindings.Type (__changed__) + * Old: FormBindings + * New: Map +* AWS::AmplifyUIBuilder::Component.ComponentProperty Concat.DuplicatesAllowed (__added__) +* AWS::AmplifyUIBuilder::Component.ComponentVariant Overrides.Type (__deleted__) +* AWS::AmplifyUIBuilder::Component.ComponentVariant Overrides.PrimitiveType (__added__) +* AWS::AmplifyUIBuilder::Component.ComponentVariant VariantValues.PrimitiveItemType (__added__) +* AWS::AmplifyUIBuilder::Component.ComponentVariant VariantValues.Type (__changed__) + * Old: ComponentVariantValues + * New: Map +* AWS::AmplifyUIBuilder::Component.Predicate And.DuplicatesAllowed (__added__) +* AWS::AmplifyUIBuilder::Component.Predicate Or.DuplicatesAllowed (__added__) +* AWS::AmplifyUIBuilder::Theme.ThemeValue Children.DuplicatesAllowed (__added__) +* AWS::ApiGateway::DomainName.EndpointConfiguration Types.DuplicatesAllowed (__added__) +* AWS::AppFlow::ConnectorProfile.ConnectorProfileConfig ConnectorProfileCredentials.Required (__changed__) + * Old: true + * New: false +* AWS::AppFlow::ConnectorProfile.CustomAuthCredentials CredentialsMap.PrimitiveItemType (__added__) +* AWS::AppFlow::ConnectorProfile.CustomAuthCredentials CredentialsMap.Type (__changed__) + * Old: CredentialsMap + * New: Map +* AWS::AppFlow::ConnectorProfile.CustomConnectorProfileProperties ProfileProperties.PrimitiveItemType (__added__) +* AWS::AppFlow::ConnectorProfile.CustomConnectorProfileProperties ProfileProperties.Type (__changed__) + * Old: ProfileProperties + * New: Map +* AWS::AppFlow::ConnectorProfile.OAuth2Properties TokenUrlCustomProperties.PrimitiveItemType (__added__) +* AWS::AppFlow::ConnectorProfile.OAuth2Properties TokenUrlCustomProperties.Type (__changed__) + * Old: TokenUrlCustomProperties + * New: Map +* AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileCredentials Password.Required (__changed__) + * Old: true + * New: false +* AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileCredentials Username.Required (__changed__) + * Old: true + * New: false +* AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileProperties ClusterIdentifier (__added__) +* AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileProperties DataApiRoleArn (__added__) +* AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileProperties DatabaseName (__added__) +* AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileProperties IsRedshiftServerless (__added__) +* AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileProperties WorkgroupName (__added__) +* AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileProperties DatabaseUrl.Required (__changed__) + * Old: true + * New: false +* AWS::AppFlow::ConnectorProfile.SAPODataConnectorProfileCredentials OAuthCredentials.PrimitiveType (__deleted__) +* AWS::AppFlow::ConnectorProfile.SAPODataConnectorProfileCredentials OAuthCredentials.Type (__added__) +* AWS::AppFlow::Flow.AggregationConfig TargetFileSize (__added__) +* AWS::AppFlow::Flow.CustomConnectorDestinationProperties CustomProperties.PrimitiveItemType (__added__) +* AWS::AppFlow::Flow.CustomConnectorDestinationProperties CustomProperties.Type (__changed__) + * Old: CustomProperties + * New: Map +* AWS::AppFlow::Flow.CustomConnectorDestinationProperties IdFieldNames.DuplicatesAllowed (__added__) +* AWS::AppFlow::Flow.CustomConnectorSourceProperties CustomProperties.PrimitiveItemType (__added__) +* AWS::AppFlow::Flow.CustomConnectorSourceProperties CustomProperties.Type (__changed__) + * Old: CustomProperties + * New: Map +* AWS::AppFlow::Flow.PrefixConfig PathPrefixHierarchy (__added__) +* AWS::AppFlow::Flow.SAPODataDestinationProperties IdFieldNames.DuplicatesAllowed (__added__) +* AWS::AppFlow::Flow.SalesforceDestinationProperties IdFieldNames.DuplicatesAllowed (__added__) +* AWS::AppFlow::Flow.Task SourceFields.DuplicatesAllowed (__added__) +* AWS::AppFlow::Flow.Task TaskProperties.DuplicatesAllowed (__added__) +* AWS::AppFlow::Flow.ZendeskDestinationProperties IdFieldNames.DuplicatesAllowed (__added__) +* AWS::AppIntegrations::EventIntegration.EventIntegrationAssociation ClientAssociationMetadata.DuplicatesAllowed (__added__) +* AWS::AppRunner::Service.CodeConfigurationValues RuntimeEnvironmentVariables.DuplicatesAllowed (__added__) +* AWS::AppRunner::Service.ImageConfiguration RuntimeEnvironmentVariables.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application.ComponentConfiguration SubComponentTypeConfigurations.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application.ConfigurationDetails AlarmMetrics.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application.ConfigurationDetails Alarms.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application.ConfigurationDetails Logs.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application.ConfigurationDetails WindowsEvents.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application.CustomComponent ResourceList.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application.LogPatternSet LogPatterns.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application.SubComponentConfigurationDetails AlarmMetrics.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application.SubComponentConfigurationDetails Logs.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application.SubComponentConfigurationDetails WindowsEvents.DuplicatesAllowed (__added__) +* AWS::ApplicationInsights::Application.WindowsEvent EventLevels.DuplicatesAllowed (__added__) +* AWS::AuditManager::Assessment.AWSAccount EmailAddress.UpdateType (__changed__) + * Old: Immutable + * New: Conditional +* AWS::AuditManager::Assessment.AWSAccount Id.UpdateType (__changed__) + * Old: Immutable + * New: Conditional +* AWS::AuditManager::Assessment.AWSAccount Name.UpdateType (__changed__) + * Old: Immutable + * New: Conditional +* AWS::AuditManager::Assessment.Scope AwsAccounts.DuplicatesAllowed (__added__) +* AWS::AuditManager::Assessment.Scope AwsServices.DuplicatesAllowed (__added__) +* AWS::Backup::BackupSelection.BackupSelectionResourceType Conditions.PrimitiveType (__deleted__) +* AWS::Backup::BackupSelection.BackupSelectionResourceType Conditions.Type (__added__) +* AWS::Backup::BackupVault.LockConfigurationType ChangeableForDays.PrimitiveType (__changed__) + * Old: Double + * New: Integer +* AWS::Backup::BackupVault.LockConfigurationType MaxRetentionDays.PrimitiveType (__changed__) + * Old: Double + * New: Integer +* AWS::Backup::BackupVault.LockConfigurationType MinRetentionDays.PrimitiveType (__changed__) + * Old: Double + * New: Integer +* AWS::Backup::Framework.FrameworkControl ControlScope.PrimitiveType (__deleted__) +* AWS::Backup::Framework.FrameworkControl ControlScope.Type (__added__) +* AWS::Batch::ComputeEnvironment.ComputeResources AllocationStrategy.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.ComputeResources BidPercentage.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.ComputeResources Ec2Configuration.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.ComputeResources Ec2KeyPair.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.ComputeResources ImageId.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.ComputeResources InstanceRole.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.ComputeResources InstanceTypes.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.ComputeResources LaunchTemplate.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.ComputeResources PlacementGroup.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.ComputeResources SecurityGroupIds.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.ComputeResources Subnets.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.ComputeResources Tags.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.ComputeResources Type.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.Ec2ConfigurationObject ImageIdOverride.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.Ec2ConfigurationObject ImageKubernetesVersion.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.Ec2ConfigurationObject ImageType.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.LaunchTemplateSpecification LaunchTemplateId.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.LaunchTemplateSpecification LaunchTemplateName.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::ComputeEnvironment.LaunchTemplateSpecification Version.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Batch::SchedulingPolicy.FairsharePolicy ShareDistribution.DuplicatesAllowed (__added__) +* AWS::Budgets::BudgetsAction.IamActionDefinition Groups.DuplicatesAllowed (__added__) +* AWS::Budgets::BudgetsAction.IamActionDefinition Roles.DuplicatesAllowed (__added__) +* AWS::Budgets::BudgetsAction.IamActionDefinition Users.DuplicatesAllowed (__added__) +* AWS::Budgets::BudgetsAction.ScpActionDefinition TargetIds.DuplicatesAllowed (__added__) +* AWS::Budgets::BudgetsAction.SsmActionDefinition InstanceIds.DuplicatesAllowed (__added__) +* AWS::Cassandra::Table.Column ColumnName.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::Cassandra::Table.Column ColumnType.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::CloudFormation::StackSet.OperationPreferences RegionOrder.DuplicatesAllowed (__added__) +* AWS::CloudFront::ResponseHeadersPolicy.AccessControlAllowHeaders Items.DuplicatesAllowed (__added__) +* AWS::CloudFront::ResponseHeadersPolicy.AccessControlAllowMethods Items.DuplicatesAllowed (__added__) +* AWS::CloudFront::ResponseHeadersPolicy.AccessControlAllowOrigins Items.DuplicatesAllowed (__added__) +* AWS::CloudFront::ResponseHeadersPolicy.AccessControlExposeHeaders Items.DuplicatesAllowed (__added__) +* AWS::Connect::TaskTemplate.Field SingleSelectOptions.DuplicatesAllowed (__added__) +* AWS::CustomerProfiles::Integration.FlowDefinition Tasks.DuplicatesAllowed (__added__) +* AWS::CustomerProfiles::Integration.Task SourceFields.DuplicatesAllowed (__added__) +* AWS::CustomerProfiles::Integration.Task TaskProperties.DuplicatesAllowed (__added__) +* AWS::CustomerProfiles::ObjectType.KeyMap ObjectTypeKeyList.DuplicatesAllowed (__added__) +* AWS::CustomerProfiles::ObjectType.ObjectTypeKey FieldNames.DuplicatesAllowed (__added__) +* AWS::CustomerProfiles::ObjectType.ObjectTypeKey StandardIdentifiers.DuplicatesAllowed (__added__) +* AWS::DataBrew::Dataset.ExcelOptions SheetIndexes.DuplicatesAllowed (__added__) +* AWS::DataBrew::Dataset.ExcelOptions SheetNames.DuplicatesAllowed (__added__) +* AWS::DataBrew::Dataset.FilterExpression ValuesMap.DuplicatesAllowed (__added__) +* AWS::DataBrew::Dataset.PathOptions Parameters.DuplicatesAllowed (__added__) +* AWS::DataBrew::Job.AllowedStatistics Statistics.DuplicatesAllowed (__added__) +* AWS::DataBrew::Job.ColumnStatisticsConfiguration Selectors.DuplicatesAllowed (__added__) +* AWS::DataBrew::Job.EntityDetectorConfiguration EntityTypes.DuplicatesAllowed (__added__) +* AWS::DataBrew::Job.ProfileConfiguration ColumnStatisticsConfigurations.DuplicatesAllowed (__added__) +* AWS::DataBrew::Job.ProfileConfiguration ProfileColumns.DuplicatesAllowed (__added__) +* AWS::DataBrew::Job.StatisticOverride Parameters.PrimitiveItemType (__added__) +* AWS::DataBrew::Job.StatisticOverride Parameters.Type (__changed__) + * Old: ParameterMap + * New: Map +* AWS::DataBrew::Job.StatisticsConfiguration IncludedStatistics.DuplicatesAllowed (__added__) +* AWS::DataBrew::Job.StatisticsConfiguration Overrides.DuplicatesAllowed (__added__) +* AWS::DataBrew::Recipe.Action Parameters.Type (__changed__) + * Old: ParameterMap + * New: RecipeParameters +* AWS::DataBrew::Recipe.RecipeParameters Input.PrimitiveType (__deleted__) +* AWS::DataBrew::Recipe.RecipeParameters Input.Type (__added__) +* AWS::DataBrew::Recipe.RecipeParameters SheetIndexes.DuplicatesAllowed (__added__) +* AWS::DataBrew::Recipe.RecipeParameters SheetNames.DuplicatesAllowed (__added__) +* AWS::DataBrew::Recipe.RecipeStep ConditionExpressions.DuplicatesAllowed (__added__) +* AWS::DataBrew::Ruleset.Rule ColumnSelectors.DuplicatesAllowed (__added__) +* AWS::DataBrew::Ruleset.Rule SubstitutionMap.DuplicatesAllowed (__added__) +* AWS::DataSync::LocationEFS.Ec2Config SecurityGroupArns.DuplicatesAllowed (__added__) +* AWS::DataSync::LocationNFS.OnPremConfig AgentArns.DuplicatesAllowed (__added__) +* AWS::DevOpsGuru::NotificationChannel.NotificationFilterConfig MessageTypes.DuplicatesAllowed (__added__) +* AWS::DevOpsGuru::NotificationChannel.NotificationFilterConfig Severities.DuplicatesAllowed (__added__) +* AWS::DevOpsGuru::ResourceCollection.CloudFormationCollectionFilter StackNames.DuplicatesAllowed (__added__) +* AWS::DevOpsGuru::ResourceCollection.ResourceCollectionFilter Tags.DuplicatesAllowed (__added__) +* AWS::DevOpsGuru::ResourceCollection.TagCollection TagValues.DuplicatesAllowed (__added__) +* AWS::DynamoDB::GlobalTable.KeySchema AttributeName.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::DynamoDB::GlobalTable.KeySchema KeyType.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::DynamoDB::GlobalTable.Projection NonKeyAttributes.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::DynamoDB::GlobalTable.Projection ProjectionType.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::EC2::NetworkInsightsAccessScope.AccessScopePathRequest ThroughResources.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAccessScope.PacketHeaderStatementRequest DestinationAddresses.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAccessScope.PacketHeaderStatementRequest DestinationPorts.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAccessScope.PacketHeaderStatementRequest DestinationPrefixLists.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAccessScope.PacketHeaderStatementRequest Protocols.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAccessScope.PacketHeaderStatementRequest SourceAddresses.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAccessScope.PacketHeaderStatementRequest SourcePorts.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAccessScope.PacketHeaderStatementRequest SourcePrefixLists.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAccessScope.ResourceStatementRequest ResourceTypes.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAccessScope.ResourceStatementRequest Resources.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.AnalysisPacketHeader DestinationAddresses.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.AnalysisPacketHeader DestinationPortRanges.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.AnalysisPacketHeader SourceAddresses.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.AnalysisPacketHeader SourcePortRanges.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.Explanation Addresses.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.Explanation AvailabilityZones.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.Explanation Cidrs.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.Explanation LoadBalancerTargetGroups.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.Explanation PortRanges.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.Explanation Protocols.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.Explanation SecurityGroups.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.PathComponent AdditionalDetails.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInsightsAnalysis.PathComponent Explanations.DuplicatesAllowed (__added__) +* AWS::EC2::NetworkInterface.PrivateIpAddressSpecification Primary.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::EC2::NetworkInterface.PrivateIpAddressSpecification PrivateIpAddress.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::ECR::ReplicationConfiguration.ReplicationConfiguration Rules.DuplicatesAllowed (__added__) +* AWS::ECR::ReplicationConfiguration.ReplicationRule Destinations.DuplicatesAllowed (__added__) +* AWS::ECR::ReplicationConfiguration.ReplicationRule RepositoryFilters.DuplicatesAllowed (__added__) +* AWS::ECS::Service.AwsVpcConfiguration SecurityGroups.DuplicatesAllowed (__added__) +* AWS::ECS::Service.AwsVpcConfiguration Subnets.DuplicatesAllowed (__added__) +* AWS::ECS::Service.LogConfiguration SecretOptions.DuplicatesAllowed (__added__) +* AWS::ECS::Service.ServiceConnectConfiguration Services.DuplicatesAllowed (__added__) +* AWS::ECS::Service.ServiceConnectService ClientAliases.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition Command.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition Command.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-command + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-command +* AWS::ECS::TaskDefinition.ContainerDefinition Cpu.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-cpu + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-cpu +* AWS::ECS::TaskDefinition.ContainerDefinition DependsOn.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition DependsOn.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dependson + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dependson +* AWS::ECS::TaskDefinition.ContainerDefinition DisableNetworking.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-disablenetworking + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-disablenetworking +* AWS::ECS::TaskDefinition.ContainerDefinition DnsSearchDomains.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition DnsSearchDomains.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dnssearchdomains + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dnssearchdomains +* AWS::ECS::TaskDefinition.ContainerDefinition DnsServers.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition DnsServers.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dnsservers + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dnsservers +* AWS::ECS::TaskDefinition.ContainerDefinition DockerLabels.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dockerlabels + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dockerlabels +* AWS::ECS::TaskDefinition.ContainerDefinition DockerSecurityOptions.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition DockerSecurityOptions.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dockersecurityoptions + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dockersecurityoptions +* AWS::ECS::TaskDefinition.ContainerDefinition EntryPoint.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition EntryPoint.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-entrypoint + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-entrypoint +* AWS::ECS::TaskDefinition.ContainerDefinition Environment.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-environment + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-environment +* AWS::ECS::TaskDefinition.ContainerDefinition EnvironmentFiles.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition EnvironmentFiles.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-environmentfiles + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-environmentfiles +* AWS::ECS::TaskDefinition.ContainerDefinition Essential.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-essential + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-essential +* AWS::ECS::TaskDefinition.ContainerDefinition ExtraHosts.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition ExtraHosts.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-extrahosts + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-extrahosts +* AWS::ECS::TaskDefinition.ContainerDefinition FirelensConfiguration.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-firelensconfiguration + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-firelensconfiguration +* AWS::ECS::TaskDefinition.ContainerDefinition HealthCheck.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-healthcheck + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-healthcheck +* AWS::ECS::TaskDefinition.ContainerDefinition Hostname.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-hostname + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-hostname +* AWS::ECS::TaskDefinition.ContainerDefinition Image.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-image + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-image +* AWS::ECS::TaskDefinition.ContainerDefinition Interactive.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-interactive + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-interactive +* AWS::ECS::TaskDefinition.ContainerDefinition Links.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-links + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-links +* AWS::ECS::TaskDefinition.ContainerDefinition LinuxParameters.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-linuxparameters + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-linuxparameters +* AWS::ECS::TaskDefinition.ContainerDefinition LogConfiguration.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-logconfiguration + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-logconfiguration +* AWS::ECS::TaskDefinition.ContainerDefinition Memory.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-memory + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-memory +* AWS::ECS::TaskDefinition.ContainerDefinition MemoryReservation.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-memoryreservation + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-memoryreservation +* AWS::ECS::TaskDefinition.ContainerDefinition MountPoints.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints +* AWS::ECS::TaskDefinition.ContainerDefinition Name.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-name + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-name +* AWS::ECS::TaskDefinition.ContainerDefinition PortMappings.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-portmappings + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-portmappings +* AWS::ECS::TaskDefinition.ContainerDefinition Privileged.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-privileged + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-privileged +* AWS::ECS::TaskDefinition.ContainerDefinition PseudoTerminal.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-pseudoterminal + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-pseudoterminal +* AWS::ECS::TaskDefinition.ContainerDefinition ReadonlyRootFilesystem.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-readonlyrootfilesystem + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-readonlyrootfilesystem +* AWS::ECS::TaskDefinition.ContainerDefinition RepositoryCredentials.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-repositorycredentials + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-repositorycredentials +* AWS::ECS::TaskDefinition.ContainerDefinition ResourceRequirements.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition ResourceRequirements.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-resourcerequirements + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-resourcerequirements +* AWS::ECS::TaskDefinition.ContainerDefinition Secrets.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition Secrets.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-secrets + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-secrets +* AWS::ECS::TaskDefinition.ContainerDefinition StartTimeout.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-starttimeout + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-starttimeout +* AWS::ECS::TaskDefinition.ContainerDefinition StopTimeout.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-stoptimeout + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-stoptimeout +* AWS::ECS::TaskDefinition.ContainerDefinition SystemControls.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition SystemControls.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-systemcontrols + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-systemcontrols +* AWS::ECS::TaskDefinition.ContainerDefinition Ulimits.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.ContainerDefinition Ulimits.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-ulimits + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-ulimits +* AWS::ECS::TaskDefinition.ContainerDefinition User.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-user + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-user +* AWS::ECS::TaskDefinition.ContainerDefinition VolumesFrom.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-volumesfrom + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-volumesfrom +* AWS::ECS::TaskDefinition.ContainerDefinition WorkingDirectory.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-workingdirectory + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-workingdirectory +* AWS::ECS::TaskDefinition.HealthCheck Command.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.HostEntry Hostname.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-hostentry.html#cfn-ecs-taskdefinition-containerdefinition-hostentry-hostname + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostentry.html#cfn-ecs-taskdefinition-hostentry-hostname +* AWS::ECS::TaskDefinition.HostEntry IpAddress.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-hostentry.html#cfn-ecs-taskdefinition-containerdefinition-hostentry-ipaddress + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostentry.html#cfn-ecs-taskdefinition-hostentry-ipaddress +* AWS::ECS::TaskDefinition.HostVolumeProperties SourcePath.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes-host.html#cfn-ecs-taskdefinition-volumes-host-sourcepath + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostvolumeproperties.html#cfn-ecs-taskdefinition-hostvolumeproperties-sourcepath +* AWS::ECS::TaskDefinition.KernelCapabilities Add.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.KernelCapabilities Drop.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.KeyValuePair Name.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-environment.html#cfn-ecs-taskdefinition-containerdefinition-environment-name + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-keyvaluepair.html#cfn-ecs-taskdefinition-keyvaluepair-name +* AWS::ECS::TaskDefinition.KeyValuePair Value.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-environment.html#cfn-ecs-taskdefinition-containerdefinition-environment-value + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-keyvaluepair.html#cfn-ecs-taskdefinition-keyvaluepair-value +* AWS::ECS::TaskDefinition.LinuxParameters Devices.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.LinuxParameters Tmpfs.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.LogConfiguration LogDriver.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-logconfiguration.html#cfn-ecs-taskdefinition-containerdefinition-logconfiguration-logdriver + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-logconfiguration.html#cfn-ecs-taskdefinition-logconfiguration-logdriver +* AWS::ECS::TaskDefinition.LogConfiguration Options.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-logconfiguration.html#cfn-ecs-taskdefinition-containerdefinition-logconfiguration-options + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-logconfiguration.html#cfn-ecs-taskdefinition-logconfiguration-options +* AWS::ECS::TaskDefinition.LogConfiguration SecretOptions.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.LogConfiguration SecretOptions.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-logconfiguration.html#cfn-ecs-taskdefinition-logconfiguration-secretoptions + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-logconfiguration.html#cfn-ecs-taskdefinition-logconfiguration-secretoptions +* AWS::ECS::TaskDefinition.MountPoint ContainerPath.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-mountpoints.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints-containerpath + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-mountpoint.html#cfn-ecs-taskdefinition-mountpoint-containerpath +* AWS::ECS::TaskDefinition.MountPoint ReadOnly.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-mountpoints.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints-readonly + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-mountpoint.html#cfn-ecs-taskdefinition-mountpoint-readonly +* AWS::ECS::TaskDefinition.MountPoint SourceVolume.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-mountpoints.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints-sourcevolume + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-mountpoint.html#cfn-ecs-taskdefinition-mountpoint-sourcevolume +* AWS::ECS::TaskDefinition.PortMapping AppProtocol.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-portmapping-appprotocol + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-appprotocol +* AWS::ECS::TaskDefinition.PortMapping ContainerPort.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-containerdefinition-portmappings-containerport + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-containerport +* AWS::ECS::TaskDefinition.PortMapping HostPort.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-containerdefinition-portmappings-readonly + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-hostport +* AWS::ECS::TaskDefinition.PortMapping Name.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-portmapping-name + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-name +* AWS::ECS::TaskDefinition.PortMapping Protocol.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-containerdefinition-portmappings-sourcevolume + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-protocol +* AWS::ECS::TaskDefinition.Tmpfs MountOptions.DuplicatesAllowed (__added__) +* AWS::ECS::TaskDefinition.Ulimit HardLimit.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html#cfn-ecs-taskdefinition-containerdefinition-ulimit-hardlimit + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ulimit.html#cfn-ecs-taskdefinition-ulimit-hardlimit +* AWS::ECS::TaskDefinition.Ulimit Name.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html#cfn-ecs-taskdefinition-containerdefinition-ulimit-name + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ulimit.html#cfn-ecs-taskdefinition-ulimit-name +* AWS::ECS::TaskDefinition.Ulimit SoftLimit.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html#cfn-ecs-taskdefinition-containerdefinition-ulimit-softlimit + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ulimit.html#cfn-ecs-taskdefinition-ulimit-softlimit +* AWS::ECS::TaskDefinition.Volume DockerVolumeConfiguration.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html#cfn-ecs-taskdefinition-volume-dockervolumeconfiguration + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-dockervolumeconfiguration +* AWS::ECS::TaskDefinition.Volume EFSVolumeConfiguration.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html#cfn-ecs-taskdefinition-volume-efsvolumeconfiguration + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-efsvolumeconfiguration +* AWS::ECS::TaskDefinition.Volume Host.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html#cfn-ecs-taskdefinition-volumes-host + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-host +* AWS::ECS::TaskDefinition.Volume Name.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html#cfn-ecs-taskdefinition-volumes-name + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-name +* AWS::ECS::TaskDefinition.VolumeFrom ReadOnly.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-volumesfrom.html#cfn-ecs-taskdefinition-containerdefinition-volumesfrom-readonly + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumefrom.html#cfn-ecs-taskdefinition-volumefrom-readonly +* AWS::ECS::TaskDefinition.VolumeFrom SourceContainer.Documentation (__changed__) + * Old: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-volumesfrom.html#cfn-ecs-taskdefinition-containerdefinition-volumesfrom-sourcecontainer + * New: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumefrom.html#cfn-ecs-taskdefinition-volumefrom-sourcecontainer +* AWS::ECS::TaskSet.AwsVpcConfiguration SecurityGroups.DuplicatesAllowed (__added__) +* AWS::ECS::TaskSet.AwsVpcConfiguration Subnets.DuplicatesAllowed (__added__) +* AWS::EFS::AccessPoint.PosixUser SecondaryGids.DuplicatesAllowed (__added__) +* AWS::EKS::Cluster.ClusterLogging EnabledTypes.DuplicatesAllowed (__added__) +* AWS::EKS::Cluster.EncryptionConfig Resources.DuplicatesAllowed (__added__) +* AWS::EKS::Cluster.OutpostConfig OutpostArns.DuplicatesAllowed (__added__) +* AWS::EKS::Cluster.ResourcesVpcConfig PublicAccessCidrs.DuplicatesAllowed (__added__) +* AWS::EKS::Cluster.ResourcesVpcConfig SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::EKS::Cluster.ResourcesVpcConfig SubnetIds.DuplicatesAllowed (__added__) +* AWS::EKS::FargateProfile.Selector Labels.DuplicatesAllowed (__added__) +* AWS::Events::Connection.ConnectionHttpParameters BodyParameters.DuplicatesAllowed (__added__) +* AWS::Events::Connection.ConnectionHttpParameters HeaderParameters.DuplicatesAllowed (__added__) +* AWS::Events::Connection.ConnectionHttpParameters QueryStringParameters.DuplicatesAllowed (__added__) +* AWS::Evidently::Experiment.RunningStatusObject Status.Required (__changed__) + * Old: false + * New: true +* AWS::Evidently::Feature.VariationObject VariationName.Required (__changed__) + * Old: false + * New: true +* AWS::FIS::ExperimentTemplate.ExperimentTemplateAction StartAfter.DuplicatesAllowed (__added__) +* AWS::FIS::ExperimentTemplate.ExperimentTemplateLogConfiguration CloudWatchLogsConfiguration.PrimitiveType (__deleted__) +* AWS::FIS::ExperimentTemplate.ExperimentTemplateLogConfiguration CloudWatchLogsConfiguration.Type (__added__) +* AWS::FIS::ExperimentTemplate.ExperimentTemplateLogConfiguration S3Configuration.PrimitiveType (__deleted__) +* AWS::FIS::ExperimentTemplate.ExperimentTemplateLogConfiguration S3Configuration.Type (__added__) +* AWS::FIS::ExperimentTemplate.ExperimentTemplateTarget Filters.DuplicatesAllowed (__added__) +* AWS::FIS::ExperimentTemplate.ExperimentTemplateTarget ResourceArns.DuplicatesAllowed (__added__) +* AWS::FIS::ExperimentTemplate.ExperimentTemplateTargetFilter Values.DuplicatesAllowed (__added__) +* AWS::FMS::Policy.IEMap ACCOUNT.DuplicatesAllowed (__added__) +* AWS::FMS::Policy.IEMap ORGUNIT.DuplicatesAllowed (__added__) +* AWS::FSx::DataRepositoryAssociation.AutoExportPolicy Events.DuplicatesAllowed (__added__) +* AWS::FSx::DataRepositoryAssociation.AutoImportPolicy Events.DuplicatesAllowed (__added__) +* AWS::GameLift::Fleet.RuntimeConfiguration ServerProcesses.DuplicatesAllowed (__added__) +* AWS::GreengrassV2::ComponentVersion.ComponentDependencyRequirement DependencyType.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::GreengrassV2::ComponentVersion.ComponentDependencyRequirement VersionRequirement.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::GreengrassV2::ComponentVersion.LambdaContainerParams Devices.DuplicatesAllowed (__added__) +* AWS::GreengrassV2::ComponentVersion.LambdaContainerParams Volumes.DuplicatesAllowed (__added__) +* AWS::GreengrassV2::ComponentVersion.LambdaExecutionParameters EventSources.DuplicatesAllowed (__added__) +* AWS::GreengrassV2::ComponentVersion.LambdaExecutionParameters ExecArgs.DuplicatesAllowed (__added__) +* AWS::GreengrassV2::ComponentVersion.LambdaFunctionRecipeSource ComponentPlatforms.DuplicatesAllowed (__added__) +* AWS::GreengrassV2::Deployment.ComponentConfigurationUpdate Merge.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::GreengrassV2::Deployment.ComponentConfigurationUpdate Reset.DuplicatesAllowed (__added__) +* AWS::GreengrassV2::Deployment.ComponentConfigurationUpdate Reset.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::GreengrassV2::Deployment.ComponentDeploymentSpecification ComponentVersion.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::GreengrassV2::Deployment.ComponentDeploymentSpecification ConfigurationUpdate.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::GreengrassV2::Deployment.ComponentDeploymentSpecification RunWith.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::GreengrassV2::Deployment.ComponentRunWith PosixUser.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::GreengrassV2::Deployment.ComponentRunWith SystemResourceLimits.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::GreengrassV2::Deployment.ComponentRunWith WindowsUser.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::GreengrassV2::Deployment.IoTJobAbortConfig CriteriaList.DuplicatesAllowed (__added__) +* AWS::GreengrassV2::Deployment.SystemResourceLimits Cpus.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::GreengrassV2::Deployment.SystemResourceLimits Memory.UpdateType (__changed__) + * Old: Mutable + * New: Immutable +* AWS::GroundStation::DataflowEndpointGroup.SecurityDetails SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::GroundStation::DataflowEndpointGroup.SecurityDetails SubnetIds.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::ContainerRecipe.ComponentConfiguration Parameters.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::ContainerRecipe.ComponentParameter Value.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::ContainerRecipe.InstanceConfiguration BlockDeviceMappings.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::DistributionConfiguration.AmiDistributionConfiguration TargetAccountIds.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::DistributionConfiguration.ContainerDistributionConfiguration ContainerTags.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::DistributionConfiguration.Distribution FastLaunchConfigurations.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::DistributionConfiguration.Distribution LaunchTemplateConfigurations.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::DistributionConfiguration.Distribution LicenseConfigurationArns.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::DistributionConfiguration.LaunchPermissionConfiguration OrganizationArns.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::DistributionConfiguration.LaunchPermissionConfiguration OrganizationalUnitArns.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::DistributionConfiguration.LaunchPermissionConfiguration UserGroups.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::DistributionConfiguration.LaunchPermissionConfiguration UserIds.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::ImageRecipe.ComponentConfiguration Parameters.DuplicatesAllowed (__added__) +* AWS::ImageBuilder::ImageRecipe.ComponentParameter Value.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria AwsAccountId.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria ComponentId.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria ComponentType.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria Ec2InstanceImageId.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria Ec2InstanceSubnetId.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria Ec2InstanceVpcId.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria EcrImageArchitecture.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria EcrImageHash.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria EcrImagePushedAt.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria EcrImageRegistry.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria EcrImageRepositoryName.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria EcrImageTags.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria FindingArn.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria FindingStatus.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria FindingType.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria FirstObservedAt.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria InspectorScore.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria LastObservedAt.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria NetworkProtocol.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria PortRange.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria RelatedVulnerabilities.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria ResourceId.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria ResourceTags.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria ResourceType.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria Severity.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria Title.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria UpdatedAt.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria VendorSeverity.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria VulnerabilityId.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria VulnerabilitySource.DuplicatesAllowed (__added__) +* AWS::InspectorV2::Filter.FilterCriteria VulnerablePackages.DuplicatesAllowed (__added__) +* AWS::IoT::FleetMetric.AggregationType Values.DuplicatesAllowed (__added__) +* AWS::IoT::TopicRule.RepublishActionHeaders UserProperties.DuplicatesAllowed (__added__) +* AWS::IoT::TopicRule.TimestreamAction Dimensions.DuplicatesAllowed (__added__) +* AWS::IoT::TopicRule.TopicRulePayload Actions.DuplicatesAllowed (__added__) +* AWS::IoTAnalytics::Channel.ChannelStorage ServiceManagedS3.Type (__deleted__) +* AWS::IoTAnalytics::Channel.ChannelStorage ServiceManagedS3.PrimitiveType (__added__) +* AWS::IoTAnalytics::Datastore.DatastoreStorage ServiceManagedS3.Type (__deleted__) +* AWS::IoTAnalytics::Datastore.DatastoreStorage ServiceManagedS3.PrimitiveType (__added__) +* AWS::IoTAnalytics::Datastore.FileFormatConfiguration JsonConfiguration.Type (__deleted__) +* AWS::IoTAnalytics::Datastore.FileFormatConfiguration JsonConfiguration.PrimitiveType (__added__) +* AWS::IoTEvents::AlarmModel.AlarmEventActions AlarmActions.DuplicatesAllowed (__added__) +* AWS::IoTFleetWise::DecoderManifest.CanSignal Factor.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.CanSignal IsBigEndian.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.CanSignal IsSigned.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.CanSignal Length.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.CanSignal MessageId.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.CanSignal Offset.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.CanSignal StartBit.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdInterface DtcRequestIntervalSeconds.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdInterface HasTransmissionEcu.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdInterface PidRequestIntervalSeconds.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdInterface RequestMessageId.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdInterface UseExtendedIds.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdSignal BitMaskLength.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdSignal BitRightShift.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdSignal ByteLength.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdSignal Offset.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdSignal Pid.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdSignal PidResponseLength.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdSignal Scaling.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdSignal ServiceMode.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::DecoderManifest.ObdSignal StartByte.PrimitiveType (__changed__) + * Old: Json + * New: String +* AWS::IoTFleetWise::SignalCatalog.Actuator AllowedValues.DuplicatesAllowed (__added__) +* AWS::IoTFleetWise::SignalCatalog.Attribute AllowedValues.DuplicatesAllowed (__added__) +* AWS::IoTFleetWise::SignalCatalog.Sensor AllowedValues.DuplicatesAllowed (__added__) +* AWS::IoTSiteWise::AssetModel.AssetModelCompositeModel CompositeModelProperties.DuplicatesAllowed (__added__) +* AWS::IoTSiteWise::AssetModel.Metric Variables.DuplicatesAllowed (__added__) +* AWS::IoTSiteWise::AssetModel.Transform Variables.DuplicatesAllowed (__added__) +* AWS::IoTTwinMaker::ComponentType.DataValue RelationshipValue.PrimitiveType (__deleted__) +* AWS::IoTTwinMaker::ComponentType.DataValue RelationshipValue.Type (__added__) +* AWS::IoTTwinMaker::Entity.DataValue RelationshipValue.PrimitiveType (__deleted__) +* AWS::IoTTwinMaker::Entity.DataValue RelationshipValue.Type (__added__) +* AWS::IoTTwinMaker::Entity.Property Definition.PrimitiveType (__deleted__) +* AWS::IoTTwinMaker::Entity.Property Definition.Type (__added__) +* AWS::IoTTwinMaker::Entity.Status Error.PrimitiveType (__deleted__) +* AWS::IoTTwinMaker::Entity.Status Error.Type (__added__) +* AWS::IoTWireless::DeviceProfile.LoRaWANDeviceProfile FactoryPresetFreqsList.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ColumnConfiguration ChangeDetectingColumns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ColumnConfiguration FieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ConfluenceAttachmentConfiguration AttachmentFieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ConfluenceBlogConfiguration BlogFieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ConfluenceConfiguration ExclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ConfluenceConfiguration InclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ConfluencePageConfiguration PageFieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ConfluenceSpaceConfiguration ExcludeSpaces.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ConfluenceSpaceConfiguration IncludeSpaces.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ConfluenceSpaceConfiguration SpaceFieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.CustomDocumentEnrichmentConfiguration InlineConfigurations.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.DataSourceVpcConfiguration SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.DataSourceVpcConfiguration SubnetIds.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.DocumentAttributeValue StringListValue.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.GoogleDriveConfiguration ExcludeMimeTypes.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.GoogleDriveConfiguration ExcludeSharedDrives.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.GoogleDriveConfiguration ExcludeUserAccounts.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.GoogleDriveConfiguration ExclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.GoogleDriveConfiguration FieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.GoogleDriveConfiguration InclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.OneDriveConfiguration ExclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.OneDriveConfiguration FieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.OneDriveConfiguration InclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.OneDriveUsers OneDriveUserList.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.S3DataSourceConfiguration ExclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.S3DataSourceConfiguration InclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.S3DataSourceConfiguration InclusionPrefixes.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SalesforceChatterFeedConfiguration FieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SalesforceChatterFeedConfiguration IncludeFilterTypes.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SalesforceConfiguration ExcludeAttachmentFilePatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SalesforceConfiguration IncludeAttachmentFilePatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SalesforceConfiguration StandardObjectConfigurations.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SalesforceCustomKnowledgeArticleTypeConfiguration FieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SalesforceKnowledgeArticleConfiguration CustomKnowledgeArticleTypeConfigurations.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SalesforceKnowledgeArticleConfiguration IncludedStates.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SalesforceStandardKnowledgeArticleTypeConfiguration FieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SalesforceStandardObjectAttachmentConfiguration FieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SalesforceStandardObjectConfiguration FieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ServiceNowKnowledgeArticleConfiguration ExcludeAttachmentFilePatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ServiceNowKnowledgeArticleConfiguration FieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ServiceNowKnowledgeArticleConfiguration IncludeAttachmentFilePatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ServiceNowServiceCatalogConfiguration ExcludeAttachmentFilePatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ServiceNowServiceCatalogConfiguration FieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.ServiceNowServiceCatalogConfiguration IncludeAttachmentFilePatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SharePointConfiguration ExclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SharePointConfiguration FieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SharePointConfiguration InclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.SharePointConfiguration Urls.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.WebCrawlerAuthenticationConfiguration BasicAuthentication.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.WebCrawlerConfiguration UrlExclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.WebCrawlerConfiguration UrlInclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.WebCrawlerSeedUrlConfiguration SeedUrls.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.WebCrawlerSiteMapsConfiguration SiteMaps.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.WorkDocsConfiguration ExclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.WorkDocsConfiguration FieldMappings.DuplicatesAllowed (__added__) +* AWS::Kendra::DataSource.WorkDocsConfiguration InclusionPatterns.DuplicatesAllowed (__added__) +* AWS::Kendra::Index.Relevance ValueImportanceItems.DuplicatesAllowed (__added__) +* AWS::KinesisAnalyticsV2::Application.ApplicationConfiguration VpcConfigurations.DuplicatesAllowed (__added__) +* AWS::KinesisAnalyticsV2::Application.ZeppelinApplicationConfiguration CustomArtifactsConfiguration.DuplicatesAllowed (__added__) +* AWS::LakeFormation::DataCellsFilter.ColumnWildcard ExcludedColumnNames.DuplicatesAllowed (__added__) +* AWS::LakeFormation::PrincipalPermissions.ColumnWildcard ExcludedColumnNames.DuplicatesAllowed (__added__) +* AWS::LakeFormation::PrincipalPermissions.LFTag TagValues.DuplicatesAllowed (__added__) +* AWS::LakeFormation::PrincipalPermissions.LFTagKeyResource TagValues.DuplicatesAllowed (__added__) +* AWS::LakeFormation::PrincipalPermissions.LFTagPolicyResource Expression.DuplicatesAllowed (__added__) +* AWS::LakeFormation::PrincipalPermissions.Resource Catalog.Type (__deleted__) +* AWS::LakeFormation::PrincipalPermissions.Resource Catalog.PrimitiveType (__added__) +* AWS::LakeFormation::PrincipalPermissions.TableResource TableWildcard.Type (__deleted__) +* AWS::LakeFormation::PrincipalPermissions.TableResource TableWildcard.PrimitiveType (__added__) +* AWS::LakeFormation::PrincipalPermissions.TableWithColumnsResource ColumnNames.DuplicatesAllowed (__added__) +* AWS::LakeFormation::TagAssociation.LFTagPair TagValues.DuplicatesAllowed (__added__) +* AWS::LakeFormation::TagAssociation.Resource Catalog.Type (__deleted__) +* AWS::LakeFormation::TagAssociation.Resource Catalog.PrimitiveType (__added__) +* AWS::LakeFormation::TagAssociation.TableResource TableWildcard.Type (__deleted__) +* AWS::LakeFormation::TagAssociation.TableResource TableWildcard.PrimitiveType (__added__) +* AWS::LakeFormation::TagAssociation.TableWithColumnsResource ColumnNames.DuplicatesAllowed (__added__) +* AWS::Lambda::CodeSigningConfig.AllowedPublishers SigningProfileVersionArns.DuplicatesAllowed (__added__) +* AWS::Lambda::Url.Cors AllowHeaders.DuplicatesAllowed (__added__) +* AWS::Lambda::Url.Cors AllowMethods.DuplicatesAllowed (__added__) +* AWS::Lambda::Url.Cors AllowOrigins.DuplicatesAllowed (__added__) +* AWS::Lambda::Url.Cors ExposeHeaders.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.ConversationLogSettings AudioLogSettings.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.ConversationLogSettings TextLogSettings.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.CustomVocabulary CustomVocabularyItems.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.FulfillmentStartResponseSpecification MessageGroups.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.FulfillmentUpdateResponseSpecification MessageGroups.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.ImageResponseCard Buttons.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.Intent InputContexts.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.Intent OutputContexts.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.Intent SampleUtterances.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.Intent SlotPriorities.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.MessageGroup Variations.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.PromptSpecification MessageGroupsList.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.ResponseSpecification MessageGroupsList.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.SlotDefaultValueSpecification DefaultValueList.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.SlotType SlotTypeValues.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.SlotTypeValue Synonyms.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.SlotValueElicitationSetting SampleUtterances.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.StillWaitingResponseSpecification MessageGroupsList.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.TestBotAliasSettings BotAliasLocaleSettings.DuplicatesAllowed (__added__) +* AWS::Lex::Bot.TestBotAliasSettings SentimentAnalysisSettings.PrimitiveType (__deleted__) +* AWS::Lex::Bot.TestBotAliasSettings SentimentAnalysisSettings.Type (__added__) +* AWS::Lex::BotAlias.ConversationLogSettings AudioLogSettings.DuplicatesAllowed (__added__) +* AWS::Lex::BotAlias.ConversationLogSettings TextLogSettings.DuplicatesAllowed (__added__) +* AWS::Lightsail::Instance.Port CidrListAliases.DuplicatesAllowed (__added__) +* AWS::Lightsail::Instance.Port Cidrs.DuplicatesAllowed (__added__) +* AWS::Lightsail::Instance.Port Ipv6Cidrs.DuplicatesAllowed (__added__) +* AWS::LookoutMetrics::AnomalyDetector.CsvFormatDescriptor HeaderList.DuplicatesAllowed (__added__) +* AWS::LookoutMetrics::AnomalyDetector.MetricSet DimensionList.DuplicatesAllowed (__added__) +* AWS::LookoutMetrics::AnomalyDetector.MetricSet MetricList.DuplicatesAllowed (__added__) +* AWS::LookoutMetrics::AnomalyDetector.S3SourceConfig HistoricalDataPathList.DuplicatesAllowed (__added__) +* AWS::LookoutMetrics::AnomalyDetector.S3SourceConfig TemplatedPathList.DuplicatesAllowed (__added__) +* AWS::LookoutMetrics::AnomalyDetector.VpcConfiguration SecurityGroupIdList.DuplicatesAllowed (__added__) +* AWS::LookoutMetrics::AnomalyDetector.VpcConfiguration SubnetIdList.DuplicatesAllowed (__added__) +* AWS::M2::Application.Definition Content.Type (__deleted__) +* AWS::M2::Application.Definition Content.PrimitiveType (__added__) +* AWS::M2::Application.Definition S3Location.Type (__deleted__) +* AWS::M2::Application.Definition S3Location.PrimitiveType (__added__) +* AWS::MSK::Cluster.ConnectivityInfo VpcConnectivity (__added__) +* AWS::MWAA::Environment.NetworkConfiguration SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::MWAA::Environment.NetworkConfiguration SubnetIds.DuplicatesAllowed (__added__) +* AWS::Macie::FindingsFilter.FindingCriteria Criterion.ItemType (__added__) +* AWS::Macie::FindingsFilter.FindingCriteria Criterion.Type (__changed__) + * Old: Criterion + * New: Map +* AWS::MediaConnect::Flow.FailoverConfig FailoverMode (__added__) +* AWS::MediaConnect::Flow.FailoverConfig SourcePriority (__added__) +* AWS::MediaConnect::Flow.Source SenderControlPort (__added__) +* AWS::MediaConnect::Flow.Source SenderIpAddress (__added__) +* AWS::MediaConnect::Flow.Source SourceListenerAddress (__added__) +* AWS::MediaConnect::Flow.Source SourceListenerPort (__added__) +* AWS::MediaPackage::OriginEndpoint.CmafPackage HlsManifests.DuplicatesAllowed (__added__) +* AWS::MediaPackage::OriginEndpoint.DashPackage AdTriggers.DuplicatesAllowed (__added__) +* AWS::MediaPackage::OriginEndpoint.DashPackage PeriodTriggers.DuplicatesAllowed (__added__) +* AWS::MediaPackage::OriginEndpoint.HlsManifest AdTriggers.DuplicatesAllowed (__added__) +* AWS::MediaPackage::OriginEndpoint.HlsPackage AdTriggers.DuplicatesAllowed (__added__) +* AWS::MediaPackage::OriginEndpoint.SpekeKeyProvider SystemIds.DuplicatesAllowed (__added__) +* AWS::MediaPackage::PackagingConfiguration.CmafPackage HlsManifests.DuplicatesAllowed (__added__) +* AWS::MediaPackage::PackagingConfiguration.DashPackage DashManifests.DuplicatesAllowed (__added__) +* AWS::MediaPackage::PackagingConfiguration.DashPackage PeriodTriggers.DuplicatesAllowed (__added__) +* AWS::MediaPackage::PackagingConfiguration.HlsPackage HlsManifests.DuplicatesAllowed (__added__) +* AWS::MediaPackage::PackagingConfiguration.MssPackage MssManifests.DuplicatesAllowed (__added__) +* AWS::MediaPackage::PackagingConfiguration.SpekeKeyProvider SystemIds.DuplicatesAllowed (__added__) +* AWS::NetworkFirewall::LoggingConfiguration.LoggingConfiguration LogDestinationConfigs.DuplicatesAllowed (__added__) +* AWS::NetworkManager::CoreNetwork.CoreNetworkEdge InsideCidrBlocks.DuplicatesAllowed (__added__) +* AWS::NetworkManager::CoreNetwork.CoreNetworkSegment EdgeLocations.DuplicatesAllowed (__added__) +* AWS::NetworkManager::CoreNetwork.CoreNetworkSegment SharedSegments.DuplicatesAllowed (__added__) +* AWS::NimbleStudio::LaunchProfile.StreamConfiguration Ec2InstanceTypes.DuplicatesAllowed (__added__) +* AWS::NimbleStudio::LaunchProfile.StreamConfiguration StreamingImageIds.DuplicatesAllowed (__added__) +* AWS::NimbleStudio::LaunchProfile.StreamConfigurationSessionStorage Mode.DuplicatesAllowed (__added__) +* AWS::Personalize::Dataset.DatasetImportJob DataSource.PrimitiveType (__deleted__) +* AWS::Personalize::Dataset.DatasetImportJob DataSource.Type (__added__) +* AWS::Personalize::Solution.SolutionConfig AutoMLConfig.PrimitiveType (__deleted__) +* AWS::Personalize::Solution.SolutionConfig AutoMLConfig.Type (__added__) +* AWS::Personalize::Solution.SolutionConfig HpoConfig.PrimitiveType (__deleted__) +* AWS::Personalize::Solution.SolutionConfig HpoConfig.Type (__added__) +* AWS::QuickSight::Analysis.AnalysisSourceTemplate DataSetReferences.DuplicatesAllowed (__added__) +* AWS::QuickSight::Analysis.DateTimeParameter Values.DuplicatesAllowed (__added__) +* AWS::QuickSight::Analysis.DecimalParameter Values.DuplicatesAllowed (__added__) +* AWS::QuickSight::Analysis.IntegerParameter Values.DuplicatesAllowed (__added__) +* AWS::QuickSight::Analysis.Parameters DateTimeParameters.DuplicatesAllowed (__added__) +* AWS::QuickSight::Analysis.Parameters DecimalParameters.DuplicatesAllowed (__added__) +* AWS::QuickSight::Analysis.Parameters IntegerParameters.DuplicatesAllowed (__added__) +* AWS::QuickSight::Analysis.Parameters StringParameters.DuplicatesAllowed (__added__) +* AWS::QuickSight::Analysis.ResourcePermission Actions.DuplicatesAllowed (__added__) +* AWS::QuickSight::Analysis.StringParameter Values.DuplicatesAllowed (__added__) +* AWS::QuickSight::Dashboard.DashboardSourceTemplate DataSetReferences.DuplicatesAllowed (__added__) +* AWS::QuickSight::Dashboard.DateTimeParameter Values.DuplicatesAllowed (__added__) +* AWS::QuickSight::Dashboard.DecimalParameter Values.DuplicatesAllowed (__added__) +* AWS::QuickSight::Dashboard.IntegerParameter Values.DuplicatesAllowed (__added__) +* AWS::QuickSight::Dashboard.Parameters DateTimeParameters.DuplicatesAllowed (__added__) +* AWS::QuickSight::Dashboard.Parameters DecimalParameters.DuplicatesAllowed (__added__) +* AWS::QuickSight::Dashboard.Parameters IntegerParameters.DuplicatesAllowed (__added__) +* AWS::QuickSight::Dashboard.Parameters StringParameters.DuplicatesAllowed (__added__) +* AWS::QuickSight::Dashboard.ResourcePermission Actions.DuplicatesAllowed (__added__) +* AWS::QuickSight::Dashboard.StringParameter Values.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet.ColumnLevelPermissionRule ColumnNames.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet.ColumnLevelPermissionRule Principals.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet.CreateColumnsOperation Columns.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet.CustomSql Columns.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet.FieldFolder Columns.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet.GeoSpatialColumnGroup Columns.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet.LogicalTable DataTransforms.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet.ProjectOperation ProjectedColumns.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet.RelationalTable InputColumns.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet.ResourcePermission Actions.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet.S3Source InputColumns.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSet.TagColumnOperation Tags.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSource.CredentialPair AlternateDataSourceParameters.DuplicatesAllowed (__added__) +* AWS::QuickSight::DataSource.ResourcePermission Actions.DuplicatesAllowed (__added__) +* AWS::QuickSight::Template.ResourcePermission Actions.DuplicatesAllowed (__added__) +* AWS::QuickSight::Template.TemplateSourceAnalysis DataSetReferences.DuplicatesAllowed (__added__) +* AWS::QuickSight::Theme.DataColorPalette Colors.DuplicatesAllowed (__added__) +* AWS::QuickSight::Theme.DataColorPalette MinMaxGradient.DuplicatesAllowed (__added__) +* AWS::QuickSight::Theme.ResourcePermission Actions.DuplicatesAllowed (__added__) +* AWS::QuickSight::Theme.Typography FontFamilies.DuplicatesAllowed (__added__) +* AWS::RDS::DBProxyTargetGroup.ConnectionPoolConfigurationInfoFormat SessionPinningFilters.DuplicatesAllowed (__added__) +* AWS::RDS::OptionGroup.OptionConfiguration OptionSettings.DuplicatesAllowed (__added__) +* AWS::RUM::AppMonitor.AppMonitorConfiguration ExcludedPages.DuplicatesAllowed (__added__) +* AWS::RUM::AppMonitor.AppMonitorConfiguration FavoritePages.DuplicatesAllowed (__added__) +* AWS::RUM::AppMonitor.AppMonitorConfiguration IncludedPages.DuplicatesAllowed (__added__) +* AWS::RUM::AppMonitor.AppMonitorConfiguration Telemetries.DuplicatesAllowed (__added__) +* AWS::RefactorSpaces::Route.UriPathRouteInput Methods.DuplicatesAllowed (__added__) +* AWS::Rekognition::StreamProcessor.ConnectedHomeSettings Labels.DuplicatesAllowed (__added__) +* AWS::ResourceGroups::Group.ConfigurationItem Parameters.DuplicatesAllowed (__added__) +* AWS::ResourceGroups::Group.ConfigurationParameter Values.DuplicatesAllowed (__added__) +* AWS::ResourceGroups::Group.Query ResourceTypeFilters.DuplicatesAllowed (__added__) +* AWS::ResourceGroups::Group.Query TagFilters.DuplicatesAllowed (__added__) +* AWS::ResourceGroups::Group.TagFilter Values.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryControl::SafetyRule.AssertionRule AssertedControls.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryControl::SafetyRule.GatingRule GatingControls.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryControl::SafetyRule.GatingRule TargetControls.DuplicatesAllowed (__added__) +* AWS::Route53RecoveryReadiness::ResourceSet.Resource ReadinessScopes.DuplicatesAllowed (__added__) +* AWS::S3ObjectLambda::AccessPoint.TransformationConfiguration ContentTransformation.PrimitiveType (__deleted__) +* AWS::S3ObjectLambda::AccessPoint.TransformationConfiguration ContentTransformation.Type (__added__) +* AWS::S3Outposts::Bucket.Rule Filter.PrimitiveType (__deleted__) +* AWS::S3Outposts::Bucket.Rule Filter.Type (__added__) +* AWS::S3Outposts::Bucket.Rule Status.Required (__changed__) + * Old: false + * New: true +* AWS::SSM::Association.Target Values.DuplicatesAllowed (__added__) +* AWS::SSM::Document.AttachmentsSource Values.DuplicatesAllowed (__added__) +* AWS::SSMContacts::Contact.Stage Targets.DuplicatesAllowed (__added__) +* AWS::SSMIncidents::ResponsePlan.ChatChannel ChatbotSns.DuplicatesAllowed (__added__) +* AWS::SSMIncidents::ResponsePlan.IncidentTemplate NotificationTargets.DuplicatesAllowed (__added__) +* AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttributeValue Source.DuplicatesAllowed (__added__) +* AWS::SageMaker::AppImageConfig.KernelGatewayImageConfig KernelSpecs.DuplicatesAllowed (__added__) +* AWS::SageMaker::DataQualityJobDefinition.DataQualityAppSpecification ContainerArguments.DuplicatesAllowed (__added__) +* AWS::SageMaker::DataQualityJobDefinition.DataQualityAppSpecification ContainerEntrypoint.DuplicatesAllowed (__added__) +* AWS::SageMaker::DataQualityJobDefinition.MonitoringOutputConfig MonitoringOutputs.DuplicatesAllowed (__added__) +* AWS::SageMaker::DataQualityJobDefinition.VpcConfig SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::SageMaker::DataQualityJobDefinition.VpcConfig Subnets.DuplicatesAllowed (__added__) +* AWS::SageMaker::Domain.ResourceSpec InstanceType.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::Domain.ResourceSpec LifecycleConfigArn.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::Domain.ResourceSpec SageMakerImageArn.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::Domain.ResourceSpec SageMakerImageVersionArn.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::ModelBiasJobDefinition.MonitoringOutputConfig MonitoringOutputs.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelBiasJobDefinition.VpcConfig SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelBiasJobDefinition.VpcConfig Subnets.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelExplainabilityJobDefinition.MonitoringOutputConfig MonitoringOutputs.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelExplainabilityJobDefinition.VpcConfig SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelExplainabilityJobDefinition.VpcConfig Subnets.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.AdditionalInferenceSpecificationDefinition Containers.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.AdditionalInferenceSpecificationDefinition SupportedContentTypes.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.AdditionalInferenceSpecificationDefinition SupportedRealtimeInferenceInstanceTypes.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.AdditionalInferenceSpecificationDefinition SupportedResponseMIMETypes.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.AdditionalInferenceSpecificationDefinition SupportedTransformInstanceTypes.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.InferenceSpecification SupportedContentTypes.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.InferenceSpecification SupportedRealtimeInferenceInstanceTypes.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.InferenceSpecification SupportedResponseMIMETypes.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.InferenceSpecification SupportedTransformInstanceTypes.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition ContainerHostname.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition Environment.PrimitiveItemType (__added__) +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition Environment.Type (__changed__) + * Old: Environment + * New: Map +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition Environment.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition Framework.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition FrameworkVersion.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition Image.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition ImageDigest.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition ModelDataUrl.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition ModelInput.PrimitiveType (__deleted__) +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition ModelInput.Type (__added__) +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition ModelInput.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition NearestModelName.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::ModelPackage.ModelPackageContainerDefinition ProductId.UpdateType (__changed__) + * Old: Mutable + * New: Conditional +* AWS::SageMaker::ModelPackage.ModelPackageStatusDetails ImageScanStatuses.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.ModelPackageStatusDetails ValidationStatuses.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.SourceAlgorithmSpecification SourceAlgorithms.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelPackage.TransformJobDefinition Environment.PrimitiveItemType (__added__) +* AWS::SageMaker::ModelPackage.TransformJobDefinition Environment.Type (__changed__) + * Old: Environment + * New: Map +* AWS::SageMaker::ModelPackage.ValidationSpecification ValidationProfiles.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelQualityJobDefinition.ModelQualityAppSpecification ContainerArguments.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelQualityJobDefinition.ModelQualityAppSpecification ContainerEntrypoint.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelQualityJobDefinition.MonitoringOutputConfig MonitoringOutputs.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelQualityJobDefinition.VpcConfig SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::SageMaker::ModelQualityJobDefinition.VpcConfig Subnets.DuplicatesAllowed (__added__) +* AWS::SageMaker::MonitoringSchedule.MonitoringAppSpecification ContainerArguments.DuplicatesAllowed (__added__) +* AWS::SageMaker::MonitoringSchedule.MonitoringAppSpecification ContainerEntrypoint.DuplicatesAllowed (__added__) +* AWS::SageMaker::MonitoringSchedule.MonitoringJobDefinition MonitoringInputs.DuplicatesAllowed (__added__) +* AWS::SageMaker::MonitoringSchedule.MonitoringOutputConfig MonitoringOutputs.DuplicatesAllowed (__added__) +* AWS::SageMaker::MonitoringSchedule.VpcConfig SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::SageMaker::MonitoringSchedule.VpcConfig Subnets.DuplicatesAllowed (__added__) +* AWS::Scheduler::Schedule.AwsVpcConfiguration SecurityGroups.DuplicatesAllowed (__added__) +* AWS::Scheduler::Schedule.AwsVpcConfiguration Subnets.DuplicatesAllowed (__added__) +* AWS::Scheduler::Schedule.EcsParameters CapacityProviderStrategy.DuplicatesAllowed (__added__) +* AWS::Scheduler::Schedule.EcsParameters PlacementConstraints.DuplicatesAllowed (__added__) +* AWS::Scheduler::Schedule.EcsParameters PlacementStrategy.DuplicatesAllowed (__added__) +* AWS::Scheduler::Schedule.EcsParameters Tags.ItemType (__deleted__) +* AWS::Scheduler::Schedule.EcsParameters Tags.Type (__deleted__) +* AWS::Scheduler::Schedule.EcsParameters Tags.PrimitiveType (__added__) +* AWS::Scheduler::Schedule.SageMakerPipelineParameters PipelineParameterList.DuplicatesAllowed (__added__) +* AWS::StepFunctions::StateMachine.LoggingConfiguration Destinations.DuplicatesAllowed (__added__) +* AWS::Synthetics::Canary.BaseScreenshot IgnoreCoordinates.DuplicatesAllowed (__added__) +* AWS::Synthetics::Canary.VPCConfig SecurityGroupIds.DuplicatesAllowed (__added__) +* AWS::Synthetics::Canary.VPCConfig SubnetIds.DuplicatesAllowed (__added__) +* AWS::Synthetics::Canary.VisualReference BaseScreenshots.DuplicatesAllowed (__added__) +* AWS::Timestream::ScheduledQuery.MixedMeasureMapping MultiMeasureAttributeMappings.DuplicatesAllowed (__added__) +* AWS::Timestream::ScheduledQuery.MultiMeasureMappings MultiMeasureAttributeMappings.DuplicatesAllowed (__added__) +* AWS::Timestream::ScheduledQuery.TimestreamConfiguration DimensionMappings.DuplicatesAllowed (__added__) +* AWS::Timestream::ScheduledQuery.TimestreamConfiguration MixedMeasureMappings.DuplicatesAllowed (__added__) +* AWS::Transfer::Workflow.WorkflowStep CopyStepDetails.PrimitiveType (__deleted__) +* AWS::Transfer::Workflow.WorkflowStep CopyStepDetails.Type (__added__) +* AWS::Transfer::Workflow.WorkflowStep CustomStepDetails.PrimitiveType (__deleted__) +* AWS::Transfer::Workflow.WorkflowStep CustomStepDetails.Type (__added__) +* AWS::Transfer::Workflow.WorkflowStep DeleteStepDetails.PrimitiveType (__deleted__) +* AWS::Transfer::Workflow.WorkflowStep DeleteStepDetails.Type (__added__) +* AWS::Transfer::Workflow.WorkflowStep TagStepDetails.PrimitiveType (__deleted__) +* AWS::Transfer::Workflow.WorkflowStep TagStepDetails.Type (__added__) +* AWS::WAFv2::LoggingConfiguration.FieldToMatch JsonBody.PrimitiveType (__deleted__) +* AWS::WAFv2::LoggingConfiguration.FieldToMatch JsonBody.Type (__added__) +* AWS::WAFv2::LoggingConfiguration.FieldToMatch SingleHeader.PrimitiveType (__deleted__) +* AWS::WAFv2::LoggingConfiguration.FieldToMatch SingleHeader.Type (__added__) +* AWS::WAFv2::RuleGroup.AndStatement Statements.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.ByteMatchStatement TextTransformations.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.CookieMatchPattern ExcludedCookies.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.CookieMatchPattern IncludedCookies.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.FieldToMatch SingleHeader.PrimitiveType (__deleted__) +* AWS::WAFv2::RuleGroup.FieldToMatch SingleHeader.Type (__added__) +* AWS::WAFv2::RuleGroup.FieldToMatch SingleQueryArgument.PrimitiveType (__deleted__) +* AWS::WAFv2::RuleGroup.FieldToMatch SingleQueryArgument.Type (__added__) +* AWS::WAFv2::RuleGroup.GeoMatchStatement CountryCodes.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.HeaderMatchPattern ExcludedHeaders.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.HeaderMatchPattern IncludedHeaders.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.JsonMatchPattern IncludedPaths.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.OrStatement Statements.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.RegexMatchStatement TextTransformations.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.RegexPatternSetReferenceStatement TextTransformations.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.Rule RuleLabels.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.RuleAction Allow.PrimitiveType (__deleted__) +* AWS::WAFv2::RuleGroup.RuleAction Allow.Type (__added__) +* AWS::WAFv2::RuleGroup.RuleAction Block.PrimitiveType (__deleted__) +* AWS::WAFv2::RuleGroup.RuleAction Block.Type (__added__) +* AWS::WAFv2::RuleGroup.RuleAction Captcha.PrimitiveType (__deleted__) +* AWS::WAFv2::RuleGroup.RuleAction Captcha.Type (__added__) +* AWS::WAFv2::RuleGroup.RuleAction Count.PrimitiveType (__deleted__) +* AWS::WAFv2::RuleGroup.RuleAction Count.Type (__added__) +* AWS::WAFv2::RuleGroup.SizeConstraintStatement TextTransformations.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.SqliMatchStatement TextTransformations.DuplicatesAllowed (__added__) +* AWS::WAFv2::RuleGroup.XssMatchStatement TextTransformations.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.AndStatement Statements.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.ByteMatchStatement TextTransformations.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.CookieMatchPattern ExcludedCookies.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.CookieMatchPattern IncludedCookies.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.CustomRequestHandling InsertHeaders.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.CustomResponse ResponseHeaders.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.FieldToMatch SingleHeader.PrimitiveType (__deleted__) +* AWS::WAFv2::WebACL.FieldToMatch SingleHeader.Type (__added__) +* AWS::WAFv2::WebACL.FieldToMatch SingleQueryArgument.PrimitiveType (__deleted__) +* AWS::WAFv2::WebACL.FieldToMatch SingleQueryArgument.Type (__added__) +* AWS::WAFv2::WebACL.GeoMatchStatement CountryCodes.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.HeaderMatchPattern ExcludedHeaders.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.HeaderMatchPattern IncludedHeaders.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.JsonMatchPattern IncludedPaths.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.ManagedRuleGroupStatement ExcludedRules.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.ManagedRuleGroupStatement ManagedRuleGroupConfigs.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.OrStatement Statements.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.RegexMatchStatement TextTransformations.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.RegexPatternSetReferenceStatement TextTransformations.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.Rule RuleLabels.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.RuleGroupReferenceStatement ExcludedRules.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.SizeConstraintStatement TextTransformations.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.SqliMatchStatement TextTransformations.DuplicatesAllowed (__added__) +* AWS::WAFv2::WebACL.XssMatchStatement TextTransformations.DuplicatesAllowed (__added__) +* AWS::Wisdom::KnowledgeBase.AppIntegrationsConfiguration ObjectFields.DuplicatesAllowed (__added__) +* AWS::Wisdom::KnowledgeBase.SourceConfiguration AppIntegrations.Required (__changed__) + * Old: false + * New: true + + # CloudFormation Resource Specification v100.0.0 ## New Resource Types diff --git a/packages/@aws-cdk/cfnspec/cfn.version b/packages/@aws-cdk/cfnspec/cfn.version index b921e68660ebb..6288eefbac978 100644 --- a/packages/@aws-cdk/cfnspec/cfn.version +++ b/packages/@aws-cdk/cfnspec/cfn.version @@ -1 +1 @@ -100.0.0 +101.0.0 diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/.000_AWS_AmplifyUIBuilder.rejected.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/.000_AWS_AmplifyUIBuilder.rejected.json deleted file mode 100644 index b5f185b202735..0000000000000 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/.000_AWS_AmplifyUIBuilder.rejected.json +++ /dev/null @@ -1,1093 +0,0 @@ -{ - "PropertyTypes": { - "AWS::AmplifyUIBuilder::Component.ActionParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-actionparameters.html", - "Properties": { - "Anchor": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-actionparameters.html#cfn-amplifyuibuilder-component-actionparameters-anchor", - "Required": false, - "Type": "ComponentProperty", - "UpdateType": "Mutable" - }, - "Fields": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-actionparameters.html#cfn-amplifyuibuilder-component-actionparameters-fields", - "Required": false, - "Type": "ComponentProperties", - "UpdateType": "Mutable" - }, - "Global": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-actionparameters.html#cfn-amplifyuibuilder-component-actionparameters-global", - "Required": false, - "Type": "ComponentProperty", - "UpdateType": "Mutable" - }, - "Id": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-actionparameters.html#cfn-amplifyuibuilder-component-actionparameters-id", - "Required": false, - "Type": "ComponentProperty", - "UpdateType": "Mutable" - }, - "Model": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-actionparameters.html#cfn-amplifyuibuilder-component-actionparameters-model", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "State": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-actionparameters.html#cfn-amplifyuibuilder-component-actionparameters-state", - "Required": false, - "Type": "MutationActionSetStateParameter", - "UpdateType": "Mutable" - }, - "Target": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-actionparameters.html#cfn-amplifyuibuilder-component-actionparameters-target", - "Required": false, - "Type": "ComponentProperty", - "UpdateType": "Mutable" - }, - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-actionparameters.html#cfn-amplifyuibuilder-component-actionparameters-type", - "Required": false, - "Type": "ComponentProperty", - "UpdateType": "Mutable" - }, - "Url": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-actionparameters.html#cfn-amplifyuibuilder-component-actionparameters-url", - "Required": false, - "Type": "ComponentProperty", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Component.ComponentBindingPropertiesValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalue.html", - "Properties": { - "BindingProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalue.html#cfn-amplifyuibuilder-component-componentbindingpropertiesvalue-bindingproperties", - "Required": false, - "Type": "ComponentBindingPropertiesValueProperties", - "UpdateType": "Mutable" - }, - "DefaultValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalue.html#cfn-amplifyuibuilder-component-componentbindingpropertiesvalue-defaultvalue", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalue.html#cfn-amplifyuibuilder-component-componentbindingpropertiesvalue-type", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Component.ComponentBindingPropertiesValueProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalueproperties.html", - "Properties": { - "Bucket": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalueproperties.html#cfn-amplifyuibuilder-component-componentbindingpropertiesvalueproperties-bucket", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DefaultValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalueproperties.html#cfn-amplifyuibuilder-component-componentbindingpropertiesvalueproperties-defaultvalue", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Field": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalueproperties.html#cfn-amplifyuibuilder-component-componentbindingpropertiesvalueproperties-field", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Key": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalueproperties.html#cfn-amplifyuibuilder-component-componentbindingpropertiesvalueproperties-key", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Model": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalueproperties.html#cfn-amplifyuibuilder-component-componentbindingpropertiesvalueproperties-model", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Predicates": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalueproperties.html#cfn-amplifyuibuilder-component-componentbindingpropertiesvalueproperties-predicates", - "ItemType": "Predicate", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "UserAttribute": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalueproperties.html#cfn-amplifyuibuilder-component-componentbindingpropertiesvalueproperties-userattribute", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Component.ComponentChild": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentchild.html", - "Properties": { - "Children": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentchild.html#cfn-amplifyuibuilder-component-componentchild-children", - "ItemType": "ComponentChild", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "ComponentType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentchild.html#cfn-amplifyuibuilder-component-componentchild-componenttype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Events": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentchild.html#cfn-amplifyuibuilder-component-componentchild-events", - "Required": false, - "Type": "ComponentEvents", - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentchild.html#cfn-amplifyuibuilder-component-componentchild-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Properties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentchild.html#cfn-amplifyuibuilder-component-componentchild-properties", - "Required": true, - "Type": "ComponentProperties", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Component.ComponentConditionProperty": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentconditionproperty.html", - "Properties": { - "Else": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentconditionproperty.html#cfn-amplifyuibuilder-component-componentconditionproperty-else", - "Required": false, - "Type": "ComponentProperty", - "UpdateType": "Mutable" - }, - "Field": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentconditionproperty.html#cfn-amplifyuibuilder-component-componentconditionproperty-field", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Operand": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentconditionproperty.html#cfn-amplifyuibuilder-component-componentconditionproperty-operand", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "OperandType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentconditionproperty.html#cfn-amplifyuibuilder-component-componentconditionproperty-operandtype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Operator": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentconditionproperty.html#cfn-amplifyuibuilder-component-componentconditionproperty-operator", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Property": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentconditionproperty.html#cfn-amplifyuibuilder-component-componentconditionproperty-property", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Then": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentconditionproperty.html#cfn-amplifyuibuilder-component-componentconditionproperty-then", - "Required": false, - "Type": "ComponentProperty", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Component.ComponentDataConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentdataconfiguration.html", - "Properties": { - "Identifiers": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentdataconfiguration.html#cfn-amplifyuibuilder-component-componentdataconfiguration-identifiers", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Model": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentdataconfiguration.html#cfn-amplifyuibuilder-component-componentdataconfiguration-model", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Predicate": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentdataconfiguration.html#cfn-amplifyuibuilder-component-componentdataconfiguration-predicate", - "Required": false, - "Type": "Predicate", - "UpdateType": "Mutable" - }, - "Sort": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentdataconfiguration.html#cfn-amplifyuibuilder-component-componentdataconfiguration-sort", - "ItemType": "SortProperty", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Component.ComponentEvent": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentevent.html", - "Properties": { - "Action": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentevent.html#cfn-amplifyuibuilder-component-componentevent-action", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Parameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentevent.html#cfn-amplifyuibuilder-component-componentevent-parameters", - "Required": false, - "Type": "ActionParameters", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Component.ComponentEvents": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentevents.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::AmplifyUIBuilder::Component.ComponentOverrides": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentoverrides.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::AmplifyUIBuilder::Component.ComponentOverridesValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentoverridesvalue.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::AmplifyUIBuilder::Component.ComponentProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperties.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::AmplifyUIBuilder::Component.ComponentProperty": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html", - "Properties": { - "BindingProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-bindingproperties", - "Required": false, - "Type": "ComponentPropertyBindingProperties", - "UpdateType": "Mutable" - }, - "Bindings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-bindings", - "Required": false, - "Type": "FormBindings", - "UpdateType": "Mutable" - }, - "CollectionBindingProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-collectionbindingproperties", - "Required": false, - "Type": "ComponentPropertyBindingProperties", - "UpdateType": "Mutable" - }, - "ComponentName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-componentname", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Concat": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-concat", - "ItemType": "ComponentProperty", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Condition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-condition", - "Required": false, - "Type": "ComponentConditionProperty", - "UpdateType": "Mutable" - }, - "Configured": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-configured", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "DefaultValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-defaultvalue", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Event": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-event", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ImportedValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-importedvalue", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Model": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-model", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Property": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-property", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-type", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "UserAttribute": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-userattribute", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-value", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Component.ComponentPropertyBindingProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentpropertybindingproperties.html", - "Properties": { - "Field": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentpropertybindingproperties.html#cfn-amplifyuibuilder-component-componentpropertybindingproperties-field", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Property": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentpropertybindingproperties.html#cfn-amplifyuibuilder-component-componentpropertybindingproperties-property", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Component.ComponentVariant": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentvariant.html", - "Properties": { - "Overrides": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentvariant.html#cfn-amplifyuibuilder-component-componentvariant-overrides", - "Required": false, - "Type": "ComponentOverrides", - "UpdateType": "Mutable" - }, - "VariantValues": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentvariant.html#cfn-amplifyuibuilder-component-componentvariant-variantvalues", - "Required": false, - "Type": "ComponentVariantValues", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Component.ComponentVariantValues": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentvariantvalues.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::AmplifyUIBuilder::Component.FormBindings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-formbindings.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::AmplifyUIBuilder::Component.MutationActionSetStateParameter": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-mutationactionsetstateparameter.html", - "Properties": { - "ComponentName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-mutationactionsetstateparameter.html#cfn-amplifyuibuilder-component-mutationactionsetstateparameter-componentname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Property": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-mutationactionsetstateparameter.html#cfn-amplifyuibuilder-component-mutationactionsetstateparameter-property", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Set": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-mutationactionsetstateparameter.html#cfn-amplifyuibuilder-component-mutationactionsetstateparameter-set", - "Required": true, - "Type": "ComponentProperty", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Component.Predicate": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-predicate.html", - "Properties": { - "And": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-predicate.html#cfn-amplifyuibuilder-component-predicate-and", - "ItemType": "Predicate", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Field": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-predicate.html#cfn-amplifyuibuilder-component-predicate-field", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Operand": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-predicate.html#cfn-amplifyuibuilder-component-predicate-operand", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Operator": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-predicate.html#cfn-amplifyuibuilder-component-predicate-operator", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Or": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-predicate.html#cfn-amplifyuibuilder-component-predicate-or", - "ItemType": "Predicate", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Component.SortProperty": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-sortproperty.html", - "Properties": { - "Direction": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-sortproperty.html#cfn-amplifyuibuilder-component-sortproperty-direction", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Field": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-sortproperty.html#cfn-amplifyuibuilder-component-sortproperty-field", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Form.FieldConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldconfig.html", - "Properties": { - "Excluded": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldconfig.html#cfn-amplifyuibuilder-form-fieldconfig-excluded", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "InputType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldconfig.html#cfn-amplifyuibuilder-form-fieldconfig-inputtype", - "Required": false, - "Type": "FieldInputConfig", - "UpdateType": "Mutable" - }, - "Label": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldconfig.html#cfn-amplifyuibuilder-form-fieldconfig-label", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Position": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldconfig.html#cfn-amplifyuibuilder-form-fieldconfig-position", - "Required": false, - "UpdateType": "Mutable" - }, - "Validations": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldconfig.html#cfn-amplifyuibuilder-form-fieldconfig-validations", - "ItemType": "FieldValidationConfiguration", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Form.FieldInputConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html", - "Properties": { - "DefaultChecked": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-defaultchecked", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "DefaultCountryCode": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-defaultcountrycode", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DefaultValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-defaultvalue", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DescriptiveText": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-descriptivetext", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "MaxValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-maxvalue", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "MinValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-minvalue", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-name", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Placeholder": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-placeholder", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ReadOnly": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-readonly", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "Required": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-required", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "Step": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-step", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-type", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-value", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ValueMappings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-valuemappings", - "Required": false, - "Type": "ValueMappings", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Form.FieldPosition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldposition.html" - }, - "AWS::AmplifyUIBuilder::Form.FieldValidationConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldvalidationconfiguration.html", - "Properties": { - "NumValues": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldvalidationconfiguration.html#cfn-amplifyuibuilder-form-fieldvalidationconfiguration-numvalues", - "PrimitiveItemType": "Double", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "StrValues": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldvalidationconfiguration.html#cfn-amplifyuibuilder-form-fieldvalidationconfiguration-strvalues", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldvalidationconfiguration.html#cfn-amplifyuibuilder-form-fieldvalidationconfiguration-type", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ValidationMessage": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldvalidationconfiguration.html#cfn-amplifyuibuilder-form-fieldvalidationconfiguration-validationmessage", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Form.FormButton": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formbutton.html", - "Properties": { - "Children": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formbutton.html#cfn-amplifyuibuilder-form-formbutton-children", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Excluded": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formbutton.html#cfn-amplifyuibuilder-form-formbutton-excluded", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "Position": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formbutton.html#cfn-amplifyuibuilder-form-formbutton-position", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Form.FormCTA": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formcta.html", - "Properties": { - "Cancel": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formcta.html#cfn-amplifyuibuilder-form-formcta-cancel", - "Required": false, - "Type": "FormButton", - "UpdateType": "Mutable" - }, - "Clear": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formcta.html#cfn-amplifyuibuilder-form-formcta-clear", - "Required": false, - "Type": "FormButton", - "UpdateType": "Mutable" - }, - "Position": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formcta.html#cfn-amplifyuibuilder-form-formcta-position", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Submit": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formcta.html#cfn-amplifyuibuilder-form-formcta-submit", - "Required": false, - "Type": "FormButton", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Form.FormDataTypeConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formdatatypeconfig.html", - "Properties": { - "DataSourceType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formdatatypeconfig.html#cfn-amplifyuibuilder-form-formdatatypeconfig-datasourcetype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "DataTypeName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formdatatypeconfig.html#cfn-amplifyuibuilder-form-formdatatypeconfig-datatypename", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Form.FormInputValueProperty": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-forminputvalueproperty.html", - "Properties": { - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-forminputvalueproperty.html#cfn-amplifyuibuilder-form-forminputvalueproperty-value", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Form.FormStyle": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formstyle.html", - "Properties": { - "HorizontalGap": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formstyle.html#cfn-amplifyuibuilder-form-formstyle-horizontalgap", - "Required": false, - "UpdateType": "Mutable" - }, - "OuterPadding": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formstyle.html#cfn-amplifyuibuilder-form-formstyle-outerpadding", - "Required": false, - "UpdateType": "Mutable" - }, - "VerticalGap": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formstyle.html#cfn-amplifyuibuilder-form-formstyle-verticalgap", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Form.FormStyleConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formstyleconfig.html" - }, - "AWS::AmplifyUIBuilder::Form.SectionalElement": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-sectionalelement.html", - "Properties": { - "Level": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-sectionalelement.html#cfn-amplifyuibuilder-form-sectionalelement-level", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "Orientation": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-sectionalelement.html#cfn-amplifyuibuilder-form-sectionalelement-orientation", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Position": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-sectionalelement.html#cfn-amplifyuibuilder-form-sectionalelement-position", - "Required": false, - "UpdateType": "Mutable" - }, - "Text": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-sectionalelement.html#cfn-amplifyuibuilder-form-sectionalelement-text", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-sectionalelement.html#cfn-amplifyuibuilder-form-sectionalelement-type", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Form.ValueMapping": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-valuemapping.html", - "Properties": { - "DisplayValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-valuemapping.html#cfn-amplifyuibuilder-form-valuemapping-displayvalue", - "Required": false, - "Type": "FormInputValueProperty", - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-valuemapping.html#cfn-amplifyuibuilder-form-valuemapping-value", - "Required": true, - "Type": "FormInputValueProperty", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Form.ValueMappings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-valuemappings.html", - "Properties": { - "Values": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-valuemappings.html#cfn-amplifyuibuilder-form-valuemappings-values", - "ItemType": "ValueMapping", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Theme.ThemeValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-theme-themevalue.html", - "Properties": { - "Children": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-theme-themevalue.html#cfn-amplifyuibuilder-theme-themevalue-children", - "ItemType": "ThemeValues", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-theme-themevalue.html#cfn-amplifyuibuilder-theme-themevalue-value", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Theme.ThemeValues": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-theme-themevalues.html", - "Properties": { - "Key": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-theme-themevalues.html#cfn-amplifyuibuilder-theme-themevalues-key", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-theme-themevalues.html#cfn-amplifyuibuilder-theme-themevalues-value", - "Required": false, - "Type": "ThemeValue", - "UpdateType": "Mutable" - } - } - } - }, - "ResourceSpecificationVersion": "100.0.0", - "ResourceTypes": { - "AWS::AmplifyUIBuilder::Component": { - "Attributes": { - "AppId": { - "PrimitiveType": "String" - }, - "EnvironmentName": { - "PrimitiveType": "String" - }, - "Id": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html", - "Properties": { - "BindingProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-bindingproperties", - "ItemType": "ComponentBindingPropertiesValue", - "Required": true, - "Type": "Map", - "UpdateType": "Mutable" - }, - "Children": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-children", - "ItemType": "ComponentChild", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "CollectionProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-collectionproperties", - "ItemType": "ComponentDataConfiguration", - "Required": false, - "Type": "Map", - "UpdateType": "Mutable" - }, - "ComponentType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-componenttype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Events": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-events", - "ItemType": "ComponentEvent", - "Required": false, - "Type": "Map", - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Overrides": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-overrides", - "ItemType": "ComponentOverridesValue", - "Required": true, - "Type": "Map", - "UpdateType": "Mutable" - }, - "Properties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-properties", - "ItemType": "ComponentProperty", - "Required": true, - "Type": "Map", - "UpdateType": "Mutable" - }, - "SchemaVersion": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-schemaversion", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "SourceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-sourceid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-tags", - "PrimitiveItemType": "String", - "Required": false, - "Type": "Map", - "UpdateType": "Immutable" - }, - "Variants": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-variants", - "ItemType": "ComponentVariant", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::AmplifyUIBuilder::Form": { - "Attributes": { - "Id": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html", - "Properties": { - "AppId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-appid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Cta": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-cta", - "Required": false, - "Type": "FormCTA", - "UpdateType": "Mutable" - }, - "DataType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-datatype", - "Required": true, - "Type": "FormDataTypeConfig", - "UpdateType": "Mutable" - }, - "EnvironmentName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-environmentname", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Fields": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-fields", - "ItemType": "FieldConfig", - "Required": true, - "Type": "Map", - "UpdateType": "Mutable" - }, - "FormActionType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-formactiontype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "SchemaVersion": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-schemaversion", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "SectionalElements": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-sectionalelements", - "ItemType": "SectionalElement", - "Required": true, - "Type": "Map", - "UpdateType": "Mutable" - }, - "Style": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-style", - "Required": true, - "Type": "FormStyle", - "UpdateType": "Mutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-tags", - "PrimitiveItemType": "String", - "Required": false, - "Type": "Map", - "UpdateType": "Immutable" - } - } - }, - "AWS::AmplifyUIBuilder::Theme": { - "Attributes": { - "AppId": { - "PrimitiveType": "String" - }, - "CreatedAt": { - "PrimitiveType": "String" - }, - "EnvironmentName": { - "PrimitiveType": "String" - }, - "Id": { - "PrimitiveType": "String" - }, - "ModifiedAt": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-theme.html", - "Properties": { - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-theme.html#cfn-amplifyuibuilder-theme-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Overrides": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-theme.html#cfn-amplifyuibuilder-theme-overrides", - "ItemType": "ThemeValues", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-theme.html#cfn-amplifyuibuilder-theme-tags", - "PrimitiveItemType": "String", - "Required": false, - "Type": "Map", - "UpdateType": "Immutable" - }, - "Values": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-theme.html#cfn-amplifyuibuilder-theme-values", - "ItemType": "ThemeValues", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - } - } - } - } -} diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/.000_AWS_AppFlow.rejected.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/.000_AWS_AppFlow.rejected.json deleted file mode 100644 index 9b0c152839530..0000000000000 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/.000_AWS_AppFlow.rejected.json +++ /dev/null @@ -1,2296 +0,0 @@ -{ - "PropertyTypes": { - "AWS::AppFlow::ConnectorProfile.AmplitudeConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-amplitudeconnectorprofilecredentials.html", - "Properties": { - "ApiKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-amplitudeconnectorprofilecredentials.html#cfn-appflow-connectorprofile-amplitudeconnectorprofilecredentials-apikey", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "SecretKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-amplitudeconnectorprofilecredentials.html#cfn-appflow-connectorprofile-amplitudeconnectorprofilecredentials-secretkey", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.ApiKeyCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-apikeycredentials.html", - "Properties": { - "ApiKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-apikeycredentials.html#cfn-appflow-connectorprofile-apikeycredentials-apikey", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ApiSecretKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-apikeycredentials.html#cfn-appflow-connectorprofile-apikeycredentials-apisecretkey", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.BasicAuthCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-basicauthcredentials.html", - "Properties": { - "Password": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-basicauthcredentials.html#cfn-appflow-connectorprofile-basicauthcredentials-password", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Username": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-basicauthcredentials.html#cfn-appflow-connectorprofile-basicauthcredentials-username", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.ConnectorOAuthRequest": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectoroauthrequest.html", - "Properties": { - "AuthCode": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectoroauthrequest.html#cfn-appflow-connectorprofile-connectoroauthrequest-authcode", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "RedirectUri": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectoroauthrequest.html#cfn-appflow-connectorprofile-connectoroauthrequest-redirecturi", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.ConnectorProfileConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileconfig.html", - "Properties": { - "ConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileconfig.html#cfn-appflow-connectorprofile-connectorprofileconfig-connectorprofilecredentials", - "Required": false, - "Type": "ConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "ConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileconfig.html#cfn-appflow-connectorprofile-connectorprofileconfig-connectorprofileproperties", - "Required": false, - "Type": "ConnectorProfileProperties", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.ConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html", - "Properties": { - "Amplitude": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-amplitude", - "Required": false, - "Type": "AmplitudeConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "CustomConnector": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-customconnector", - "Required": false, - "Type": "CustomConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "Datadog": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-datadog", - "Required": false, - "Type": "DatadogConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "Dynatrace": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-dynatrace", - "Required": false, - "Type": "DynatraceConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "GoogleAnalytics": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-googleanalytics", - "Required": false, - "Type": "GoogleAnalyticsConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "InforNexus": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-infornexus", - "Required": false, - "Type": "InforNexusConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "Marketo": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-marketo", - "Required": false, - "Type": "MarketoConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "Redshift": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-redshift", - "Required": false, - "Type": "RedshiftConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "SAPOData": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-sapodata", - "Required": false, - "Type": "SAPODataConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "Salesforce": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-salesforce", - "Required": false, - "Type": "SalesforceConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "ServiceNow": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-servicenow", - "Required": false, - "Type": "ServiceNowConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "Singular": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-singular", - "Required": false, - "Type": "SingularConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "Slack": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-slack", - "Required": false, - "Type": "SlackConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "Snowflake": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-snowflake", - "Required": false, - "Type": "SnowflakeConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "Trendmicro": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-trendmicro", - "Required": false, - "Type": "TrendmicroConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "Veeva": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-veeva", - "Required": false, - "Type": "VeevaConnectorProfileCredentials", - "UpdateType": "Mutable" - }, - "Zendesk": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofilecredentials.html#cfn-appflow-connectorprofile-connectorprofilecredentials-zendesk", - "Required": false, - "Type": "ZendeskConnectorProfileCredentials", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.ConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html", - "Properties": { - "CustomConnector": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-customconnector", - "Required": false, - "Type": "CustomConnectorProfileProperties", - "UpdateType": "Mutable" - }, - "Datadog": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-datadog", - "Required": false, - "Type": "DatadogConnectorProfileProperties", - "UpdateType": "Mutable" - }, - "Dynatrace": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-dynatrace", - "Required": false, - "Type": "DynatraceConnectorProfileProperties", - "UpdateType": "Mutable" - }, - "InforNexus": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-infornexus", - "Required": false, - "Type": "InforNexusConnectorProfileProperties", - "UpdateType": "Mutable" - }, - "Marketo": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-marketo", - "Required": false, - "Type": "MarketoConnectorProfileProperties", - "UpdateType": "Mutable" - }, - "Redshift": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-redshift", - "Required": false, - "Type": "RedshiftConnectorProfileProperties", - "UpdateType": "Mutable" - }, - "SAPOData": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-sapodata", - "Required": false, - "Type": "SAPODataConnectorProfileProperties", - "UpdateType": "Mutable" - }, - "Salesforce": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-salesforce", - "Required": false, - "Type": "SalesforceConnectorProfileProperties", - "UpdateType": "Mutable" - }, - "ServiceNow": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-servicenow", - "Required": false, - "Type": "ServiceNowConnectorProfileProperties", - "UpdateType": "Mutable" - }, - "Slack": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-slack", - "Required": false, - "Type": "SlackConnectorProfileProperties", - "UpdateType": "Mutable" - }, - "Snowflake": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-snowflake", - "Required": false, - "Type": "SnowflakeConnectorProfileProperties", - "UpdateType": "Mutable" - }, - "Veeva": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-veeva", - "Required": false, - "Type": "VeevaConnectorProfileProperties", - "UpdateType": "Mutable" - }, - "Zendesk": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileproperties.html#cfn-appflow-connectorprofile-connectorprofileproperties-zendesk", - "Required": false, - "Type": "ZendeskConnectorProfileProperties", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.CustomAuthCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customauthcredentials.html", - "Properties": { - "CredentialsMap": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customauthcredentials.html#cfn-appflow-connectorprofile-customauthcredentials-credentialsmap", - "Required": false, - "Type": "CredentialsMap", - "UpdateType": "Mutable" - }, - "CustomAuthenticationType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customauthcredentials.html#cfn-appflow-connectorprofile-customauthcredentials-customauthenticationtype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.CustomConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customconnectorprofilecredentials.html", - "Properties": { - "ApiKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customconnectorprofilecredentials.html#cfn-appflow-connectorprofile-customconnectorprofilecredentials-apikey", - "Required": false, - "Type": "ApiKeyCredentials", - "UpdateType": "Mutable" - }, - "AuthenticationType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customconnectorprofilecredentials.html#cfn-appflow-connectorprofile-customconnectorprofilecredentials-authenticationtype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Basic": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customconnectorprofilecredentials.html#cfn-appflow-connectorprofile-customconnectorprofilecredentials-basic", - "Required": false, - "Type": "BasicAuthCredentials", - "UpdateType": "Mutable" - }, - "Custom": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customconnectorprofilecredentials.html#cfn-appflow-connectorprofile-customconnectorprofilecredentials-custom", - "Required": false, - "Type": "CustomAuthCredentials", - "UpdateType": "Mutable" - }, - "Oauth2": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customconnectorprofilecredentials.html#cfn-appflow-connectorprofile-customconnectorprofilecredentials-oauth2", - "Required": false, - "Type": "OAuth2Credentials", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.CustomConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customconnectorprofileproperties.html", - "Properties": { - "OAuth2Properties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customconnectorprofileproperties.html#cfn-appflow-connectorprofile-customconnectorprofileproperties-oauth2properties", - "Required": false, - "Type": "OAuth2Properties", - "UpdateType": "Mutable" - }, - "ProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customconnectorprofileproperties.html#cfn-appflow-connectorprofile-customconnectorprofileproperties-profileproperties", - "Required": false, - "Type": "ProfileProperties", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.DatadogConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-datadogconnectorprofilecredentials.html", - "Properties": { - "ApiKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-datadogconnectorprofilecredentials.html#cfn-appflow-connectorprofile-datadogconnectorprofilecredentials-apikey", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ApplicationKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-datadogconnectorprofilecredentials.html#cfn-appflow-connectorprofile-datadogconnectorprofilecredentials-applicationkey", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.DatadogConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-datadogconnectorprofileproperties.html", - "Properties": { - "InstanceUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-datadogconnectorprofileproperties.html#cfn-appflow-connectorprofile-datadogconnectorprofileproperties-instanceurl", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.DynatraceConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-dynatraceconnectorprofilecredentials.html", - "Properties": { - "ApiToken": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-dynatraceconnectorprofilecredentials.html#cfn-appflow-connectorprofile-dynatraceconnectorprofilecredentials-apitoken", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.DynatraceConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-dynatraceconnectorprofileproperties.html", - "Properties": { - "InstanceUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-dynatraceconnectorprofileproperties.html#cfn-appflow-connectorprofile-dynatraceconnectorprofileproperties-instanceurl", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.GoogleAnalyticsConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-googleanalyticsconnectorprofilecredentials.html", - "Properties": { - "AccessToken": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-googleanalyticsconnectorprofilecredentials.html#cfn-appflow-connectorprofile-googleanalyticsconnectorprofilecredentials-accesstoken", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ClientId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-googleanalyticsconnectorprofilecredentials.html#cfn-appflow-connectorprofile-googleanalyticsconnectorprofilecredentials-clientid", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ClientSecret": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-googleanalyticsconnectorprofilecredentials.html#cfn-appflow-connectorprofile-googleanalyticsconnectorprofilecredentials-clientsecret", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ConnectorOAuthRequest": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-googleanalyticsconnectorprofilecredentials.html#cfn-appflow-connectorprofile-googleanalyticsconnectorprofilecredentials-connectoroauthrequest", - "Required": false, - "Type": "ConnectorOAuthRequest", - "UpdateType": "Mutable" - }, - "RefreshToken": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-googleanalyticsconnectorprofilecredentials.html#cfn-appflow-connectorprofile-googleanalyticsconnectorprofilecredentials-refreshtoken", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.InforNexusConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-infornexusconnectorprofilecredentials.html", - "Properties": { - "AccessKeyId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-infornexusconnectorprofilecredentials.html#cfn-appflow-connectorprofile-infornexusconnectorprofilecredentials-accesskeyid", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Datakey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-infornexusconnectorprofilecredentials.html#cfn-appflow-connectorprofile-infornexusconnectorprofilecredentials-datakey", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "SecretAccessKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-infornexusconnectorprofilecredentials.html#cfn-appflow-connectorprofile-infornexusconnectorprofilecredentials-secretaccesskey", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "UserId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-infornexusconnectorprofilecredentials.html#cfn-appflow-connectorprofile-infornexusconnectorprofilecredentials-userid", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.InforNexusConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-infornexusconnectorprofileproperties.html", - "Properties": { - "InstanceUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-infornexusconnectorprofileproperties.html#cfn-appflow-connectorprofile-infornexusconnectorprofileproperties-instanceurl", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.MarketoConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-marketoconnectorprofilecredentials.html", - "Properties": { - "AccessToken": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-marketoconnectorprofilecredentials.html#cfn-appflow-connectorprofile-marketoconnectorprofilecredentials-accesstoken", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ClientId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-marketoconnectorprofilecredentials.html#cfn-appflow-connectorprofile-marketoconnectorprofilecredentials-clientid", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ClientSecret": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-marketoconnectorprofilecredentials.html#cfn-appflow-connectorprofile-marketoconnectorprofilecredentials-clientsecret", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ConnectorOAuthRequest": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-marketoconnectorprofilecredentials.html#cfn-appflow-connectorprofile-marketoconnectorprofilecredentials-connectoroauthrequest", - "Required": false, - "Type": "ConnectorOAuthRequest", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.MarketoConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-marketoconnectorprofileproperties.html", - "Properties": { - "InstanceUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-marketoconnectorprofileproperties.html#cfn-appflow-connectorprofile-marketoconnectorprofileproperties-instanceurl", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.OAuth2Credentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauth2credentials.html", - "Properties": { - "AccessToken": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauth2credentials.html#cfn-appflow-connectorprofile-oauth2credentials-accesstoken", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ClientId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauth2credentials.html#cfn-appflow-connectorprofile-oauth2credentials-clientid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ClientSecret": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauth2credentials.html#cfn-appflow-connectorprofile-oauth2credentials-clientsecret", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "OAuthRequest": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauth2credentials.html#cfn-appflow-connectorprofile-oauth2credentials-oauthrequest", - "Required": false, - "Type": "ConnectorOAuthRequest", - "UpdateType": "Mutable" - }, - "RefreshToken": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauth2credentials.html#cfn-appflow-connectorprofile-oauth2credentials-refreshtoken", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.OAuth2Properties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauth2properties.html", - "Properties": { - "OAuth2GrantType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauth2properties.html#cfn-appflow-connectorprofile-oauth2properties-oauth2granttype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "TokenUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauth2properties.html#cfn-appflow-connectorprofile-oauth2properties-tokenurl", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "TokenUrlCustomProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauth2properties.html#cfn-appflow-connectorprofile-oauth2properties-tokenurlcustomproperties", - "Required": false, - "Type": "TokenUrlCustomProperties", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.OAuthProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauthproperties.html", - "Properties": { - "AuthCodeUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauthproperties.html#cfn-appflow-connectorprofile-oauthproperties-authcodeurl", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "OAuthScopes": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauthproperties.html#cfn-appflow-connectorprofile-oauthproperties-oauthscopes", - "DuplicatesAllowed": false, - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "TokenUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauthproperties.html#cfn-appflow-connectorprofile-oauthproperties-tokenurl", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofilecredentials.html", - "Properties": { - "Password": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofilecredentials.html#cfn-appflow-connectorprofile-redshiftconnectorprofilecredentials-password", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Username": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofilecredentials.html#cfn-appflow-connectorprofile-redshiftconnectorprofilecredentials-username", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html", - "Properties": { - "BucketName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-bucketname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "BucketPrefix": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-bucketprefix", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ClusterIdentifier": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-clusteridentifier", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DataApiRoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-dataapirolearn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DatabaseName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-databasename", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DatabaseUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-databaseurl", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "IsRedshiftServerless": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-isredshiftserverless", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "RoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-rolearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "WorkgroupName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-workgroupname", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.SAPODataConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-sapodataconnectorprofilecredentials.html", - "Properties": { - "BasicAuthCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-sapodataconnectorprofilecredentials.html#cfn-appflow-connectorprofile-sapodataconnectorprofilecredentials-basicauthcredentials", - "Required": false, - "Type": "BasicAuthCredentials", - "UpdateType": "Mutable" - }, - "OAuthCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-sapodataconnectorprofilecredentials.html#cfn-appflow-connectorprofile-sapodataconnectorprofilecredentials-oauthcredentials", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.SAPODataConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-sapodataconnectorprofileproperties.html", - "Properties": { - "ApplicationHostUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-sapodataconnectorprofileproperties.html#cfn-appflow-connectorprofile-sapodataconnectorprofileproperties-applicationhosturl", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ApplicationServicePath": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-sapodataconnectorprofileproperties.html#cfn-appflow-connectorprofile-sapodataconnectorprofileproperties-applicationservicepath", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ClientNumber": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-sapodataconnectorprofileproperties.html#cfn-appflow-connectorprofile-sapodataconnectorprofileproperties-clientnumber", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "LogonLanguage": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-sapodataconnectorprofileproperties.html#cfn-appflow-connectorprofile-sapodataconnectorprofileproperties-logonlanguage", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "OAuthProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-sapodataconnectorprofileproperties.html#cfn-appflow-connectorprofile-sapodataconnectorprofileproperties-oauthproperties", - "Required": false, - "Type": "OAuthProperties", - "UpdateType": "Mutable" - }, - "PortNumber": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-sapodataconnectorprofileproperties.html#cfn-appflow-connectorprofile-sapodataconnectorprofileproperties-portnumber", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "PrivateLinkServiceName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-sapodataconnectorprofileproperties.html#cfn-appflow-connectorprofile-sapodataconnectorprofileproperties-privatelinkservicename", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.SalesforceConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-salesforceconnectorprofilecredentials.html", - "Properties": { - "AccessToken": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-salesforceconnectorprofilecredentials.html#cfn-appflow-connectorprofile-salesforceconnectorprofilecredentials-accesstoken", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ClientCredentialsArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-salesforceconnectorprofilecredentials.html#cfn-appflow-connectorprofile-salesforceconnectorprofilecredentials-clientcredentialsarn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ConnectorOAuthRequest": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-salesforceconnectorprofilecredentials.html#cfn-appflow-connectorprofile-salesforceconnectorprofilecredentials-connectoroauthrequest", - "Required": false, - "Type": "ConnectorOAuthRequest", - "UpdateType": "Mutable" - }, - "RefreshToken": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-salesforceconnectorprofilecredentials.html#cfn-appflow-connectorprofile-salesforceconnectorprofilecredentials-refreshtoken", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.SalesforceConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-salesforceconnectorprofileproperties.html", - "Properties": { - "InstanceUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-salesforceconnectorprofileproperties.html#cfn-appflow-connectorprofile-salesforceconnectorprofileproperties-instanceurl", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "isSandboxEnvironment": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-salesforceconnectorprofileproperties.html#cfn-appflow-connectorprofile-salesforceconnectorprofileproperties-issandboxenvironment", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.ServiceNowConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-servicenowconnectorprofilecredentials.html", - "Properties": { - "Password": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-servicenowconnectorprofilecredentials.html#cfn-appflow-connectorprofile-servicenowconnectorprofilecredentials-password", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Username": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-servicenowconnectorprofilecredentials.html#cfn-appflow-connectorprofile-servicenowconnectorprofilecredentials-username", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.ServiceNowConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-servicenowconnectorprofileproperties.html", - "Properties": { - "InstanceUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-servicenowconnectorprofileproperties.html#cfn-appflow-connectorprofile-servicenowconnectorprofileproperties-instanceurl", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.SingularConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-singularconnectorprofilecredentials.html", - "Properties": { - "ApiKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-singularconnectorprofilecredentials.html#cfn-appflow-connectorprofile-singularconnectorprofilecredentials-apikey", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.SlackConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-slackconnectorprofilecredentials.html", - "Properties": { - "AccessToken": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-slackconnectorprofilecredentials.html#cfn-appflow-connectorprofile-slackconnectorprofilecredentials-accesstoken", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ClientId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-slackconnectorprofilecredentials.html#cfn-appflow-connectorprofile-slackconnectorprofilecredentials-clientid", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ClientSecret": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-slackconnectorprofilecredentials.html#cfn-appflow-connectorprofile-slackconnectorprofilecredentials-clientsecret", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ConnectorOAuthRequest": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-slackconnectorprofilecredentials.html#cfn-appflow-connectorprofile-slackconnectorprofilecredentials-connectoroauthrequest", - "Required": false, - "Type": "ConnectorOAuthRequest", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.SlackConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-slackconnectorprofileproperties.html", - "Properties": { - "InstanceUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-slackconnectorprofileproperties.html#cfn-appflow-connectorprofile-slackconnectorprofileproperties-instanceurl", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.SnowflakeConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-snowflakeconnectorprofilecredentials.html", - "Properties": { - "Password": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-snowflakeconnectorprofilecredentials.html#cfn-appflow-connectorprofile-snowflakeconnectorprofilecredentials-password", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Username": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-snowflakeconnectorprofilecredentials.html#cfn-appflow-connectorprofile-snowflakeconnectorprofilecredentials-username", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.SnowflakeConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-snowflakeconnectorprofileproperties.html", - "Properties": { - "AccountName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-snowflakeconnectorprofileproperties.html#cfn-appflow-connectorprofile-snowflakeconnectorprofileproperties-accountname", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "BucketName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-snowflakeconnectorprofileproperties.html#cfn-appflow-connectorprofile-snowflakeconnectorprofileproperties-bucketname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "BucketPrefix": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-snowflakeconnectorprofileproperties.html#cfn-appflow-connectorprofile-snowflakeconnectorprofileproperties-bucketprefix", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "PrivateLinkServiceName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-snowflakeconnectorprofileproperties.html#cfn-appflow-connectorprofile-snowflakeconnectorprofileproperties-privatelinkservicename", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Region": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-snowflakeconnectorprofileproperties.html#cfn-appflow-connectorprofile-snowflakeconnectorprofileproperties-region", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Stage": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-snowflakeconnectorprofileproperties.html#cfn-appflow-connectorprofile-snowflakeconnectorprofileproperties-stage", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Warehouse": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-snowflakeconnectorprofileproperties.html#cfn-appflow-connectorprofile-snowflakeconnectorprofileproperties-warehouse", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.TrendmicroConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-trendmicroconnectorprofilecredentials.html", - "Properties": { - "ApiSecretKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-trendmicroconnectorprofilecredentials.html#cfn-appflow-connectorprofile-trendmicroconnectorprofilecredentials-apisecretkey", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.VeevaConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-veevaconnectorprofilecredentials.html", - "Properties": { - "Password": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-veevaconnectorprofilecredentials.html#cfn-appflow-connectorprofile-veevaconnectorprofilecredentials-password", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Username": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-veevaconnectorprofilecredentials.html#cfn-appflow-connectorprofile-veevaconnectorprofilecredentials-username", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.VeevaConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-veevaconnectorprofileproperties.html", - "Properties": { - "InstanceUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-veevaconnectorprofileproperties.html#cfn-appflow-connectorprofile-veevaconnectorprofileproperties-instanceurl", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.ZendeskConnectorProfileCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-zendeskconnectorprofilecredentials.html", - "Properties": { - "AccessToken": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-zendeskconnectorprofilecredentials.html#cfn-appflow-connectorprofile-zendeskconnectorprofilecredentials-accesstoken", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ClientId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-zendeskconnectorprofilecredentials.html#cfn-appflow-connectorprofile-zendeskconnectorprofilecredentials-clientid", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ClientSecret": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-zendeskconnectorprofilecredentials.html#cfn-appflow-connectorprofile-zendeskconnectorprofilecredentials-clientsecret", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ConnectorOAuthRequest": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-zendeskconnectorprofilecredentials.html#cfn-appflow-connectorprofile-zendeskconnectorprofilecredentials-connectoroauthrequest", - "Required": false, - "Type": "ConnectorOAuthRequest", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::ConnectorProfile.ZendeskConnectorProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-zendeskconnectorprofileproperties.html", - "Properties": { - "InstanceUrl": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-zendeskconnectorprofileproperties.html#cfn-appflow-connectorprofile-zendeskconnectorprofileproperties-instanceurl", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.AggregationConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-aggregationconfig.html", - "Properties": { - "AggregationType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-aggregationconfig.html#cfn-appflow-flow-aggregationconfig-aggregationtype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "TargetFileSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-aggregationconfig.html#cfn-appflow-flow-aggregationconfig-targetfilesize", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.AmplitudeSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-amplitudesourceproperties.html", - "Properties": { - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-amplitudesourceproperties.html#cfn-appflow-flow-amplitudesourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.ConnectorOperator": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html", - "Properties": { - "Amplitude": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-amplitude", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "CustomConnector": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-customconnector", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Datadog": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-datadog", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Dynatrace": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-dynatrace", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "GoogleAnalytics": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-googleanalytics", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "InforNexus": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-infornexus", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Marketo": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-marketo", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "S3": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-s3", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "SAPOData": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-sapodata", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Salesforce": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-salesforce", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ServiceNow": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-servicenow", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Singular": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-singular", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Slack": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-slack", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Trendmicro": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-trendmicro", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Veeva": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-veeva", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Zendesk": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-connectoroperator.html#cfn-appflow-flow-connectoroperator-zendesk", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.CustomConnectorDestinationProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customconnectordestinationproperties.html", - "Properties": { - "CustomProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customconnectordestinationproperties.html#cfn-appflow-flow-customconnectordestinationproperties-customproperties", - "Required": false, - "Type": "CustomProperties", - "UpdateType": "Mutable" - }, - "EntityName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customconnectordestinationproperties.html#cfn-appflow-flow-customconnectordestinationproperties-entityname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ErrorHandlingConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customconnectordestinationproperties.html#cfn-appflow-flow-customconnectordestinationproperties-errorhandlingconfig", - "Required": false, - "Type": "ErrorHandlingConfig", - "UpdateType": "Mutable" - }, - "IdFieldNames": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customconnectordestinationproperties.html#cfn-appflow-flow-customconnectordestinationproperties-idfieldnames", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "WriteOperationType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customconnectordestinationproperties.html#cfn-appflow-flow-customconnectordestinationproperties-writeoperationtype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.CustomConnectorSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customconnectorsourceproperties.html", - "Properties": { - "CustomProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customconnectorsourceproperties.html#cfn-appflow-flow-customconnectorsourceproperties-customproperties", - "Required": false, - "Type": "CustomProperties", - "UpdateType": "Mutable" - }, - "EntityName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customconnectorsourceproperties.html#cfn-appflow-flow-customconnectorsourceproperties-entityname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.DatadogSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-datadogsourceproperties.html", - "Properties": { - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-datadogsourceproperties.html#cfn-appflow-flow-datadogsourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.DestinationConnectorProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationconnectorproperties.html", - "Properties": { - "CustomConnector": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationconnectorproperties.html#cfn-appflow-flow-destinationconnectorproperties-customconnector", - "Required": false, - "Type": "CustomConnectorDestinationProperties", - "UpdateType": "Mutable" - }, - "EventBridge": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationconnectorproperties.html#cfn-appflow-flow-destinationconnectorproperties-eventbridge", - "Required": false, - "Type": "EventBridgeDestinationProperties", - "UpdateType": "Mutable" - }, - "LookoutMetrics": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationconnectorproperties.html#cfn-appflow-flow-destinationconnectorproperties-lookoutmetrics", - "Required": false, - "Type": "LookoutMetricsDestinationProperties", - "UpdateType": "Mutable" - }, - "Marketo": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationconnectorproperties.html#cfn-appflow-flow-destinationconnectorproperties-marketo", - "Required": false, - "Type": "MarketoDestinationProperties", - "UpdateType": "Mutable" - }, - "Redshift": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationconnectorproperties.html#cfn-appflow-flow-destinationconnectorproperties-redshift", - "Required": false, - "Type": "RedshiftDestinationProperties", - "UpdateType": "Mutable" - }, - "S3": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationconnectorproperties.html#cfn-appflow-flow-destinationconnectorproperties-s3", - "Required": false, - "Type": "S3DestinationProperties", - "UpdateType": "Mutable" - }, - "SAPOData": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationconnectorproperties.html#cfn-appflow-flow-destinationconnectorproperties-sapodata", - "Required": false, - "Type": "SAPODataDestinationProperties", - "UpdateType": "Mutable" - }, - "Salesforce": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationconnectorproperties.html#cfn-appflow-flow-destinationconnectorproperties-salesforce", - "Required": false, - "Type": "SalesforceDestinationProperties", - "UpdateType": "Mutable" - }, - "Snowflake": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationconnectorproperties.html#cfn-appflow-flow-destinationconnectorproperties-snowflake", - "Required": false, - "Type": "SnowflakeDestinationProperties", - "UpdateType": "Mutable" - }, - "Upsolver": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationconnectorproperties.html#cfn-appflow-flow-destinationconnectorproperties-upsolver", - "Required": false, - "Type": "UpsolverDestinationProperties", - "UpdateType": "Mutable" - }, - "Zendesk": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationconnectorproperties.html#cfn-appflow-flow-destinationconnectorproperties-zendesk", - "Required": false, - "Type": "ZendeskDestinationProperties", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.DestinationFlowConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationflowconfig.html", - "Properties": { - "ApiVersion": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationflowconfig.html#cfn-appflow-flow-destinationflowconfig-apiversion", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ConnectorProfileName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationflowconfig.html#cfn-appflow-flow-destinationflowconfig-connectorprofilename", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ConnectorType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationflowconfig.html#cfn-appflow-flow-destinationflowconfig-connectortype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "DestinationConnectorProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-destinationflowconfig.html#cfn-appflow-flow-destinationflowconfig-destinationconnectorproperties", - "Required": true, - "Type": "DestinationConnectorProperties", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.DynatraceSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-dynatracesourceproperties.html", - "Properties": { - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-dynatracesourceproperties.html#cfn-appflow-flow-dynatracesourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.ErrorHandlingConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-errorhandlingconfig.html", - "Properties": { - "BucketName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-errorhandlingconfig.html#cfn-appflow-flow-errorhandlingconfig-bucketname", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "BucketPrefix": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-errorhandlingconfig.html#cfn-appflow-flow-errorhandlingconfig-bucketprefix", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "FailOnFirstError": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-errorhandlingconfig.html#cfn-appflow-flow-errorhandlingconfig-failonfirsterror", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.EventBridgeDestinationProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-eventbridgedestinationproperties.html", - "Properties": { - "ErrorHandlingConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-eventbridgedestinationproperties.html#cfn-appflow-flow-eventbridgedestinationproperties-errorhandlingconfig", - "Required": false, - "Type": "ErrorHandlingConfig", - "UpdateType": "Mutable" - }, - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-eventbridgedestinationproperties.html#cfn-appflow-flow-eventbridgedestinationproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.GlueDataCatalog": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-gluedatacatalog.html", - "Properties": { - "DatabaseName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-gluedatacatalog.html#cfn-appflow-flow-gluedatacatalog-databasename", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "RoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-gluedatacatalog.html#cfn-appflow-flow-gluedatacatalog-rolearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "TablePrefix": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-gluedatacatalog.html#cfn-appflow-flow-gluedatacatalog-tableprefix", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.GoogleAnalyticsSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-googleanalyticssourceproperties.html", - "Properties": { - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-googleanalyticssourceproperties.html#cfn-appflow-flow-googleanalyticssourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.IncrementalPullConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-incrementalpullconfig.html", - "Properties": { - "DatetimeTypeFieldName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-incrementalpullconfig.html#cfn-appflow-flow-incrementalpullconfig-datetimetypefieldname", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.InforNexusSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-infornexussourceproperties.html", - "Properties": { - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-infornexussourceproperties.html#cfn-appflow-flow-infornexussourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.LookoutMetricsDestinationProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-lookoutmetricsdestinationproperties.html", - "Properties": { - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-lookoutmetricsdestinationproperties.html#cfn-appflow-flow-lookoutmetricsdestinationproperties-object", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.MarketoDestinationProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-marketodestinationproperties.html", - "Properties": { - "ErrorHandlingConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-marketodestinationproperties.html#cfn-appflow-flow-marketodestinationproperties-errorhandlingconfig", - "Required": false, - "Type": "ErrorHandlingConfig", - "UpdateType": "Mutable" - }, - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-marketodestinationproperties.html#cfn-appflow-flow-marketodestinationproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.MarketoSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-marketosourceproperties.html", - "Properties": { - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-marketosourceproperties.html#cfn-appflow-flow-marketosourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.MetadataCatalogConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-metadatacatalogconfig.html", - "Properties": { - "GlueDataCatalog": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-metadatacatalogconfig.html#cfn-appflow-flow-metadatacatalogconfig-gluedatacatalog", - "Required": false, - "Type": "GlueDataCatalog", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.PrefixConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-prefixconfig.html", - "Properties": { - "PathPrefixHierarchy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-prefixconfig.html#cfn-appflow-flow-prefixconfig-pathprefixhierarchy", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "PrefixFormat": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-prefixconfig.html#cfn-appflow-flow-prefixconfig-prefixformat", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "PrefixType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-prefixconfig.html#cfn-appflow-flow-prefixconfig-prefixtype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.RedshiftDestinationProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-redshiftdestinationproperties.html", - "Properties": { - "BucketPrefix": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-redshiftdestinationproperties.html#cfn-appflow-flow-redshiftdestinationproperties-bucketprefix", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ErrorHandlingConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-redshiftdestinationproperties.html#cfn-appflow-flow-redshiftdestinationproperties-errorhandlingconfig", - "Required": false, - "Type": "ErrorHandlingConfig", - "UpdateType": "Mutable" - }, - "IntermediateBucketName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-redshiftdestinationproperties.html#cfn-appflow-flow-redshiftdestinationproperties-intermediatebucketname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-redshiftdestinationproperties.html#cfn-appflow-flow-redshiftdestinationproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.S3DestinationProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3destinationproperties.html", - "Properties": { - "BucketName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3destinationproperties.html#cfn-appflow-flow-s3destinationproperties-bucketname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "BucketPrefix": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3destinationproperties.html#cfn-appflow-flow-s3destinationproperties-bucketprefix", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "S3OutputFormatConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3destinationproperties.html#cfn-appflow-flow-s3destinationproperties-s3outputformatconfig", - "Required": false, - "Type": "S3OutputFormatConfig", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.S3InputFormatConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3inputformatconfig.html", - "Properties": { - "S3InputFileType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3inputformatconfig.html#cfn-appflow-flow-s3inputformatconfig-s3inputfiletype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.S3OutputFormatConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3outputformatconfig.html", - "Properties": { - "AggregationConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3outputformatconfig.html#cfn-appflow-flow-s3outputformatconfig-aggregationconfig", - "Required": false, - "Type": "AggregationConfig", - "UpdateType": "Mutable" - }, - "FileType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3outputformatconfig.html#cfn-appflow-flow-s3outputformatconfig-filetype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "PrefixConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3outputformatconfig.html#cfn-appflow-flow-s3outputformatconfig-prefixconfig", - "Required": false, - "Type": "PrefixConfig", - "UpdateType": "Mutable" - }, - "PreserveSourceDataTyping": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3outputformatconfig.html#cfn-appflow-flow-s3outputformatconfig-preservesourcedatatyping", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.S3SourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3sourceproperties.html", - "Properties": { - "BucketName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3sourceproperties.html#cfn-appflow-flow-s3sourceproperties-bucketname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "BucketPrefix": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3sourceproperties.html#cfn-appflow-flow-s3sourceproperties-bucketprefix", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "S3InputFormatConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-s3sourceproperties.html#cfn-appflow-flow-s3sourceproperties-s3inputformatconfig", - "Required": false, - "Type": "S3InputFormatConfig", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.SAPODataDestinationProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sapodatadestinationproperties.html", - "Properties": { - "ErrorHandlingConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sapodatadestinationproperties.html#cfn-appflow-flow-sapodatadestinationproperties-errorhandlingconfig", - "Required": false, - "Type": "ErrorHandlingConfig", - "UpdateType": "Mutable" - }, - "IdFieldNames": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sapodatadestinationproperties.html#cfn-appflow-flow-sapodatadestinationproperties-idfieldnames", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "ObjectPath": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sapodatadestinationproperties.html#cfn-appflow-flow-sapodatadestinationproperties-objectpath", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "SuccessResponseHandlingConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sapodatadestinationproperties.html#cfn-appflow-flow-sapodatadestinationproperties-successresponsehandlingconfig", - "Required": false, - "Type": "SuccessResponseHandlingConfig", - "UpdateType": "Mutable" - }, - "WriteOperationType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sapodatadestinationproperties.html#cfn-appflow-flow-sapodatadestinationproperties-writeoperationtype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.SAPODataSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sapodatasourceproperties.html", - "Properties": { - "ObjectPath": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sapodatasourceproperties.html#cfn-appflow-flow-sapodatasourceproperties-objectpath", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.SalesforceDestinationProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcedestinationproperties.html", - "Properties": { - "DataTransferApi": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcedestinationproperties.html#cfn-appflow-flow-salesforcedestinationproperties-datatransferapi", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ErrorHandlingConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcedestinationproperties.html#cfn-appflow-flow-salesforcedestinationproperties-errorhandlingconfig", - "Required": false, - "Type": "ErrorHandlingConfig", - "UpdateType": "Mutable" - }, - "IdFieldNames": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcedestinationproperties.html#cfn-appflow-flow-salesforcedestinationproperties-idfieldnames", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcedestinationproperties.html#cfn-appflow-flow-salesforcedestinationproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "WriteOperationType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcedestinationproperties.html#cfn-appflow-flow-salesforcedestinationproperties-writeoperationtype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.SalesforceSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcesourceproperties.html", - "Properties": { - "DataTransferApi": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcesourceproperties.html#cfn-appflow-flow-salesforcesourceproperties-datatransferapi", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "EnableDynamicFieldUpdate": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcesourceproperties.html#cfn-appflow-flow-salesforcesourceproperties-enabledynamicfieldupdate", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "IncludeDeletedRecords": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcesourceproperties.html#cfn-appflow-flow-salesforcesourceproperties-includedeletedrecords", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcesourceproperties.html#cfn-appflow-flow-salesforcesourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.ScheduledTriggerProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-scheduledtriggerproperties.html", - "Properties": { - "DataPullMode": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-scheduledtriggerproperties.html#cfn-appflow-flow-scheduledtriggerproperties-datapullmode", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "FirstExecutionFrom": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-scheduledtriggerproperties.html#cfn-appflow-flow-scheduledtriggerproperties-firstexecutionfrom", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "FlowErrorDeactivationThreshold": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-scheduledtriggerproperties.html#cfn-appflow-flow-scheduledtriggerproperties-flowerrordeactivationthreshold", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "ScheduleEndTime": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-scheduledtriggerproperties.html#cfn-appflow-flow-scheduledtriggerproperties-scheduleendtime", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "ScheduleExpression": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-scheduledtriggerproperties.html#cfn-appflow-flow-scheduledtriggerproperties-scheduleexpression", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ScheduleOffset": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-scheduledtriggerproperties.html#cfn-appflow-flow-scheduledtriggerproperties-scheduleoffset", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "ScheduleStartTime": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-scheduledtriggerproperties.html#cfn-appflow-flow-scheduledtriggerproperties-schedulestarttime", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "TimeZone": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-scheduledtriggerproperties.html#cfn-appflow-flow-scheduledtriggerproperties-timezone", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.ServiceNowSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-servicenowsourceproperties.html", - "Properties": { - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-servicenowsourceproperties.html#cfn-appflow-flow-servicenowsourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.SingularSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-singularsourceproperties.html", - "Properties": { - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-singularsourceproperties.html#cfn-appflow-flow-singularsourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.SlackSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-slacksourceproperties.html", - "Properties": { - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-slacksourceproperties.html#cfn-appflow-flow-slacksourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.SnowflakeDestinationProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-snowflakedestinationproperties.html", - "Properties": { - "BucketPrefix": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-snowflakedestinationproperties.html#cfn-appflow-flow-snowflakedestinationproperties-bucketprefix", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ErrorHandlingConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-snowflakedestinationproperties.html#cfn-appflow-flow-snowflakedestinationproperties-errorhandlingconfig", - "Required": false, - "Type": "ErrorHandlingConfig", - "UpdateType": "Mutable" - }, - "IntermediateBucketName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-snowflakedestinationproperties.html#cfn-appflow-flow-snowflakedestinationproperties-intermediatebucketname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-snowflakedestinationproperties.html#cfn-appflow-flow-snowflakedestinationproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.SourceConnectorProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html", - "Properties": { - "Amplitude": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-amplitude", - "Required": false, - "Type": "AmplitudeSourceProperties", - "UpdateType": "Mutable" - }, - "CustomConnector": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-customconnector", - "Required": false, - "Type": "CustomConnectorSourceProperties", - "UpdateType": "Mutable" - }, - "Datadog": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-datadog", - "Required": false, - "Type": "DatadogSourceProperties", - "UpdateType": "Mutable" - }, - "Dynatrace": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-dynatrace", - "Required": false, - "Type": "DynatraceSourceProperties", - "UpdateType": "Mutable" - }, - "GoogleAnalytics": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-googleanalytics", - "Required": false, - "Type": "GoogleAnalyticsSourceProperties", - "UpdateType": "Mutable" - }, - "InforNexus": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-infornexus", - "Required": false, - "Type": "InforNexusSourceProperties", - "UpdateType": "Mutable" - }, - "Marketo": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-marketo", - "Required": false, - "Type": "MarketoSourceProperties", - "UpdateType": "Mutable" - }, - "S3": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-s3", - "Required": false, - "Type": "S3SourceProperties", - "UpdateType": "Mutable" - }, - "SAPOData": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-sapodata", - "Required": false, - "Type": "SAPODataSourceProperties", - "UpdateType": "Mutable" - }, - "Salesforce": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-salesforce", - "Required": false, - "Type": "SalesforceSourceProperties", - "UpdateType": "Mutable" - }, - "ServiceNow": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-servicenow", - "Required": false, - "Type": "ServiceNowSourceProperties", - "UpdateType": "Mutable" - }, - "Singular": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-singular", - "Required": false, - "Type": "SingularSourceProperties", - "UpdateType": "Mutable" - }, - "Slack": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-slack", - "Required": false, - "Type": "SlackSourceProperties", - "UpdateType": "Mutable" - }, - "Trendmicro": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-trendmicro", - "Required": false, - "Type": "TrendmicroSourceProperties", - "UpdateType": "Mutable" - }, - "Veeva": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-veeva", - "Required": false, - "Type": "VeevaSourceProperties", - "UpdateType": "Mutable" - }, - "Zendesk": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceconnectorproperties.html#cfn-appflow-flow-sourceconnectorproperties-zendesk", - "Required": false, - "Type": "ZendeskSourceProperties", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.SourceFlowConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceflowconfig.html", - "Properties": { - "ApiVersion": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceflowconfig.html#cfn-appflow-flow-sourceflowconfig-apiversion", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ConnectorProfileName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceflowconfig.html#cfn-appflow-flow-sourceflowconfig-connectorprofilename", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ConnectorType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceflowconfig.html#cfn-appflow-flow-sourceflowconfig-connectortype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "IncrementalPullConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceflowconfig.html#cfn-appflow-flow-sourceflowconfig-incrementalpullconfig", - "Required": false, - "Type": "IncrementalPullConfig", - "UpdateType": "Mutable" - }, - "SourceConnectorProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sourceflowconfig.html#cfn-appflow-flow-sourceflowconfig-sourceconnectorproperties", - "Required": true, - "Type": "SourceConnectorProperties", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.SuccessResponseHandlingConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-successresponsehandlingconfig.html", - "Properties": { - "BucketName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-successresponsehandlingconfig.html#cfn-appflow-flow-successresponsehandlingconfig-bucketname", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "BucketPrefix": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-successresponsehandlingconfig.html#cfn-appflow-flow-successresponsehandlingconfig-bucketprefix", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.Task": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-task.html", - "Properties": { - "ConnectorOperator": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-task.html#cfn-appflow-flow-task-connectoroperator", - "Required": false, - "Type": "ConnectorOperator", - "UpdateType": "Mutable" - }, - "DestinationField": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-task.html#cfn-appflow-flow-task-destinationfield", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "SourceFields": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-task.html#cfn-appflow-flow-task-sourcefields", - "PrimitiveItemType": "String", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - }, - "TaskProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-task.html#cfn-appflow-flow-task-taskproperties", - "ItemType": "TaskPropertiesObject", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "TaskType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-task.html#cfn-appflow-flow-task-tasktype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.TaskPropertiesObject": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-taskpropertiesobject.html", - "Properties": { - "Key": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-taskpropertiesobject.html#cfn-appflow-flow-taskpropertiesobject-key", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-taskpropertiesobject.html#cfn-appflow-flow-taskpropertiesobject-value", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.TrendmicroSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-trendmicrosourceproperties.html", - "Properties": { - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-trendmicrosourceproperties.html#cfn-appflow-flow-trendmicrosourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.TriggerConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-triggerconfig.html", - "Properties": { - "TriggerProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-triggerconfig.html#cfn-appflow-flow-triggerconfig-triggerproperties", - "Required": false, - "Type": "ScheduledTriggerProperties", - "UpdateType": "Mutable" - }, - "TriggerType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-triggerconfig.html#cfn-appflow-flow-triggerconfig-triggertype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.UpsolverDestinationProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-upsolverdestinationproperties.html", - "Properties": { - "BucketName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-upsolverdestinationproperties.html#cfn-appflow-flow-upsolverdestinationproperties-bucketname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "BucketPrefix": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-upsolverdestinationproperties.html#cfn-appflow-flow-upsolverdestinationproperties-bucketprefix", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "S3OutputFormatConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-upsolverdestinationproperties.html#cfn-appflow-flow-upsolverdestinationproperties-s3outputformatconfig", - "Required": true, - "Type": "UpsolverS3OutputFormatConfig", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.UpsolverS3OutputFormatConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-upsolvers3outputformatconfig.html", - "Properties": { - "AggregationConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-upsolvers3outputformatconfig.html#cfn-appflow-flow-upsolvers3outputformatconfig-aggregationconfig", - "Required": false, - "Type": "AggregationConfig", - "UpdateType": "Mutable" - }, - "FileType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-upsolvers3outputformatconfig.html#cfn-appflow-flow-upsolvers3outputformatconfig-filetype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "PrefixConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-upsolvers3outputformatconfig.html#cfn-appflow-flow-upsolvers3outputformatconfig-prefixconfig", - "Required": true, - "Type": "PrefixConfig", - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.VeevaSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-veevasourceproperties.html", - "Properties": { - "DocumentType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-veevasourceproperties.html#cfn-appflow-flow-veevasourceproperties-documenttype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "IncludeAllVersions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-veevasourceproperties.html#cfn-appflow-flow-veevasourceproperties-includeallversions", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "IncludeRenditions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-veevasourceproperties.html#cfn-appflow-flow-veevasourceproperties-includerenditions", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "IncludeSourceFiles": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-veevasourceproperties.html#cfn-appflow-flow-veevasourceproperties-includesourcefiles", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-veevasourceproperties.html#cfn-appflow-flow-veevasourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.ZendeskDestinationProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-zendeskdestinationproperties.html", - "Properties": { - "ErrorHandlingConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-zendeskdestinationproperties.html#cfn-appflow-flow-zendeskdestinationproperties-errorhandlingconfig", - "Required": false, - "Type": "ErrorHandlingConfig", - "UpdateType": "Mutable" - }, - "IdFieldNames": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-zendeskdestinationproperties.html#cfn-appflow-flow-zendeskdestinationproperties-idfieldnames", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-zendeskdestinationproperties.html#cfn-appflow-flow-zendeskdestinationproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "WriteOperationType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-zendeskdestinationproperties.html#cfn-appflow-flow-zendeskdestinationproperties-writeoperationtype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::AppFlow::Flow.ZendeskSourceProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-zendesksourceproperties.html", - "Properties": { - "Object": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-zendesksourceproperties.html#cfn-appflow-flow-zendesksourceproperties-object", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - } - }, - "ResourceSpecificationVersion": "100.0.0", - "ResourceTypes": { - "AWS::AppFlow::ConnectorProfile": { - "Attributes": { - "ConnectorProfileArn": { - "PrimitiveType": "String" - }, - "CredentialsArn": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-connectorprofile.html", - "Properties": { - "ConnectionMode": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-connectorprofile.html#cfn-appflow-connectorprofile-connectionmode", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ConnectorLabel": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-connectorprofile.html#cfn-appflow-connectorprofile-connectorlabel", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ConnectorProfileConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-connectorprofile.html#cfn-appflow-connectorprofile-connectorprofileconfig", - "Required": false, - "Type": "ConnectorProfileConfig", - "UpdateType": "Mutable" - }, - "ConnectorProfileName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-connectorprofile.html#cfn-appflow-connectorprofile-connectorprofilename", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "ConnectorType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-connectorprofile.html#cfn-appflow-connectorprofile-connectortype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "KMSArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-connectorprofile.html#cfn-appflow-connectorprofile-kmsarn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - } - } - }, - "AWS::AppFlow::Flow": { - "Attributes": { - "FlowArn": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html", - "Properties": { - "Description": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-description", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DestinationFlowConfigList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-destinationflowconfiglist", - "ItemType": "DestinationFlowConfig", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - }, - "FlowName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-flowname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "KMSArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-kmsarn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "MetadataCatalogConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-metadatacatalogconfig", - "Required": false, - "Type": "MetadataCatalogConfig", - "UpdateType": "Mutable" - }, - "SourceFlowConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-sourceflowconfig", - "Required": true, - "Type": "SourceFlowConfig", - "UpdateType": "Mutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-tags", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Tasks": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-tasks", - "ItemType": "Task", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - }, - "TriggerConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-triggerconfig", - "Required": true, - "Type": "TriggerConfig", - "UpdateType": "Mutable" - } - } - } - } -} diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/.000_AWS_GameLift.rejected.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/.000_AWS_GameLift.rejected.json deleted file mode 100644 index 75dfd18245921..0000000000000 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/.000_AWS_GameLift.rejected.json +++ /dev/null @@ -1,940 +0,0 @@ -{ - "PropertyTypes": { - "AWS::GameLift::Alias.RoutingStrategy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-alias-routingstrategy.html", - "Properties": { - "FleetId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-alias-routingstrategy.html#cfn-gamelift-alias-routingstrategy-fleetid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Message": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-alias-routingstrategy.html#cfn-gamelift-alias-routingstrategy-message", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-alias-routingstrategy.html#cfn-gamelift-alias-routingstrategy-type", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::Build.S3Location": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-build-storagelocation.html", - "Properties": { - "Bucket": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-build-storagelocation.html#cfn-gamelift-build-storage-bucket", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Key": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-build-storagelocation.html#cfn-gamelift-build-storage-key", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "ObjectVersion": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-build-storagelocation.html#cfn-gamelift-build-object-verison", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "RoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-build-storagelocation.html#cfn-gamelift-build-storage-rolearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - } - } - }, - "AWS::GameLift::Fleet.AnywhereConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-anywhereconfiguration.html", - "Properties": { - "Cost": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-anywhereconfiguration.html#cfn-gamelift-fleet-anywhereconfiguration-cost", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::Fleet.CertificateConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-certificateconfiguration.html", - "Properties": { - "CertificateType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-certificateconfiguration.html#cfn-gamelift-fleet-certificateconfiguration-certificatetype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - } - } - }, - "AWS::GameLift::Fleet.IpPermission": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-ippermission.html", - "Properties": { - "FromPort": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-ippermission.html#cfn-gamelift-fleet-ippermission-fromport", - "PrimitiveType": "Integer", - "Required": true, - "UpdateType": "Mutable" - }, - "IpRange": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-ippermission.html#cfn-gamelift-fleet-ippermission-iprange", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Protocol": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-ippermission.html#cfn-gamelift-fleet-ippermission-protocol", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ToPort": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-ippermission.html#cfn-gamelift-fleet-ippermission-toport", - "PrimitiveType": "Integer", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::Fleet.LocationCapacity": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-locationcapacity.html", - "Properties": { - "DesiredEC2Instances": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-locationcapacity.html#cfn-gamelift-fleet-locationcapacity-desiredec2instances", - "PrimitiveType": "Integer", - "Required": true, - "UpdateType": "Mutable" - }, - "MaxSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-locationcapacity.html#cfn-gamelift-fleet-locationcapacity-maxsize", - "PrimitiveType": "Integer", - "Required": true, - "UpdateType": "Mutable" - }, - "MinSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-locationcapacity.html#cfn-gamelift-fleet-locationcapacity-minsize", - "PrimitiveType": "Integer", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::Fleet.LocationConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-locationconfiguration.html", - "Properties": { - "Location": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-locationconfiguration.html#cfn-gamelift-fleet-locationconfiguration-location", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "LocationCapacity": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-locationconfiguration.html#cfn-gamelift-fleet-locationconfiguration-locationcapacity", - "Required": false, - "Type": "LocationCapacity", - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::Fleet.ResourceCreationLimitPolicy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-resourcecreationlimitpolicy.html", - "Properties": { - "NewGameSessionsPerCreator": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-resourcecreationlimitpolicy.html#cfn-gamelift-fleet-resourcecreationlimitpolicy-newgamesessionspercreator", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "PolicyPeriodInMinutes": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-resourcecreationlimitpolicy.html#cfn-gamelift-fleet-resourcecreationlimitpolicy-policyperiodinminutes", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::Fleet.RuntimeConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-runtimeconfiguration.html", - "Properties": { - "GameSessionActivationTimeoutSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-runtimeconfiguration.html#cfn-gamelift-fleet-runtimeconfiguration-gamesessionactivationtimeoutseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "MaxConcurrentGameSessionActivations": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-runtimeconfiguration.html#cfn-gamelift-fleet-runtimeconfiguration-maxconcurrentgamesessionactivations", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "ServerProcesses": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-runtimeconfiguration.html#cfn-gamelift-fleet-runtimeconfiguration-serverprocesses", - "ItemType": "ServerProcess", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::Fleet.ServerProcess": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-serverprocess.html", - "Properties": { - "ConcurrentExecutions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-serverprocess.html#cfn-gamelift-fleet-serverprocess-concurrentexecutions", - "PrimitiveType": "Integer", - "Required": true, - "UpdateType": "Mutable" - }, - "LaunchPath": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-serverprocess.html#cfn-gamelift-fleet-serverprocess-launchpath", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Parameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-serverprocess.html#cfn-gamelift-fleet-serverprocess-parameters", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::GameServerGroup.AutoScalingPolicy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-autoscalingpolicy.html", - "Properties": { - "EstimatedInstanceWarmup": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-autoscalingpolicy.html#cfn-gamelift-gameservergroup-autoscalingpolicy-estimatedinstancewarmup", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "TargetTrackingConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-autoscalingpolicy.html#cfn-gamelift-gameservergroup-autoscalingpolicy-targettrackingconfiguration", - "Required": true, - "Type": "TargetTrackingConfiguration", - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::GameServerGroup.InstanceDefinition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-instancedefinition.html", - "Properties": { - "InstanceType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-instancedefinition.html#cfn-gamelift-gameservergroup-instancedefinition-instancetype", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "WeightedCapacity": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-instancedefinition.html#cfn-gamelift-gameservergroup-instancedefinition-weightedcapacity", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::GameServerGroup.LaunchTemplate": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-launchtemplate.html", - "Properties": { - "LaunchTemplateId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-launchtemplate.html#cfn-gamelift-gameservergroup-launchtemplate-launchtemplateid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "LaunchTemplateName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-launchtemplate.html#cfn-gamelift-gameservergroup-launchtemplate-launchtemplatename", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Version": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-launchtemplate.html#cfn-gamelift-gameservergroup-launchtemplate-version", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::GameServerGroup.TargetTrackingConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-targettrackingconfiguration.html", - "Properties": { - "TargetValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gameservergroup-targettrackingconfiguration.html#cfn-gamelift-gameservergroup-targettrackingconfiguration-targetvalue", - "PrimitiveType": "Double", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::GameSessionQueue.Destination": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gamesessionqueue-destination.html", - "Properties": { - "DestinationArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gamesessionqueue-destination.html#cfn-gamelift-gamesessionqueue-destination-destinationarn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::GameSessionQueue.FilterConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gamesessionqueue-filterconfiguration.html", - "Properties": { - "AllowedLocations": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gamesessionqueue-filterconfiguration.html#cfn-gamelift-gamesessionqueue-filterconfiguration-allowedlocations", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::GameSessionQueue.PlayerLatencyPolicy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gamesessionqueue-playerlatencypolicy.html", - "Properties": { - "MaximumIndividualPlayerLatencyMilliseconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gamesessionqueue-playerlatencypolicy.html#cfn-gamelift-gamesessionqueue-playerlatencypolicy-maximumindividualplayerlatencymilliseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "PolicyDurationSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gamesessionqueue-playerlatencypolicy.html#cfn-gamelift-gamesessionqueue-playerlatencypolicy-policydurationseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::GameSessionQueue.PriorityConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gamesessionqueue-priorityconfiguration.html", - "Properties": { - "LocationOrder": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gamesessionqueue-priorityconfiguration.html#cfn-gamelift-gamesessionqueue-priorityconfiguration-locationorder", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "PriorityOrder": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-gamesessionqueue-priorityconfiguration.html#cfn-gamelift-gamesessionqueue-priorityconfiguration-priorityorder", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::MatchmakingConfiguration.GameProperty": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-matchmakingconfiguration-gameproperty.html", - "Properties": { - "Key": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-matchmakingconfiguration-gameproperty.html#cfn-gamelift-matchmakingconfiguration-gameproperty-key", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-matchmakingconfiguration-gameproperty.html#cfn-gamelift-matchmakingconfiguration-gameproperty-value", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::Script.S3Location": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-script-s3location.html", - "Properties": { - "Bucket": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-script-s3location.html#cfn-gamelift-script-s3location-bucket", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Key": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-script-s3location.html#cfn-gamelift-script-s3location-key", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ObjectVersion": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-script-s3location.html#cfn-gamelift-script-s3location-objectversion", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "RoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-script-s3location.html#cfn-gamelift-script-s3location-rolearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - } - }, - "ResourceSpecificationVersion": "100.0.0", - "ResourceTypes": { - "AWS::GameLift::Alias": { - "Attributes": { - "AliasId": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-alias.html", - "Properties": { - "Description": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-alias.html#cfn-gamelift-alias-description", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-alias.html#cfn-gamelift-alias-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "RoutingStrategy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-alias.html#cfn-gamelift-alias-routingstrategy", - "Required": true, - "Type": "RoutingStrategy", - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::Build": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-build.html", - "Properties": { - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-build.html#cfn-gamelift-build-name", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "OperatingSystem": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-build.html#cfn-gamelift-build-operatingsystem", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "StorageLocation": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-build.html#cfn-gamelift-build-storagelocation", - "Required": false, - "Type": "S3Location", - "UpdateType": "Immutable" - }, - "Version": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-build.html#cfn-gamelift-build-version", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::Fleet": { - "Attributes": { - "FleetId": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html", - "Properties": { - "AnywhereConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-anywhereconfiguration", - "Required": false, - "UpdateType": "Mutable" - }, - "BuildId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-buildid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "CertificateConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-certificateconfiguration", - "Required": false, - "Type": "CertificateConfiguration", - "UpdateType": "Immutable" - }, - "ComputeType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-computetype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Description": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-description", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DesiredEC2Instances": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-desiredec2instances", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "EC2InboundPermissions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-ec2inboundpermissions", - "ItemType": "IpPermission", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "EC2InstanceType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-ec2instancetype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "FleetType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-fleettype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "InstanceRoleARN": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-instancerolearn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Locations": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-locations", - "ItemType": "LocationConfiguration", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "MaxSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-maxsize", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "MetricGroups": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-metricgroups", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "MinSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-minsize", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "NewGameSessionProtectionPolicy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-newgamesessionprotectionpolicy", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "PeerVpcAwsAccountId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-peervpcawsaccountid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "PeerVpcId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-peervpcid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "ResourceCreationLimitPolicy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-resourcecreationlimitpolicy", - "Required": false, - "Type": "ResourceCreationLimitPolicy", - "UpdateType": "Mutable" - }, - "RuntimeConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-runtimeconfiguration", - "Required": false, - "Type": "RuntimeConfiguration", - "UpdateType": "Mutable" - }, - "ScriptId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-scriptid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - } - } - }, - "AWS::GameLift::GameServerGroup": { - "Attributes": { - "AutoScalingGroupArn": { - "PrimitiveType": "String" - }, - "GameServerGroupArn": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html", - "Properties": { - "AutoScalingPolicy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-autoscalingpolicy", - "Required": false, - "Type": "AutoScalingPolicy", - "UpdateType": "Mutable" - }, - "BalancingStrategy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-balancingstrategy", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DeleteOption": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-deleteoption", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "GameServerGroupName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-gameservergroupname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "GameServerProtectionPolicy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-gameserverprotectionpolicy", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "InstanceDefinitions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-instancedefinitions", - "ItemType": "InstanceDefinition", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - }, - "LaunchTemplate": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-launchtemplate", - "Required": true, - "Type": "LaunchTemplate", - "UpdateType": "Mutable" - }, - "MaxSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-maxsize", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "MinSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-minsize", - "PrimitiveType": "Double", - "Required": false, - "UpdateType": "Mutable" - }, - "RoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-rolearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-tags", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "VpcSubnets": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-vpcsubnets", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::GameSessionQueue": { - "Attributes": { - "Arn": { - "PrimitiveType": "String" - }, - "Name": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gamesessionqueue.html", - "Properties": { - "CustomEventData": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gamesessionqueue.html#cfn-gamelift-gamesessionqueue-customeventdata", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Destinations": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gamesessionqueue.html#cfn-gamelift-gamesessionqueue-destinations", - "ItemType": "Destination", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "FilterConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gamesessionqueue.html#cfn-gamelift-gamesessionqueue-filterconfiguration", - "Required": false, - "Type": "FilterConfiguration", - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gamesessionqueue.html#cfn-gamelift-gamesessionqueue-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "NotificationTarget": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gamesessionqueue.html#cfn-gamelift-gamesessionqueue-notificationtarget", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "PlayerLatencyPolicies": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gamesessionqueue.html#cfn-gamelift-gamesessionqueue-playerlatencypolicies", - "ItemType": "PlayerLatencyPolicy", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "PriorityConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gamesessionqueue.html#cfn-gamelift-gamesessionqueue-priorityconfiguration", - "Required": false, - "Type": "PriorityConfiguration", - "UpdateType": "Mutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gamesessionqueue.html#cfn-gamelift-gamesessionqueue-tags", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "TimeoutInSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gamesessionqueue.html#cfn-gamelift-gamesessionqueue-timeoutinseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::Location": { - "Attributes": { - "LocationArn": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-location.html", - "Properties": { - "LocationName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-location.html#cfn-gamelift-location-locationname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-location.html#cfn-gamelift-location-tags", - "DuplicatesAllowed": false, - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::MatchmakingConfiguration": { - "Attributes": { - "Arn": { - "PrimitiveType": "String" - }, - "Name": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html", - "Properties": { - "AcceptanceRequired": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-acceptancerequired", - "PrimitiveType": "Boolean", - "Required": true, - "UpdateType": "Mutable" - }, - "AcceptanceTimeoutSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-acceptancetimeoutseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "AdditionalPlayerCount": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-additionalplayercount", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "BackfillMode": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-backfillmode", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "CustomEventData": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-customeventdata", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Description": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-description", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "FlexMatchMode": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-flexmatchmode", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "GameProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-gameproperties", - "ItemType": "GameProperty", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "GameSessionData": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-gamesessiondata", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "GameSessionQueueArns": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-gamesessionqueuearns", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "NotificationTarget": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-notificationtarget", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "RequestTimeoutSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-requesttimeoutseconds", - "PrimitiveType": "Integer", - "Required": true, - "UpdateType": "Mutable" - }, - "RuleSetName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-rulesetname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingconfiguration.html#cfn-gamelift-matchmakingconfiguration-tags", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::MatchmakingRuleSet": { - "Attributes": { - "Arn": { - "PrimitiveType": "String" - }, - "Name": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingruleset.html", - "Properties": { - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingruleset.html#cfn-gamelift-matchmakingruleset-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "RuleSetBody": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingruleset.html#cfn-gamelift-matchmakingruleset-rulesetbody", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-matchmakingruleset.html#cfn-gamelift-matchmakingruleset-tags", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::GameLift::Script": { - "Attributes": { - "Arn": { - "PrimitiveType": "String" - }, - "Id": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-script.html", - "Properties": { - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-script.html#cfn-gamelift-script-name", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "StorageLocation": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-script.html#cfn-gamelift-script-storagelocation", - "Required": true, - "Type": "S3Location", - "UpdateType": "Mutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-script.html#cfn-gamelift-script-tags", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Version": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-script.html#cfn-gamelift-script-version", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - } - } -} diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/.000_AWS_Pipes.rejected.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/.000_AWS_Pipes.rejected.json deleted file mode 100644 index 4dbb08131d898..0000000000000 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/.000_AWS_Pipes.rejected.json +++ /dev/null @@ -1,1365 +0,0 @@ -{ - "PropertyTypes": { - "AWS::Pipes::Pipe.AwsVpcConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-awsvpcconfiguration.html", - "Properties": { - "AssignPublicIp": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-awsvpcconfiguration.html#cfn-pipes-pipe-awsvpcconfiguration-assignpublicip", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "SecurityGroups": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-awsvpcconfiguration.html#cfn-pipes-pipe-awsvpcconfiguration-securitygroups", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Subnets": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-awsvpcconfiguration.html#cfn-pipes-pipe-awsvpcconfiguration-subnets", - "PrimitiveItemType": "String", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.BatchArrayProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batcharrayproperties.html", - "Properties": { - "Size": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batcharrayproperties.html#cfn-pipes-pipe-batcharrayproperties-size", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.BatchContainerOverrides": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchcontaineroverrides.html", - "Properties": { - "Command": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchcontaineroverrides.html#cfn-pipes-pipe-batchcontaineroverrides-command", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Environment": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchcontaineroverrides.html#cfn-pipes-pipe-batchcontaineroverrides-environment", - "ItemType": "BatchEnvironmentVariable", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "InstanceType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchcontaineroverrides.html#cfn-pipes-pipe-batchcontaineroverrides-instancetype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ResourceRequirements": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchcontaineroverrides.html#cfn-pipes-pipe-batchcontaineroverrides-resourcerequirements", - "ItemType": "BatchResourceRequirement", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.BatchEnvironmentVariable": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchenvironmentvariable.html", - "Properties": { - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchenvironmentvariable.html#cfn-pipes-pipe-batchenvironmentvariable-name", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchenvironmentvariable.html#cfn-pipes-pipe-batchenvironmentvariable-value", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.BatchJobDependency": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchjobdependency.html", - "Properties": { - "JobId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchjobdependency.html#cfn-pipes-pipe-batchjobdependency-jobid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchjobdependency.html#cfn-pipes-pipe-batchjobdependency-type", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.BatchParametersMap": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchparametersmap.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::Pipes::Pipe.BatchResourceRequirement": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchresourcerequirement.html", - "Properties": { - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchresourcerequirement.html#cfn-pipes-pipe-batchresourcerequirement-type", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchresourcerequirement.html#cfn-pipes-pipe-batchresourcerequirement-value", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.BatchRetryStrategy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchretrystrategy.html", - "Properties": { - "Attempts": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchretrystrategy.html#cfn-pipes-pipe-batchretrystrategy-attempts", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.CapacityProviderStrategyItem": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-capacityproviderstrategyitem.html", - "Properties": { - "Base": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-capacityproviderstrategyitem.html#cfn-pipes-pipe-capacityproviderstrategyitem-base", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "CapacityProvider": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-capacityproviderstrategyitem.html#cfn-pipes-pipe-capacityproviderstrategyitem-capacityprovider", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Weight": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-capacityproviderstrategyitem.html#cfn-pipes-pipe-capacityproviderstrategyitem-weight", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.DeadLetterConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-deadletterconfig.html", - "Properties": { - "Arn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-deadletterconfig.html#cfn-pipes-pipe-deadletterconfig-arn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.EcsContainerOverride": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html", - "Properties": { - "Command": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-command", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Cpu": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-cpu", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "Environment": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-environment", - "ItemType": "EcsEnvironmentVariable", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "EnvironmentFiles": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-environmentfiles", - "ItemType": "EcsEnvironmentFile", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Memory": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-memory", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "MemoryReservation": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-memoryreservation", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-name", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ResourceRequirements": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-resourcerequirements", - "ItemType": "EcsResourceRequirement", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.EcsEnvironmentFile": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsenvironmentfile.html", - "Properties": { - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsenvironmentfile.html#cfn-pipes-pipe-ecsenvironmentfile-type", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsenvironmentfile.html#cfn-pipes-pipe-ecsenvironmentfile-value", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.EcsEnvironmentVariable": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsenvironmentvariable.html", - "Properties": { - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsenvironmentvariable.html#cfn-pipes-pipe-ecsenvironmentvariable-name", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsenvironmentvariable.html#cfn-pipes-pipe-ecsenvironmentvariable-value", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.EcsEphemeralStorage": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsephemeralstorage.html", - "Properties": { - "SizeInGiB": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsephemeralstorage.html#cfn-pipes-pipe-ecsephemeralstorage-sizeingib", - "PrimitiveType": "Integer", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.EcsInferenceAcceleratorOverride": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsinferenceacceleratoroverride.html", - "Properties": { - "DeviceName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsinferenceacceleratoroverride.html#cfn-pipes-pipe-ecsinferenceacceleratoroverride-devicename", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DeviceType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsinferenceacceleratoroverride.html#cfn-pipes-pipe-ecsinferenceacceleratoroverride-devicetype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.EcsResourceRequirement": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsresourcerequirement.html", - "Properties": { - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsresourcerequirement.html#cfn-pipes-pipe-ecsresourcerequirement-type", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsresourcerequirement.html#cfn-pipes-pipe-ecsresourcerequirement-value", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.EcsTaskOverride": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html", - "Properties": { - "ContainerOverrides": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-containeroverrides", - "ItemType": "EcsContainerOverride", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Cpu": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-cpu", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "EphemeralStorage": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-ephemeralstorage", - "Required": false, - "Type": "EcsEphemeralStorage", - "UpdateType": "Mutable" - }, - "ExecutionRoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-executionrolearn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "InferenceAcceleratorOverrides": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-inferenceacceleratoroverrides", - "ItemType": "EcsInferenceAcceleratorOverride", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Memory": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-memory", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "TaskRoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-taskrolearn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.Filter": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-filter.html", - "Properties": { - "Pattern": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-filter.html#cfn-pipes-pipe-filter-pattern", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.FilterCriteria": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-filtercriteria.html", - "Properties": { - "Filters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-filtercriteria.html#cfn-pipes-pipe-filtercriteria-filters", - "ItemType": "Filter", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.HeaderParametersMap": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-headerparametersmap.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::Pipes::Pipe.MQBrokerAccessCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-mqbrokeraccesscredentials.html" - }, - "AWS::Pipes::Pipe.MSKAccessCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-mskaccesscredentials.html" - }, - "AWS::Pipes::Pipe.NetworkConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-networkconfiguration.html", - "Properties": { - "AwsvpcConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-networkconfiguration.html#cfn-pipes-pipe-networkconfiguration-awsvpcconfiguration", - "Required": false, - "Type": "AwsVpcConfiguration", - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeEnrichmentHttpParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmenthttpparameters.html", - "Properties": { - "HeaderParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmenthttpparameters.html#cfn-pipes-pipe-pipeenrichmenthttpparameters-headerparameters", - "Required": false, - "Type": "HeaderParametersMap", - "UpdateType": "Mutable" - }, - "PathParameterValues": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmenthttpparameters.html#cfn-pipes-pipe-pipeenrichmenthttpparameters-pathparametervalues", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "QueryStringParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmenthttpparameters.html#cfn-pipes-pipe-pipeenrichmenthttpparameters-querystringparameters", - "Required": false, - "Type": "QueryStringParametersMap", - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeEnrichmentParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmentparameters.html", - "Properties": { - "HttpParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmentparameters.html#cfn-pipes-pipe-pipeenrichmentparameters-httpparameters", - "Required": false, - "Type": "PipeEnrichmentHttpParameters", - "UpdateType": "Mutable" - }, - "InputTemplate": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmentparameters.html#cfn-pipes-pipe-pipeenrichmentparameters-inputtemplate", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeSourceActiveMQBrokerParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceactivemqbrokerparameters.html", - "Properties": { - "BatchSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceactivemqbrokerparameters.html#cfn-pipes-pipe-pipesourceactivemqbrokerparameters-batchsize", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "Credentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceactivemqbrokerparameters.html#cfn-pipes-pipe-pipesourceactivemqbrokerparameters-credentials", - "Required": true, - "UpdateType": "Mutable" - }, - "MaximumBatchingWindowInSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceactivemqbrokerparameters.html#cfn-pipes-pipe-pipesourceactivemqbrokerparameters-maximumbatchingwindowinseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "QueueName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceactivemqbrokerparameters.html#cfn-pipes-pipe-pipesourceactivemqbrokerparameters-queuename", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - } - } - }, - "AWS::Pipes::Pipe.PipeSourceDynamoDBStreamParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html", - "Properties": { - "BatchSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-batchsize", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "DeadLetterConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-deadletterconfig", - "Required": false, - "Type": "DeadLetterConfig", - "UpdateType": "Mutable" - }, - "MaximumBatchingWindowInSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-maximumbatchingwindowinseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "MaximumRecordAgeInSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-maximumrecordageinseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "MaximumRetryAttempts": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-maximumretryattempts", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "OnPartialBatchItemFailure": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-onpartialbatchitemfailure", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ParallelizationFactor": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-parallelizationfactor", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "StartingPosition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-startingposition", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - } - } - }, - "AWS::Pipes::Pipe.PipeSourceKinesisStreamParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html", - "Properties": { - "BatchSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-batchsize", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "DeadLetterConfig": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-deadletterconfig", - "Required": false, - "Type": "DeadLetterConfig", - "UpdateType": "Mutable" - }, - "MaximumBatchingWindowInSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-maximumbatchingwindowinseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "MaximumRecordAgeInSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-maximumrecordageinseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "MaximumRetryAttempts": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-maximumretryattempts", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "OnPartialBatchItemFailure": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-onpartialbatchitemfailure", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ParallelizationFactor": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-parallelizationfactor", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "StartingPosition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-startingposition", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "StartingPositionTimestamp": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-startingpositiontimestamp", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - } - } - }, - "AWS::Pipes::Pipe.PipeSourceManagedStreamingKafkaParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html", - "Properties": { - "BatchSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html#cfn-pipes-pipe-pipesourcemanagedstreamingkafkaparameters-batchsize", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "ConsumerGroupID": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html#cfn-pipes-pipe-pipesourcemanagedstreamingkafkaparameters-consumergroupid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "Credentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html#cfn-pipes-pipe-pipesourcemanagedstreamingkafkaparameters-credentials", - "Required": false, - "UpdateType": "Mutable" - }, - "MaximumBatchingWindowInSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html#cfn-pipes-pipe-pipesourcemanagedstreamingkafkaparameters-maximumbatchingwindowinseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "StartingPosition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html#cfn-pipes-pipe-pipesourcemanagedstreamingkafkaparameters-startingposition", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "TopicName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html#cfn-pipes-pipe-pipesourcemanagedstreamingkafkaparameters-topicname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - } - } - }, - "AWS::Pipes::Pipe.PipeSourceParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html", - "Properties": { - "ActiveMQBrokerParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-activemqbrokerparameters", - "Required": false, - "Type": "PipeSourceActiveMQBrokerParameters", - "UpdateType": "Mutable" - }, - "DynamoDBStreamParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-dynamodbstreamparameters", - "Required": false, - "Type": "PipeSourceDynamoDBStreamParameters", - "UpdateType": "Mutable" - }, - "FilterCriteria": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-filtercriteria", - "Required": false, - "Type": "FilterCriteria", - "UpdateType": "Mutable" - }, - "KinesisStreamParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-kinesisstreamparameters", - "Required": false, - "Type": "PipeSourceKinesisStreamParameters", - "UpdateType": "Mutable" - }, - "ManagedStreamingKafkaParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-managedstreamingkafkaparameters", - "Required": false, - "Type": "PipeSourceManagedStreamingKafkaParameters", - "UpdateType": "Mutable" - }, - "RabbitMQBrokerParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-rabbitmqbrokerparameters", - "Required": false, - "Type": "PipeSourceRabbitMQBrokerParameters", - "UpdateType": "Mutable" - }, - "SelfManagedKafkaParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-selfmanagedkafkaparameters", - "Required": false, - "Type": "PipeSourceSelfManagedKafkaParameters", - "UpdateType": "Mutable" - }, - "SqsQueueParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-sqsqueueparameters", - "Required": false, - "Type": "PipeSourceSqsQueueParameters", - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeSourceRabbitMQBrokerParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcerabbitmqbrokerparameters.html", - "Properties": { - "BatchSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcerabbitmqbrokerparameters.html#cfn-pipes-pipe-pipesourcerabbitmqbrokerparameters-batchsize", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "Credentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcerabbitmqbrokerparameters.html#cfn-pipes-pipe-pipesourcerabbitmqbrokerparameters-credentials", - "Required": true, - "UpdateType": "Mutable" - }, - "MaximumBatchingWindowInSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcerabbitmqbrokerparameters.html#cfn-pipes-pipe-pipesourcerabbitmqbrokerparameters-maximumbatchingwindowinseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "QueueName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcerabbitmqbrokerparameters.html#cfn-pipes-pipe-pipesourcerabbitmqbrokerparameters-queuename", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "VirtualHost": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcerabbitmqbrokerparameters.html#cfn-pipes-pipe-pipesourcerabbitmqbrokerparameters-virtualhost", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - } - } - }, - "AWS::Pipes::Pipe.PipeSourceSelfManagedKafkaParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html", - "Properties": { - "AdditionalBootstrapServers": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-additionalbootstrapservers", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "BatchSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-batchsize", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "ConsumerGroupID": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-consumergroupid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Credentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-credentials", - "Required": false, - "UpdateType": "Mutable" - }, - "MaximumBatchingWindowInSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-maximumbatchingwindowinseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "ServerRootCaCertificate": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-serverrootcacertificate", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "StartingPosition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-startingposition", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "TopicName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-topicname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Vpc": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-vpc", - "Required": false, - "Type": "SelfManagedKafkaAccessConfigurationVpc", - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeSourceSqsQueueParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcesqsqueueparameters.html", - "Properties": { - "BatchSize": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcesqsqueueparameters.html#cfn-pipes-pipe-pipesourcesqsqueueparameters-batchsize", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "MaximumBatchingWindowInSeconds": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcesqsqueueparameters.html#cfn-pipes-pipe-pipesourcesqsqueueparameters-maximumbatchingwindowinseconds", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeTargetBatchJobParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html", - "Properties": { - "ArrayProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-arrayproperties", - "Required": false, - "Type": "BatchArrayProperties", - "UpdateType": "Mutable" - }, - "ContainerOverrides": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-containeroverrides", - "Required": false, - "Type": "BatchContainerOverrides", - "UpdateType": "Mutable" - }, - "DependsOn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-dependson", - "ItemType": "BatchJobDependency", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "JobDefinition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-jobdefinition", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "JobName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-jobname", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Parameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-parameters", - "Required": false, - "Type": "BatchParametersMap", - "UpdateType": "Mutable" - }, - "RetryStrategy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-retrystrategy", - "Required": false, - "Type": "BatchRetryStrategy", - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeTargetCloudWatchLogsParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetcloudwatchlogsparameters.html", - "Properties": { - "LogStreamName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetcloudwatchlogsparameters.html#cfn-pipes-pipe-pipetargetcloudwatchlogsparameters-logstreamname", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Timestamp": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetcloudwatchlogsparameters.html#cfn-pipes-pipe-pipetargetcloudwatchlogsparameters-timestamp", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeTargetEcsTaskParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html", - "Properties": { - "CapacityProviderStrategy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-capacityproviderstrategy", - "ItemType": "CapacityProviderStrategyItem", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "EnableECSManagedTags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-enableecsmanagedtags", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "EnableExecuteCommand": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-enableexecutecommand", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - }, - "Group": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-group", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "LaunchType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-launchtype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "NetworkConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-networkconfiguration", - "Required": false, - "Type": "NetworkConfiguration", - "UpdateType": "Mutable" - }, - "Overrides": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-overrides", - "Required": false, - "Type": "EcsTaskOverride", - "UpdateType": "Mutable" - }, - "PlacementConstraints": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-placementconstraints", - "ItemType": "PlacementConstraint", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "PlacementStrategy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-placementstrategy", - "ItemType": "PlacementStrategy", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "PlatformVersion": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-platformversion", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "PropagateTags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-propagatetags", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "ReferenceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-referenceid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-tags", - "ItemType": "Tag", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "TaskCount": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-taskcount", - "PrimitiveType": "Integer", - "Required": false, - "UpdateType": "Mutable" - }, - "TaskDefinitionArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-taskdefinitionarn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeTargetEventBridgeEventBusParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargeteventbridgeeventbusparameters.html", - "Properties": { - "DetailType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargeteventbridgeeventbusparameters.html#cfn-pipes-pipe-pipetargeteventbridgeeventbusparameters-detailtype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "EndpointId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargeteventbridgeeventbusparameters.html#cfn-pipes-pipe-pipetargeteventbridgeeventbusparameters-endpointid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Resources": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargeteventbridgeeventbusparameters.html#cfn-pipes-pipe-pipetargeteventbridgeeventbusparameters-resources", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Source": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargeteventbridgeeventbusparameters.html#cfn-pipes-pipe-pipetargeteventbridgeeventbusparameters-source", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Time": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargeteventbridgeeventbusparameters.html#cfn-pipes-pipe-pipetargeteventbridgeeventbusparameters-time", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeTargetHttpParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargethttpparameters.html", - "Properties": { - "HeaderParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargethttpparameters.html#cfn-pipes-pipe-pipetargethttpparameters-headerparameters", - "Required": false, - "Type": "HeaderParametersMap", - "UpdateType": "Mutable" - }, - "PathParameterValues": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargethttpparameters.html#cfn-pipes-pipe-pipetargethttpparameters-pathparametervalues", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "QueryStringParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargethttpparameters.html#cfn-pipes-pipe-pipetargethttpparameters-querystringparameters", - "Required": false, - "Type": "QueryStringParametersMap", - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeTargetKinesisStreamParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetkinesisstreamparameters.html", - "Properties": { - "PartitionKey": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetkinesisstreamparameters.html#cfn-pipes-pipe-pipetargetkinesisstreamparameters-partitionkey", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeTargetLambdaFunctionParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetlambdafunctionparameters.html", - "Properties": { - "InvocationType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetlambdafunctionparameters.html#cfn-pipes-pipe-pipetargetlambdafunctionparameters-invocationtype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeTargetParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html", - "Properties": { - "BatchJobParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-batchjobparameters", - "Required": false, - "Type": "PipeTargetBatchJobParameters", - "UpdateType": "Mutable" - }, - "CloudWatchLogsParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-cloudwatchlogsparameters", - "Required": false, - "Type": "PipeTargetCloudWatchLogsParameters", - "UpdateType": "Mutable" - }, - "EcsTaskParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-ecstaskparameters", - "Required": false, - "Type": "PipeTargetEcsTaskParameters", - "UpdateType": "Mutable" - }, - "EventBridgeEventBusParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-eventbridgeeventbusparameters", - "Required": false, - "Type": "PipeTargetEventBridgeEventBusParameters", - "UpdateType": "Mutable" - }, - "HttpParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-httpparameters", - "Required": false, - "Type": "PipeTargetHttpParameters", - "UpdateType": "Mutable" - }, - "InputTemplate": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-inputtemplate", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "KinesisStreamParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-kinesisstreamparameters", - "Required": false, - "Type": "PipeTargetKinesisStreamParameters", - "UpdateType": "Mutable" - }, - "LambdaFunctionParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-lambdafunctionparameters", - "Required": false, - "Type": "PipeTargetLambdaFunctionParameters", - "UpdateType": "Mutable" - }, - "RedshiftDataParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-redshiftdataparameters", - "Required": false, - "Type": "PipeTargetRedshiftDataParameters", - "UpdateType": "Mutable" - }, - "SageMakerPipelineParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-sagemakerpipelineparameters", - "Required": false, - "Type": "PipeTargetSageMakerPipelineParameters", - "UpdateType": "Mutable" - }, - "SqsQueueParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-sqsqueueparameters", - "Required": false, - "Type": "PipeTargetSqsQueueParameters", - "UpdateType": "Mutable" - }, - "StepFunctionStateMachineParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-stepfunctionstatemachineparameters", - "Required": false, - "Type": "PipeTargetStateMachineParameters", - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeTargetRedshiftDataParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html", - "Properties": { - "Database": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html#cfn-pipes-pipe-pipetargetredshiftdataparameters-database", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "DbUser": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html#cfn-pipes-pipe-pipetargetredshiftdataparameters-dbuser", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "SecretManagerArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html#cfn-pipes-pipe-pipetargetredshiftdataparameters-secretmanagerarn", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Sqls": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html#cfn-pipes-pipe-pipetargetredshiftdataparameters-sqls", - "PrimitiveItemType": "String", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - }, - "StatementName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html#cfn-pipes-pipe-pipetargetredshiftdataparameters-statementname", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "WithEvent": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html#cfn-pipes-pipe-pipetargetredshiftdataparameters-withevent", - "PrimitiveType": "Boolean", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeTargetSageMakerPipelineParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetsagemakerpipelineparameters.html", - "Properties": { - "PipelineParameterList": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetsagemakerpipelineparameters.html#cfn-pipes-pipe-pipetargetsagemakerpipelineparameters-pipelineparameterlist", - "ItemType": "SageMakerPipelineParameter", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeTargetSqsQueueParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetsqsqueueparameters.html", - "Properties": { - "MessageDeduplicationId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetsqsqueueparameters.html#cfn-pipes-pipe-pipetargetsqsqueueparameters-messagededuplicationid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "MessageGroupId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetsqsqueueparameters.html#cfn-pipes-pipe-pipetargetsqsqueueparameters-messagegroupid", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PipeTargetStateMachineParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetstatemachineparameters.html", - "Properties": { - "InvocationType": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetstatemachineparameters.html#cfn-pipes-pipe-pipetargetstatemachineparameters-invocationtype", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PlacementConstraint": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-placementconstraint.html", - "Properties": { - "Expression": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-placementconstraint.html#cfn-pipes-pipe-placementconstraint-expression", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-placementconstraint.html#cfn-pipes-pipe-placementconstraint-type", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.PlacementStrategy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-placementstrategy.html", - "Properties": { - "Field": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-placementstrategy.html#cfn-pipes-pipe-placementstrategy-field", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-placementstrategy.html#cfn-pipes-pipe-placementstrategy-type", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.QueryStringParametersMap": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-querystringparametersmap.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::Pipes::Pipe.SageMakerPipelineParameter": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-sagemakerpipelineparameter.html", - "Properties": { - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-sagemakerpipelineparameter.html#cfn-pipes-pipe-sagemakerpipelineparameter-name", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-sagemakerpipelineparameter.html#cfn-pipes-pipe-sagemakerpipelineparameter-value", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::Pipes::Pipe.SelfManagedKafkaAccessConfigurationCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-selfmanagedkafkaaccessconfigurationcredentials.html" - }, - "AWS::Pipes::Pipe.SelfManagedKafkaAccessConfigurationVpc": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-selfmanagedkafkaaccessconfigurationvpc.html", - "Properties": { - "SecurityGroup": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-selfmanagedkafkaaccessconfigurationvpc.html#cfn-pipes-pipe-selfmanagedkafkaaccessconfigurationvpc-securitygroup", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - }, - "Subnets": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-selfmanagedkafkaaccessconfigurationvpc.html#cfn-pipes-pipe-selfmanagedkafkaaccessconfigurationvpc-subnets", - "PrimitiveItemType": "String", - "Required": false, - "Type": "List", - "UpdateType": "Mutable" - } - } - } - }, - "ResourceSpecificationVersion": "100.0.0", - "ResourceTypes": { - "AWS::Pipes::Pipe": { - "Attributes": { - "Arn": { - "PrimitiveType": "String" - }, - "CreationTime": { - "PrimitiveType": "String" - }, - "CurrentState": { - "PrimitiveType": "String" - }, - "LastModifiedTime": { - "PrimitiveType": "String" - }, - "StateReason": { - "PrimitiveType": "String" - } - }, - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html", - "Properties": { - "Description": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-description", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "DesiredState": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-desiredstate", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "Enrichment": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-enrichment", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Mutable" - }, - "EnrichmentParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-enrichmentparameters", - "Required": false, - "Type": "PipeEnrichmentParameters", - "UpdateType": "Mutable" - }, - "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-name", - "PrimitiveType": "String", - "Required": false, - "UpdateType": "Immutable" - }, - "RoleArn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-rolearn", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Source": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-source", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Immutable" - }, - "SourceParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-sourceparameters", - "Required": false, - "Type": "PipeSourceParameters", - "UpdateType": "Mutable" - }, - "Tags": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-tags", - "PrimitiveItemType": "String", - "Required": false, - "Type": "Map", - "UpdateType": "Mutable" - }, - "Target": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-target", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "TargetParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-targetparameters", - "Required": false, - "Type": "PipeTargetParameters", - "UpdateType": "Mutable" - } - } - } - } -} diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ACMPCA.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ACMPCA.json index 9cd715b888cc7..55cdfa998bbef 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ACMPCA.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ACMPCA.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ACMPCA::Certificate.ApiPassthrough": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-apipassthrough.html", @@ -97,6 +97,7 @@ "Properties": { "CertificatePolicies": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-certificatepolicies", + "DuplicatesAllowed": true, "ItemType": "PolicyInformation", "Required": false, "Type": "List", @@ -104,6 +105,7 @@ }, "CustomExtensions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-customextensions", + "DuplicatesAllowed": true, "ItemType": "CustomExtension", "Required": false, "Type": "List", @@ -111,6 +113,7 @@ }, "ExtendedKeyUsage": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-extendedkeyusage", + "DuplicatesAllowed": true, "ItemType": "ExtendedKeyUsage", "Required": false, "Type": "List", @@ -124,6 +127,7 @@ }, "SubjectAlternativeNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-extensions.html#cfn-acmpca-certificate-extensions-subjectalternativenames", + "DuplicatesAllowed": true, "ItemType": "GeneralName", "Required": false, "Type": "List", @@ -271,6 +275,7 @@ }, "PolicyQualifiers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-policyinformation.html#cfn-acmpca-certificate-policyinformation-policyqualifiers", + "DuplicatesAllowed": true, "ItemType": "PolicyQualifierInfo", "Required": false, "Type": "List", @@ -323,6 +328,7 @@ }, "CustomAttributes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificate-subject.html#cfn-acmpca-certificate-subject-customattributes", + "DuplicatesAllowed": true, "ItemType": "CustomAttribute", "Required": false, "Type": "List", @@ -499,6 +505,7 @@ }, "SubjectInformationAccess": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-csrextensions.html#cfn-acmpca-certificateauthority-csrextensions-subjectinformationaccess", + "DuplicatesAllowed": true, "ItemType": "AccessDescription", "Required": false, "Type": "List", @@ -720,6 +727,7 @@ }, "CustomAttributes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-acmpca-certificateauthority-subject.html#cfn-acmpca-certificateauthority-subject-customattributes", + "DuplicatesAllowed": true, "ItemType": "CustomAttribute", "Required": false, "Type": "List", @@ -905,6 +913,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-certificateauthority.html#cfn-acmpca-certificateauthority-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -963,6 +972,7 @@ "Properties": { "Actions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-acmpca-permission.html#cfn-acmpca-permission-actions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_APS.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_APS.json index c5edb1fb4cb3a..aea2c1ad2591f 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_APS.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_APS.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::APS::Workspace.LoggingConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-aps-workspace-loggingconfiguration.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AccessAnalyzer.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AccessAnalyzer.json index a8a5363e63d50..ffc66d7e51da2 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AccessAnalyzer.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AccessAnalyzer.json @@ -1,11 +1,12 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::AccessAnalyzer::Analyzer.ArchiveRule": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-accessanalyzer-analyzer-archiverule.html", "Properties": { "Filter": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-accessanalyzer-analyzer-archiverule.html#cfn-accessanalyzer-analyzer-archiverule-filter", + "DuplicatesAllowed": true, "ItemType": "Filter", "Required": true, "Type": "List", @@ -24,6 +25,7 @@ "Properties": { "Contains": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-accessanalyzer-analyzer-filter.html#cfn-accessanalyzer-analyzer-filter-contains", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -31,6 +33,7 @@ }, "Eq": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-accessanalyzer-analyzer-filter.html#cfn-accessanalyzer-analyzer-filter-eq", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -44,6 +47,7 @@ }, "Neq": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-accessanalyzer-analyzer-filter.html#cfn-accessanalyzer-analyzer-filter-neq", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -75,6 +79,7 @@ }, "ArchiveRules": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-accessanalyzer-analyzer.html#cfn-accessanalyzer-analyzer-archiverules", + "DuplicatesAllowed": true, "ItemType": "ArchiveRule", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AmazonMQ.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AmazonMQ.json index 5a06452af2f8a..6142d58d1dd66 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AmazonMQ.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AmazonMQ.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::AmazonMQ::Broker.ConfigurationId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amazonmq-broker-configurationid.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Amplify.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Amplify.json index 5d68e99488f04..b05990ad229ff 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Amplify.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Amplify.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Amplify::App.AutoBranchCreationConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplify-app-autobranchcreationconfig.html", @@ -420,7 +420,6 @@ "PrimitiveType": "String" }, "AutoSubDomainCreationPatterns": { - "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Type": "List" }, diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AmplifyUIBuilder.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AmplifyUIBuilder.json index cf6e4a057c16e..615da61188f55 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AmplifyUIBuilder.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AmplifyUIBuilder.json @@ -1,5 +1,5 @@ { - "$version": "97.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::AmplifyUIBuilder::Component.ActionParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-actionparameters.html", @@ -12,8 +12,9 @@ }, "Fields": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-actionparameters.html#cfn-amplifyuibuilder-component-actionparameters-fields", + "ItemType": "ComponentProperty", "Required": false, - "Type": "ComponentProperties", + "Type": "Map", "UpdateType": "Mutable" }, "Global": { @@ -118,6 +119,7 @@ }, "Predicates": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentbindingpropertiesvalueproperties.html#cfn-amplifyuibuilder-component-componentbindingpropertiesvalueproperties-predicates", + "DuplicatesAllowed": true, "ItemType": "Predicate", "Required": false, "Type": "List", @@ -136,6 +138,7 @@ "Properties": { "Children": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentchild.html#cfn-amplifyuibuilder-component-componentchild-children", + "DuplicatesAllowed": true, "ItemType": "ComponentChild", "Required": false, "Type": "List", @@ -149,8 +152,9 @@ }, "Events": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentchild.html#cfn-amplifyuibuilder-component-componentchild-events", + "ItemType": "ComponentEvent", "Required": false, - "Type": "ComponentEvents", + "Type": "Map", "UpdateType": "Mutable" }, "Name": { @@ -161,8 +165,9 @@ }, "Properties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentchild.html#cfn-amplifyuibuilder-component-componentchild-properties", + "ItemType": "ComponentProperty", "Required": true, - "Type": "ComponentProperties", + "Type": "Map", "UpdateType": "Mutable" } } @@ -219,6 +224,7 @@ "Properties": { "Identifiers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentdataconfiguration.html#cfn-amplifyuibuilder-component-componentdataconfiguration-identifiers", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -238,6 +244,7 @@ }, "Sort": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentdataconfiguration.html#cfn-amplifyuibuilder-component-componentdataconfiguration-sort", + "DuplicatesAllowed": true, "ItemType": "SortProperty", "Required": false, "Type": "List", @@ -262,30 +269,6 @@ } } }, - "AWS::AmplifyUIBuilder::Component.ComponentEvents": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentevents.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::AmplifyUIBuilder::Component.ComponentOverrides": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentoverrides.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::AmplifyUIBuilder::Component.ComponentOverridesValue": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentoverridesvalue.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::AmplifyUIBuilder::Component.ComponentProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperties.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "AWS::AmplifyUIBuilder::Component.ComponentProperty": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html", "Properties": { @@ -297,8 +280,9 @@ }, "Bindings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-bindings", + "ItemType": "FormBindingElement", "Required": false, - "Type": "FormBindings", + "Type": "Map", "UpdateType": "Mutable" }, "CollectionBindingProperties": { @@ -315,6 +299,7 @@ }, "Concat": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentproperty.html#cfn-amplifyuibuilder-component-componentproperty-concat", + "DuplicatesAllowed": true, "ItemType": "ComponentProperty", "Required": false, "Type": "List", @@ -404,29 +389,35 @@ "Properties": { "Overrides": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentvariant.html#cfn-amplifyuibuilder-component-componentvariant-overrides", + "PrimitiveType": "Json", "Required": false, - "Type": "ComponentOverrides", "UpdateType": "Mutable" }, "VariantValues": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentvariant.html#cfn-amplifyuibuilder-component-componentvariant-variantvalues", + "PrimitiveItemType": "String", "Required": false, - "Type": "ComponentVariantValues", + "Type": "Map", "UpdateType": "Mutable" } } }, - "AWS::AmplifyUIBuilder::Component.ComponentVariantValues": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-componentvariantvalues.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, - "AWS::AmplifyUIBuilder::Component.FormBindings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-formbindings.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" + "AWS::AmplifyUIBuilder::Component.FormBindingElement": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-formbindingelement.html", + "Properties": { + "Element": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-formbindingelement.html#cfn-amplifyuibuilder-component-formbindingelement-element", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Property": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-formbindingelement.html#cfn-amplifyuibuilder-component-formbindingelement-property", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } }, "AWS::AmplifyUIBuilder::Component.MutationActionSetStateParameter": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-mutationactionsetstateparameter.html", @@ -456,6 +447,7 @@ "Properties": { "And": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-predicate.html#cfn-amplifyuibuilder-component-predicate-and", + "DuplicatesAllowed": true, "ItemType": "Predicate", "Required": false, "Type": "List", @@ -481,6 +473,7 @@ }, "Or": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-component-predicate.html#cfn-amplifyuibuilder-component-predicate-or", + "DuplicatesAllowed": true, "ItemType": "Predicate", "Required": false, "Type": "List", @@ -505,11 +498,379 @@ } } }, + "AWS::AmplifyUIBuilder::Form.FieldConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldconfig.html", + "Properties": { + "Excluded": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldconfig.html#cfn-amplifyuibuilder-form-fieldconfig-excluded", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "InputType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldconfig.html#cfn-amplifyuibuilder-form-fieldconfig-inputtype", + "Required": false, + "Type": "FieldInputConfig", + "UpdateType": "Mutable" + }, + "Label": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldconfig.html#cfn-amplifyuibuilder-form-fieldconfig-label", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Position": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldconfig.html#cfn-amplifyuibuilder-form-fieldconfig-position", + "Required": false, + "Type": "FieldPosition", + "UpdateType": "Mutable" + }, + "Validations": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldconfig.html#cfn-amplifyuibuilder-form-fieldconfig-validations", + "DuplicatesAllowed": true, + "ItemType": "FieldValidationConfiguration", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::AmplifyUIBuilder::Form.FieldInputConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html", + "Properties": { + "DefaultChecked": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-defaultchecked", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "DefaultCountryCode": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-defaultcountrycode", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DefaultValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-defaultvalue", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DescriptiveText": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-descriptivetext", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "MaxValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-maxvalue", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + }, + "MinValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-minvalue", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Placeholder": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-placeholder", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ReadOnly": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-readonly", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "Required": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-required", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "Step": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-step", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-type", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-value", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ValueMappings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldinputconfig.html#cfn-amplifyuibuilder-form-fieldinputconfig-valuemappings", + "Required": false, + "Type": "ValueMappings", + "UpdateType": "Mutable" + } + } + }, + "AWS::AmplifyUIBuilder::Form.FieldPosition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldposition.html", + "Properties": { + "Below": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldposition.html#cfn-amplifyuibuilder-form-fieldposition-below", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Fixed": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldposition.html#cfn-amplifyuibuilder-form-fieldposition-fixed", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "RightOf": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldposition.html#cfn-amplifyuibuilder-form-fieldposition-rightof", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::AmplifyUIBuilder::Form.FieldValidationConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldvalidationconfiguration.html", + "Properties": { + "NumValues": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldvalidationconfiguration.html#cfn-amplifyuibuilder-form-fieldvalidationconfiguration-numvalues", + "DuplicatesAllowed": true, + "PrimitiveItemType": "Double", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "StrValues": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldvalidationconfiguration.html#cfn-amplifyuibuilder-form-fieldvalidationconfiguration-strvalues", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldvalidationconfiguration.html#cfn-amplifyuibuilder-form-fieldvalidationconfiguration-type", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "ValidationMessage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-fieldvalidationconfiguration.html#cfn-amplifyuibuilder-form-fieldvalidationconfiguration-validationmessage", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::AmplifyUIBuilder::Form.FormButton": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formbutton.html", + "Properties": { + "Children": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formbutton.html#cfn-amplifyuibuilder-form-formbutton-children", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Excluded": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formbutton.html#cfn-amplifyuibuilder-form-formbutton-excluded", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "Position": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formbutton.html#cfn-amplifyuibuilder-form-formbutton-position", + "Required": false, + "Type": "FieldPosition", + "UpdateType": "Mutable" + } + } + }, + "AWS::AmplifyUIBuilder::Form.FormCTA": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formcta.html", + "Properties": { + "Cancel": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formcta.html#cfn-amplifyuibuilder-form-formcta-cancel", + "Required": false, + "Type": "FormButton", + "UpdateType": "Mutable" + }, + "Clear": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formcta.html#cfn-amplifyuibuilder-form-formcta-clear", + "Required": false, + "Type": "FormButton", + "UpdateType": "Mutable" + }, + "Position": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formcta.html#cfn-amplifyuibuilder-form-formcta-position", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Submit": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formcta.html#cfn-amplifyuibuilder-form-formcta-submit", + "Required": false, + "Type": "FormButton", + "UpdateType": "Mutable" + } + } + }, + "AWS::AmplifyUIBuilder::Form.FormDataTypeConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formdatatypeconfig.html", + "Properties": { + "DataSourceType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formdatatypeconfig.html#cfn-amplifyuibuilder-form-formdatatypeconfig-datasourcetype", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "DataTypeName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formdatatypeconfig.html#cfn-amplifyuibuilder-form-formdatatypeconfig-datatypename", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::AmplifyUIBuilder::Form.FormInputValueProperty": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-forminputvalueproperty.html", + "Properties": { + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-forminputvalueproperty.html#cfn-amplifyuibuilder-form-forminputvalueproperty-value", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::AmplifyUIBuilder::Form.FormStyle": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formstyle.html", + "Properties": { + "HorizontalGap": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formstyle.html#cfn-amplifyuibuilder-form-formstyle-horizontalgap", + "Required": false, + "Type": "FormStyleConfig", + "UpdateType": "Mutable" + }, + "OuterPadding": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formstyle.html#cfn-amplifyuibuilder-form-formstyle-outerpadding", + "Required": false, + "Type": "FormStyleConfig", + "UpdateType": "Mutable" + }, + "VerticalGap": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formstyle.html#cfn-amplifyuibuilder-form-formstyle-verticalgap", + "Required": false, + "Type": "FormStyleConfig", + "UpdateType": "Mutable" + } + } + }, + "AWS::AmplifyUIBuilder::Form.FormStyleConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formstyleconfig.html", + "Properties": { + "TokenReference": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formstyleconfig.html#cfn-amplifyuibuilder-form-formstyleconfig-tokenreference", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-formstyleconfig.html#cfn-amplifyuibuilder-form-formstyleconfig-value", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::AmplifyUIBuilder::Form.SectionalElement": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-sectionalelement.html", + "Properties": { + "Level": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-sectionalelement.html#cfn-amplifyuibuilder-form-sectionalelement-level", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + }, + "Orientation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-sectionalelement.html#cfn-amplifyuibuilder-form-sectionalelement-orientation", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Position": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-sectionalelement.html#cfn-amplifyuibuilder-form-sectionalelement-position", + "Required": false, + "Type": "FieldPosition", + "UpdateType": "Mutable" + }, + "Text": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-sectionalelement.html#cfn-amplifyuibuilder-form-sectionalelement-text", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-sectionalelement.html#cfn-amplifyuibuilder-form-sectionalelement-type", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::AmplifyUIBuilder::Form.ValueMapping": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-valuemapping.html", + "Properties": { + "DisplayValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-valuemapping.html#cfn-amplifyuibuilder-form-valuemapping-displayvalue", + "Required": false, + "Type": "FormInputValueProperty", + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-valuemapping.html#cfn-amplifyuibuilder-form-valuemapping-value", + "Required": true, + "Type": "FormInputValueProperty", + "UpdateType": "Mutable" + } + } + }, + "AWS::AmplifyUIBuilder::Form.ValueMappings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-valuemappings.html", + "Properties": { + "Values": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-form-valuemappings.html#cfn-amplifyuibuilder-form-valuemappings-values", + "DuplicatesAllowed": true, + "ItemType": "ValueMapping", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::AmplifyUIBuilder::Theme.ThemeValue": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-theme-themevalue.html", "Properties": { "Children": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-amplifyuibuilder-theme-themevalue.html#cfn-amplifyuibuilder-theme-themevalue-children", + "DuplicatesAllowed": true, "ItemType": "ThemeValues", "Required": false, "Type": "List", @@ -565,6 +926,7 @@ }, "Children": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-children", + "DuplicatesAllowed": true, "ItemType": "ComponentChild", "Required": false, "Type": "List", @@ -598,9 +960,8 @@ }, "Overrides": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-overrides", - "ItemType": "ComponentOverridesValue", + "PrimitiveType": "Json", "Required": true, - "Type": "Map", "UpdateType": "Mutable" }, "Properties": { @@ -631,6 +992,7 @@ }, "Variants": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-component.html#cfn-amplifyuibuilder-component-variants", + "DuplicatesAllowed": true, "ItemType": "ComponentVariant", "Required": true, "Type": "List", @@ -638,6 +1000,85 @@ } } }, + "AWS::AmplifyUIBuilder::Form": { + "Attributes": { + "Id": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html", + "Properties": { + "AppId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-appid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Cta": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-cta", + "Required": false, + "Type": "FormCTA", + "UpdateType": "Mutable" + }, + "DataType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-datatype", + "Required": true, + "Type": "FormDataTypeConfig", + "UpdateType": "Mutable" + }, + "EnvironmentName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-environmentname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Fields": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-fields", + "ItemType": "FieldConfig", + "Required": true, + "Type": "Map", + "UpdateType": "Mutable" + }, + "FormActionType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-formactiontype", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SchemaVersion": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-schemaversion", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SectionalElements": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-sectionalelements", + "ItemType": "SectionalElement", + "Required": true, + "Type": "Map", + "UpdateType": "Mutable" + }, + "Style": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-style", + "Required": true, + "Type": "FormStyle", + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-form.html#cfn-amplifyuibuilder-form-tags", + "PrimitiveItemType": "String", + "Required": false, + "Type": "Map", + "UpdateType": "Immutable" + } + } + }, "AWS::AmplifyUIBuilder::Theme": { "Attributes": { "AppId": { @@ -666,6 +1107,7 @@ }, "Overrides": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-theme.html#cfn-amplifyuibuilder-theme-overrides", + "DuplicatesAllowed": true, "ItemType": "ThemeValues", "Required": false, "Type": "List", @@ -680,6 +1122,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amplifyuibuilder-theme.html#cfn-amplifyuibuilder-theme-values", + "DuplicatesAllowed": true, "ItemType": "ThemeValues", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApiGateway.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApiGateway.json index 0cccc5659b9ab..ca8c8aed60d0f 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApiGateway.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApiGateway.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ApiGateway::ApiKey.StageKey": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-apikey-stagekey.html", @@ -312,6 +312,7 @@ "Properties": { "Types": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-domainname-endpointconfiguration.html#cfn-apigateway-domainname-endpointconfiguration-types", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -892,6 +893,12 @@ "Required": true, "UpdateType": "Immutable" }, + "Id": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html#cfn-apigateway-basepathmapping-id", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "RestApiId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html#cfn-apigateway-basepathmapping-restapiid", "PrimitiveType": "String", @@ -1082,6 +1089,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#cfn-apigateway-domainname-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -1321,6 +1329,9 @@ }, "AWS::ApiGateway::RestApi": { "Attributes": { + "RestApiId": { + "PrimitiveType": "String" + }, "RootResourceId": { "PrimitiveType": "String" } @@ -1403,7 +1414,6 @@ }, "Parameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-parameters", - "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": false, "Type": "Map", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApiGatewayV2.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApiGatewayV2.json index f07852ceee300..55db083cfcf1a 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApiGatewayV2.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApiGatewayV2.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ApiGatewayV2::Api.BodyS3Location": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigatewayv2-api-bodys3location.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppConfig.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppConfig.json index 92fdbd2f0a83c..3882159c4421f 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppConfig.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppConfig.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::AppConfig::Application.Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appconfig-application-tags.html", @@ -245,7 +245,7 @@ "ItemType": "Tags", "Required": false, "Type": "List", - "UpdateType": "Mutable" + "UpdateType": "Immutable" } } }, diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppFlow.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppFlow.json index 0f16b25f6dd35..0cd9b5cef2575 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppFlow.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppFlow.json @@ -1,6 +1,28 @@ { - "$version": "94.0.0", + "$version": "101.0.0", "PropertyTypes": { + "AWS::AppFlow::Connector.ConnectorProvisioningConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connector-connectorprovisioningconfig.html", + "Properties": { + "Lambda": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connector-connectorprovisioningconfig.html#cfn-appflow-connector-connectorprovisioningconfig-lambda", + "Required": false, + "Type": "LambdaConnectorProvisioningConfig", + "UpdateType": "Mutable" + } + } + }, + "AWS::AppFlow::Connector.LambdaConnectorProvisioningConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connector-lambdaconnectorprovisioningconfig.html", + "Properties": { + "LambdaArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connector-lambdaconnectorprovisioningconfig.html#cfn-appflow-connector-lambdaconnectorprovisioningconfig-lambdaarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::AppFlow::ConnectorProfile.AmplitudeConnectorProfileCredentials": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-amplitudeconnectorprofilecredentials.html", "Properties": { @@ -74,7 +96,7 @@ "Properties": { "ConnectorProfileCredentials": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-connectorprofileconfig.html#cfn-appflow-connectorprofile-connectorprofileconfig-connectorprofilecredentials", - "Required": true, + "Required": false, "Type": "ConnectorProfileCredentials", "UpdateType": "Mutable" }, @@ -276,19 +298,14 @@ } } }, - "AWS::AppFlow::ConnectorProfile.CredentialsMap": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customauthcredentials.html#cfn-appflow-connectorprofile-customauthcredentials-credentialsmap", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "AWS::AppFlow::ConnectorProfile.CustomAuthCredentials": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customauthcredentials.html", "Properties": { "CredentialsMap": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customauthcredentials.html#cfn-appflow-connectorprofile-customauthcredentials-credentialsmap", + "PrimitiveItemType": "String", "Required": false, - "Type": "CredentialsMap", + "Type": "Map", "UpdateType": "Mutable" }, "CustomAuthenticationType": { @@ -345,8 +362,9 @@ }, "ProfileProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-customconnectorprofileproperties.html#cfn-appflow-connectorprofile-customconnectorprofileproperties-profileproperties", + "PrimitiveItemType": "String", "Required": false, - "Type": "ProfileProperties", + "Type": "Map", "UpdateType": "Mutable" } } @@ -568,8 +586,44 @@ }, "TokenUrlCustomProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauth2properties.html#cfn-appflow-connectorprofile-oauth2properties-tokenurlcustomproperties", + "PrimitiveItemType": "String", + "Required": false, + "Type": "Map", + "UpdateType": "Mutable" + } + } + }, + "AWS::AppFlow::ConnectorProfile.OAuthCredentials": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauthcredentials.html", + "Properties": { + "AccessToken": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauthcredentials.html#cfn-appflow-connectorprofile-oauthcredentials-accesstoken", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ClientId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauthcredentials.html#cfn-appflow-connectorprofile-oauthcredentials-clientid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ClientSecret": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauthcredentials.html#cfn-appflow-connectorprofile-oauthcredentials-clientsecret", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ConnectorOAuthRequest": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauthcredentials.html#cfn-appflow-connectorprofile-oauthcredentials-connectoroauthrequest", + "Required": false, + "Type": "ConnectorOAuthRequest", + "UpdateType": "Mutable" + }, + "RefreshToken": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-oauthcredentials.html#cfn-appflow-connectorprofile-oauthcredentials-refreshtoken", + "PrimitiveType": "String", "Required": false, - "Type": "TokenUrlCustomProperties", "UpdateType": "Mutable" } } @@ -599,25 +653,19 @@ } } }, - "AWS::AppFlow::ConnectorProfile.ProfileProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-profileproperties.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "AWS::AppFlow::ConnectorProfile.RedshiftConnectorProfileCredentials": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofilecredentials.html", "Properties": { "Password": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofilecredentials.html#cfn-appflow-connectorprofile-redshiftconnectorprofilecredentials-password", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "Username": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofilecredentials.html#cfn-appflow-connectorprofile-redshiftconnectorprofilecredentials-username", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" } } @@ -637,10 +685,34 @@ "Required": false, "UpdateType": "Mutable" }, + "ClusterIdentifier": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-clusteridentifier", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DataApiRoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-dataapirolearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DatabaseName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-databasename", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "DatabaseUrl": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-databaseurl", "PrimitiveType": "String", - "Required": true, + "Required": false, + "UpdateType": "Mutable" + }, + "IsRedshiftServerless": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-isredshiftserverless", + "PrimitiveType": "Boolean", + "Required": false, "UpdateType": "Mutable" }, "RoleArn": { @@ -648,6 +720,12 @@ "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" + }, + "WorkgroupName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-redshiftconnectorprofileproperties.html#cfn-appflow-connectorprofile-redshiftconnectorprofileproperties-workgroupname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" } } }, @@ -662,8 +740,8 @@ }, "OAuthCredentials": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-sapodataconnectorprofilecredentials.html#cfn-appflow-connectorprofile-sapodataconnectorprofilecredentials-oauthcredentials", - "PrimitiveType": "Json", "Required": false, + "Type": "OAuthCredentials", "UpdateType": "Mutable" } } @@ -904,12 +982,6 @@ } } }, - "AWS::AppFlow::ConnectorProfile.TokenUrlCustomProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-tokenurlcustomproperties.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "AWS::AppFlow::ConnectorProfile.TrendmicroConnectorProfileCredentials": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-connectorprofile-trendmicroconnectorprofilecredentials.html", "Properties": { @@ -997,6 +1069,12 @@ "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" + }, + "TargetFileSize": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-aggregationconfig.html#cfn-appflow-flow-aggregationconfig-targetfilesize", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" } } }, @@ -1117,8 +1195,9 @@ "Properties": { "CustomProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customconnectordestinationproperties.html#cfn-appflow-flow-customconnectordestinationproperties-customproperties", + "PrimitiveItemType": "String", "Required": false, - "Type": "CustomProperties", + "Type": "Map", "UpdateType": "Mutable" }, "EntityName": { @@ -1135,6 +1214,7 @@ }, "IdFieldNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customconnectordestinationproperties.html#cfn-appflow-flow-customconnectordestinationproperties-idfieldnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1153,8 +1233,9 @@ "Properties": { "CustomProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customconnectorsourceproperties.html#cfn-appflow-flow-customconnectorsourceproperties-customproperties", + "PrimitiveItemType": "String", "Required": false, - "Type": "CustomProperties", + "Type": "Map", "UpdateType": "Mutable" }, "EntityName": { @@ -1165,12 +1246,6 @@ } } }, - "AWS::AppFlow::Flow.CustomProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-customproperties.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "AWS::AppFlow::Flow.DatadogSourceProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-datadogsourceproperties.html", "Properties": { @@ -1333,6 +1408,29 @@ } } }, + "AWS::AppFlow::Flow.GlueDataCatalog": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-gluedatacatalog.html", + "Properties": { + "DatabaseName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-gluedatacatalog.html#cfn-appflow-flow-gluedatacatalog-databasename", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "RoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-gluedatacatalog.html#cfn-appflow-flow-gluedatacatalog-rolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "TablePrefix": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-gluedatacatalog.html#cfn-appflow-flow-gluedatacatalog-tableprefix", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::AppFlow::Flow.GoogleAnalyticsSourceProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-googleanalyticssourceproperties.html", "Properties": { @@ -1405,9 +1503,28 @@ } } }, + "AWS::AppFlow::Flow.MetadataCatalogConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-metadatacatalogconfig.html", + "Properties": { + "GlueDataCatalog": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-metadatacatalogconfig.html#cfn-appflow-flow-metadatacatalogconfig-gluedatacatalog", + "Required": false, + "Type": "GlueDataCatalog", + "UpdateType": "Mutable" + } + } + }, "AWS::AppFlow::Flow.PrefixConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-prefixconfig.html", "Properties": { + "PathPrefixHierarchy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-prefixconfig.html#cfn-appflow-flow-prefixconfig-pathprefixhierarchy", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, "PrefixFormat": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-prefixconfig.html#cfn-appflow-flow-prefixconfig-prefixformat", "PrimitiveType": "String", @@ -1548,6 +1665,7 @@ }, "IdFieldNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-sapodatadestinationproperties.html#cfn-appflow-flow-sapodatadestinationproperties-idfieldnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1601,6 +1719,7 @@ }, "IdFieldNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcedestinationproperties.html#cfn-appflow-flow-salesforcedestinationproperties-idfieldnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1934,6 +2053,7 @@ }, "SourceFields": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-task.html#cfn-appflow-flow-task-sourcefields", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1941,6 +2061,7 @@ }, "TaskProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-task.html#cfn-appflow-flow-task-taskproperties", + "DuplicatesAllowed": true, "ItemType": "TaskPropertiesObject", "Required": false, "Type": "List", @@ -2091,6 +2212,7 @@ }, "IdFieldNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-zendeskdestinationproperties.html#cfn-appflow-flow-zendeskdestinationproperties-idfieldnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2123,6 +2245,40 @@ } }, "ResourceTypes": { + "AWS::AppFlow::Connector": { + "Attributes": { + "ConnectorArn": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-connector.html", + "Properties": { + "ConnectorLabel": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-connector.html#cfn-appflow-connector-connectorlabel", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "ConnectorProvisioningConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-connector.html#cfn-appflow-connector-connectorprovisioningconfig", + "Required": true, + "Type": "ConnectorProvisioningConfig", + "UpdateType": "Mutable" + }, + "ConnectorProvisioningType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-connector.html#cfn-appflow-connector-connectorprovisioningtype", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-connector.html#cfn-appflow-connector-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::AppFlow::ConnectorProfile": { "Attributes": { "ConnectorProfileArn": { @@ -2188,6 +2344,7 @@ }, "DestinationFlowConfigList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-destinationflowconfiglist", + "DuplicatesAllowed": true, "ItemType": "DestinationFlowConfig", "Required": true, "Type": "List", @@ -2205,6 +2362,12 @@ "Required": false, "UpdateType": "Immutable" }, + "MetadataCatalogConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-metadatacatalogconfig", + "Required": false, + "Type": "MetadataCatalogConfig", + "UpdateType": "Mutable" + }, "SourceFlowConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-sourceflowconfig", "Required": true, @@ -2213,6 +2376,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2220,6 +2384,7 @@ }, "Tasks": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appflow-flow.html#cfn-appflow-flow-tasks", + "DuplicatesAllowed": true, "ItemType": "Task", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppIntegrations.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppIntegrations.json index 6d992b08d3ed7..6aa8382833917 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppIntegrations.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppIntegrations.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::AppIntegrations::DataIntegration.ScheduleConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appintegrations-dataintegration-scheduleconfig.html", @@ -40,6 +40,7 @@ "Properties": { "ClientAssociationMetadata": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appintegrations-eventintegration-eventintegrationassociation.html#cfn-appintegrations-eventintegration-eventintegrationassociation-clientassociationmetadata", + "DuplicatesAllowed": true, "ItemType": "Metadata", "Required": false, "Type": "List", @@ -133,6 +134,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appintegrations-dataintegration.html#cfn-appintegrations-dataintegration-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -178,6 +180,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appintegrations-eventintegration.html#cfn-appintegrations-eventintegration-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppMesh.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppMesh.json index 74ddd8142bbe9..aa05a225fbd8f 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppMesh.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppMesh.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::AppMesh::GatewayRoute.GatewayRouteHostnameMatch": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-gatewayroute-gatewayroutehostnamematch.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppRunner.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppRunner.json index 32eb7c7b7c4a3..86542456e51fb 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppRunner.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppRunner.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::AppRunner::ObservabilityConfiguration.TraceConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apprunner-observabilityconfiguration-traceconfiguration.html", @@ -69,6 +69,7 @@ }, "RuntimeEnvironmentVariables": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apprunner-service-codeconfigurationvalues.html#cfn-apprunner-service-codeconfigurationvalues-runtimeenvironmentvariables", + "DuplicatesAllowed": true, "ItemType": "KeyValuePair", "Required": false, "Type": "List", @@ -185,6 +186,7 @@ }, "RuntimeEnvironmentVariables": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apprunner-service-imageconfiguration.html#cfn-apprunner-service-imageconfiguration-runtimeenvironmentvariables", + "DuplicatesAllowed": true, "ItemType": "KeyValuePair", "Required": false, "Type": "List", @@ -393,6 +395,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apprunner-observabilityconfiguration.html#cfn-apprunner-observabilityconfiguration-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -473,6 +476,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apprunner-service.html#cfn-apprunner-service-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -509,6 +513,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apprunner-vpcconnector.html#cfn-apprunner-vpcconnector-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -550,6 +555,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apprunner-vpcingressconnection.html#cfn-apprunner-vpcingressconnection-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppStream.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppStream.json index fbbf6100993a3..e528cb0fe482a 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppStream.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppStream.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::AppStream::AppBlock.S3Location": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appstream-appblock-s3location.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppSync.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppSync.json index 40f323d331a40..25b36f53f2d3b 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppSync.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AppSync.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::AppSync::DataSource.AuthorizationConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appsync-datasource-authorizationconfig.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApplicationAutoScaling.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApplicationAutoScaling.json index c638ff930aa94..f24fff0c7d4b3 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApplicationAutoScaling.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApplicationAutoScaling.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ApplicationAutoScaling::ScalableTarget.ScalableTargetAction": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalabletarget-scalabletargetaction.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApplicationInsights.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApplicationInsights.json index a178cc190ff8d..623d96eb023fa 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApplicationInsights.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ApplicationInsights.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ApplicationInsights::Application.Alarm": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationinsights-application-alarm.html", @@ -40,6 +40,7 @@ }, "SubComponentTypeConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationinsights-application-componentconfiguration.html#cfn-applicationinsights-application-componentconfiguration-subcomponenttypeconfigurations", + "DuplicatesAllowed": true, "ItemType": "SubComponentTypeConfiguration", "Required": false, "Type": "List", @@ -93,6 +94,7 @@ "Properties": { "AlarmMetrics": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationinsights-application-configurationdetails.html#cfn-applicationinsights-application-configurationdetails-alarmmetrics", + "DuplicatesAllowed": true, "ItemType": "AlarmMetric", "Required": false, "Type": "List", @@ -100,6 +102,7 @@ }, "Alarms": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationinsights-application-configurationdetails.html#cfn-applicationinsights-application-configurationdetails-alarms", + "DuplicatesAllowed": true, "ItemType": "Alarm", "Required": false, "Type": "List", @@ -125,6 +128,7 @@ }, "Logs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationinsights-application-configurationdetails.html#cfn-applicationinsights-application-configurationdetails-logs", + "DuplicatesAllowed": true, "ItemType": "Log", "Required": false, "Type": "List", @@ -132,6 +136,7 @@ }, "WindowsEvents": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationinsights-application-configurationdetails.html#cfn-applicationinsights-application-configurationdetails-windowsevents", + "DuplicatesAllowed": true, "ItemType": "WindowsEvent", "Required": false, "Type": "List", @@ -150,6 +155,7 @@ }, "ResourceList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationinsights-application-customcomponent.html#cfn-applicationinsights-application-customcomponent-resourcelist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -289,6 +295,7 @@ "Properties": { "LogPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationinsights-application-logpatternset.html#cfn-applicationinsights-application-logpatternset-logpatterns", + "DuplicatesAllowed": true, "ItemType": "LogPattern", "Required": true, "Type": "List", @@ -307,6 +314,7 @@ "Properties": { "AlarmMetrics": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationinsights-application-subcomponentconfigurationdetails.html#cfn-applicationinsights-application-subcomponentconfigurationdetails-alarmmetrics", + "DuplicatesAllowed": true, "ItemType": "AlarmMetric", "Required": false, "Type": "List", @@ -314,6 +322,7 @@ }, "Logs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationinsights-application-subcomponentconfigurationdetails.html#cfn-applicationinsights-application-subcomponentconfigurationdetails-logs", + "DuplicatesAllowed": true, "ItemType": "Log", "Required": false, "Type": "List", @@ -321,6 +330,7 @@ }, "WindowsEvents": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationinsights-application-subcomponentconfigurationdetails.html#cfn-applicationinsights-application-subcomponentconfigurationdetails-windowsevents", + "DuplicatesAllowed": true, "ItemType": "WindowsEvent", "Required": false, "Type": "List", @@ -350,6 +360,7 @@ "Properties": { "EventLevels": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationinsights-application-windowsevent.html#cfn-applicationinsights-application-windowsevent-eventlevels", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -399,6 +410,7 @@ }, "ComponentMonitoringSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationinsights-application.html#cfn-applicationinsights-application-componentmonitoringsettings", + "DuplicatesAllowed": true, "ItemType": "ComponentMonitoringSetting", "Required": false, "Type": "List", @@ -406,6 +418,7 @@ }, "CustomComponents": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationinsights-application.html#cfn-applicationinsights-application-customcomponents", + "DuplicatesAllowed": true, "ItemType": "CustomComponent", "Required": false, "Type": "List", @@ -419,6 +432,7 @@ }, "LogPatternSets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationinsights-application.html#cfn-applicationinsights-application-logpatternsets", + "DuplicatesAllowed": true, "ItemType": "LogPatternSet", "Required": false, "Type": "List", @@ -444,6 +458,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationinsights-application.html#cfn-applicationinsights-application-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Athena.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Athena.json index 126497e250b97..401f523b7332d 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Athena.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Athena.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Athena::WorkGroup.EncryptionConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-athena-workgroup-encryptionconfiguration.html", @@ -119,6 +119,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.html#cfn-athena-datacatalog-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -238,6 +239,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-workgroup.html#cfn-athena-workgroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AuditManager.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AuditManager.json index e4aaa12fd3511..b5b33125214e6 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AuditManager.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AuditManager.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::AuditManager::Assessment.AWSAccount": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccount.html", @@ -8,19 +8,19 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccount.html#cfn-auditmanager-assessment-awsaccount-emailaddress", "PrimitiveType": "String", "Required": false, - "UpdateType": "Immutable" + "UpdateType": "Conditional" }, "Id": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccount.html#cfn-auditmanager-assessment-awsaccount-id", "PrimitiveType": "String", "Required": false, - "UpdateType": "Immutable" + "UpdateType": "Conditional" }, "Name": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-awsaccount.html#cfn-auditmanager-assessment-awsaccount-name", "PrimitiveType": "String", "Required": false, - "UpdateType": "Immutable" + "UpdateType": "Conditional" } } }, @@ -145,6 +145,7 @@ "Properties": { "AwsAccounts": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-scope.html#cfn-auditmanager-assessment-scope-awsaccounts", + "DuplicatesAllowed": true, "ItemType": "AWSAccount", "Required": false, "Type": "List", @@ -152,6 +153,7 @@ }, "AwsServices": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-auditmanager-assessment-scope.html#cfn-auditmanager-assessment-scope-awsservices", + "DuplicatesAllowed": true, "ItemType": "AWSService", "Required": false, "Type": "List", @@ -211,6 +213,7 @@ }, "Roles": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-roles", + "DuplicatesAllowed": true, "ItemType": "Role", "Required": false, "Type": "List", @@ -230,6 +233,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-auditmanager-assessment.html#cfn-auditmanager-assessment-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AutoScaling.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AutoScaling.json index 9860eae3f2b23..4b4f28204f55d 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AutoScaling.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AutoScaling.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::AutoScaling::AutoScalingGroup.AcceleratorCountRequest": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-acceleratorcountrequest.html", @@ -1275,6 +1275,7 @@ }, "ClassicLinkVPCSecurityGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-launchconfiguration.html#cfn-autoscaling-launchconfiguration-classiclinkvpcsecuritygroups", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1354,6 +1355,7 @@ }, "SecurityGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-launchconfiguration.html#cfn-autoscaling-launchconfiguration-securitygroups", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AutoScalingPlans.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AutoScalingPlans.json index 38c0bcbf3c464..258f5e7c5335b 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AutoScalingPlans.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_AutoScalingPlans.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::AutoScalingPlans::ScalingPlan.ApplicationSource": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscalingplans-scalingplan-applicationsource.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Backup.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Backup.json index dfae087c88380..5e6fa4ac88c73 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Backup.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Backup.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Backup::BackupPlan.AdvancedBackupSettingResourceType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupplan-advancedbackupsettingresourcetype.html", @@ -146,8 +146,8 @@ "Properties": { "Conditions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-backupselectionresourcetype.html#cfn-backup-backupselection-backupselectionresourcetype-conditions", - "PrimitiveType": "Json", "Required": false, + "Type": "Conditions", "UpdateType": "Immutable" }, "IamRoleArn": { @@ -188,6 +188,23 @@ } } }, + "AWS::Backup::BackupSelection.ConditionParameter": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditionparameter.html", + "Properties": { + "ConditionKey": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditionparameter.html#cfn-backup-backupselection-conditionparameter-conditionkey", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "ConditionValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditionparameter.html#cfn-backup-backupselection-conditionparameter-conditionvalue", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, "AWS::Backup::BackupSelection.ConditionResourceType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditionresourcetype.html", "Properties": { @@ -211,24 +228,61 @@ } } }, + "AWS::Backup::BackupSelection.Conditions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditions.html", + "Properties": { + "StringEquals": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditions.html#cfn-backup-backupselection-conditions-stringequals", + "DuplicatesAllowed": true, + "ItemType": "ConditionParameter", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + }, + "StringLike": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditions.html#cfn-backup-backupselection-conditions-stringlike", + "DuplicatesAllowed": true, + "ItemType": "ConditionParameter", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + }, + "StringNotEquals": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditions.html#cfn-backup-backupselection-conditions-stringnotequals", + "DuplicatesAllowed": true, + "ItemType": "ConditionParameter", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + }, + "StringNotLike": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupselection-conditions.html#cfn-backup-backupselection-conditions-stringnotlike", + "DuplicatesAllowed": true, + "ItemType": "ConditionParameter", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + } + } + }, "AWS::Backup::BackupVault.LockConfigurationType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupvault-lockconfigurationtype.html", "Properties": { "ChangeableForDays": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupvault-lockconfigurationtype.html#cfn-backup-backupvault-lockconfigurationtype-changeablefordays", - "PrimitiveType": "Double", + "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" }, "MaxRetentionDays": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupvault-lockconfigurationtype.html#cfn-backup-backupvault-lockconfigurationtype-maxretentiondays", - "PrimitiveType": "Double", + "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" }, "MinRetentionDays": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-backupvault-lockconfigurationtype.html#cfn-backup-backupvault-lockconfigurationtype-minretentiondays", - "PrimitiveType": "Double", + "PrimitiveType": "Integer", "Required": true, "UpdateType": "Mutable" } @@ -270,6 +324,35 @@ } } }, + "AWS::Backup::Framework.ControlScope": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-controlscope.html", + "Properties": { + "ComplianceResourceIds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-controlscope.html#cfn-backup-framework-controlscope-complianceresourceids", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "ComplianceResourceTypes": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-controlscope.html#cfn-backup-framework-controlscope-complianceresourcetypes", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-controlscope.html#cfn-backup-framework-controlscope-tags", + "DuplicatesAllowed": true, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::Backup::Framework.FrameworkControl": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-frameworkcontrol.html", "Properties": { @@ -289,8 +372,76 @@ }, "ControlScope": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-framework-frameworkcontrol.html#cfn-backup-framework-frameworkcontrol-controlscope", - "PrimitiveType": "Json", "Required": false, + "Type": "ControlScope", + "UpdateType": "Mutable" + } + } + }, + "AWS::Backup::ReportPlan.ReportDeliveryChannel": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportdeliverychannel.html", + "Properties": { + "Formats": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportdeliverychannel.html#cfn-backup-reportplan-reportdeliverychannel-formats", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "S3BucketName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportdeliverychannel.html#cfn-backup-reportplan-reportdeliverychannel-s3bucketname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "S3KeyPrefix": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportdeliverychannel.html#cfn-backup-reportplan-reportdeliverychannel-s3keyprefix", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Backup::ReportPlan.ReportSetting": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportsetting.html", + "Properties": { + "Accounts": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportsetting.html#cfn-backup-reportplan-reportsetting-accounts", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "FrameworkArns": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportsetting.html#cfn-backup-reportplan-reportsetting-frameworkarns", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "OrganizationUnits": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportsetting.html#cfn-backup-reportplan-reportsetting-organizationunits", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Regions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportsetting.html#cfn-backup-reportplan-reportsetting-regions", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "ReportTemplate": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-backup-reportplan-reportsetting.html#cfn-backup-reportplan-reportsetting-reporttemplate", + "PrimitiveType": "String", + "Required": true, "UpdateType": "Mutable" } } @@ -407,7 +558,7 @@ "AWS::Backup::Framework": { "Attributes": { "CreationTime": { - "PrimitiveType": "Double" + "PrimitiveType": "String" }, "DeploymentStatus": { "PrimitiveType": "String" @@ -443,6 +594,7 @@ }, "FrameworkTags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-framework.html#cfn-backup-framework-frameworktags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -460,8 +612,8 @@ "Properties": { "ReportDeliveryChannel": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-reportplan.html#cfn-backup-reportplan-reportdeliverychannel", - "PrimitiveType": "Json", "Required": true, + "Type": "ReportDeliveryChannel", "UpdateType": "Mutable" }, "ReportPlanDescription": { @@ -478,6 +630,7 @@ }, "ReportPlanTags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-reportplan.html#cfn-backup-reportplan-reportplantags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -485,8 +638,8 @@ }, "ReportSetting": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-reportplan.html#cfn-backup-reportplan-reportsetting", - "PrimitiveType": "Json", "Required": true, + "Type": "ReportSetting", "UpdateType": "Mutable" } } diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Batch.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Batch.json index 9fdf40b974c49..0d5bc98e093a1 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Batch.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Batch.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Batch::ComputeEnvironment.ComputeResources": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html", @@ -8,13 +8,13 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-allocationstrategy", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "BidPercentage": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-bidpercentage", "PrimitiveType": "Integer", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "DesiredvCpus": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-desiredvcpus", @@ -28,25 +28,25 @@ "ItemType": "Ec2ConfigurationObject", "Required": false, "Type": "List", - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "Ec2KeyPair": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-ec2keypair", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "ImageId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-imageid", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "InstanceRole": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-instancerole", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "InstanceTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-instancetypes", @@ -54,13 +54,13 @@ "PrimitiveItemType": "String", "Required": false, "Type": "List", - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "LaunchTemplate": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-launchtemplate", "Required": false, "Type": "LaunchTemplateSpecification", - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "MaxvCpus": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-maxvcpus", @@ -78,7 +78,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-placementgroup", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-securitygroupids", @@ -86,7 +86,7 @@ "PrimitiveItemType": "String", "Required": false, "Type": "List", - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "SpotIamFleetRole": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-spotiamfleetrole", @@ -100,20 +100,20 @@ "PrimitiveItemType": "String", "Required": true, "Type": "List", - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-tags", "PrimitiveItemType": "String", "Required": false, "Type": "Map", - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "Type": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-type", "PrimitiveType": "String", "Required": true, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "UpdateToLatestImageVersion": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html#cfn-batch-computeenvironment-computeresources-updatetolatestimageversion", @@ -130,19 +130,19 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-ec2configurationobject.html#cfn-batch-computeenvironment-ec2configurationobject-imageidoverride", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "ImageKubernetesVersion": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-ec2configurationobject.html#cfn-batch-computeenvironment-ec2configurationobject-imagekubernetesversion", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "ImageType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-ec2configurationobject.html#cfn-batch-computeenvironment-ec2configurationobject-imagetype", "PrimitiveType": "String", "Required": true, - "UpdateType": "Mutable" + "UpdateType": "Conditional" } } }, @@ -170,19 +170,19 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-launchtemplatespecification.html#cfn-batch-computeenvironment-launchtemplatespecification-launchtemplateid", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "LaunchTemplateName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-launchtemplatespecification.html#cfn-batch-computeenvironment-launchtemplatespecification-launchtemplatename", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "Version": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-launchtemplatespecification.html#cfn-batch-computeenvironment-launchtemplatespecification-version", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" } } }, @@ -1048,6 +1048,7 @@ }, "ShareDistribution": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-schedulingpolicy-fairsharepolicy.html#cfn-batch-schedulingpolicy-fairsharepolicy-sharedistribution", + "DuplicatesAllowed": true, "ItemType": "ShareAttributes", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_BillingConductor.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_BillingConductor.json index f680b1bb0a170..9d5134e69501a 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_BillingConductor.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_BillingConductor.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::BillingConductor::BillingGroup.AccountGrouping": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-billingconductor-billinggroup-accountgrouping.html", @@ -94,6 +94,28 @@ "UpdateType": "Mutable" } } + }, + "AWS::BillingConductor::PricingRule.FreeTier": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-billingconductor-pricingrule-freetier.html", + "Properties": { + "Activated": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-billingconductor-pricingrule-freetier.html#cfn-billingconductor-pricingrule-freetier-activated", + "PrimitiveType": "Boolean", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::BillingConductor::PricingRule.Tiering": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-billingconductor-pricingrule-tiering.html", + "Properties": { + "FreeTier": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-billingconductor-pricingrule-tiering.html#cfn-billingconductor-pricingrule-tiering-freetier", + "Required": false, + "Type": "FreeTier", + "UpdateType": "Mutable" + } + } } }, "ResourceTypes": { @@ -254,6 +276,7 @@ }, "PricingRuleArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-billingconductor-pricingplan.html#cfn-billingconductor-pricingplan-pricingrulearns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -301,7 +324,7 @@ "ModifierPercentage": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-billingconductor-pricingrule.html#cfn-billingconductor-pricingrule-modifierpercentage", "PrimitiveType": "Double", - "Required": true, + "Required": false, "UpdateType": "Mutable" }, "Name": { @@ -330,6 +353,12 @@ "Type": "List", "UpdateType": "Mutable" }, + "Tiering": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-billingconductor-pricingrule.html#cfn-billingconductor-pricingrule-tiering", + "Required": false, + "Type": "Tiering", + "UpdateType": "Mutable" + }, "Type": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-billingconductor-pricingrule.html#cfn-billingconductor-pricingrule-type", "PrimitiveType": "String", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Budgets.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Budgets.json index 358047e508a01..ab3411156776e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Budgets.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Budgets.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Budgets::Budget.AutoAdjustData": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-autoadjustdata.html", @@ -302,6 +302,7 @@ "Properties": { "Groups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-iamactiondefinition.html#cfn-budgets-budgetsaction-iamactiondefinition-groups", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -315,6 +316,7 @@ }, "Roles": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-iamactiondefinition.html#cfn-budgets-budgetsaction-iamactiondefinition-roles", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -322,6 +324,7 @@ }, "Users": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-iamactiondefinition.html#cfn-budgets-budgetsaction-iamactiondefinition-users", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -340,6 +343,7 @@ }, "TargetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-scpactiondefinition.html#cfn-budgets-budgetsaction-scpactiondefinition-targetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -352,6 +356,7 @@ "Properties": { "InstanceIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-ssmactiondefinition.html#cfn-budgets-budgetsaction-ssmactiondefinition-instanceids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -460,6 +465,7 @@ }, "Subscribers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budgetsaction.html#cfn-budgets-budgetsaction-subscribers", + "DuplicatesAllowed": true, "ItemType": "Subscriber", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CE.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CE.json index adb13122cc3e9..53868822895d0 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CE.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CE.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CE::AnomalyMonitor.ResourceTag": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ce-anomalymonitor-resourcetag.html", @@ -106,6 +106,7 @@ }, "ResourceTags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalymonitor.html#cfn-ce-anomalymonitor-resourcetags", + "DuplicatesAllowed": true, "ItemType": "ResourceTag", "Required": false, "Type": "List", @@ -132,6 +133,7 @@ }, "MonitorArnList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalysubscription.html#cfn-ce-anomalysubscription-monitorarnlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -139,6 +141,7 @@ }, "ResourceTags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalysubscription.html#cfn-ce-anomalysubscription-resourcetags", + "DuplicatesAllowed": true, "ItemType": "ResourceTag", "Required": false, "Type": "List", @@ -146,6 +149,7 @@ }, "Subscribers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ce-anomalysubscription.html#cfn-ce-anomalysubscription-subscribers", + "DuplicatesAllowed": true, "ItemType": "Subscriber", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CUR.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CUR.json index 55460c640eb6c..6464557dbe491 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CUR.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CUR.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::CUR::ReportDefinition": { @@ -7,6 +7,7 @@ "Properties": { "AdditionalArtifacts": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cur-reportdefinition.html#cfn-cur-reportdefinition-additionalartifacts", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -14,6 +15,7 @@ }, "AdditionalSchemaElements": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cur-reportdefinition.html#cfn-cur-reportdefinition-additionalschemaelements", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Cassandra.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Cassandra.json index 1d3c12b622f3a..a1e27bd4bdf69 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Cassandra.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Cassandra.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Cassandra::Table.BillingMode": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-billingmode.html", @@ -42,13 +42,13 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-column.html#cfn-cassandra-table-column-columnname", "PrimitiveType": "String", "Required": true, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "ColumnType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cassandra-table-column.html#cfn-cassandra-table-column-columntype", "PrimitiveType": "String", "Required": true, - "UpdateType": "Mutable" + "UpdateType": "Conditional" } } }, diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CertificateManager.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CertificateManager.json index e52ce1891c93c..18218eb04cc03 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CertificateManager.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CertificateManager.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CertificateManager::Account.ExpiryEventsConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-certificatemanager-account-expiryeventsconfiguration.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Chatbot.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Chatbot.json index 5f82d928dfac9..eea1699289d70 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Chatbot.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Chatbot.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::Chatbot::SlackChannelConfiguration": { @@ -18,6 +18,7 @@ }, "GuardrailPolicies": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-chatbot-slackchannelconfiguration.html#cfn-chatbot-slackchannelconfiguration-guardrailpolicies", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -49,6 +50,7 @@ }, "SnsTopicArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-chatbot-slackchannelconfiguration.html#cfn-chatbot-slackchannelconfiguration-snstopicarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Cloud9.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Cloud9.json index 16403fc5f9191..ac159dcb92f5e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Cloud9.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Cloud9.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Cloud9::EnvironmentEC2.Repository": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloud9-environmentec2-repository.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudFormation.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudFormation.json index 9b6afa17df10c..308659ede88c1 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudFormation.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudFormation.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CloudFormation::HookVersion.LoggingConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-hookversion-loggingconfig.html", @@ -79,6 +79,17 @@ } } }, + "AWS::CloudFormation::StackSet.ManagedExecution": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-managedexecution.html", + "Properties": { + "Active": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-managedexecution.html#cfn-cloudformation-stackset-managedexecution-active", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::CloudFormation::StackSet.OperationPreferences": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-operationpreferences.html", "Properties": { @@ -114,6 +125,7 @@ }, "RegionOrder": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudformation-stackset-operationpreferences.html#cfn-cloudformation-stackset-operationpreferences-regionorder", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -648,8 +660,8 @@ }, "ManagedExecution": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-stackset.html#cfn-cloudformation-stackset-managedexecution", - "PrimitiveType": "Json", "Required": false, + "Type": "ManagedExecution", "UpdateType": "Mutable" }, "OperationPreferences": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudFront.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudFront.json index 6abc4ab6af604..2dd86f4e76957 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudFront.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudFront.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CloudFront::CachePolicy.CachePolicyConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-cachepolicy-cachepolicyconfig.html", @@ -1443,6 +1443,7 @@ "Properties": { "Items": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-accesscontrolallowheaders.html#cfn-cloudfront-responseheaderspolicy-accesscontrolallowheaders-items", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1455,6 +1456,7 @@ "Properties": { "Items": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-accesscontrolallowmethods.html#cfn-cloudfront-responseheaderspolicy-accesscontrolallowmethods-items", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1467,6 +1469,7 @@ "Properties": { "Items": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-accesscontrolalloworigins.html#cfn-cloudfront-responseheaderspolicy-accesscontrolalloworigins-items", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1479,6 +1482,7 @@ "Properties": { "Items": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-responseheaderspolicy-accesscontrolexposeheaders.html#cfn-cloudfront-responseheaderspolicy-accesscontrolexposeheaders-items", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -2012,6 +2016,12 @@ "Type": "FunctionConfig", "UpdateType": "Mutable" }, + "FunctionMetadata": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-function.html#cfn-cloudfront-function-functionmetadata", + "Required": false, + "Type": "FunctionMetadata", + "UpdateType": "Mutable" + }, "Name": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-function.html#cfn-cloudfront-function-name", "PrimitiveType": "String", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudTrail.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudTrail.json index 46c8add16845f..ce6f3750e609b 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudTrail.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudTrail.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CloudTrail::EventDataStore.AdvancedEventSelector": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-advancedeventselector.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudWatch.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudWatch.json index 0f2108abe0176..950b2ed02c82b 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudWatch.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CloudWatch.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CloudWatch::Alarm.Dimension": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-dimension.html", @@ -606,6 +606,7 @@ }, "AlarmActions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-compositealarm.html#cfn-cloudwatch-compositealarm-alarmactions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -631,6 +632,7 @@ }, "InsufficientDataActions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-compositealarm.html#cfn-cloudwatch-compositealarm-insufficientdataactions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -638,6 +640,7 @@ }, "OKActions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-compositealarm.html#cfn-cloudwatch-compositealarm-okactions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeArtifact.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeArtifact.json index dc6e6c7332863..76506f8296540 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeArtifact.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeArtifact.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::CodeArtifact::Domain": { @@ -39,6 +39,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-domain.html#cfn-codeartifact-domain-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -83,6 +84,7 @@ }, "ExternalConnections": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-repository.html#cfn-codeartifact-repository-externalconnections", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -102,6 +104,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-repository.html#cfn-codeartifact-repository-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -109,6 +112,7 @@ }, "Upstreams": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-repository.html#cfn-codeartifact-repository-upstreams", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeBuild.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeBuild.json index 00238dfc23845..063393ac000d5 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeBuild.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeBuild.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CodeBuild::Project.Artifacts": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeCommit.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeCommit.json index 8fd42615c87ee..7f2674c68fcc5 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeCommit.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeCommit.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CodeCommit::Repository.Code": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codecommit-repository-code.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeDeploy.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeDeploy.json index b75a8b51fa6f4..118d728aea11d 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeDeploy.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeDeploy.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CodeDeploy::DeploymentConfig.MinimumHealthyHosts": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codedeploy-deploymentconfig-minimumhealthyhosts.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeGuruProfiler.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeGuruProfiler.json index 3a54897888fb0..52e81dc7866a0 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeGuruProfiler.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeGuruProfiler.json @@ -1,6 +1,19 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { + "AWS::CodeGuruProfiler::ProfilingGroup.AgentPermissions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codeguruprofiler-profilinggroup-agentpermissions.html", + "Properties": { + "Principals": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codeguruprofiler-profilinggroup-agentpermissions.html#cfn-codeguruprofiler-profilinggroup-agentpermissions-principals", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::CodeGuruProfiler::ProfilingGroup.Channel": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codeguruprofiler-profilinggroup-channel.html", "Properties": { @@ -30,12 +43,13 @@ "Properties": { "AgentPermissions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeguruprofiler-profilinggroup.html#cfn-codeguruprofiler-profilinggroup-agentpermissions", - "PrimitiveType": "Json", "Required": false, + "Type": "AgentPermissions", "UpdateType": "Mutable" }, "AnomalyDetectionNotificationConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeguruprofiler-profilinggroup.html#cfn-codeguruprofiler-profilinggroup-anomalydetectionnotificationconfiguration", + "DuplicatesAllowed": true, "ItemType": "Channel", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeGuruReviewer.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeGuruReviewer.json index dcd8f3dc40753..49d3f024fa4a2 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeGuruReviewer.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeGuruReviewer.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::CodeGuruReviewer::RepositoryAssociation": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodePipeline.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodePipeline.json index 210cfa8131787..bd00fe4969126 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodePipeline.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodePipeline.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CodePipeline::CustomActionType.ArtifactDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codepipeline-customactiontype-artifactdetails.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeStar.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeStar.json index 3850a7515d3a2..e3c9e68acfc4e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeStar.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeStar.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CodeStar::GitHubRepository.Code": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codestar-githubrepository-code.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeStarConnections.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeStarConnections.json index d2582903b38d5..58a3f7aa71991 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeStarConnections.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeStarConnections.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::CodeStarConnections::Connection": { @@ -36,6 +36,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codestarconnections-connection.html#cfn-codestarconnections-connection-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeStarNotifications.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeStarNotifications.json index 9112269b48802..23acacc6f9f25 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeStarNotifications.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CodeStarNotifications.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CodeStarNotifications::NotificationRule.Target": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codestarnotifications-notificationrule-target.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Cognito.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Cognito.json index 1822837f1d339..3d49a7cc54d0c 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Cognito.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Cognito.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Cognito::IdentityPool.CognitoIdentityProvider": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-identitypool-cognitoidentityprovider.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Config.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Config.json index 737c34d789063..bd16e750a433a 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Config.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Config.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Config::ConfigRule.CustomPolicyDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-configrule-custompolicydetails.html", @@ -203,6 +203,23 @@ } } }, + "AWS::Config::ConformancePack.TemplateSSMDocumentDetails": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-conformancepack-templatessmdocumentdetails.html", + "Properties": { + "DocumentName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-conformancepack-templatessmdocumentdetails.html#cfn-config-conformancepack-templatessmdocumentdetails-documentname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DocumentVersion": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-conformancepack-templatessmdocumentdetails.html#cfn-config-conformancepack-templatessmdocumentdetails-documentversion", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::Config::DeliveryChannel.ConfigSnapshotDeliveryProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-config-deliverychannel-configsnapshotdeliveryproperties.html", "Properties": { @@ -638,6 +655,7 @@ "Properties": { "ConformancePackInputParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-conformancepack.html#cfn-config-conformancepack-conformancepackinputparameters", + "DuplicatesAllowed": true, "ItemType": "ConformancePackInputParameter", "Required": false, "Type": "List", @@ -675,8 +693,8 @@ }, "TemplateSSMDocumentDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-conformancepack.html#cfn-config-conformancepack-templatessmdocumentdetails", - "PrimitiveType": "Json", "Required": false, + "Type": "TemplateSSMDocumentDetails", "UpdateType": "Mutable" } } @@ -763,6 +781,7 @@ "Properties": { "ConformancePackInputParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-organizationconformancepack.html#cfn-config-organizationconformancepack-conformancepackinputparameters", + "DuplicatesAllowed": true, "ItemType": "ConformancePackInputParameter", "Required": false, "Type": "List", @@ -782,6 +801,7 @@ }, "ExcludedAccounts": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-organizationconformancepack.html#cfn-config-organizationconformancepack-excludedaccounts", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Connect.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Connect.json index 4e083bd594937..88a8d316322a9 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Connect.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Connect.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Connect::HoursOfOperation.HoursOfOperationConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-hoursofoperation-hoursofoperationconfig.html", @@ -247,6 +247,202 @@ } } }, + "AWS::Connect::Rule.Actions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-actions.html", + "Properties": { + "AssignContactCategoryActions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-actions.html#cfn-connect-rule-actions-assigncontactcategoryactions", + "DuplicatesAllowed": false, + "PrimitiveItemType": "Json", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "EventBridgeActions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-actions.html#cfn-connect-rule-actions-eventbridgeactions", + "DuplicatesAllowed": false, + "ItemType": "EventBridgeAction", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "SendNotificationActions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-actions.html#cfn-connect-rule-actions-sendnotificationactions", + "DuplicatesAllowed": false, + "ItemType": "SendNotificationAction", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "TaskActions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-actions.html#cfn-connect-rule-actions-taskactions", + "DuplicatesAllowed": false, + "ItemType": "TaskAction", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::Connect::Rule.EventBridgeAction": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-eventbridgeaction.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-eventbridgeaction.html#cfn-connect-rule-eventbridgeaction-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::Connect::Rule.NotificationRecipientType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-notificationrecipienttype.html", + "Properties": { + "UserArns": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-notificationrecipienttype.html#cfn-connect-rule-notificationrecipienttype-userarns", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "UserTags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-notificationrecipienttype.html#cfn-connect-rule-notificationrecipienttype-usertags", + "PrimitiveItemType": "String", + "Required": false, + "Type": "Map", + "UpdateType": "Mutable" + } + } + }, + "AWS::Connect::Rule.Reference": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-reference.html", + "Properties": { + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-reference.html#cfn-connect-rule-reference-type", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-reference.html#cfn-connect-rule-reference-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::Connect::Rule.RuleTriggerEventSource": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-ruletriggereventsource.html", + "Properties": { + "EventSourceName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-ruletriggereventsource.html#cfn-connect-rule-ruletriggereventsource-eventsourcename", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "IntegrationAssociationArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-ruletriggereventsource.html#cfn-connect-rule-ruletriggereventsource-integrationassociationarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::Connect::Rule.SendNotificationAction": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-sendnotificationaction.html", + "Properties": { + "Content": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-sendnotificationaction.html#cfn-connect-rule-sendnotificationaction-content", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "ContentType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-sendnotificationaction.html#cfn-connect-rule-sendnotificationaction-contenttype", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "DeliveryMethod": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-sendnotificationaction.html#cfn-connect-rule-sendnotificationaction-deliverymethod", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Recipient": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-sendnotificationaction.html#cfn-connect-rule-sendnotificationaction-recipient", + "Required": true, + "Type": "NotificationRecipientType", + "UpdateType": "Mutable" + }, + "Subject": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-sendnotificationaction.html#cfn-connect-rule-sendnotificationaction-subject", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Connect::Rule.TaskAction": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-taskaction.html", + "Properties": { + "ContactFlowArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-taskaction.html#cfn-connect-rule-taskaction-contactflowarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-taskaction.html#cfn-connect-rule-taskaction-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-taskaction.html#cfn-connect-rule-taskaction-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "References": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-taskaction.html#cfn-connect-rule-taskaction-references", + "ItemType": "Reference", + "Required": false, + "Type": "Map", + "UpdateType": "Mutable" + } + } + }, + "AWS::Connect::TaskTemplate.Constraints": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-constraints.html", + "Properties": { + "InvisibleFields": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-constraints.html#cfn-connect-tasktemplate-constraints-invisiblefields", + "DuplicatesAllowed": true, + "ItemType": "InvisibleFieldInfo", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "ReadOnlyFields": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-constraints.html#cfn-connect-tasktemplate-constraints-readonlyfields", + "DuplicatesAllowed": true, + "ItemType": "ReadOnlyFieldInfo", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "RequiredFields": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-constraints.html#cfn-connect-tasktemplate-constraints-requiredfields", + "DuplicatesAllowed": true, + "ItemType": "RequiredFieldInfo", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::Connect::TaskTemplate.DefaultFieldValue": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-defaultfieldvalue.html", "Properties": { @@ -281,6 +477,7 @@ }, "SingleSelectOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-field.html#cfn-connect-tasktemplate-field-singleselectoptions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -305,6 +502,39 @@ } } }, + "AWS::Connect::TaskTemplate.InvisibleFieldInfo": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-invisiblefieldinfo.html", + "Properties": { + "Id": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-invisiblefieldinfo.html#cfn-connect-tasktemplate-invisiblefieldinfo-id", + "Required": true, + "Type": "FieldIdentifier", + "UpdateType": "Mutable" + } + } + }, + "AWS::Connect::TaskTemplate.ReadOnlyFieldInfo": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-readonlyfieldinfo.html", + "Properties": { + "Id": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-readonlyfieldinfo.html#cfn-connect-tasktemplate-readonlyfieldinfo-id", + "Required": true, + "Type": "FieldIdentifier", + "UpdateType": "Mutable" + } + } + }, + "AWS::Connect::TaskTemplate.RequiredFieldInfo": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-requiredfieldinfo.html", + "Properties": { + "Id": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-requiredfieldinfo.html#cfn-connect-tasktemplate-requiredfieldinfo-id", + "Required": true, + "Type": "FieldIdentifier", + "UpdateType": "Mutable" + } + } + }, "AWS::Connect::User.UserIdentityInfo": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-user-useridentityinfo.html", "Properties": { @@ -717,6 +947,60 @@ } } }, + "AWS::Connect::Rule": { + "Attributes": { + "RuleArn": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-rule.html", + "Properties": { + "Actions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-rule.html#cfn-connect-rule-actions", + "Required": true, + "Type": "Actions", + "UpdateType": "Mutable" + }, + "Function": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-rule.html#cfn-connect-rule-function", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "InstanceArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-rule.html#cfn-connect-rule-instancearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-rule.html#cfn-connect-rule-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "PublishStatus": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-rule.html#cfn-connect-rule-publishstatus", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-rule.html#cfn-connect-rule-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "TriggerEventSource": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-rule.html#cfn-connect-rule-triggereventsource", + "Required": true, + "Type": "RuleTriggerEventSource", + "UpdateType": "Immutable" + } + } + }, "AWS::Connect::TaskTemplate": { "Attributes": { "Arn": { @@ -733,8 +1017,8 @@ }, "Constraints": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-tasktemplate.html#cfn-connect-tasktemplate-constraints", - "PrimitiveType": "Json", "Required": false, + "Type": "Constraints", "UpdateType": "Mutable" }, "ContactFlowArn": { @@ -745,6 +1029,7 @@ }, "Defaults": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-tasktemplate.html#cfn-connect-tasktemplate-defaults", + "DuplicatesAllowed": true, "ItemType": "DefaultFieldValue", "Required": false, "Type": "List", @@ -758,6 +1043,7 @@ }, "Fields": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-tasktemplate.html#cfn-connect-tasktemplate-fields", + "DuplicatesAllowed": true, "ItemType": "Field", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ConnectCampaigns.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ConnectCampaigns.json index 1ce9adbda67f7..ef73df6253e0c 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ConnectCampaigns.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ConnectCampaigns.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ConnectCampaigns::Campaign.DialerConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connectcampaigns-campaign-dialerconfig.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ControlTower.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ControlTower.json index 1a3eb40754fbe..c91ac83a6429f 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ControlTower.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ControlTower.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::ControlTower::EnabledControl": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CustomerProfiles.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CustomerProfiles.json index 4fe4fb4172768..ed13f958363d7 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CustomerProfiles.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_CustomerProfiles.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::CustomerProfiles::Integration.ConnectorOperator": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-customerprofiles-integration-connectoroperator.html", @@ -65,6 +65,7 @@ }, "Tasks": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-customerprofiles-integration-flowdefinition.html#cfn-customerprofiles-integration-flowdefinition-tasks", + "DuplicatesAllowed": true, "ItemType": "Task", "Required": true, "Type": "List", @@ -296,6 +297,7 @@ }, "SourceFields": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-customerprofiles-integration-task.html#cfn-customerprofiles-integration-task-sourcefields", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -303,6 +305,7 @@ }, "TaskProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-customerprofiles-integration-task.html#cfn-customerprofiles-integration-task-taskproperties", + "DuplicatesAllowed": true, "ItemType": "TaskPropertiesMap", "Required": false, "Type": "List", @@ -400,6 +403,7 @@ }, "ObjectTypeKeyList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-customerprofiles-objecttype-keymap.html#cfn-customerprofiles-objecttype-keymap-objecttypekeylist", + "DuplicatesAllowed": true, "ItemType": "ObjectTypeKey", "Required": false, "Type": "List", @@ -435,6 +439,7 @@ "Properties": { "FieldNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-customerprofiles-objecttype-objecttypekey.html#cfn-customerprofiles-objecttype-objecttypekey-fieldnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -442,6 +447,7 @@ }, "StandardIdentifiers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-customerprofiles-objecttype-objecttypekey.html#cfn-customerprofiles-objecttype-objecttypekey-standardidentifiers", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -488,6 +494,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-customerprofiles-domain.html#cfn-customerprofiles-domain-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -526,6 +533,7 @@ }, "ObjectTypeNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-customerprofiles-integration.html#cfn-customerprofiles-integration-objecttypenames", + "DuplicatesAllowed": true, "ItemType": "ObjectTypeMapping", "Required": false, "Type": "List", @@ -533,6 +541,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-customerprofiles-integration.html#cfn-customerprofiles-integration-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -589,6 +598,7 @@ }, "Fields": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-customerprofiles-objecttype.html#cfn-customerprofiles-objecttype-fields", + "DuplicatesAllowed": true, "ItemType": "FieldMap", "Required": false, "Type": "List", @@ -596,6 +606,7 @@ }, "Keys": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-customerprofiles-objecttype.html#cfn-customerprofiles-objecttype-keys", + "DuplicatesAllowed": true, "ItemType": "KeyMap", "Required": false, "Type": "List", @@ -609,6 +620,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-customerprofiles-objecttype.html#cfn-customerprofiles-objecttype-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DAX.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DAX.json index 964f45503283f..33a4f88202e52 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DAX.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DAX.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::DAX::Cluster.SSESpecification": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dax-cluster-ssespecification.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DLM.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DLM.json index 8812ebda11109..ce9676422535e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DLM.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DLM.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::DLM::LifecyclePolicy.Action": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-action.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DMS.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DMS.json index 0d220a1317bcf..354651b87ea7e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DMS.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DMS.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::DMS::Endpoint.DocDbSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dms-endpoint-docdbsettings.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DataBrew.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DataBrew.json index 0f6b764945767..7e93a9f970bc1 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DataBrew.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DataBrew.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::DataBrew::Dataset.CsvOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-dataset-csvoptions.html", @@ -145,6 +145,7 @@ }, "SheetIndexes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-dataset-exceloptions.html#cfn-databrew-dataset-exceloptions-sheetindexes", + "DuplicatesAllowed": true, "PrimitiveItemType": "Integer", "Required": false, "Type": "List", @@ -152,6 +153,7 @@ }, "SheetNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-dataset-exceloptions.html#cfn-databrew-dataset-exceloptions-sheetnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -193,6 +195,7 @@ }, "ValuesMap": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-dataset-filterexpression.html#cfn-databrew-dataset-filterexpression-valuesmap", + "DuplicatesAllowed": true, "ItemType": "FilterValue", "Required": true, "Type": "List", @@ -308,6 +311,7 @@ }, "Parameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-dataset-pathoptions.html#cfn-databrew-dataset-pathoptions-parameters", + "DuplicatesAllowed": true, "ItemType": "PathParameter", "Required": false, "Type": "List", @@ -354,6 +358,7 @@ "Properties": { "Statistics": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-job-allowedstatistics.html#cfn-databrew-job-allowedstatistics-statistics", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -383,6 +388,7 @@ "Properties": { "Selectors": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-job-columnstatisticsconfiguration.html#cfn-databrew-job-columnstatisticsconfiguration-selectors", + "DuplicatesAllowed": true, "ItemType": "ColumnSelector", "Required": false, "Type": "List", @@ -499,6 +505,7 @@ }, "EntityTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-job-entitydetectorconfiguration.html#cfn-databrew-job-entitydetectorconfiguration-entitytypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -606,17 +613,12 @@ } } }, - "AWS::DataBrew::Job.ParameterMap": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-job-parametermap.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "AWS::DataBrew::Job.ProfileConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-job-profileconfiguration.html", "Properties": { "ColumnStatisticsConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-job-profileconfiguration.html#cfn-databrew-job-profileconfiguration-columnstatisticsconfigurations", + "DuplicatesAllowed": true, "ItemType": "ColumnStatisticsConfiguration", "Required": false, "Type": "List", @@ -636,6 +638,7 @@ }, "ProfileColumns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-job-profileconfiguration.html#cfn-databrew-job-profileconfiguration-profilecolumns", + "DuplicatesAllowed": true, "ItemType": "ColumnSelector", "Required": false, "Type": "List", @@ -699,8 +702,9 @@ "Properties": { "Parameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-job-statisticoverride.html#cfn-databrew-job-statisticoverride-parameters", + "PrimitiveItemType": "String", "Required": true, - "Type": "ParameterMap", + "Type": "Map", "UpdateType": "Mutable" }, "Statistic": { @@ -716,6 +720,7 @@ "Properties": { "IncludedStatistics": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-job-statisticsconfiguration.html#cfn-databrew-job-statisticsconfiguration-includedstatistics", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -723,6 +728,7 @@ }, "Overrides": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-job-statisticsconfiguration.html#cfn-databrew-job-statisticsconfiguration-overrides", + "DuplicatesAllowed": true, "ItemType": "StatisticOverride", "Required": false, "Type": "List", @@ -776,7 +782,7 @@ "Parameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-recipe-action.html#cfn-databrew-recipe-action-parameters", "Required": false, - "Type": "ParameterMap", + "Type": "RecipeParameters", "UpdateType": "Mutable" } } @@ -833,11 +839,22 @@ } } }, - "AWS::DataBrew::Recipe.ParameterMap": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-recipe-parametermap.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" + "AWS::DataBrew::Recipe.Input": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-recipe-input.html", + "Properties": { + "DataCatalogInputDefinition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-recipe-input.html#cfn-databrew-recipe-input-datacataloginputdefinition", + "Required": false, + "Type": "DataCatalogInputDefinition", + "UpdateType": "Mutable" + }, + "S3InputDefinition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-recipe-input.html#cfn-databrew-recipe-input-s3inputdefinition", + "Required": false, + "Type": "S3Location", + "UpdateType": "Mutable" + } + } }, "AWS::DataBrew::Recipe.RecipeParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-recipe-recipeparameters.html", @@ -1018,8 +1035,8 @@ }, "Input": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-recipe-recipeparameters.html#cfn-databrew-recipe-recipeparameters-input", - "PrimitiveType": "Json", "Required": false, + "Type": "Input", "UpdateType": "Mutable" }, "Interval": { @@ -1260,6 +1277,7 @@ }, "SheetIndexes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-recipe-recipeparameters.html#cfn-databrew-recipe-recipeparameters-sheetindexes", + "DuplicatesAllowed": true, "PrimitiveItemType": "Integer", "Required": false, "Type": "List", @@ -1267,6 +1285,7 @@ }, "SheetNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-recipe-recipeparameters.html#cfn-databrew-recipe-recipeparameters-sheetnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1465,6 +1484,7 @@ }, "ConditionExpressions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-recipe-recipestep.html#cfn-databrew-recipe-recipestep-conditionexpressions", + "DuplicatesAllowed": true, "ItemType": "ConditionExpression", "Required": false, "Type": "List", @@ -1534,6 +1554,7 @@ }, "ColumnSelectors": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-ruleset-rule.html#cfn-databrew-ruleset-rule-columnselectors", + "DuplicatesAllowed": true, "ItemType": "ColumnSelector", "Required": false, "Type": "List", @@ -1553,6 +1574,7 @@ }, "SubstitutionMap": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-databrew-ruleset-rule.html#cfn-databrew-ruleset-rule-substitutionmap", + "DuplicatesAllowed": true, "ItemType": "SubstitutionValue", "Required": false, "Type": "List", @@ -1656,6 +1678,7 @@ "Properties": { "DataCatalogOutputs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-databrew-job.html#cfn-databrew-job-datacatalogoutputs", + "DuplicatesAllowed": true, "ItemType": "DataCatalogOutput", "Required": false, "Type": "List", @@ -1663,6 +1686,7 @@ }, "DatabaseOutputs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-databrew-job.html#cfn-databrew-job-databaseoutputs", + "DuplicatesAllowed": true, "ItemType": "DatabaseOutput", "Required": false, "Type": "List", @@ -1724,6 +1748,7 @@ }, "Outputs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-databrew-job.html#cfn-databrew-job-outputs", + "DuplicatesAllowed": true, "ItemType": "Output", "Required": false, "Type": "List", @@ -1775,6 +1800,7 @@ }, "ValidationConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-databrew-job.html#cfn-databrew-job-validationconfigurations", + "DuplicatesAllowed": true, "ItemType": "ValidationConfiguration", "Required": false, "Type": "List", @@ -1842,6 +1868,7 @@ }, "Steps": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-databrew-recipe.html#cfn-databrew-recipe-steps", + "DuplicatesAllowed": true, "ItemType": "RecipeStep", "Required": true, "Type": "List", @@ -1874,6 +1901,7 @@ }, "Rules": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-databrew-ruleset.html#cfn-databrew-ruleset-rules", + "DuplicatesAllowed": true, "ItemType": "Rule", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DataPipeline.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DataPipeline.json index beb4dd5c4f126..bf1280cfe6b06 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DataPipeline.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DataPipeline.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::DataPipeline::Pipeline.Field": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datapipeline-pipeline-field.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DataSync.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DataSync.json index 76e72bd2513bc..12e39e6baa793 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DataSync.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DataSync.json @@ -1,11 +1,12 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::DataSync::LocationEFS.Ec2Config": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationefs-ec2config.html", "Properties": { "SecurityGroupArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationefs-ec2config.html#cfn-datasync-locationefs-ec2config-securitygrouparns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -181,6 +182,7 @@ "Properties": { "AgentArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-datasync-locationnfs-onpremconfig.html#cfn-datasync-locationnfs-onpremconfig-agentarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -360,6 +362,7 @@ }, "SecurityGroupArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-securitygrouparns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -367,6 +370,7 @@ }, "SubnetArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html#cfn-datasync-agent-subnetarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -464,6 +468,7 @@ }, "SecurityGroupArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxlustre.html#cfn-datasync-locationfsxlustre-securitygrouparns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -507,6 +512,7 @@ }, "SecurityGroupArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxontap.html#cfn-datasync-locationfsxontap-securitygrouparns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -559,6 +565,7 @@ }, "SecurityGroupArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxopenzfs.html#cfn-datasync-locationfsxopenzfs-securitygrouparns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -611,6 +618,7 @@ }, "SecurityGroupArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html#cfn-datasync-locationfsxwindows-securitygrouparns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -651,6 +659,7 @@ "Properties": { "AgentArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-agentarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -694,6 +703,7 @@ }, "NameNodes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html#cfn-datasync-locationhdfs-namenodes", + "DuplicatesAllowed": true, "ItemType": "NameNode", "Required": true, "Type": "List", @@ -797,6 +807,7 @@ }, "AgentArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html#cfn-datasync-locationobjectstorage-agentarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -906,6 +917,7 @@ "Properties": { "AgentArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html#cfn-datasync-locationsmb-agentarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -996,6 +1008,7 @@ }, "Excludes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-excludes", + "DuplicatesAllowed": true, "ItemType": "FilterRule", "Required": false, "Type": "List", @@ -1003,6 +1016,7 @@ }, "Includes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html#cfn-datasync-task-includes", + "DuplicatesAllowed": true, "ItemType": "FilterRule", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Detective.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Detective.json index c3ce1d9fac55c..e95c4883f8bea 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Detective.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Detective.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::Detective::Graph": { @@ -12,6 +12,7 @@ "Properties": { "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-detective-graph.html#cfn-detective-graph-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DevOpsGuru.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DevOpsGuru.json index 3f534d0c617e4..8bd0594cf9b5a 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DevOpsGuru.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DevOpsGuru.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::DevOpsGuru::NotificationChannel.NotificationChannelConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-notificationchannelconfig.html", @@ -23,6 +23,7 @@ "Properties": { "MessageTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-notificationfilterconfig.html#cfn-devopsguru-notificationchannel-notificationfilterconfig-messagetypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -30,6 +31,7 @@ }, "Severities": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-notificationchannel-notificationfilterconfig.html#cfn-devopsguru-notificationchannel-notificationfilterconfig-severities", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -53,6 +55,7 @@ "Properties": { "StackNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-resourcecollection-cloudformationcollectionfilter.html#cfn-devopsguru-resourcecollection-cloudformationcollectionfilter-stacknames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -71,6 +74,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-resourcecollection-resourcecollectionfilter.html#cfn-devopsguru-resourcecollection-resourcecollectionfilter-tags", + "DuplicatesAllowed": true, "ItemType": "TagCollection", "Required": false, "Type": "List", @@ -89,6 +93,7 @@ }, "TagValues": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-devopsguru-resourcecollection-tagcollection.html#cfn-devopsguru-resourcecollection-tagcollection-tagvalues", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DirectoryService.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DirectoryService.json index e94e763424f5b..d737e20fc7eb9 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DirectoryService.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DirectoryService.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::DirectoryService::MicrosoftAD.VpcSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-directoryservice-microsoftad-vpcsettings.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DocDB.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DocDB.json index ca2b512018b17..0bdbdd8be5c73 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DocDB.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DocDB.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::DocDB::DBCluster": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DynamoDB.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DynamoDB.json index 83c72b6d624a3..cd69f07bb4f59 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DynamoDB.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_DynamoDB.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::DynamoDB::GlobalTable.AttributeDefinition": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-attributedefinition.html", @@ -96,13 +96,13 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-keyschema.html#cfn-dynamodb-globaltable-keyschema-attributename", "PrimitiveType": "String", "Required": true, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "KeyType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-keyschema.html#cfn-dynamodb-globaltable-keyschema-keytype", "PrimitiveType": "String", "Required": true, - "UpdateType": "Mutable" + "UpdateType": "Conditional" } } }, @@ -151,13 +151,13 @@ "PrimitiveItemType": "String", "Required": false, "Type": "List", - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "ProjectionType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-globaltable-projection.html#cfn-dynamodb-globaltable-projection-projectiontype", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" } } }, diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EC2.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EC2.json index 1e3cc4003a852..c7e9e3094539e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EC2.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EC2.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::EC2::CapacityReservation.TagSpecification": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservation-tagspecification.html", @@ -876,6 +876,29 @@ } } }, + "AWS::EC2::FlowLog.DestinationOptions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-flowlog-destinationoptions.html", + "Properties": { + "FileFormat": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-flowlog-destinationoptions.html#cfn-ec2-flowlog-destinationoptions-fileformat", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "HiveCompatiblePartitions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-flowlog-destinationoptions.html#cfn-ec2-flowlog-destinationoptions-hivecompatiblepartitions", + "PrimitiveType": "Boolean", + "Required": true, + "UpdateType": "Immutable" + }, + "PerHourPartition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-flowlog-destinationoptions.html#cfn-ec2-flowlog-destinationoptions-perhourpartition", + "PrimitiveType": "Boolean", + "Required": true, + "UpdateType": "Immutable" + } + } + }, "AWS::EC2::IPAM.IpamOperatingRegion": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipam-ipamoperatingregion.html", "Properties": { @@ -2462,6 +2485,7 @@ }, "ThroughResources": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-accessscopepathrequest.html#cfn-ec2-networkinsightsaccessscope-accessscopepathrequest-throughresources", + "DuplicatesAllowed": true, "ItemType": "ThroughResourcesStatementRequest", "Required": false, "Type": "List", @@ -2474,6 +2498,7 @@ "Properties": { "DestinationAddresses": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-destinationaddresses", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2481,6 +2506,7 @@ }, "DestinationPorts": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-destinationports", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2488,6 +2514,7 @@ }, "DestinationPrefixLists": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-destinationprefixlists", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2495,6 +2522,7 @@ }, "Protocols": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-protocols", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2502,6 +2530,7 @@ }, "SourceAddresses": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-sourceaddresses", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2509,6 +2538,7 @@ }, "SourcePorts": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-sourceports", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2516,6 +2546,7 @@ }, "SourcePrefixLists": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-sourceprefixlists", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2545,6 +2576,7 @@ "Properties": { "ResourceTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-resourcestatementrequest.html#cfn-ec2-networkinsightsaccessscope-resourcestatementrequest-resourcetypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2552,6 +2584,7 @@ }, "Resources": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-resourcestatementrequest.html#cfn-ec2-networkinsightsaccessscope-resourcestatementrequest-resources", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2713,6 +2746,7 @@ "Properties": { "DestinationAddresses": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysispacketheader.html#cfn-ec2-networkinsightsanalysis-analysispacketheader-destinationaddresses", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2720,6 +2754,7 @@ }, "DestinationPortRanges": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysispacketheader.html#cfn-ec2-networkinsightsanalysis-analysispacketheader-destinationportranges", + "DuplicatesAllowed": true, "ItemType": "PortRange", "Required": false, "Type": "List", @@ -2733,6 +2768,7 @@ }, "SourceAddresses": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysispacketheader.html#cfn-ec2-networkinsightsanalysis-analysispacketheader-sourceaddresses", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2740,6 +2776,7 @@ }, "SourcePortRanges": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysispacketheader.html#cfn-ec2-networkinsightsanalysis-analysispacketheader-sourceportranges", + "DuplicatesAllowed": true, "ItemType": "PortRange", "Required": false, "Type": "List", @@ -2882,6 +2919,7 @@ }, "Addresses": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-addresses", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2895,6 +2933,7 @@ }, "AvailabilityZones": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-availabilityzones", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2902,6 +2941,7 @@ }, "Cidrs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-cidrs", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -3005,6 +3045,7 @@ }, "LoadBalancerTargetGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-loadbalancertargetgroups", + "DuplicatesAllowed": true, "ItemType": "AnalysisComponent", "Required": false, "Type": "List", @@ -3048,6 +3089,7 @@ }, "PortRanges": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-portranges", + "DuplicatesAllowed": true, "ItemType": "PortRange", "Required": false, "Type": "List", @@ -3061,6 +3103,7 @@ }, "Protocols": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-protocols", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -3092,6 +3135,7 @@ }, "SecurityGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-securitygroups", + "DuplicatesAllowed": true, "ItemType": "AnalysisComponent", "Required": false, "Type": "List", @@ -3188,6 +3232,7 @@ }, "AdditionalDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-additionaldetails", + "DuplicatesAllowed": true, "ItemType": "AdditionalDetail", "Required": false, "Type": "List", @@ -3213,6 +3258,7 @@ }, "Explanations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-explanations", + "DuplicatesAllowed": true, "ItemType": "Explanation", "Required": false, "Type": "List", @@ -3362,13 +3408,13 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-privateipaddressspecification.html#cfn-ec2-networkinterface-privateipaddressspecification-primary", "PrimitiveType": "Boolean", "Required": true, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "PrivateIpAddress": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-privateipaddressspecification.html#cfn-ec2-networkinterface-privateipaddressspecification-privateipaddress", "PrimitiveType": "String", "Required": true, - "UpdateType": "Mutable" + "UpdateType": "Conditional" } } }, @@ -4521,6 +4567,29 @@ } } }, + "AWS::EC2::Subnet.PrivateDnsNameOptionsOnLaunch": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-subnet-privatednsnameoptionsonlaunch.html", + "Properties": { + "EnableResourceNameDnsAAAARecord": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-subnet-privatednsnameoptionsonlaunch.html#cfn-ec2-subnet-privatednsnameoptionsonlaunch-enableresourcenamednsaaaarecord", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "EnableResourceNameDnsARecord": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-subnet-privatednsnameoptionsonlaunch.html#cfn-ec2-subnet-privatednsnameoptionsonlaunch-enableresourcenamednsarecord", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "HostnameType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-subnet-privatednsnameoptionsonlaunch.html#cfn-ec2-subnet-privatednsnameoptionsonlaunch-hostnametype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::EC2::TrafficMirrorFilterRule.TrafficMirrorPortRange": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-trafficmirrorfilterrule-trafficmirrorportrange.html", "Properties": { @@ -4538,6 +4607,29 @@ } } }, + "AWS::EC2::TransitGatewayAttachment.Options": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayattachment-options.html", + "Properties": { + "ApplianceModeSupport": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayattachment-options.html#cfn-ec2-transitgatewayattachment-options-appliancemodesupport", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DnsSupport": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayattachment-options.html#cfn-ec2-transitgatewayattachment-options-dnssupport", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Ipv6Support": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayattachment-options.html#cfn-ec2-transitgatewayattachment-options-ipv6support", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::EC2::TransitGatewayConnect.TransitGatewayConnectOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnect-transitgatewayconnectoptions.html", "Properties": { @@ -4549,6 +4641,69 @@ } } }, + "AWS::EC2::TransitGatewayMulticastDomain.Options": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaymulticastdomain-options.html", + "Properties": { + "AutoAcceptSharedAssociations": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaymulticastdomain-options.html#cfn-ec2-transitgatewaymulticastdomain-options-autoacceptsharedassociations", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Igmpv2Support": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaymulticastdomain-options.html#cfn-ec2-transitgatewaymulticastdomain-options-igmpv2support", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "StaticSourcesSupport": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaymulticastdomain-options.html#cfn-ec2-transitgatewaymulticastdomain-options-staticsourcessupport", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::EC2::TransitGatewayPeeringAttachment.PeeringAttachmentStatus": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaypeeringattachment-peeringattachmentstatus.html", + "Properties": { + "Code": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaypeeringattachment-peeringattachmentstatus.html#cfn-ec2-transitgatewaypeeringattachment-peeringattachmentstatus-code", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Message": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaypeeringattachment-peeringattachmentstatus.html#cfn-ec2-transitgatewaypeeringattachment-peeringattachmentstatus-message", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::EC2::TransitGatewayVpcAttachment.Options": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayvpcattachment-options.html", + "Properties": { + "ApplianceModeSupport": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayvpcattachment-options.html#cfn-ec2-transitgatewayvpcattachment-options-appliancemodesupport", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DnsSupport": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayvpcattachment-options.html#cfn-ec2-transitgatewayvpcattachment-options-dnssupport", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Ipv6Support": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayvpcattachment-options.html#cfn-ec2-transitgatewayvpcattachment-options-ipv6support", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::EC2::VPNConnection.VpnTunnelOptionsSpecification": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html", "Properties": { @@ -5279,8 +5434,8 @@ }, "DestinationOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-destinationoptions", - "PrimitiveType": "Json", "Required": false, + "Type": "DestinationOptions", "UpdateType": "Immutable" }, "LogDestination": { @@ -6254,6 +6409,7 @@ "Properties": { "ExcludePaths": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsaccessscope.html#cfn-ec2-networkinsightsaccessscope-excludepaths", + "DuplicatesAllowed": true, "ItemType": "AccessScopePathRequest", "Required": false, "Type": "List", @@ -6261,6 +6417,7 @@ }, "MatchPaths": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsaccessscope.html#cfn-ec2-networkinsightsaccessscope-matchpaths", + "DuplicatesAllowed": true, "ItemType": "AccessScopePathRequest", "Required": false, "Type": "List", @@ -6268,6 +6425,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsaccessscope.html#cfn-ec2-networkinsightsaccessscope-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -6312,6 +6470,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsaccessscopeanalysis.html#cfn-ec2-networkinsightsaccessscopeanalysis-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -6356,7 +6515,6 @@ "PrimitiveType": "String" }, "SuggestedAccounts": { - "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Type": "List" } @@ -6373,6 +6531,7 @@ }, "FilterInArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html#cfn-ec2-networkinsightsanalysis-filterinarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -6386,6 +6545,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html#cfn-ec2-networkinsightsanalysis-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -6451,6 +6611,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightspath.html#cfn-ec2-networkinsightspath-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -6467,7 +6628,6 @@ "PrimitiveType": "String" }, "SecondaryPrivateIpAddresses": { - "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Type": "List" } @@ -6520,7 +6680,7 @@ "ItemType": "PrivateIpAddressSpecification", "Required": false, "Type": "List", - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "SecondaryPrivateIpAddressCount": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-secondaryprivateipaddresscount", @@ -6602,6 +6762,35 @@ } } }, + "AWS::EC2::NetworkPerformanceMetricSubscription": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkperformancemetricsubscription.html", + "Properties": { + "Destination": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkperformancemetricsubscription.html#cfn-ec2-networkperformancemetricsubscription-destination", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Metric": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkperformancemetricsubscription.html#cfn-ec2-networkperformancemetricsubscription-metric", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Source": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkperformancemetricsubscription.html#cfn-ec2-networkperformancemetricsubscription-source", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Statistic": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkperformancemetricsubscription.html#cfn-ec2-networkperformancemetricsubscription-statistic", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, "AWS::EC2::PlacementGroup": { "Attributes": { "GroupName": { @@ -6649,6 +6838,7 @@ }, "Entries": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-prefixlist.html#cfn-ec2-prefixlist-entries", + "DuplicatesAllowed": true, "ItemType": "Entry", "Required": false, "Type": "List", @@ -6668,6 +6858,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-prefixlist.html#cfn-ec2-prefixlist-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -6995,7 +7186,6 @@ "PrimitiveType": "String" }, "Ipv6CidrBlocks": { - "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Type": "List" }, @@ -7048,7 +7238,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-ipv6cidrblock", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "Ipv6Native": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-ipv6native", @@ -7070,8 +7260,8 @@ }, "PrivateDnsNameOptionsOnLaunch": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-privatednsnameoptionsonlaunch", - "PrimitiveType": "Json", "Required": false, + "Type": "PrivateDnsNameOptionsOnLaunch", "UpdateType": "Mutable" }, "Tags": { @@ -7403,6 +7593,7 @@ }, "TransitGatewayCidrBlocks": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-transitgatewaycidrblocks", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -7426,8 +7617,8 @@ "Properties": { "Options": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayattachment.html#cfn-ec2-transitgatewayattachment-options", - "PrimitiveType": "Json", "Required": false, + "Type": "Options", "UpdateType": "Mutable" }, "SubnetIds": { @@ -7485,6 +7676,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayconnect.html#cfn-ec2-transitgatewayconnect-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -7517,12 +7709,13 @@ "Properties": { "Options": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastdomain.html#cfn-ec2-transitgatewaymulticastdomain-options", - "PrimitiveType": "Json", "Required": false, + "Type": "Options", "UpdateType": "Mutable" }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastdomain.html#cfn-ec2-transitgatewaymulticastdomain-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -7676,6 +7869,15 @@ "State": { "PrimitiveType": "String" }, + "Status": { + "Type": "PeeringAttachmentStatus" + }, + "Status.Code": { + "PrimitiveType": "String" + }, + "Status.Message": { + "PrimitiveType": "String" + }, "TransitGatewayAttachmentId": { "PrimitiveType": "String" } @@ -7702,6 +7904,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaypeeringattachment.html#cfn-ec2-transitgatewaypeeringattachment-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -7814,8 +8017,8 @@ }, "Options": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayvpcattachment.html#cfn-ec2-transitgatewayvpcattachment-options", - "PrimitiveType": "Json", "Required": false, + "Type": "Options", "UpdateType": "Mutable" }, "RemoveSubnetIds": { @@ -7862,7 +8065,6 @@ "PrimitiveType": "String" }, "CidrBlockAssociations": { - "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Type": "List" }, @@ -7873,7 +8075,6 @@ "PrimitiveType": "String" }, "Ipv6CidrBlocks": { - "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Type": "List" }, @@ -7905,7 +8106,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-ec2-vpc-instancetenancy", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "Ipv4IpamPoolId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-ec2-vpc-ipv4ipampoolid", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ECR.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ECR.json index 3bd995f84cb2b..e08eb7162ea36 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ECR.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ECR.json @@ -1,11 +1,51 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { + "AWS::ECR::PublicRepository.RepositoryCatalogData": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-publicrepository-repositorycatalogdata.html", + "Properties": { + "AboutText": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-publicrepository-repositorycatalogdata.html#cfn-ecr-publicrepository-repositorycatalogdata-abouttext", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Architectures": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-publicrepository-repositorycatalogdata.html#cfn-ecr-publicrepository-repositorycatalogdata-architectures", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "OperatingSystems": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-publicrepository-repositorycatalogdata.html#cfn-ecr-publicrepository-repositorycatalogdata-operatingsystems", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "RepositoryDescription": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-publicrepository-repositorycatalogdata.html#cfn-ecr-publicrepository-repositorycatalogdata-repositorydescription", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "UsageText": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-publicrepository-repositorycatalogdata.html#cfn-ecr-publicrepository-repositorycatalogdata-usagetext", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::ECR::ReplicationConfiguration.ReplicationConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-replicationconfiguration.html", "Properties": { "Rules": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-replicationconfiguration.html#cfn-ecr-replicationconfiguration-replicationconfiguration-rules", + "DuplicatesAllowed": true, "ItemType": "ReplicationRule", "Required": true, "Type": "List", @@ -35,6 +75,7 @@ "Properties": { "Destinations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-replicationrule.html#cfn-ecr-replicationconfiguration-replicationrule-destinations", + "DuplicatesAllowed": true, "ItemType": "ReplicationDestination", "Required": true, "Type": "List", @@ -42,6 +83,7 @@ }, "RepositoryFilters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecr-replicationconfiguration-replicationrule.html#cfn-ecr-replicationconfiguration-replicationrule-repositoryfilters", + "DuplicatesAllowed": true, "ItemType": "RepositoryFilter", "Required": false, "Type": "List", @@ -123,8 +165,8 @@ "Properties": { "RepositoryCatalogData": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecr-publicrepository.html#cfn-ecr-publicrepository-repositorycatalogdata", - "PrimitiveType": "Json", "Required": false, + "Type": "RepositoryCatalogData", "UpdateType": "Mutable" }, "RepositoryName": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ECS.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ECS.json index 8bbc2a05f54dd..ab225e63fc00e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ECS.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ECS.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ECS::CapacityProvider.AutoScalingGroupProvider": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-capacityprovider-autoscalinggroupprovider.html", @@ -213,6 +213,7 @@ }, "SecurityGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-awsvpcconfiguration.html#cfn-ecs-service-awsvpcconfiguration-securitygroups", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -220,6 +221,7 @@ }, "Subnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-awsvpcconfiguration.html#cfn-ecs-service-awsvpcconfiguration-subnets", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -348,6 +350,7 @@ }, "SecretOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-logconfiguration.html#cfn-ecs-service-logconfiguration-secretoptions", + "DuplicatesAllowed": true, "ItemType": "Secret", "Required": false, "Type": "List", @@ -457,6 +460,7 @@ }, "Services": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectconfiguration.html#cfn-ecs-service-serviceconnectconfiguration-services", + "DuplicatesAllowed": true, "ItemType": "ServiceConnectService", "Required": false, "Type": "List", @@ -469,6 +473,7 @@ "Properties": { "ClientAliases": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-serviceconnectservice.html#cfn-ecs-service-serviceconnectservice-clientaliases", + "DuplicatesAllowed": true, "ItemType": "ServiceConnectClientAlias", "Required": false, "Type": "List", @@ -541,71 +546,77 @@ } }, "AWS::ECS::TaskDefinition.ContainerDefinition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html", "Properties": { "Command": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-command", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-command", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", "UpdateType": "Immutable" }, "Cpu": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-cpu", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-cpu", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Immutable" }, "DependsOn": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dependson", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dependson", + "DuplicatesAllowed": true, "ItemType": "ContainerDependency", "Required": false, "Type": "List", "UpdateType": "Immutable" }, "DisableNetworking": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-disablenetworking", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-disablenetworking", "PrimitiveType": "Boolean", "Required": false, "UpdateType": "Immutable" }, "DnsSearchDomains": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dnssearchdomains", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dnssearchdomains", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", "UpdateType": "Immutable" }, "DnsServers": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dnsservers", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dnsservers", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", "UpdateType": "Immutable" }, "DockerLabels": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dockerlabels", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dockerlabels", "PrimitiveItemType": "String", "Required": false, "Type": "Map", "UpdateType": "Immutable" }, "DockerSecurityOptions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-dockersecurityoptions", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-dockersecurityoptions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", "UpdateType": "Immutable" }, "EntryPoint": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-entrypoint", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-entrypoint", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", "UpdateType": "Immutable" }, "Environment": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-environment", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-environment", "DuplicatesAllowed": false, "ItemType": "KeyValuePair", "Required": false, @@ -613,57 +624,59 @@ "UpdateType": "Immutable" }, "EnvironmentFiles": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-environmentfiles", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-environmentfiles", + "DuplicatesAllowed": true, "ItemType": "EnvironmentFile", "Required": false, "Type": "List", "UpdateType": "Immutable" }, "Essential": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-essential", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-essential", "PrimitiveType": "Boolean", "Required": false, "UpdateType": "Immutable" }, "ExtraHosts": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-extrahosts", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-extrahosts", + "DuplicatesAllowed": true, "ItemType": "HostEntry", "Required": false, "Type": "List", "UpdateType": "Immutable" }, "FirelensConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-firelensconfiguration", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-firelensconfiguration", "Required": false, "Type": "FirelensConfiguration", "UpdateType": "Immutable" }, "HealthCheck": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-healthcheck", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-healthcheck", "Required": false, "Type": "HealthCheck", "UpdateType": "Immutable" }, "Hostname": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-hostname", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-hostname", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, "Image": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-image", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-image", "PrimitiveType": "String", "Required": true, "UpdateType": "Immutable" }, "Interactive": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-interactive", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-interactive", "PrimitiveType": "Boolean", "Required": false, "UpdateType": "Immutable" }, "Links": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-links", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-links", "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": false, @@ -671,31 +684,31 @@ "UpdateType": "Immutable" }, "LinuxParameters": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-linuxparameters", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-linuxparameters", "Required": false, "Type": "LinuxParameters", "UpdateType": "Immutable" }, "LogConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-logconfiguration", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-logconfiguration", "Required": false, "Type": "LogConfiguration", "UpdateType": "Immutable" }, "Memory": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-memory", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-memory", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Immutable" }, "MemoryReservation": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-memoryreservation", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-memoryreservation", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Immutable" }, "MountPoints": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints", "DuplicatesAllowed": false, "ItemType": "MountPoint", "Required": false, @@ -703,13 +716,13 @@ "UpdateType": "Immutable" }, "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-name", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-name", "PrimitiveType": "String", "Required": true, "UpdateType": "Immutable" }, "PortMappings": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-portmappings", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-portmappings", "DuplicatesAllowed": false, "ItemType": "PortMapping", "Required": false, @@ -717,77 +730,81 @@ "UpdateType": "Immutable" }, "Privileged": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-privileged", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-privileged", "PrimitiveType": "Boolean", "Required": false, "UpdateType": "Immutable" }, "PseudoTerminal": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-pseudoterminal", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-pseudoterminal", "PrimitiveType": "Boolean", "Required": false, "UpdateType": "Immutable" }, "ReadonlyRootFilesystem": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-readonlyrootfilesystem", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-readonlyrootfilesystem", "PrimitiveType": "Boolean", "Required": false, "UpdateType": "Immutable" }, "RepositoryCredentials": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-repositorycredentials", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-repositorycredentials", "Required": false, "Type": "RepositoryCredentials", "UpdateType": "Immutable" }, "ResourceRequirements": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-resourcerequirements", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-resourcerequirements", + "DuplicatesAllowed": true, "ItemType": "ResourceRequirement", "Required": false, "Type": "List", "UpdateType": "Immutable" }, "Secrets": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-secrets", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-secrets", + "DuplicatesAllowed": true, "ItemType": "Secret", "Required": false, "Type": "List", "UpdateType": "Immutable" }, "StartTimeout": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-starttimeout", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-starttimeout", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Immutable" }, "StopTimeout": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-stoptimeout", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-stoptimeout", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Immutable" }, "SystemControls": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-systemcontrols", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-systemcontrols", + "DuplicatesAllowed": true, "ItemType": "SystemControl", "Required": false, "Type": "List", "UpdateType": "Immutable" }, "Ulimits": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-ulimits", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-ulimits", + "DuplicatesAllowed": true, "ItemType": "Ulimit", "Required": false, "Type": "List", "UpdateType": "Immutable" }, "User": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-user", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-user", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, "VolumesFrom": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-volumesfrom", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-volumesfrom", "DuplicatesAllowed": false, "ItemType": "VolumeFrom", "Required": false, @@ -795,7 +812,7 @@ "UpdateType": "Immutable" }, "WorkingDirectory": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-workingdirectory", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinition.html#cfn-ecs-taskdefinition-containerdefinition-workingdirectory", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" @@ -967,6 +984,7 @@ "Properties": { "Command": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-healthcheck.html#cfn-ecs-taskdefinition-healthcheck-command", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -999,16 +1017,16 @@ } }, "AWS::ECS::TaskDefinition.HostEntry": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-hostentry.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostentry.html", "Properties": { "Hostname": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-hostentry.html#cfn-ecs-taskdefinition-containerdefinition-hostentry-hostname", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostentry.html#cfn-ecs-taskdefinition-hostentry-hostname", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, "IpAddress": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-hostentry.html#cfn-ecs-taskdefinition-containerdefinition-hostentry-ipaddress", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostentry.html#cfn-ecs-taskdefinition-hostentry-ipaddress", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" @@ -1016,10 +1034,10 @@ } }, "AWS::ECS::TaskDefinition.HostVolumeProperties": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes-host.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostvolumeproperties.html", "Properties": { "SourcePath": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes-host.html#cfn-ecs-taskdefinition-volumes-host-sourcepath", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-hostvolumeproperties.html#cfn-ecs-taskdefinition-hostvolumeproperties-sourcepath", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" @@ -1048,6 +1066,7 @@ "Properties": { "Add": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-kernelcapabilities.html#cfn-ecs-taskdefinition-kernelcapabilities-add", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1055,6 +1074,7 @@ }, "Drop": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-kernelcapabilities.html#cfn-ecs-taskdefinition-kernelcapabilities-drop", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1063,16 +1083,16 @@ } }, "AWS::ECS::TaskDefinition.KeyValuePair": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-environment.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-keyvaluepair.html", "Properties": { "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-environment.html#cfn-ecs-taskdefinition-containerdefinition-environment-name", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-keyvaluepair.html#cfn-ecs-taskdefinition-keyvaluepair-name", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, "Value": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-environment.html#cfn-ecs-taskdefinition-containerdefinition-environment-value", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-keyvaluepair.html#cfn-ecs-taskdefinition-keyvaluepair-value", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" @@ -1090,6 +1110,7 @@ }, "Devices": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-linuxparameters.html#cfn-ecs-taskdefinition-linuxparameters-devices", + "DuplicatesAllowed": true, "ItemType": "Device", "Required": false, "Type": "List", @@ -1121,6 +1142,7 @@ }, "Tmpfs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-linuxparameters.html#cfn-ecs-taskdefinition-linuxparameters-tmpfs", + "DuplicatesAllowed": true, "ItemType": "Tmpfs", "Required": false, "Type": "List", @@ -1129,23 +1151,24 @@ } }, "AWS::ECS::TaskDefinition.LogConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-logconfiguration.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-logconfiguration.html", "Properties": { "LogDriver": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-logconfiguration.html#cfn-ecs-taskdefinition-containerdefinition-logconfiguration-logdriver", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-logconfiguration.html#cfn-ecs-taskdefinition-logconfiguration-logdriver", "PrimitiveType": "String", "Required": true, "UpdateType": "Immutable" }, "Options": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-logconfiguration.html#cfn-ecs-taskdefinition-containerdefinition-logconfiguration-options", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-logconfiguration.html#cfn-ecs-taskdefinition-logconfiguration-options", "PrimitiveItemType": "String", "Required": false, "Type": "Map", "UpdateType": "Immutable" }, "SecretOptions": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-logconfiguration.html#cfn-ecs-taskdefinition-logconfiguration-secretoptions", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-logconfiguration.html#cfn-ecs-taskdefinition-logconfiguration-secretoptions", + "DuplicatesAllowed": true, "ItemType": "Secret", "Required": false, "Type": "List", @@ -1154,22 +1177,22 @@ } }, "AWS::ECS::TaskDefinition.MountPoint": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-mountpoints.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-mountpoint.html", "Properties": { "ContainerPath": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-mountpoints.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints-containerpath", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-mountpoint.html#cfn-ecs-taskdefinition-mountpoint-containerpath", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, "ReadOnly": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-mountpoints.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints-readonly", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-mountpoint.html#cfn-ecs-taskdefinition-mountpoint-readonly", "PrimitiveType": "Boolean", "Required": false, "UpdateType": "Immutable" }, "SourceVolume": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-mountpoints.html#cfn-ecs-taskdefinition-containerdefinition-mountpoints-sourcevolume", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-mountpoint.html#cfn-ecs-taskdefinition-mountpoint-sourcevolume", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" @@ -1177,34 +1200,34 @@ } }, "AWS::ECS::TaskDefinition.PortMapping": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html", "Properties": { "AppProtocol": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-portmapping-appprotocol", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-appprotocol", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, "ContainerPort": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-containerdefinition-portmappings-containerport", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-containerport", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Immutable" }, "HostPort": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-containerdefinition-portmappings-readonly", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-hostport", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Immutable" }, "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-portmapping-name", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-name", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, "Protocol": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-portmappings.html#cfn-ecs-taskdefinition-containerdefinition-portmappings-sourcevolume", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-portmapping.html#cfn-ecs-taskdefinition-portmapping-protocol", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" @@ -1343,6 +1366,7 @@ }, "MountOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-tmpfs.html#cfn-ecs-taskdefinition-tmpfs-mountoptions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1357,22 +1381,22 @@ } }, "AWS::ECS::TaskDefinition.Ulimit": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ulimit.html", "Properties": { "HardLimit": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html#cfn-ecs-taskdefinition-containerdefinition-ulimit-hardlimit", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ulimit.html#cfn-ecs-taskdefinition-ulimit-hardlimit", "PrimitiveType": "Integer", "Required": true, "UpdateType": "Immutable" }, "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html#cfn-ecs-taskdefinition-containerdefinition-ulimit-name", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ulimit.html#cfn-ecs-taskdefinition-ulimit-name", "PrimitiveType": "String", "Required": true, "UpdateType": "Immutable" }, "SoftLimit": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html#cfn-ecs-taskdefinition-containerdefinition-ulimit-softlimit", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-ulimit.html#cfn-ecs-taskdefinition-ulimit-softlimit", "PrimitiveType": "Integer", "Required": true, "UpdateType": "Immutable" @@ -1380,28 +1404,28 @@ } }, "AWS::ECS::TaskDefinition.Volume": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html", "Properties": { "DockerVolumeConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html#cfn-ecs-taskdefinition-volume-dockervolumeconfiguration", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-dockervolumeconfiguration", "Required": false, "Type": "DockerVolumeConfiguration", "UpdateType": "Immutable" }, "EFSVolumeConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html#cfn-ecs-taskdefinition-volume-efsvolumeconfiguration", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-efsvolumeconfiguration", "Required": false, "Type": "EFSVolumeConfiguration", "UpdateType": "Immutable" }, "Host": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html#cfn-ecs-taskdefinition-volumes-host", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-host", "Required": false, "Type": "HostVolumeProperties", "UpdateType": "Immutable" }, "Name": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumes.html#cfn-ecs-taskdefinition-volumes-name", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volume.html#cfn-ecs-taskdefinition-volume-name", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" @@ -1409,16 +1433,16 @@ } }, "AWS::ECS::TaskDefinition.VolumeFrom": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-volumesfrom.html", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumefrom.html", "Properties": { "ReadOnly": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-volumesfrom.html#cfn-ecs-taskdefinition-containerdefinition-volumesfrom-readonly", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumefrom.html#cfn-ecs-taskdefinition-volumefrom-readonly", "PrimitiveType": "Boolean", "Required": false, "UpdateType": "Immutable" }, "SourceContainer": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-volumesfrom.html#cfn-ecs-taskdefinition-containerdefinition-volumesfrom-sourcecontainer", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-volumefrom.html#cfn-ecs-taskdefinition-volumefrom-sourcecontainer", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" @@ -1436,6 +1460,7 @@ }, "SecurityGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-awsvpcconfiguration.html#cfn-ecs-taskset-awsvpcconfiguration-securitygroups", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1443,6 +1468,7 @@ }, "Subnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskset-awsvpcconfiguration.html#cfn-ecs-taskset-awsvpcconfiguration-subnets", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1555,6 +1581,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-capacityprovider.html#cfn-ecs-capacityprovider-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -1572,6 +1599,7 @@ "Properties": { "CapacityProviders": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-capacityproviders", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1585,6 +1613,7 @@ }, "ClusterSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-clustersettings", + "DuplicatesAllowed": true, "ItemType": "ClusterSettings", "Required": false, "Type": "List", @@ -1598,6 +1627,7 @@ }, "DefaultCapacityProviderStrategy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-defaultcapacityproviderstrategy", + "DuplicatesAllowed": true, "ItemType": "CapacityProviderStrategyItem", "Required": false, "Type": "List", @@ -1611,6 +1641,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -1637,6 +1668,7 @@ }, "DefaultCapacityProviderStrategy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-clustercapacityproviderassociations.html#cfn-ecs-clustercapacityproviderassociations-defaultcapacityproviderstrategy", + "DuplicatesAllowed": true, "ItemType": "CapacityProviderStrategy", "Required": true, "Type": "List", @@ -1680,6 +1712,7 @@ "Properties": { "CapacityProviderStrategy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-capacityproviderstrategy", + "DuplicatesAllowed": true, "ItemType": "CapacityProviderStrategyItem", "Required": false, "Type": "List", @@ -1735,6 +1768,7 @@ }, "LoadBalancers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-loadbalancers", + "DuplicatesAllowed": true, "ItemType": "LoadBalancer", "Required": false, "Type": "List", @@ -1748,6 +1782,7 @@ }, "PlacementConstraints": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-placementconstraints", + "DuplicatesAllowed": true, "ItemType": "PlacementConstraint", "Required": false, "Type": "List", @@ -1755,6 +1790,7 @@ }, "PlacementStrategies": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-placementstrategies", + "DuplicatesAllowed": true, "ItemType": "PlacementStrategy", "Required": false, "Type": "List", @@ -1798,6 +1834,7 @@ }, "ServiceRegistries": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-serviceregistries", + "DuplicatesAllowed": true, "ItemType": "ServiceRegistry", "Required": false, "Type": "List", @@ -1805,6 +1842,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html#cfn-ecs-service-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -1920,6 +1958,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskdefinition.html#cfn-ecs-taskdefinition-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -1969,6 +2008,7 @@ }, "LoadBalancers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-loadbalancers", + "DuplicatesAllowed": true, "ItemType": "LoadBalancer", "Required": false, "Type": "List", @@ -2000,6 +2040,7 @@ }, "ServiceRegistries": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-taskset.html#cfn-ecs-taskset-serviceregistries", + "DuplicatesAllowed": true, "ItemType": "ServiceRegistry", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EFS.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EFS.json index 10a53ffb5ace9..7585a8f25bf3e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EFS.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EFS.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::EFS::AccessPoint.AccessPointTag": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-efs-accesspoint-accesspointtag.html", @@ -52,6 +52,7 @@ }, "SecondaryGids": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-efs-accesspoint-posixuser.html#cfn-efs-accesspoint-posixuser-secondarygids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EKS.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EKS.json index 7c03c50cc493d..d6d156cdba7ab 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EKS.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EKS.json @@ -1,11 +1,12 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::EKS::Cluster.ClusterLogging": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-clusterlogging.html", "Properties": { "EnabledTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-clusterlogging.html#cfn-eks-cluster-clusterlogging-enabledtypes", + "DuplicatesAllowed": true, "ItemType": "LoggingTypeConfig", "Required": false, "Type": "List", @@ -35,6 +36,7 @@ }, "Resources": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-encryptionconfig.html#cfn-eks-cluster-encryptionconfig-resources", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -104,6 +106,7 @@ }, "OutpostArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-outpostconfig.html#cfn-eks-cluster-outpostconfig-outpostarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -139,6 +142,7 @@ }, "PublicAccessCidrs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-resourcesvpcconfig.html#cfn-eks-cluster-resourcesvpcconfig-publicaccesscidrs", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -146,6 +150,7 @@ }, "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-resourcesvpcconfig.html#cfn-eks-cluster-resourcesvpcconfig-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -153,6 +158,7 @@ }, "SubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-resourcesvpcconfig.html#cfn-eks-cluster-resourcesvpcconfig-subnetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -182,6 +188,7 @@ "Properties": { "Labels": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-fargateprofile-selector.html#cfn-eks-fargateprofile-selector-labels", + "DuplicatesAllowed": true, "ItemType": "Label", "Required": false, "Type": "List", @@ -447,6 +454,7 @@ "Properties": { "EncryptionConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-cluster.html#cfn-eks-cluster-encryptionconfig", + "DuplicatesAllowed": true, "ItemType": "EncryptionConfig", "Required": false, "Type": "List", @@ -532,6 +540,7 @@ }, "Selectors": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-fargateprofile.html#cfn-eks-fargateprofile-selectors", + "DuplicatesAllowed": true, "ItemType": "Selector", "Required": true, "Type": "List", @@ -539,6 +548,7 @@ }, "Subnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-fargateprofile.html#cfn-eks-fargateprofile-subnets", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -709,6 +719,7 @@ }, "Taints": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html#cfn-eks-nodegroup-taints", + "DuplicatesAllowed": true, "ItemType": "Taint", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EMR.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EMR.json index 99713f35e2f34..40115e207f6aa 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EMR.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EMR.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::EMR::Cluster.Application": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-application.html", @@ -1773,6 +1773,7 @@ }, "SubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html#cfn-emr-studio-subnetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EMRContainers.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EMRContainers.json index 9b05f78dc1e25..102696a3f1ddb 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EMRContainers.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EMRContainers.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::EMRContainers::VirtualCluster.ContainerInfo": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrcontainers-virtualcluster-containerinfo.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EMRServerless.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EMRServerless.json index b97c59b0e5020..34ed6d6b56bf0 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EMRServerless.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EMRServerless.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::EMRServerless::Application.AutoStartConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emrserverless-application-autostartconfiguration.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElastiCache.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElastiCache.json index 7de7b21c53aae..1fa50132280b4 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElastiCache.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElastiCache.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ElastiCache::CacheCluster.CloudWatchLogsDestinationDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cachecluster-cloudwatchlogsdestinationdetails.html", @@ -240,6 +240,25 @@ "UpdateType": "Immutable" } } + }, + "AWS::ElastiCache::User.AuthenticationMode": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-user-authenticationmode.html", + "Properties": { + "Passwords": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-user-authenticationmode.html#cfn-elasticache-user-authenticationmode-passwords", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-user-authenticationmode.html#cfn-elasticache-user-authenticationmode-type", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } } }, "ResourceTypes": { @@ -899,8 +918,8 @@ }, "AuthenticationMode": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-user.html#cfn-elasticache-user-authenticationmode", - "PrimitiveType": "Json", "Required": false, + "Type": "AuthenticationMode", "UpdateType": "Mutable" }, "Engine": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElasticBeanstalk.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElasticBeanstalk.json index d4fcf18bc9318..5c846b777ceff 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElasticBeanstalk.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElasticBeanstalk.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ElasticBeanstalk::Application.ApplicationResourceLifecycleConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticbeanstalk-application-applicationresourcelifecycleconfig.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElasticLoadBalancing.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElasticLoadBalancing.json index 17757175ee7ec..3e827e42c284d 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElasticLoadBalancing.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElasticLoadBalancing.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ElasticLoadBalancing::LoadBalancer.AccessLoggingPolicy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb-accessloggingpolicy.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElasticLoadBalancingV2.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElasticLoadBalancingV2.json index bdc1f2b4e91f1..107dc474c605a 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElasticLoadBalancingV2.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ElasticLoadBalancingV2.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ElasticLoadBalancingV2::Listener.Action": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-listener-action.html", @@ -898,6 +898,7 @@ "Properties": { "AlpnPolicy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html#cfn-elasticloadbalancingv2-listener-alpnpolicy", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Elasticsearch.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Elasticsearch.json index 604cab29cd939..f356fe6acca6c 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Elasticsearch.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Elasticsearch.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Elasticsearch::Domain.AdvancedSecurityOptionsInput": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-advancedsecurityoptionsinput.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EventSchemas.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EventSchemas.json index 804659e837aac..f28566432591a 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EventSchemas.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_EventSchemas.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::EventSchemas::Discoverer.TagsEntry": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eventschemas-discoverer-tagsentry.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Events.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Events.json index 44eff60414ce7..32540eb1e2898 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Events.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Events.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Events::Connection.ApiKeyAuthParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-connection-apikeyauthparameters.html", @@ -86,6 +86,7 @@ "Properties": { "BodyParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-connection-connectionhttpparameters.html#cfn-events-connection-connectionhttpparameters-bodyparameters", + "DuplicatesAllowed": true, "ItemType": "Parameter", "Required": false, "Type": "List", @@ -93,6 +94,7 @@ }, "HeaderParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-connection-connectionhttpparameters.html#cfn-events-connection-connectionhttpparameters-headerparameters", + "DuplicatesAllowed": true, "ItemType": "Parameter", "Required": false, "Type": "List", @@ -100,6 +102,7 @@ }, "QueryStringParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-connection-connectionhttpparameters.html#cfn-events-connection-connectionhttpparameters-querystringparameters", + "DuplicatesAllowed": true, "ItemType": "Parameter", "Required": false, "Type": "List", @@ -989,6 +992,7 @@ }, "EventBuses": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-endpoint.html#cfn-events-endpoint-eventbuses", + "DuplicatesAllowed": true, "ItemType": "EndpointEventBus", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Evidently.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Evidently.json index 7d6271191db94..76f01785d8093 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Evidently.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Evidently.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Evidently::Experiment.MetricGoalObject": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-evidently-experiment-metricgoalobject.html", @@ -85,7 +85,7 @@ "Status": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-evidently-experiment-runningstatusobject.html#cfn-evidently-experiment-runningstatusobject-status", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" } } @@ -183,7 +183,7 @@ "VariationName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-evidently-feature-variationobject.html#cfn-evidently-feature-variationobject-variationname", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" } } diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FIS.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FIS.json index 4ffaf98649da8..86f32625a8e22 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FIS.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FIS.json @@ -1,6 +1,17 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { + "AWS::FIS::ExperimentTemplate.CloudWatchLogsConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fis-experimenttemplate-cloudwatchlogsconfiguration.html", + "Properties": { + "LogGroupArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fis-experimenttemplate-cloudwatchlogsconfiguration.html#cfn-fis-experimenttemplate-cloudwatchlogsconfiguration-loggrouparn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::FIS::ExperimentTemplate.ExperimentTemplateAction": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fis-experimenttemplate-experimenttemplateaction.html", "Properties": { @@ -25,6 +36,7 @@ }, "StartAfter": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fis-experimenttemplate-experimenttemplateaction.html#cfn-fis-experimenttemplate-experimenttemplateaction-startafter", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -44,8 +56,8 @@ "Properties": { "CloudWatchLogsConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fis-experimenttemplate-experimenttemplatelogconfiguration.html#cfn-fis-experimenttemplate-experimenttemplatelogconfiguration-cloudwatchlogsconfiguration", - "PrimitiveType": "Json", "Required": false, + "Type": "CloudWatchLogsConfiguration", "UpdateType": "Mutable" }, "LogSchemaVersion": { @@ -56,8 +68,8 @@ }, "S3Configuration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fis-experimenttemplate-experimenttemplatelogconfiguration.html#cfn-fis-experimenttemplate-experimenttemplatelogconfiguration-s3configuration", - "PrimitiveType": "Json", "Required": false, + "Type": "S3Configuration", "UpdateType": "Mutable" } } @@ -84,6 +96,7 @@ "Properties": { "Filters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fis-experimenttemplate-experimenttemplatetarget.html#cfn-fis-experimenttemplate-experimenttemplatetarget-filters", + "DuplicatesAllowed": true, "ItemType": "ExperimentTemplateTargetFilter", "Required": false, "Type": "List", @@ -98,6 +111,7 @@ }, "ResourceArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fis-experimenttemplate-experimenttemplatetarget.html#cfn-fis-experimenttemplate-experimenttemplatetarget-resourcearns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -135,12 +149,30 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fis-experimenttemplate-experimenttemplatetargetfilter.html#cfn-fis-experimenttemplate-experimenttemplatetargetfilter-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", "UpdateType": "Mutable" } } + }, + "AWS::FIS::ExperimentTemplate.S3Configuration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fis-experimenttemplate-s3configuration.html", + "Properties": { + "BucketName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fis-experimenttemplate-s3configuration.html#cfn-fis-experimenttemplate-s3configuration-bucketname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Prefix": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fis-experimenttemplate-s3configuration.html#cfn-fis-experimenttemplate-s3configuration-prefix", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } } }, "ResourceTypes": { @@ -179,6 +211,7 @@ }, "StopConditions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-fis-experimenttemplate.html#cfn-fis-experimenttemplate-stopconditions", + "DuplicatesAllowed": true, "ItemType": "ExperimentTemplateStopCondition", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FMS.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FMS.json index 76b33e5d02a36..fe02a92f1b128 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FMS.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FMS.json @@ -1,11 +1,12 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::FMS::Policy.IEMap": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fms-policy-iemap.html", "Properties": { "ACCOUNT": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fms-policy-iemap.html#cfn-fms-policy-iemap-account", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -13,6 +14,7 @@ }, "ORGUNIT": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fms-policy-iemap.html#cfn-fms-policy-iemap-orgunit", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -184,6 +186,7 @@ }, "ResourceTags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-fms-policy.html#cfn-fms-policy-resourcetags", + "DuplicatesAllowed": true, "ItemType": "ResourceTag", "Required": false, "Type": "List", @@ -197,6 +200,7 @@ }, "ResourceTypeList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-fms-policy.html#cfn-fms-policy-resourcetypelist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -216,6 +220,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-fms-policy.html#cfn-fms-policy-tags", + "DuplicatesAllowed": true, "ItemType": "PolicyTag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FSx.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FSx.json index 19a6588dbb908..7656424255b47 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FSx.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FSx.json @@ -1,11 +1,12 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::FSx::DataRepositoryAssociation.AutoExportPolicy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fsx-datarepositoryassociation-autoexportpolicy.html", "Properties": { "Events": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fsx-datarepositoryassociation-autoexportpolicy.html#cfn-fsx-datarepositoryassociation-autoexportpolicy-events", + "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -18,6 +19,7 @@ "Properties": { "Events": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-fsx-datarepositoryassociation-autoimportpolicy.html#cfn-fsx-datarepositoryassociation-autoimportpolicy-events", + "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FinSpace.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FinSpace.json index 57b57937bffc2..fe999f17a250e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FinSpace.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FinSpace.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::FinSpace::Environment.FederationParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-finspace-environment-federationparameters.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Forecast.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Forecast.json index 328436441a8a0..f7a713784f1c7 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Forecast.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Forecast.json @@ -1,6 +1,71 @@ { - "$version": "100.0.0", - "PropertyTypes": {}, + "$version": "101.0.0", + "PropertyTypes": { + "AWS::Forecast::Dataset.AttributesItems": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-forecast-dataset-attributesitems.html", + "Properties": { + "AttributeName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-forecast-dataset-attributesitems.html#cfn-forecast-dataset-attributesitems-attributename", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "AttributeType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-forecast-dataset-attributesitems.html#cfn-forecast-dataset-attributesitems-attributetype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Forecast::Dataset.EncryptionConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-forecast-dataset-encryptionconfig.html", + "Properties": { + "KmsKeyArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-forecast-dataset-encryptionconfig.html#cfn-forecast-dataset-encryptionconfig-kmskeyarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "RoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-forecast-dataset-encryptionconfig.html#cfn-forecast-dataset-encryptionconfig-rolearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Forecast::Dataset.Schema": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-forecast-dataset-schema.html", + "Properties": { + "Attributes": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-forecast-dataset-schema.html#cfn-forecast-dataset-schema-attributes", + "DuplicatesAllowed": true, + "ItemType": "AttributesItems", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::Forecast::Dataset.TagsItems": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-forecast-dataset-tagsitems.html", + "Properties": { + "Key": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-forecast-dataset-tagsitems.html#cfn-forecast-dataset-tagsitems-key", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-forecast-dataset-tagsitems.html#cfn-forecast-dataset-tagsitems-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + } + }, "ResourceTypes": { "AWS::Forecast::Dataset": { "Attributes": { @@ -36,19 +101,20 @@ }, "EncryptionConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-forecast-dataset.html#cfn-forecast-dataset-encryptionconfig", - "PrimitiveType": "Json", "Required": false, + "Type": "EncryptionConfig", "UpdateType": "Mutable" }, "Schema": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-forecast-dataset.html#cfn-forecast-dataset-schema", - "PrimitiveType": "Json", "Required": true, + "Type": "Schema", "UpdateType": "Mutable" }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-forecast-dataset.html#cfn-forecast-dataset-tags", - "PrimitiveItemType": "Json", + "DuplicatesAllowed": true, + "ItemType": "TagsItems", "Required": false, "Type": "List", "UpdateType": "Mutable" @@ -65,6 +131,7 @@ "Properties": { "DatasetArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-forecast-datasetgroup.html#cfn-forecast-datasetgroup-datasetarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -84,6 +151,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-forecast-datasetgroup.html#cfn-forecast-datasetgroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FraudDetector.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FraudDetector.json index e3e4fcbdcaf28..a46cc75d15ce0 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FraudDetector.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_FraudDetector.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::FraudDetector::Detector.EntityType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-frauddetector-detector-entitytype.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GameLift.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GameLift.json index 216f1b5600e92..451de3082c858 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GameLift.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GameLift.json @@ -1,5 +1,5 @@ { - "$version": "99.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::GameLift::Alias.RoutingStrategy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-alias-routingstrategy.html", @@ -53,6 +53,17 @@ } } }, + "AWS::GameLift::Fleet.AnywhereConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-anywhereconfiguration.html", + "Properties": { + "Cost": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-anywhereconfiguration.html#cfn-gamelift-fleet-anywhereconfiguration-cost", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::GameLift::Fleet.CertificateConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-certificateconfiguration.html", "Properties": { @@ -167,6 +178,7 @@ }, "ServerProcesses": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-gamelift-fleet-runtimeconfiguration.html#cfn-gamelift-fleet-runtimeconfiguration-serverprocesses", + "DuplicatesAllowed": true, "ItemType": "ServerProcess", "Required": false, "Type": "List", @@ -437,6 +449,12 @@ }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html", "Properties": { + "AnywhereConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-anywhereconfiguration", + "Required": false, + "Type": "AnywhereConfiguration", + "UpdateType": "Mutable" + }, "BuildId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-buildid", "PrimitiveType": "String", @@ -449,6 +467,12 @@ "Type": "CertificateConfiguration", "UpdateType": "Immutable" }, + "ComputeType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-computetype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, "Description": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-description", "PrimitiveType": "String", @@ -463,6 +487,7 @@ }, "EC2InboundPermissions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-ec2inboundpermissions", + "DuplicatesAllowed": true, "ItemType": "IpPermission", "Required": false, "Type": "List", @@ -488,6 +513,7 @@ }, "Locations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-locations", + "DuplicatesAllowed": true, "ItemType": "LocationConfiguration", "Required": false, "Type": "List", @@ -501,6 +527,7 @@ }, "MetricGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-metricgroups", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -515,7 +542,7 @@ "Name": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-fleet.html#cfn-gamelift-fleet-name", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" }, "NewGameSessionProtectionPolicy": { @@ -599,6 +626,7 @@ }, "InstanceDefinitions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-instancedefinitions", + "DuplicatesAllowed": true, "ItemType": "InstanceDefinition", "Required": true, "Type": "List", @@ -630,6 +658,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -637,6 +666,7 @@ }, "VpcSubnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-gameservergroup.html#cfn-gamelift-gameservergroup-vpcsubnets", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -714,6 +744,30 @@ } } }, + "AWS::GameLift::Location": { + "Attributes": { + "LocationArn": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-location.html", + "Properties": { + "LocationName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-location.html#cfn-gamelift-location-locationname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-gamelift-location.html#cfn-gamelift-location-tags", + "DuplicatesAllowed": false, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::GameLift::MatchmakingConfiguration": { "Attributes": { "Arn": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GlobalAccelerator.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GlobalAccelerator.json index e87358dca3f26..678a5cdcd5ef8 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GlobalAccelerator.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GlobalAccelerator.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::GlobalAccelerator::EndpointGroup.EndpointConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-globalaccelerator-endpointgroup-endpointconfiguration.html", @@ -96,6 +96,7 @@ }, "IpAddresses": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-globalaccelerator-accelerator.html#cfn-globalaccelerator-accelerator-ipaddresses", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -109,6 +110,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-globalaccelerator-accelerator.html#cfn-globalaccelerator-accelerator-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -126,6 +128,7 @@ "Properties": { "EndpointConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-globalaccelerator-endpointgroup.html#cfn-globalaccelerator-endpointgroup-endpointconfigurations", + "DuplicatesAllowed": true, "ItemType": "EndpointConfiguration", "Required": false, "Type": "List", @@ -169,6 +172,7 @@ }, "PortOverrides": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-globalaccelerator-endpointgroup.html#cfn-globalaccelerator-endpointgroup-portoverrides", + "DuplicatesAllowed": true, "ItemType": "PortOverride", "Required": false, "Type": "List", @@ -210,6 +214,7 @@ }, "PortRanges": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-globalaccelerator-listener.html#cfn-globalaccelerator-listener-portranges", + "DuplicatesAllowed": true, "ItemType": "PortRange", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Glue.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Glue.json index 51180d5e8ae71..fbe9286a300f0 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Glue.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Glue.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Glue::Classifier.CsvClassifier": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-classifier-csvclassifier.html", @@ -2033,6 +2033,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-registry.html#cfn-glue-registry-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2095,6 +2096,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-schema.html#cfn-glue-schema-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Grafana.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Grafana.json new file mode 100644 index 0000000000000..975dc8384ce3f --- /dev/null +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Grafana.json @@ -0,0 +1,240 @@ +{ + "$version": "101.0.0", + "PropertyTypes": { + "AWS::Grafana::Workspace.AssertionAttributes": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-assertionattributes.html", + "Properties": { + "Email": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-assertionattributes.html#cfn-grafana-workspace-assertionattributes-email", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Groups": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-assertionattributes.html#cfn-grafana-workspace-assertionattributes-groups", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Login": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-assertionattributes.html#cfn-grafana-workspace-assertionattributes-login", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-assertionattributes.html#cfn-grafana-workspace-assertionattributes-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Org": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-assertionattributes.html#cfn-grafana-workspace-assertionattributes-org", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Role": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-assertionattributes.html#cfn-grafana-workspace-assertionattributes-role", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Grafana::Workspace.IdpMetadata": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-idpmetadata.html", + "Properties": { + "Url": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-idpmetadata.html#cfn-grafana-workspace-idpmetadata-url", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Xml": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-idpmetadata.html#cfn-grafana-workspace-idpmetadata-xml", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Grafana::Workspace.RoleValues": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-rolevalues.html", + "Properties": { + "Admin": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-rolevalues.html#cfn-grafana-workspace-rolevalues-admin", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Editor": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-rolevalues.html#cfn-grafana-workspace-rolevalues-editor", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::Grafana::Workspace.SamlConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-samlconfiguration.html", + "Properties": { + "AllowedOrganizations": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-samlconfiguration.html#cfn-grafana-workspace-samlconfiguration-allowedorganizations", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "AssertionAttributes": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-samlconfiguration.html#cfn-grafana-workspace-samlconfiguration-assertionattributes", + "Required": false, + "Type": "AssertionAttributes", + "UpdateType": "Mutable" + }, + "IdpMetadata": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-samlconfiguration.html#cfn-grafana-workspace-samlconfiguration-idpmetadata", + "Required": true, + "Type": "IdpMetadata", + "UpdateType": "Mutable" + }, + "LoginValidityDuration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-samlconfiguration.html#cfn-grafana-workspace-samlconfiguration-loginvalidityduration", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + }, + "RoleValues": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-grafana-workspace-samlconfiguration.html#cfn-grafana-workspace-samlconfiguration-rolevalues", + "Required": false, + "Type": "RoleValues", + "UpdateType": "Mutable" + } + } + } + }, + "ResourceTypes": { + "AWS::Grafana::Workspace": { + "Attributes": { + "CreationTimestamp": { + "PrimitiveType": "String" + }, + "Endpoint": { + "PrimitiveType": "String" + }, + "GrafanaVersion": { + "PrimitiveType": "String" + }, + "Id": { + "PrimitiveType": "String" + }, + "ModificationTimestamp": { + "PrimitiveType": "String" + }, + "SamlConfigurationStatus": { + "PrimitiveType": "String" + }, + "SsoClientId": { + "PrimitiveType": "String" + }, + "Status": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html", + "Properties": { + "AccountAccessType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-accountaccesstype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "AuthenticationProviders": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-authenticationproviders", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "ClientToken": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-clienttoken", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "DataSources": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-datasources", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "NotificationDestinations": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-notificationdestinations", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "OrganizationRoleName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-organizationrolename", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "OrganizationalUnits": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-organizationalunits", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "PermissionType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-permissiontype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "RoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-rolearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SamlConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-samlconfiguration", + "Required": false, + "Type": "SamlConfiguration", + "UpdateType": "Mutable" + }, + "StackSetName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-grafana-workspace.html#cfn-grafana-workspace-stacksetname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + } + } +} diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Greengrass.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Greengrass.json index 59cd412a3dedf..1adbca4ec4954 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Greengrass.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Greengrass.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Greengrass::ConnectorDefinition.Connector": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrass-connectordefinition-connector.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GreengrassV2.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GreengrassV2.json index bbd95a3497ecd..0c895a899980c 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GreengrassV2.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GreengrassV2.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::GreengrassV2::ComponentVersion.ComponentDependencyRequirement": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-componentversion-componentdependencyrequirement.html", @@ -8,13 +8,13 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-componentversion-componentdependencyrequirement.html#cfn-greengrassv2-componentversion-componentdependencyrequirement-dependencytype", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Immutable" }, "VersionRequirement": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-componentversion-componentdependencyrequirement.html#cfn-greengrassv2-componentversion-componentdependencyrequirement-versionrequirement", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Immutable" } } }, @@ -41,6 +41,7 @@ "Properties": { "Devices": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-componentversion-lambdacontainerparams.html#cfn-greengrassv2-componentversion-lambdacontainerparams-devices", + "DuplicatesAllowed": true, "ItemType": "LambdaDeviceMount", "Required": false, "Type": "List", @@ -60,6 +61,7 @@ }, "Volumes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-componentversion-lambdacontainerparams.html#cfn-greengrassv2-componentversion-lambdacontainerparams-volumes", + "DuplicatesAllowed": true, "ItemType": "LambdaVolumeMount", "Required": false, "Type": "List", @@ -119,6 +121,7 @@ }, "EventSources": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-componentversion-lambdaexecutionparameters.html#cfn-greengrassv2-componentversion-lambdaexecutionparameters-eventsources", + "DuplicatesAllowed": true, "ItemType": "LambdaEventSource", "Required": false, "Type": "List", @@ -126,6 +129,7 @@ }, "ExecArgs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-componentversion-lambdaexecutionparameters.html#cfn-greengrassv2-componentversion-lambdaexecutionparameters-execargs", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -205,6 +209,7 @@ }, "ComponentPlatforms": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-componentversion-lambdafunctionrecipesource.html#cfn-greengrassv2-componentversion-lambdafunctionrecipesource-componentplatforms", + "DuplicatesAllowed": true, "ItemType": "ComponentPlatform", "Required": false, "Type": "List", @@ -277,14 +282,15 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-componentconfigurationupdate.html#cfn-greengrassv2-deployment-componentconfigurationupdate-merge", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Immutable" }, "Reset": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-componentconfigurationupdate.html#cfn-greengrassv2-deployment-componentconfigurationupdate-reset", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", - "UpdateType": "Mutable" + "UpdateType": "Immutable" } } }, @@ -295,19 +301,19 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-componentdeploymentspecification.html#cfn-greengrassv2-deployment-componentdeploymentspecification-componentversion", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Immutable" }, "ConfigurationUpdate": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-componentdeploymentspecification.html#cfn-greengrassv2-deployment-componentdeploymentspecification-configurationupdate", "Required": false, "Type": "ComponentConfigurationUpdate", - "UpdateType": "Mutable" + "UpdateType": "Immutable" }, "RunWith": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-componentdeploymentspecification.html#cfn-greengrassv2-deployment-componentdeploymentspecification-runwith", "Required": false, "Type": "ComponentRunWith", - "UpdateType": "Mutable" + "UpdateType": "Immutable" } } }, @@ -318,19 +324,19 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-componentrunwith.html#cfn-greengrassv2-deployment-componentrunwith-posixuser", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Immutable" }, "SystemResourceLimits": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-componentrunwith.html#cfn-greengrassv2-deployment-componentrunwith-systemresourcelimits", "Required": false, "Type": "SystemResourceLimits", - "UpdateType": "Mutable" + "UpdateType": "Immutable" }, "WindowsUser": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-componentrunwith.html#cfn-greengrassv2-deployment-componentrunwith-windowsuser", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Immutable" } } }, @@ -413,6 +419,7 @@ "Properties": { "CriteriaList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-iotjobabortconfig.html#cfn-greengrassv2-deployment-iotjobabortconfig-criterialist", + "DuplicatesAllowed": true, "ItemType": "IoTJobAbortCriteria", "Required": true, "Type": "List", @@ -491,9 +498,20 @@ }, "AWS::GreengrassV2::Deployment.IoTJobRateIncreaseCriteria": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-iotjobrateincreasecriteria.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Immutable" + "Properties": { + "NumberOfNotifiedThings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-iotjobrateincreasecriteria.html#cfn-greengrassv2-deployment-iotjobrateincreasecriteria-numberofnotifiedthings", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + }, + "NumberOfSucceededThings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-iotjobrateincreasecriteria.html#cfn-greengrassv2-deployment-iotjobrateincreasecriteria-numberofsucceededthings", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + } + } }, "AWS::GreengrassV2::Deployment.IoTJobTimeoutConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-iotjobtimeoutconfig.html", @@ -513,13 +531,13 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-systemresourcelimits.html#cfn-greengrassv2-deployment-systemresourcelimits-cpus", "PrimitiveType": "Double", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Immutable" }, "Memory": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrassv2-deployment-systemresourcelimits.html#cfn-greengrassv2-deployment-systemresourcelimits-memory", "PrimitiveType": "Integer", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Immutable" } } } diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GroundStation.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GroundStation.json index d0a7fa07a1e11..f849eee78e6da 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GroundStation.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GroundStation.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::GroundStation::Config.AntennaDownlinkConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-antennadownlinkconfig.html", @@ -337,6 +337,7 @@ }, "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroup-securitydetails.html#cfn-groundstation-dataflowendpointgroup-securitydetails-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -344,6 +345,7 @@ }, "SubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroup-securitydetails.html#cfn-groundstation-dataflowendpointgroup-securitydetails-subnetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -415,6 +417,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-groundstation-config.html#cfn-groundstation-config-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -435,6 +438,7 @@ "Properties": { "EndpointDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-groundstation-dataflowendpointgroup.html#cfn-groundstation-dataflowendpointgroup-endpointdetails", + "DuplicatesAllowed": true, "ItemType": "EndpointDetails", "Required": true, "Type": "List", @@ -442,6 +446,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-groundstation-dataflowendpointgroup.html#cfn-groundstation-dataflowendpointgroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -477,6 +482,7 @@ }, "DataflowEdges": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-groundstation-missionprofile.html#cfn-groundstation-missionprofile-dataflowedges", + "DuplicatesAllowed": true, "ItemType": "DataflowEdge", "Required": true, "Type": "List", @@ -496,6 +502,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-groundstation-missionprofile.html#cfn-groundstation-missionprofile-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GuardDuty.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GuardDuty.json index e7348f7c26868..830369d6e08ed 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GuardDuty.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_GuardDuty.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::GuardDuty::Detector.CFNDataSourceConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-guardduty-detector-cfndatasourceconfigurations.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_HealthLake.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_HealthLake.json index 4afc10c171b29..770ef082404fe 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_HealthLake.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_HealthLake.json @@ -1,6 +1,23 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { + "AWS::HealthLake::FHIRDatastore.CreatedAt": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-healthlake-fhirdatastore-createdat.html", + "Properties": { + "Nanos": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-healthlake-fhirdatastore-createdat.html#cfn-healthlake-fhirdatastore-createdat-nanos", + "PrimitiveType": "Integer", + "Required": true, + "UpdateType": "Mutable" + }, + "Seconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-healthlake-fhirdatastore-createdat.html#cfn-healthlake-fhirdatastore-createdat-seconds", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::HealthLake::FHIRDatastore.KmsEncryptionConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-healthlake-fhirdatastore-kmsencryptionconfig.html", "Properties": { @@ -44,6 +61,15 @@ "ResourceTypes": { "AWS::HealthLake::FHIRDatastore": { "Attributes": { + "CreatedAt": { + "Type": "CreatedAt" + }, + "CreatedAt.Nanos": { + "PrimitiveType": "Integer" + }, + "CreatedAt.Seconds": { + "PrimitiveType": "String" + }, "DatastoreArn": { "PrimitiveType": "String" }, @@ -85,6 +111,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-healthlake-fhirdatastore.html#cfn-healthlake-fhirdatastore-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IAM.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IAM.json index ca714544efc22..f397099b15964 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IAM.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IAM.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::IAM::Group.Policy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html", @@ -230,6 +230,7 @@ "Properties": { "ClientIdList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-oidcprovider.html#cfn-iam-oidcprovider-clientidlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -245,6 +246,7 @@ }, "ThumbprintList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-oidcprovider.html#cfn-iam-oidcprovider-thumbprintlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IVS.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IVS.json index 01e996a861312..cb13d43197ffd 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IVS.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IVS.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::IVS::RecordingConfiguration.DestinationConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ivs-recordingconfiguration-destinationconfiguration.html", @@ -116,7 +116,7 @@ "PublicKeyMaterial": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-playbackkeypair.html#cfn-ivs-playbackkeypair-publickeymaterial", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Immutable" }, "Tags": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IdentityStore.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IdentityStore.json index 66d3912038123..2294e4a6b08c9 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IdentityStore.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IdentityStore.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::IdentityStore::GroupMembership.MemberId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-identitystore-groupmembership-memberid.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ImageBuilder.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ImageBuilder.json index 0400497d360aa..020d8caf4f43b 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ImageBuilder.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ImageBuilder.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ImageBuilder::ContainerRecipe.ComponentConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-containerrecipe-componentconfiguration.html", @@ -12,6 +12,7 @@ }, "Parameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-containerrecipe-componentconfiguration.html#cfn-imagebuilder-containerrecipe-componentconfiguration-parameters", + "DuplicatesAllowed": true, "ItemType": "ComponentParameter", "Required": false, "Type": "List", @@ -30,6 +31,7 @@ }, "Value": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-containerrecipe-componentparameter.html#cfn-imagebuilder-containerrecipe-componentparameter-value", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -124,6 +126,7 @@ "Properties": { "BlockDeviceMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-containerrecipe-instanceconfiguration.html#cfn-imagebuilder-containerrecipe-instanceconfiguration-blockdevicemappings", + "DuplicatesAllowed": true, "ItemType": "InstanceBlockDeviceMapping", "Required": false, "Type": "List", @@ -190,6 +193,7 @@ }, "TargetAccountIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-amidistributionconfiguration.html#cfn-imagebuilder-distributionconfiguration-amidistributionconfiguration-targetaccountids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -202,6 +206,7 @@ "Properties": { "ContainerTags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-containerdistributionconfiguration.html#cfn-imagebuilder-distributionconfiguration-containerdistributionconfiguration-containertags", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -238,6 +243,7 @@ }, "FastLaunchConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-distribution.html#cfn-imagebuilder-distributionconfiguration-distribution-fastlaunchconfigurations", + "DuplicatesAllowed": true, "ItemType": "FastLaunchConfiguration", "Required": false, "Type": "List", @@ -245,6 +251,7 @@ }, "LaunchTemplateConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-distribution.html#cfn-imagebuilder-distributionconfiguration-distribution-launchtemplateconfigurations", + "DuplicatesAllowed": true, "ItemType": "LaunchTemplateConfiguration", "Required": false, "Type": "List", @@ -252,6 +259,7 @@ }, "LicenseConfigurationArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-distribution.html#cfn-imagebuilder-distributionconfiguration-distribution-licenseconfigurationarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -339,6 +347,7 @@ "Properties": { "OrganizationArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-launchpermissionconfiguration.html#cfn-imagebuilder-distributionconfiguration-launchpermissionconfiguration-organizationarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -346,6 +355,7 @@ }, "OrganizationalUnitArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-launchpermissionconfiguration.html#cfn-imagebuilder-distributionconfiguration-launchpermissionconfiguration-organizationalunitarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -353,6 +363,7 @@ }, "UserGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-launchpermissionconfiguration.html#cfn-imagebuilder-distributionconfiguration-launchpermissionconfiguration-usergroups", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -360,6 +371,7 @@ }, "UserIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-distributionconfiguration-launchpermissionconfiguration.html#cfn-imagebuilder-distributionconfiguration-launchpermissionconfiguration-userids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -486,6 +498,7 @@ }, "Parameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-imagerecipe-componentconfiguration.html#cfn-imagebuilder-imagerecipe-componentconfiguration-parameters", + "DuplicatesAllowed": true, "ItemType": "ComponentParameter", "Required": false, "Type": "List", @@ -504,6 +517,7 @@ }, "Value": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-imagebuilder-imagerecipe-componentparameter.html#cfn-imagebuilder-imagerecipe-componentparameter-value", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -706,6 +720,7 @@ }, "SupportedOsVersions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-imagebuilder-component.html#cfn-imagebuilder-component-supportedosversions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -745,6 +760,7 @@ "Properties": { "Components": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-imagebuilder-containerrecipe.html#cfn-imagebuilder-containerrecipe-components", + "DuplicatesAllowed": true, "ItemType": "ComponentConfiguration", "Required": true, "Type": "List", @@ -856,6 +872,7 @@ }, "Distributions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-imagebuilder-distributionconfiguration.html#cfn-imagebuilder-distributionconfiguration-distributions", + "DuplicatesAllowed": true, "ItemType": "Distribution", "Required": true, "Type": "List", @@ -1037,6 +1054,7 @@ }, "BlockDeviceMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-imagebuilder-imagerecipe.html#cfn-imagebuilder-imagerecipe-blockdevicemappings", + "DuplicatesAllowed": true, "ItemType": "InstanceBlockDeviceMapping", "Required": false, "Type": "List", @@ -1044,6 +1062,7 @@ }, "Components": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-imagebuilder-imagerecipe.html#cfn-imagebuilder-imagerecipe-components", + "DuplicatesAllowed": true, "ItemType": "ComponentConfiguration", "Required": true, "Type": "List", @@ -1119,6 +1138,7 @@ }, "InstanceTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-imagebuilder-infrastructureconfiguration.html#cfn-imagebuilder-infrastructureconfiguration-instancetypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1151,6 +1171,7 @@ }, "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-imagebuilder-infrastructureconfiguration.html#cfn-imagebuilder-infrastructureconfiguration-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Inspector.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Inspector.json index 9a62cc611ef5f..d409a98bed2e3 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Inspector.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Inspector.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::Inspector::AssessmentTarget": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_InspectorV2.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_InspectorV2.json index 580ab3776cd37..46254c8e8908c 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_InspectorV2.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_InspectorV2.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::InspectorV2::Filter.DateFilter": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-datefilter.html", @@ -23,6 +23,7 @@ "Properties": { "AwsAccountId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-awsaccountid", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -30,6 +31,7 @@ }, "ComponentId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-componentid", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -37,6 +39,7 @@ }, "ComponentType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-componenttype", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -44,6 +47,7 @@ }, "Ec2InstanceImageId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-ec2instanceimageid", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -51,6 +55,7 @@ }, "Ec2InstanceSubnetId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-ec2instancesubnetid", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -58,6 +63,7 @@ }, "Ec2InstanceVpcId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-ec2instancevpcid", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -65,6 +71,7 @@ }, "EcrImageArchitecture": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-ecrimagearchitecture", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -72,6 +79,7 @@ }, "EcrImageHash": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-ecrimagehash", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -79,6 +87,7 @@ }, "EcrImagePushedAt": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-ecrimagepushedat", + "DuplicatesAllowed": true, "ItemType": "DateFilter", "Required": false, "Type": "List", @@ -86,6 +95,7 @@ }, "EcrImageRegistry": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-ecrimageregistry", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -93,6 +103,7 @@ }, "EcrImageRepositoryName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-ecrimagerepositoryname", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -100,6 +111,7 @@ }, "EcrImageTags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-ecrimagetags", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -107,6 +119,7 @@ }, "FindingArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-findingarn", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -114,6 +127,7 @@ }, "FindingStatus": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-findingstatus", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -121,6 +135,7 @@ }, "FindingType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-findingtype", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -128,6 +143,7 @@ }, "FirstObservedAt": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-firstobservedat", + "DuplicatesAllowed": true, "ItemType": "DateFilter", "Required": false, "Type": "List", @@ -135,6 +151,7 @@ }, "InspectorScore": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-inspectorscore", + "DuplicatesAllowed": true, "ItemType": "NumberFilter", "Required": false, "Type": "List", @@ -142,6 +159,7 @@ }, "LastObservedAt": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-lastobservedat", + "DuplicatesAllowed": true, "ItemType": "DateFilter", "Required": false, "Type": "List", @@ -149,6 +167,7 @@ }, "NetworkProtocol": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-networkprotocol", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -156,6 +175,7 @@ }, "PortRange": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-portrange", + "DuplicatesAllowed": true, "ItemType": "PortRangeFilter", "Required": false, "Type": "List", @@ -163,6 +183,7 @@ }, "RelatedVulnerabilities": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-relatedvulnerabilities", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -170,6 +191,7 @@ }, "ResourceId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-resourceid", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -177,6 +199,7 @@ }, "ResourceTags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-resourcetags", + "DuplicatesAllowed": true, "ItemType": "MapFilter", "Required": false, "Type": "List", @@ -184,6 +207,7 @@ }, "ResourceType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-resourcetype", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -191,6 +215,7 @@ }, "Severity": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-severity", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -198,6 +223,7 @@ }, "Title": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-title", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -205,6 +231,7 @@ }, "UpdatedAt": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-updatedat", + "DuplicatesAllowed": true, "ItemType": "DateFilter", "Required": false, "Type": "List", @@ -212,6 +239,7 @@ }, "VendorSeverity": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-vendorseverity", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -219,6 +247,7 @@ }, "VulnerabilityId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-vulnerabilityid", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -226,6 +255,7 @@ }, "VulnerabilitySource": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-vulnerabilitysource", + "DuplicatesAllowed": true, "ItemType": "StringFilter", "Required": false, "Type": "List", @@ -233,6 +263,7 @@ }, "VulnerablePackages": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-inspectorv2-filter-filtercriteria.html#cfn-inspectorv2-filter-filtercriteria-vulnerablepackages", + "DuplicatesAllowed": true, "ItemType": "PackageFilter", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoT.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoT.json index 47d3084533b4a..b7c4ac115baeb 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoT.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoT.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::IoT::AccountAuditConfiguration.AuditCheckConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-accountauditconfiguration-auditcheckconfiguration.html", @@ -221,6 +221,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-fleetmetric-aggregationtype.html#cfn-iot-fleetmetric-aggregationtype-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -228,6 +229,133 @@ } } }, + "AWS::IoT::JobTemplate.AbortConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-abortconfig.html", + "Properties": { + "CriteriaList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-abortconfig.html#cfn-iot-jobtemplate-abortconfig-criterialist", + "DuplicatesAllowed": true, + "ItemType": "AbortCriteria", + "Required": true, + "Type": "List", + "UpdateType": "Immutable" + } + } + }, + "AWS::IoT::JobTemplate.AbortCriteria": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-abortcriteria.html", + "Properties": { + "Action": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-abortcriteria.html#cfn-iot-jobtemplate-abortcriteria-action", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "FailureType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-abortcriteria.html#cfn-iot-jobtemplate-abortcriteria-failuretype", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "MinNumberOfExecutedThings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-abortcriteria.html#cfn-iot-jobtemplate-abortcriteria-minnumberofexecutedthings", + "PrimitiveType": "Integer", + "Required": true, + "UpdateType": "Immutable" + }, + "ThresholdPercentage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-abortcriteria.html#cfn-iot-jobtemplate-abortcriteria-thresholdpercentage", + "PrimitiveType": "Double", + "Required": true, + "UpdateType": "Immutable" + } + } + }, + "AWS::IoT::JobTemplate.ExponentialRolloutRate": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-exponentialrolloutrate.html", + "Properties": { + "BaseRatePerMinute": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-exponentialrolloutrate.html#cfn-iot-jobtemplate-exponentialrolloutrate-baserateperminute", + "PrimitiveType": "Integer", + "Required": true, + "UpdateType": "Immutable" + }, + "IncrementFactor": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-exponentialrolloutrate.html#cfn-iot-jobtemplate-exponentialrolloutrate-incrementfactor", + "PrimitiveType": "Double", + "Required": true, + "UpdateType": "Immutable" + }, + "RateIncreaseCriteria": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-exponentialrolloutrate.html#cfn-iot-jobtemplate-exponentialrolloutrate-rateincreasecriteria", + "Required": true, + "Type": "RateIncreaseCriteria", + "UpdateType": "Immutable" + } + } + }, + "AWS::IoT::JobTemplate.JobExecutionsRolloutConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-jobexecutionsrolloutconfig.html", + "Properties": { + "ExponentialRolloutRate": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-jobexecutionsrolloutconfig.html#cfn-iot-jobtemplate-jobexecutionsrolloutconfig-exponentialrolloutrate", + "Required": false, + "Type": "ExponentialRolloutRate", + "UpdateType": "Immutable" + }, + "MaximumPerMinute": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-jobexecutionsrolloutconfig.html#cfn-iot-jobtemplate-jobexecutionsrolloutconfig-maximumperminute", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::IoT::JobTemplate.PresignedUrlConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-presignedurlconfig.html", + "Properties": { + "ExpiresInSec": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-presignedurlconfig.html#cfn-iot-jobtemplate-presignedurlconfig-expiresinsec", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + }, + "RoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-presignedurlconfig.html#cfn-iot-jobtemplate-presignedurlconfig-rolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, + "AWS::IoT::JobTemplate.RateIncreaseCriteria": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-rateincreasecriteria.html", + "Properties": { + "NumberOfNotifiedThings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-rateincreasecriteria.html#cfn-iot-jobtemplate-rateincreasecriteria-numberofnotifiedthings", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + }, + "NumberOfSucceededThings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-rateincreasecriteria.html#cfn-iot-jobtemplate-rateincreasecriteria-numberofsucceededthings", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::IoT::JobTemplate.TimeoutConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-timeoutconfig.html", + "Properties": { + "InProgressTimeoutInMinutes": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-jobtemplate-timeoutconfig.html#cfn-iot-jobtemplate-timeoutconfig-inprogresstimeoutinminutes", + "PrimitiveType": "Integer", + "Required": true, + "UpdateType": "Immutable" + } + } + }, "AWS::IoT::MitigationAction.ActionParams": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-mitigationaction-actionparams.html", "Properties": { @@ -1404,6 +1532,7 @@ }, "UserProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-republishactionheaders.html#cfn-iot-topicrule-republishactionheaders-userproperties", + "DuplicatesAllowed": true, "ItemType": "UserProperty", "Required": false, "Type": "List", @@ -1560,6 +1689,7 @@ }, "Dimensions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-timestreamaction.html#cfn-iot-topicrule-timestreamaction-dimensions", + "DuplicatesAllowed": true, "ItemType": "TimestreamDimension", "Required": true, "Type": "List", @@ -1624,6 +1754,7 @@ "Properties": { "Actions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-topicrulepayload.html#cfn-iot-topicrule-topicrulepayload-actions", + "DuplicatesAllowed": true, "ItemType": "Action", "Required": true, "Type": "List", @@ -1793,6 +1924,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-authorizer.html#cfn-iot-authorizer-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2034,6 +2166,7 @@ }, "ServerCertificateArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-domainconfiguration.html#cfn-iot-domainconfiguration-servercertificatearns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2047,6 +2180,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-domainconfiguration.html#cfn-iot-domainconfiguration-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2151,8 +2285,8 @@ "Properties": { "AbortConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-jobtemplate.html#cfn-iot-jobtemplate-abortconfig", - "PrimitiveType": "Json", "Required": false, + "Type": "AbortConfig", "UpdateType": "Immutable" }, "Description": { @@ -2181,8 +2315,8 @@ }, "JobExecutionsRolloutConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-jobtemplate.html#cfn-iot-jobtemplate-jobexecutionsrolloutconfig", - "PrimitiveType": "Json", "Required": false, + "Type": "JobExecutionsRolloutConfig", "UpdateType": "Immutable" }, "JobTemplateId": { @@ -2193,8 +2327,8 @@ }, "PresignedUrlConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-jobtemplate.html#cfn-iot-jobtemplate-presignedurlconfig", - "PrimitiveType": "Json", "Required": false, + "Type": "PresignedUrlConfig", "UpdateType": "Immutable" }, "Tags": { @@ -2207,8 +2341,8 @@ }, "TimeoutConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-jobtemplate.html#cfn-iot-jobtemplate-timeoutconfig", - "PrimitiveType": "Json", "Required": false, + "Type": "TimeoutConfig", "UpdateType": "Immutable" } } @@ -2351,6 +2485,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-provisioningtemplate.html#cfn-iot-provisioningtemplate-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2432,6 +2567,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-rolealias.html#cfn-iot-rolealias-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2600,6 +2736,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-topicrule.html#cfn-iot-topicrule-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoT1Click.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoT1Click.json index 7002ae848d205..45b6a6455f035 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoT1Click.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoT1Click.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::IoT1Click::Project.DeviceTemplate": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot1click-project-devicetemplate.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTAnalytics.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTAnalytics.json index 50224ef61ee78..a1d01a9c68f85 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTAnalytics.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTAnalytics.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::IoTAnalytics::Channel.ChannelStorage": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-channel-channelstorage.html", @@ -12,8 +12,8 @@ }, "ServiceManagedS3": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-channel-channelstorage.html#cfn-iotanalytics-channel-channelstorage-servicemanageds3", + "PrimitiveType": "Json", "Required": false, - "Type": "ServiceManagedS3", "UpdateType": "Mutable" } } @@ -58,12 +58,6 @@ } } }, - "AWS::IoTAnalytics::Channel.ServiceManagedS3": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-channel-servicemanageds3.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "AWS::IoTAnalytics::Dataset.Action": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-dataset-action.html", "Properties": { @@ -552,8 +546,8 @@ }, "ServiceManagedS3": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-datastore-datastorestorage.html#cfn-iotanalytics-datastore-datastorestorage-servicemanageds3", + "PrimitiveType": "Json", "Required": false, - "Type": "ServiceManagedS3", "UpdateType": "Mutable" } } @@ -563,8 +557,8 @@ "Properties": { "JsonConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-datastore-fileformatconfiguration.html#cfn-iotanalytics-datastore-fileformatconfiguration-jsonconfiguration", + "PrimitiveType": "Json", "Required": false, - "Type": "JsonConfiguration", "UpdateType": "Mutable" }, "ParquetConfiguration": { @@ -586,12 +580,6 @@ } } }, - "AWS::IoTAnalytics::Datastore.JsonConfiguration": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-datastore-jsonconfiguration.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "AWS::IoTAnalytics::Datastore.ParquetConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-datastore-parquetconfiguration.html", "Properties": { @@ -644,12 +632,6 @@ } } }, - "AWS::IoTAnalytics::Datastore.ServiceManagedS3": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-datastore-servicemanageds3.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "AWS::IoTAnalytics::Datastore.TimestampPartition": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-datastore-timestamppartition.html", "Properties": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTCoreDeviceAdvisor.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTCoreDeviceAdvisor.json index be308b415b419..075af6d689e8f 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTCoreDeviceAdvisor.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTCoreDeviceAdvisor.json @@ -1,6 +1,61 @@ { - "$version": "100.0.0", - "PropertyTypes": {}, + "$version": "101.0.0", + "PropertyTypes": { + "AWS::IoTCoreDeviceAdvisor::SuiteDefinition.DeviceUnderTest": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotcoredeviceadvisor-suitedefinition-deviceundertest.html", + "Properties": { + "CertificateArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotcoredeviceadvisor-suitedefinition-deviceundertest.html#cfn-iotcoredeviceadvisor-suitedefinition-deviceundertest-certificatearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ThingArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotcoredeviceadvisor-suitedefinition-deviceundertest.html#cfn-iotcoredeviceadvisor-suitedefinition-deviceundertest-thingarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTCoreDeviceAdvisor::SuiteDefinition.SuiteDefinitionConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotcoredeviceadvisor-suitedefinition-suitedefinitionconfiguration.html", + "Properties": { + "DevicePermissionRoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotcoredeviceadvisor-suitedefinition-suitedefinitionconfiguration.html#cfn-iotcoredeviceadvisor-suitedefinition-suitedefinitionconfiguration-devicepermissionrolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Devices": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotcoredeviceadvisor-suitedefinition-suitedefinitionconfiguration.html#cfn-iotcoredeviceadvisor-suitedefinition-suitedefinitionconfiguration-devices", + "DuplicatesAllowed": true, + "ItemType": "DeviceUnderTest", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "IntendedForQualification": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotcoredeviceadvisor-suitedefinition-suitedefinitionconfiguration.html#cfn-iotcoredeviceadvisor-suitedefinition-suitedefinitionconfiguration-intendedforqualification", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "RootGroup": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotcoredeviceadvisor-suitedefinition-suitedefinitionconfiguration.html#cfn-iotcoredeviceadvisor-suitedefinition-suitedefinitionconfiguration-rootgroup", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SuiteDefinitionName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotcoredeviceadvisor-suitedefinition-suitedefinitionconfiguration.html#cfn-iotcoredeviceadvisor-suitedefinition-suitedefinitionconfiguration-suitedefinitionname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + } + }, "ResourceTypes": { "AWS::IoTCoreDeviceAdvisor::SuiteDefinition": { "Attributes": { @@ -18,8 +73,8 @@ "Properties": { "SuiteDefinitionConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotcoredeviceadvisor-suitedefinition.html#cfn-iotcoredeviceadvisor-suitedefinition-suitedefinitionconfiguration", - "PrimitiveType": "Json", "Required": true, + "Type": "SuiteDefinitionConfiguration", "UpdateType": "Mutable" }, "Tags": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTEvents.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTEvents.json index e21c4bbb00e24..be289a52d6b17 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTEvents.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTEvents.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::IoTEvents::AlarmModel.AcknowledgeFlow": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotevents-alarmmodel-acknowledgeflow.html", @@ -93,6 +93,7 @@ "Properties": { "AlarmActions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotevents-alarmmodel-alarmeventactions.html#cfn-iotevents-alarmmodel-alarmeventactions-alarmactions", + "DuplicatesAllowed": true, "ItemType": "AlarmAction", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTFleetHub.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTFleetHub.json index 4785c5ce0bbc3..0ccfdeb8b4f8e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTFleetHub.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTFleetHub.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::IoTFleetHub::Application": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTFleetWise.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTFleetWise.json index 452695f927b8d..bfea4910b7420 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTFleetWise.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTFleetWise.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::IoTFleetWise::Campaign.CollectionScheme": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-campaign-collectionscheme.html", @@ -104,59 +104,36 @@ } } }, - "AWS::IoTFleetWise::DecoderManifest.CanNetworkInterface": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cannetworkinterface.html", - "Properties": { - "CanInterface": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cannetworkinterface.html#cfn-iotfleetwise-decodermanifest-cannetworkinterface-caninterface", - "Required": true, - "Type": "CanInterface", - "UpdateType": "Mutable" - }, - "InterfaceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cannetworkinterface.html#cfn-iotfleetwise-decodermanifest-cannetworkinterface-interfaceid", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cannetworkinterface.html#cfn-iotfleetwise-decodermanifest-cannetworkinterface-type", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, "AWS::IoTFleetWise::DecoderManifest.CanSignal": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignal.html", "Properties": { "Factor": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignal.html#cfn-iotfleetwise-decodermanifest-cansignal-factor", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "IsBigEndian": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignal.html#cfn-iotfleetwise-decodermanifest-cansignal-isbigendian", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "IsSigned": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignal.html#cfn-iotfleetwise-decodermanifest-cansignal-issigned", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "Length": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignal.html#cfn-iotfleetwise-decodermanifest-cansignal-length", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "MessageId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignal.html#cfn-iotfleetwise-decodermanifest-cansignal-messageid", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, @@ -168,41 +145,41 @@ }, "Offset": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignal.html#cfn-iotfleetwise-decodermanifest-cansignal-offset", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "StartBit": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignal.html#cfn-iotfleetwise-decodermanifest-cansignal-startbit", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" } } }, - "AWS::IoTFleetWise::DecoderManifest.CanSignalDecoder": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignaldecoder.html", + "AWS::IoTFleetWise::DecoderManifest.NetworkInterfacesItems": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-networkinterfacesitems.html", "Properties": { - "CanSignal": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignaldecoder.html#cfn-iotfleetwise-decodermanifest-cansignaldecoder-cansignal", - "Required": true, - "Type": "CanSignal", + "CanInterface": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-networkinterfacesitems.html#cfn-iotfleetwise-decodermanifest-networkinterfacesitems-caninterface", + "Required": false, + "Type": "CanInterface", "UpdateType": "Mutable" }, - "FullyQualifiedName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignaldecoder.html#cfn-iotfleetwise-decodermanifest-cansignaldecoder-fullyqualifiedname", + "InterfaceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-networkinterfacesitems.html#cfn-iotfleetwise-decodermanifest-networkinterfacesitems-interfaceid", "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, - "InterfaceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignaldecoder.html#cfn-iotfleetwise-decodermanifest-cansignaldecoder-interfaceid", - "PrimitiveType": "String", - "Required": true, + "ObdInterface": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-networkinterfacesitems.html#cfn-iotfleetwise-decodermanifest-networkinterfacesitems-obdinterface", + "Required": false, + "Type": "ObdInterface", "UpdateType": "Mutable" }, "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-cansignaldecoder.html#cfn-iotfleetwise-decodermanifest-cansignaldecoder-type", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-networkinterfacesitems.html#cfn-iotfleetwise-decodermanifest-networkinterfacesitems-type", "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" @@ -214,13 +191,13 @@ "Properties": { "DtcRequestIntervalSeconds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdinterface.html#cfn-iotfleetwise-decodermanifest-obdinterface-dtcrequestintervalseconds", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, "HasTransmissionEcu": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdinterface.html#cfn-iotfleetwise-decodermanifest-obdinterface-hastransmissionecu", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, @@ -238,43 +215,20 @@ }, "PidRequestIntervalSeconds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdinterface.html#cfn-iotfleetwise-decodermanifest-obdinterface-pidrequestintervalseconds", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, "RequestMessageId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdinterface.html#cfn-iotfleetwise-decodermanifest-obdinterface-requestmessageid", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "UseExtendedIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdinterface.html#cfn-iotfleetwise-decodermanifest-obdinterface-useextendedids", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - } - } - }, - "AWS::IoTFleetWise::DecoderManifest.ObdNetworkInterface": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdnetworkinterface.html", - "Properties": { - "InterfaceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdnetworkinterface.html#cfn-iotfleetwise-decodermanifest-obdnetworkinterface-interfaceid", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - }, - "ObdInterface": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdnetworkinterface.html#cfn-iotfleetwise-decodermanifest-obdnetworkinterface-obdinterface", - "Required": true, - "Type": "ObdInterface", - "UpdateType": "Mutable" - }, - "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdnetworkinterface.html#cfn-iotfleetwise-decodermanifest-obdnetworkinterface-type", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" } } @@ -284,83 +238,89 @@ "Properties": { "BitMaskLength": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignal.html#cfn-iotfleetwise-decodermanifest-obdsignal-bitmasklength", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, "BitRightShift": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignal.html#cfn-iotfleetwise-decodermanifest-obdsignal-bitrightshift", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, "ByteLength": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignal.html#cfn-iotfleetwise-decodermanifest-obdsignal-bytelength", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "Offset": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignal.html#cfn-iotfleetwise-decodermanifest-obdsignal-offset", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "Pid": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignal.html#cfn-iotfleetwise-decodermanifest-obdsignal-pid", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "PidResponseLength": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignal.html#cfn-iotfleetwise-decodermanifest-obdsignal-pidresponselength", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "Scaling": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignal.html#cfn-iotfleetwise-decodermanifest-obdsignal-scaling", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "ServiceMode": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignal.html#cfn-iotfleetwise-decodermanifest-obdsignal-servicemode", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "StartByte": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignal.html#cfn-iotfleetwise-decodermanifest-obdsignal-startbyte", - "PrimitiveType": "Json", + "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" } } }, - "AWS::IoTFleetWise::DecoderManifest.ObdSignalDecoder": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignaldecoder.html", + "AWS::IoTFleetWise::DecoderManifest.SignalDecodersItems": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-signaldecodersitems.html", "Properties": { + "CanSignal": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-signaldecodersitems.html#cfn-iotfleetwise-decodermanifest-signaldecodersitems-cansignal", + "Required": false, + "Type": "CanSignal", + "UpdateType": "Mutable" + }, "FullyQualifiedName": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignaldecoder.html#cfn-iotfleetwise-decodermanifest-obdsignaldecoder-fullyqualifiedname", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-signaldecodersitems.html#cfn-iotfleetwise-decodermanifest-signaldecodersitems-fullyqualifiedname", "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "InterfaceId": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignaldecoder.html#cfn-iotfleetwise-decodermanifest-obdsignaldecoder-interfaceid", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-signaldecodersitems.html#cfn-iotfleetwise-decodermanifest-signaldecodersitems-interfaceid", "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" }, "ObdSignal": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignaldecoder.html#cfn-iotfleetwise-decodermanifest-obdsignaldecoder-obdsignal", - "Required": true, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-signaldecodersitems.html#cfn-iotfleetwise-decodermanifest-signaldecodersitems-obdsignal", + "Required": false, "Type": "ObdSignal", "UpdateType": "Mutable" }, "Type": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-obdsignaldecoder.html#cfn-iotfleetwise-decodermanifest-obdsignaldecoder-type", + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-decodermanifest-signaldecodersitems.html#cfn-iotfleetwise-decodermanifest-signaldecodersitems-type", "PrimitiveType": "String", "Required": true, "UpdateType": "Mutable" @@ -372,6 +332,7 @@ "Properties": { "AllowedValues": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-signalcatalog-actuator.html#cfn-iotfleetwise-signalcatalog-actuator-allowedvalues", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -426,6 +387,7 @@ "Properties": { "AllowedValues": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-signalcatalog-attribute.html#cfn-iotfleetwise-signalcatalog-attribute-allowedvalues", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -567,6 +529,7 @@ "Properties": { "AllowedValues": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotfleetwise-signalcatalog-sensor.html#cfn-iotfleetwise-signalcatalog-sensor-allowedvalues", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -649,6 +612,7 @@ }, "DataExtraDimensions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotfleetwise-campaign.html#cfn-iotfleetwise-campaign-dataextradimensions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -698,6 +662,7 @@ }, "SignalsToCollect": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotfleetwise-campaign.html#cfn-iotfleetwise-campaign-signalstocollect", + "DuplicatesAllowed": true, "ItemType": "SignalInformation", "Required": false, "Type": "List", @@ -765,14 +730,16 @@ }, "NetworkInterfaces": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotfleetwise-decodermanifest.html#cfn-iotfleetwise-decodermanifest-networkinterfaces", - "PrimitiveItemType": "Json", + "DuplicatesAllowed": true, + "ItemType": "NetworkInterfacesItems", "Required": false, "Type": "List", "UpdateType": "Mutable" }, "SignalDecoders": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotfleetwise-decodermanifest.html#cfn-iotfleetwise-decodermanifest-signaldecoders", - "PrimitiveItemType": "Json", + "DuplicatesAllowed": true, + "ItemType": "SignalDecodersItems", "Required": false, "Type": "List", "UpdateType": "Mutable" @@ -932,6 +899,12 @@ "Required": false, "UpdateType": "Immutable" }, + "NodeCounts": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotfleetwise-signalcatalog.html#cfn-iotfleetwise-signalcatalog-nodecounts", + "Required": false, + "Type": "NodeCounts", + "UpdateType": "Mutable" + }, "Nodes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotfleetwise-signalcatalog.html#cfn-iotfleetwise-signalcatalog-nodes", "DuplicatesAllowed": false, diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTSiteWise.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTSiteWise.json index 58dae3342c02c..6ebf3e76d82c9 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTSiteWise.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTSiteWise.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::IoTSiteWise::AccessPolicy.AccessPolicyIdentity": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-accesspolicy-accesspolicyidentity.html", @@ -147,6 +147,7 @@ "Properties": { "CompositeModelProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-assetmodelcompositemodel.html#cfn-iotsitewise-assetmodel-assetmodelcompositemodel-compositemodelproperties", + "DuplicatesAllowed": true, "ItemType": "AssetModelProperty", "Required": false, "Type": "List", @@ -275,6 +276,7 @@ }, "Variables": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-metric.html#cfn-iotsitewise-assetmodel-metric-variables", + "DuplicatesAllowed": true, "ItemType": "ExpressionVariable", "Required": true, "Type": "List", @@ -339,6 +341,7 @@ }, "Variables": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-assetmodel-transform.html#cfn-iotsitewise-assetmodel-transform-variables", + "DuplicatesAllowed": true, "ItemType": "ExpressionVariable", "Required": true, "Type": "List", @@ -435,6 +438,23 @@ "UpdateType": "Immutable" } } + }, + "AWS::IoTSiteWise::Portal.Alarms": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-portal-alarms.html", + "Properties": { + "AlarmRoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-portal-alarms.html#cfn-iotsitewise-portal-alarms-alarmrolearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "NotificationLambdaArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotsitewise-portal-alarms.html#cfn-iotsitewise-portal-alarms-notificationlambdaarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } } }, "ResourceTypes": { @@ -488,6 +508,7 @@ }, "AssetHierarchies": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-asset.html#cfn-iotsitewise-asset-assethierarchies", + "DuplicatesAllowed": true, "ItemType": "AssetHierarchy", "Required": false, "Type": "List", @@ -507,6 +528,7 @@ }, "AssetProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-asset.html#cfn-iotsitewise-asset-assetproperties", + "DuplicatesAllowed": true, "ItemType": "AssetProperty", "Required": false, "Type": "List", @@ -535,6 +557,7 @@ "Properties": { "AssetModelCompositeModels": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-assetmodel.html#cfn-iotsitewise-assetmodel-assetmodelcompositemodels", + "DuplicatesAllowed": true, "ItemType": "AssetModelCompositeModel", "Required": false, "Type": "List", @@ -548,6 +571,7 @@ }, "AssetModelHierarchies": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-assetmodel.html#cfn-iotsitewise-assetmodel-assetmodelhierarchies", + "DuplicatesAllowed": true, "ItemType": "AssetModelHierarchy", "Required": false, "Type": "List", @@ -561,6 +585,7 @@ }, "AssetModelProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-assetmodel.html#cfn-iotsitewise-assetmodel-assetmodelproperties", + "DuplicatesAllowed": true, "ItemType": "AssetModelProperty", "Required": false, "Type": "List", @@ -568,6 +593,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-assetmodel.html#cfn-iotsitewise-assetmodel-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -677,8 +703,8 @@ "Properties": { "Alarms": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotsitewise-portal.html#cfn-iotsitewise-portal-alarms", - "PrimitiveType": "Json", "Required": false, + "Type": "Alarms", "UpdateType": "Mutable" }, "NotificationSenderEmail": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTThingsGraph.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTThingsGraph.json index 1fc4cadf347a8..744694b15f518 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTThingsGraph.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTThingsGraph.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::IoTThingsGraph::FlowTemplate.DefinitionDocument": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotthingsgraph-flowtemplate-definitiondocument.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTTwinMaker.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTTwinMaker.json index d3198845586fc..948f8c4f1d072 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTTwinMaker.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTTwinMaker.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::IoTTwinMaker::ComponentType.DataConnector": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-componenttype-dataconnector.html", @@ -105,8 +105,8 @@ }, "RelationshipValue": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-componenttype-datavalue.html#cfn-iottwinmaker-componenttype-datavalue-relationshipvalue", - "PrimitiveType": "Json", "Required": false, + "Type": "RelationshipValue", "UpdateType": "Mutable" }, "StringValue": { @@ -117,6 +117,23 @@ } } }, + "AWS::IoTTwinMaker::ComponentType.Error": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-componenttype-error.html", + "Properties": { + "Code": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-componenttype-error.html#cfn-iottwinmaker-componenttype-error-code", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Message": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-componenttype-error.html#cfn-iottwinmaker-componenttype-error-message", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::IoTTwinMaker::ComponentType.Function": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-componenttype-function.html", "Properties": { @@ -237,6 +254,40 @@ } } }, + "AWS::IoTTwinMaker::ComponentType.RelationshipValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-componenttype-relationshipvalue.html", + "Properties": { + "TargetComponentName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-componenttype-relationshipvalue.html#cfn-iottwinmaker-componenttype-relationshipvalue-targetcomponentname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "TargetEntityId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-componenttype-relationshipvalue.html#cfn-iottwinmaker-componenttype-relationshipvalue-targetentityid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTTwinMaker::ComponentType.Status": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-componenttype-status.html", + "Properties": { + "Error": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-componenttype-status.html#cfn-iottwinmaker-componenttype-status-error", + "Required": false, + "Type": "Error", + "UpdateType": "Mutable" + }, + "State": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-componenttype-status.html#cfn-iottwinmaker-componenttype-status-state", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::IoTTwinMaker::Entity.Component": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-component.html", "Properties": { @@ -286,6 +337,43 @@ } } }, + "AWS::IoTTwinMaker::Entity.DataType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-datatype.html", + "Properties": { + "AllowedValues": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-datatype.html#cfn-iottwinmaker-entity-datatype-allowedvalues", + "DuplicatesAllowed": true, + "ItemType": "DataValue", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "NestedType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-datatype.html#cfn-iottwinmaker-entity-datatype-nestedtype", + "Required": false, + "Type": "DataType", + "UpdateType": "Mutable" + }, + "Relationship": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-datatype.html#cfn-iottwinmaker-entity-datatype-relationship", + "Required": false, + "Type": "Relationship", + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-datatype.html#cfn-iottwinmaker-entity-datatype-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "UnitOfMeasure": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-datatype.html#cfn-iottwinmaker-entity-datatype-unitofmeasure", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::IoTTwinMaker::Entity.DataValue": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-datavalue.html", "Properties": { @@ -336,8 +424,8 @@ }, "RelationshipValue": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-datavalue.html#cfn-iottwinmaker-entity-datavalue-relationshipvalue", - "PrimitiveType": "Json", "Required": false, + "Type": "RelationshipValue", "UpdateType": "Mutable" }, "StringValue": { @@ -348,13 +436,96 @@ } } }, + "AWS::IoTTwinMaker::Entity.Definition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-definition.html", + "Properties": { + "Configuration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-definition.html#cfn-iottwinmaker-entity-definition-configuration", + "PrimitiveItemType": "String", + "Required": false, + "Type": "Map", + "UpdateType": "Mutable" + }, + "DataType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-definition.html#cfn-iottwinmaker-entity-definition-datatype", + "Required": false, + "Type": "DataType", + "UpdateType": "Mutable" + }, + "DefaultValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-definition.html#cfn-iottwinmaker-entity-definition-defaultvalue", + "Required": false, + "Type": "DataValue", + "UpdateType": "Mutable" + }, + "IsExternalId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-definition.html#cfn-iottwinmaker-entity-definition-isexternalid", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "IsFinal": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-definition.html#cfn-iottwinmaker-entity-definition-isfinal", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "IsImported": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-definition.html#cfn-iottwinmaker-entity-definition-isimported", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "IsInherited": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-definition.html#cfn-iottwinmaker-entity-definition-isinherited", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "IsRequiredInEntity": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-definition.html#cfn-iottwinmaker-entity-definition-isrequiredinentity", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "IsStoredExternally": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-definition.html#cfn-iottwinmaker-entity-definition-isstoredexternally", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "IsTimeSeries": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-definition.html#cfn-iottwinmaker-entity-definition-istimeseries", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTTwinMaker::Entity.Error": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-error.html", + "Properties": { + "Code": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-error.html#cfn-iottwinmaker-entity-error-code", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Message": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-error.html#cfn-iottwinmaker-entity-error-message", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::IoTTwinMaker::Entity.Property": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-property.html", "Properties": { "Definition": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-property.html#cfn-iottwinmaker-entity-property-definition", - "PrimitiveType": "Json", "Required": false, + "Type": "Definition", "UpdateType": "Mutable" }, "Value": { @@ -384,13 +555,47 @@ } } }, + "AWS::IoTTwinMaker::Entity.Relationship": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-relationship.html", + "Properties": { + "RelationshipType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-relationship.html#cfn-iottwinmaker-entity-relationship-relationshiptype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "TargetComponentTypeId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-relationship.html#cfn-iottwinmaker-entity-relationship-targetcomponenttypeid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::IoTTwinMaker::Entity.RelationshipValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-relationshipvalue.html", + "Properties": { + "TargetComponentName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-relationshipvalue.html#cfn-iottwinmaker-entity-relationshipvalue-targetcomponentname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "TargetEntityId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-relationshipvalue.html#cfn-iottwinmaker-entity-relationshipvalue-targetentityid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::IoTTwinMaker::Entity.Status": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-status.html", "Properties": { "Error": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iottwinmaker-entity-status.html#cfn-iottwinmaker-entity-status-error", - "PrimitiveType": "Json", "Required": false, + "Type": "Error", "UpdateType": "Mutable" }, "State": { @@ -417,6 +622,21 @@ "IsSchemaInitialized": { "PrimitiveType": "Boolean" }, + "Status": { + "Type": "Status" + }, + "Status.Error": { + "Type": "Error" + }, + "Status.Error.Code": { + "PrimitiveType": "String" + }, + "Status.Error.Message": { + "PrimitiveType": "String" + }, + "Status.State": { + "PrimitiveType": "String" + }, "UpdateDateTime": { "PrimitiveType": "String" } @@ -496,6 +716,21 @@ "HasChildEntities": { "PrimitiveType": "Boolean" }, + "Status": { + "Type": "Status" + }, + "Status.Error": { + "Type": "Error" + }, + "Status.Error.Code": { + "PrimitiveType": "String" + }, + "Status.Error.Message": { + "PrimitiveType": "String" + }, + "Status.State": { + "PrimitiveType": "String" + }, "UpdateDateTime": { "PrimitiveType": "String" } diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTWireless.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTWireless.json index 21fae4caaad1f..8a3e332304cd4 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTWireless.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_IoTWireless.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::IoTWireless::DeviceProfile.LoRaWANDeviceProfile": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-deviceprofile-lorawandeviceprofile.html", @@ -18,6 +18,7 @@ }, "FactoryPresetFreqsList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-deviceprofile-lorawandeviceprofile.html#cfn-iotwireless-deviceprofile-lorawandeviceprofile-factorypresetfreqslist", + "DuplicatesAllowed": true, "PrimitiveItemType": "Integer", "Required": false, "Type": "List", @@ -167,6 +168,23 @@ } } }, + "AWS::IoTWireless::NetworkAnalyzerConfiguration.TraceContent": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-networkanalyzerconfiguration-tracecontent.html", + "Properties": { + "LogLevel": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-networkanalyzerconfiguration-tracecontent.html#cfn-iotwireless-networkanalyzerconfiguration-tracecontent-loglevel", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "WirelessDeviceFrameInfo": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-networkanalyzerconfiguration-tracecontent.html#cfn-iotwireless-networkanalyzerconfiguration-tracecontent-wirelessdeviceframeinfo", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::IoTWireless::PartnerAccount.SidewalkAccountInfo": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-partneraccount-sidewalkaccountinfo.html", "Properties": { @@ -178,6 +196,29 @@ } } }, + "AWS::IoTWireless::PartnerAccount.SidewalkAccountInfoWithFingerprint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-partneraccount-sidewalkaccountinfowithfingerprint.html", + "Properties": { + "AmazonId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-partneraccount-sidewalkaccountinfowithfingerprint.html#cfn-iotwireless-partneraccount-sidewalkaccountinfowithfingerprint-amazonid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Arn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-partneraccount-sidewalkaccountinfowithfingerprint.html#cfn-iotwireless-partneraccount-sidewalkaccountinfowithfingerprint-arn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Fingerprint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-partneraccount-sidewalkaccountinfowithfingerprint.html#cfn-iotwireless-partneraccount-sidewalkaccountinfowithfingerprint-fingerprint", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::IoTWireless::PartnerAccount.SidewalkUpdateAccount": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotwireless-partneraccount-sidewalkupdateaccount.html", "Properties": { @@ -838,12 +879,13 @@ }, "TraceContent": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotwireless-networkanalyzerconfiguration.html#cfn-iotwireless-networkanalyzerconfiguration-tracecontent", - "PrimitiveType": "Json", "Required": false, + "Type": "TraceContent", "UpdateType": "Mutable" }, "WirelessDevices": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotwireless-networkanalyzerconfiguration.html#cfn-iotwireless-networkanalyzerconfiguration-wirelessdevices", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -851,6 +893,7 @@ }, "WirelessGateways": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotwireless-networkanalyzerconfiguration.html#cfn-iotwireless-networkanalyzerconfiguration-wirelessgateways", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -862,6 +905,18 @@ "Attributes": { "Arn": { "PrimitiveType": "String" + }, + "SidewalkResponse": { + "Type": "SidewalkAccountInfoWithFingerprint" + }, + "SidewalkResponse.AmazonId": { + "PrimitiveType": "String" + }, + "SidewalkResponse.Arn": { + "PrimitiveType": "String" + }, + "SidewalkResponse.Fingerprint": { + "PrimitiveType": "String" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iotwireless-partneraccount.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KMS.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KMS.json index 131fa90224fba..f43a0e78851af 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KMS.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KMS.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::KMS::Alias": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KafkaConnect.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KafkaConnect.json index d402a573a10db..d726a7d43db6e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KafkaConnect.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KafkaConnect.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::KafkaConnect::Connector.ApacheKafkaCluster": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kafkaconnect-connector-apachekafkacluster.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Kendra.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Kendra.json index e92be4eb7dd4a..ad91f3660cae6 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Kendra.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Kendra.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Kendra::DataSource.AccessControlListConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-accesscontrollistconfiguration.html", @@ -28,6 +28,7 @@ "Properties": { "ChangeDetectingColumns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-columnconfiguration.html#cfn-kendra-datasource-columnconfiguration-changedetectingcolumns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -53,6 +54,7 @@ }, "FieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-columnconfiguration.html#cfn-kendra-datasource-columnconfiguration-fieldmappings", + "DuplicatesAllowed": true, "ItemType": "DataSourceToIndexFieldMapping", "Required": false, "Type": "List", @@ -65,6 +67,7 @@ "Properties": { "AttachmentFieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-confluenceattachmentconfiguration.html#cfn-kendra-datasource-confluenceattachmentconfiguration-attachmentfieldmappings", + "DuplicatesAllowed": true, "ItemType": "ConfluenceAttachmentToIndexFieldMapping", "Required": false, "Type": "List", @@ -106,6 +109,7 @@ "Properties": { "BlogFieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-confluenceblogconfiguration.html#cfn-kendra-datasource-confluenceblogconfiguration-blogfieldmappings", + "DuplicatesAllowed": true, "ItemType": "ConfluenceBlogToIndexFieldMapping", "Required": false, "Type": "List", @@ -153,6 +157,7 @@ }, "ExclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-confluenceconfiguration.html#cfn-kendra-datasource-confluenceconfiguration-exclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -160,6 +165,7 @@ }, "InclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-confluenceconfiguration.html#cfn-kendra-datasource-confluenceconfiguration-inclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -208,6 +214,7 @@ "Properties": { "PageFieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-confluencepageconfiguration.html#cfn-kendra-datasource-confluencepageconfiguration-pagefieldmappings", + "DuplicatesAllowed": true, "ItemType": "ConfluencePageToIndexFieldMapping", "Required": false, "Type": "List", @@ -255,6 +262,7 @@ }, "ExcludeSpaces": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-confluencespaceconfiguration.html#cfn-kendra-datasource-confluencespaceconfiguration-excludespaces", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -262,6 +270,7 @@ }, "IncludeSpaces": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-confluencespaceconfiguration.html#cfn-kendra-datasource-confluencespaceconfiguration-includespaces", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -269,6 +278,7 @@ }, "SpaceFieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-confluencespaceconfiguration.html#cfn-kendra-datasource-confluencespaceconfiguration-spacefieldmappings", + "DuplicatesAllowed": true, "ItemType": "ConfluenceSpaceToIndexFieldMapping", "Required": false, "Type": "List", @@ -339,6 +349,7 @@ "Properties": { "InlineConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-customdocumentenrichmentconfiguration.html#cfn-kendra-datasource-customdocumentenrichmentconfiguration-inlineconfigurations", + "DuplicatesAllowed": true, "ItemType": "InlineCustomDocumentEnrichmentConfiguration", "Required": false, "Type": "List", @@ -457,6 +468,7 @@ "Properties": { "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-datasourcevpcconfiguration.html#cfn-kendra-datasource-datasourcevpcconfiguration-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -464,6 +476,7 @@ }, "SubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-datasourcevpcconfiguration.html#cfn-kendra-datasource-datasourcevpcconfiguration-subnetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -575,6 +588,7 @@ }, "StringListValue": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-documentattributevalue.html#cfn-kendra-datasource-documentattributevalue-stringlistvalue", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -604,6 +618,7 @@ "Properties": { "ExcludeMimeTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-googledriveconfiguration.html#cfn-kendra-datasource-googledriveconfiguration-excludemimetypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -611,6 +626,7 @@ }, "ExcludeSharedDrives": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-googledriveconfiguration.html#cfn-kendra-datasource-googledriveconfiguration-excludeshareddrives", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -618,6 +634,7 @@ }, "ExcludeUserAccounts": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-googledriveconfiguration.html#cfn-kendra-datasource-googledriveconfiguration-excludeuseraccounts", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -625,6 +642,7 @@ }, "ExclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-googledriveconfiguration.html#cfn-kendra-datasource-googledriveconfiguration-exclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -632,6 +650,7 @@ }, "FieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-googledriveconfiguration.html#cfn-kendra-datasource-googledriveconfiguration-fieldmappings", + "DuplicatesAllowed": true, "ItemType": "DataSourceToIndexFieldMapping", "Required": false, "Type": "List", @@ -639,6 +658,7 @@ }, "InclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-googledriveconfiguration.html#cfn-kendra-datasource-googledriveconfiguration-inclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -709,6 +729,7 @@ }, "ExclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-onedriveconfiguration.html#cfn-kendra-datasource-onedriveconfiguration-exclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -716,6 +737,7 @@ }, "FieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-onedriveconfiguration.html#cfn-kendra-datasource-onedriveconfiguration-fieldmappings", + "DuplicatesAllowed": true, "ItemType": "DataSourceToIndexFieldMapping", "Required": false, "Type": "List", @@ -723,6 +745,7 @@ }, "InclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-onedriveconfiguration.html#cfn-kendra-datasource-onedriveconfiguration-inclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -753,6 +776,7 @@ "Properties": { "OneDriveUserList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-onedriveusers.html#cfn-kendra-datasource-onedriveusers-onedriveuserlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -812,6 +836,7 @@ }, "ExclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-s3datasourceconfiguration.html#cfn-kendra-datasource-s3datasourceconfiguration-exclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -819,6 +844,7 @@ }, "InclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-s3datasourceconfiguration.html#cfn-kendra-datasource-s3datasourceconfiguration-inclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -826,6 +852,7 @@ }, "InclusionPrefixes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-s3datasourceconfiguration.html#cfn-kendra-datasource-s3datasourceconfiguration-inclusionprefixes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -867,6 +894,7 @@ }, "FieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-salesforcechatterfeedconfiguration.html#cfn-kendra-datasource-salesforcechatterfeedconfiguration-fieldmappings", + "DuplicatesAllowed": true, "ItemType": "DataSourceToIndexFieldMapping", "Required": false, "Type": "List", @@ -874,6 +902,7 @@ }, "IncludeFilterTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-salesforcechatterfeedconfiguration.html#cfn-kendra-datasource-salesforcechatterfeedconfiguration-includefiltertypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -898,6 +927,7 @@ }, "ExcludeAttachmentFilePatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-salesforceconfiguration.html#cfn-kendra-datasource-salesforceconfiguration-excludeattachmentfilepatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -905,6 +935,7 @@ }, "IncludeAttachmentFilePatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-salesforceconfiguration.html#cfn-kendra-datasource-salesforceconfiguration-includeattachmentfilepatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -936,6 +967,7 @@ }, "StandardObjectConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-salesforceconfiguration.html#cfn-kendra-datasource-salesforceconfiguration-standardobjectconfigurations", + "DuplicatesAllowed": true, "ItemType": "SalesforceStandardObjectConfiguration", "Required": false, "Type": "List", @@ -960,6 +992,7 @@ }, "FieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-salesforcecustomknowledgearticletypeconfiguration.html#cfn-kendra-datasource-salesforcecustomknowledgearticletypeconfiguration-fieldmappings", + "DuplicatesAllowed": true, "ItemType": "DataSourceToIndexFieldMapping", "Required": false, "Type": "List", @@ -978,6 +1011,7 @@ "Properties": { "CustomKnowledgeArticleTypeConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-salesforceknowledgearticleconfiguration.html#cfn-kendra-datasource-salesforceknowledgearticleconfiguration-customknowledgearticletypeconfigurations", + "DuplicatesAllowed": true, "ItemType": "SalesforceCustomKnowledgeArticleTypeConfiguration", "Required": false, "Type": "List", @@ -985,6 +1019,7 @@ }, "IncludedStates": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-salesforceknowledgearticleconfiguration.html#cfn-kendra-datasource-salesforceknowledgearticleconfiguration-includedstates", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1015,6 +1050,7 @@ }, "FieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-salesforcestandardknowledgearticletypeconfiguration.html#cfn-kendra-datasource-salesforcestandardknowledgearticletypeconfiguration-fieldmappings", + "DuplicatesAllowed": true, "ItemType": "DataSourceToIndexFieldMapping", "Required": false, "Type": "List", @@ -1033,6 +1069,7 @@ }, "FieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-salesforcestandardobjectattachmentconfiguration.html#cfn-kendra-datasource-salesforcestandardobjectattachmentconfiguration-fieldmappings", + "DuplicatesAllowed": true, "ItemType": "DataSourceToIndexFieldMapping", "Required": false, "Type": "List", @@ -1057,6 +1094,7 @@ }, "FieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-salesforcestandardobjectconfiguration.html#cfn-kendra-datasource-salesforcestandardobjectconfiguration-fieldmappings", + "DuplicatesAllowed": true, "ItemType": "DataSourceToIndexFieldMapping", "Required": false, "Type": "List", @@ -1134,6 +1172,7 @@ }, "ExcludeAttachmentFilePatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-servicenowknowledgearticleconfiguration.html#cfn-kendra-datasource-servicenowknowledgearticleconfiguration-excludeattachmentfilepatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1141,6 +1180,7 @@ }, "FieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-servicenowknowledgearticleconfiguration.html#cfn-kendra-datasource-servicenowknowledgearticleconfiguration-fieldmappings", + "DuplicatesAllowed": true, "ItemType": "DataSourceToIndexFieldMapping", "Required": false, "Type": "List", @@ -1154,6 +1194,7 @@ }, "IncludeAttachmentFilePatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-servicenowknowledgearticleconfiguration.html#cfn-kendra-datasource-servicenowknowledgearticleconfiguration-includeattachmentfilepatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1184,6 +1225,7 @@ }, "ExcludeAttachmentFilePatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-servicenowservicecatalogconfiguration.html#cfn-kendra-datasource-servicenowservicecatalogconfiguration-excludeattachmentfilepatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1191,6 +1233,7 @@ }, "FieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-servicenowservicecatalogconfiguration.html#cfn-kendra-datasource-servicenowservicecatalogconfiguration-fieldmappings", + "DuplicatesAllowed": true, "ItemType": "DataSourceToIndexFieldMapping", "Required": false, "Type": "List", @@ -1198,6 +1241,7 @@ }, "IncludeAttachmentFilePatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-servicenowservicecatalogconfiguration.html#cfn-kendra-datasource-servicenowservicecatalogconfiguration-includeattachmentfilepatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1228,6 +1272,7 @@ }, "ExclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-sharepointconfiguration.html#cfn-kendra-datasource-sharepointconfiguration-exclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1235,6 +1280,7 @@ }, "FieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-sharepointconfiguration.html#cfn-kendra-datasource-sharepointconfiguration-fieldmappings", + "DuplicatesAllowed": true, "ItemType": "DataSourceToIndexFieldMapping", "Required": false, "Type": "List", @@ -1242,6 +1288,7 @@ }, "InclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-sharepointconfiguration.html#cfn-kendra-datasource-sharepointconfiguration-inclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1267,6 +1314,7 @@ }, "Urls": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-sharepointconfiguration.html#cfn-kendra-datasource-sharepointconfiguration-urls", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1302,6 +1350,7 @@ "Properties": { "BasicAuthentication": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-webcrawlerauthenticationconfiguration.html#cfn-kendra-datasource-webcrawlerauthenticationconfiguration-basicauthentication", + "DuplicatesAllowed": true, "ItemType": "WebCrawlerBasicAuthentication", "Required": false, "Type": "List", @@ -1373,6 +1422,7 @@ }, "UrlExclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-webcrawlerconfiguration.html#cfn-kendra-datasource-webcrawlerconfiguration-urlexclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1380,6 +1430,7 @@ }, "UrlInclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-webcrawlerconfiguration.html#cfn-kendra-datasource-webcrawlerconfiguration-urlinclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1398,6 +1449,7 @@ "Properties": { "SeedUrls": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-webcrawlerseedurlconfiguration.html#cfn-kendra-datasource-webcrawlerseedurlconfiguration-seedurls", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1416,6 +1468,7 @@ "Properties": { "SiteMaps": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-webcrawlersitemapsconfiguration.html#cfn-kendra-datasource-webcrawlersitemapsconfiguration-sitemaps", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1451,6 +1504,7 @@ }, "ExclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-workdocsconfiguration.html#cfn-kendra-datasource-workdocsconfiguration-exclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1458,6 +1512,7 @@ }, "FieldMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-workdocsconfiguration.html#cfn-kendra-datasource-workdocsconfiguration-fieldmappings", + "DuplicatesAllowed": true, "ItemType": "DataSourceToIndexFieldMapping", "Required": false, "Type": "List", @@ -1465,6 +1520,7 @@ }, "InclusionPatterns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-datasource-workdocsconfiguration.html#cfn-kendra-datasource-workdocsconfiguration-inclusionpatterns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1640,6 +1696,7 @@ }, "ValueImportanceItems": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kendra-index-relevance.html#cfn-kendra-index-relevance-valueimportanceitems", + "DuplicatesAllowed": true, "ItemType": "ValueImportanceItem", "Required": false, "Type": "List", @@ -1778,6 +1835,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-datasource.html#cfn-kendra-datasource-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -1840,6 +1898,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-faq.html#cfn-kendra-faq-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -1872,6 +1931,7 @@ }, "DocumentMetadataConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-index.html#cfn-kendra-index-documentmetadataconfigurations", + "DuplicatesAllowed": true, "ItemType": "DocumentMetadataConfiguration", "Required": false, "Type": "List", @@ -1903,6 +1963,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-index.html#cfn-kendra-index-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -1916,6 +1977,7 @@ }, "UserTokenConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kendra-index.html#cfn-kendra-index-usertokenconfigurations", + "DuplicatesAllowed": true, "ItemType": "UserTokenConfiguration", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Kinesis.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Kinesis.json index 730f5eee9a6bf..10f6994bac4d0 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Kinesis.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Kinesis.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Kinesis::Stream.StreamEncryption": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesis-stream-streamencryption.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisAnalytics.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisAnalytics.json index 815edec5b05f5..56565307ebefa 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisAnalytics.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisAnalytics.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::KinesisAnalytics::Application.CSVMappingParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisanalytics-application-csvmappingparameters.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisAnalyticsV2.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisAnalyticsV2.json index 4d60e2dd85c25..218770dcd7295 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisAnalyticsV2.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisAnalyticsV2.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::KinesisAnalyticsV2::Application.ApplicationCodeConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisanalyticsv2-application-applicationcodeconfiguration.html", @@ -53,6 +53,7 @@ }, "VpcConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisanalyticsv2-application-applicationconfiguration.html#cfn-kinesisanalyticsv2-application-applicationconfiguration-vpcconfigurations", + "DuplicatesAllowed": true, "ItemType": "VpcConfiguration", "Required": false, "Type": "List", @@ -661,6 +662,7 @@ }, "CustomArtifactsConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisanalyticsv2-application-zeppelinapplicationconfiguration.html#cfn-kinesisanalyticsv2-application-zeppelinapplicationconfiguration-customartifactsconfiguration", + "DuplicatesAllowed": true, "ItemType": "CustomArtifactConfiguration", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisFirehose.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisFirehose.json index 355eab189b1d3..cd75e3c5ebe8e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisFirehose.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisFirehose.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::KinesisFirehose::DeliveryStream.AmazonOpenSearchServerlessBufferingHints": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisfirehose-deliverystream-amazonopensearchserverlessbufferinghints.html", @@ -1312,6 +1312,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#cfn-kinesisfirehose-deliverystream-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisVideo.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisVideo.json index 1d1a508c64b88..b4fb667406bf4 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisVideo.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_KinesisVideo.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::KinesisVideo::SignalingChannel": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LakeFormation.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LakeFormation.json index 504518701b4f8..fb6e651c08af9 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LakeFormation.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LakeFormation.json @@ -1,11 +1,12 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::LakeFormation::DataCellsFilter.ColumnWildcard": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-datacellsfilter-columnwildcard.html", "Properties": { "ExcludedColumnNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-datacellsfilter-columnwildcard.html#cfn-lakeformation-datacellsfilter-columnwildcard-excludedcolumnnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -203,17 +204,12 @@ } } }, - "AWS::LakeFormation::PrincipalPermissions.CatalogResource": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-principalpermissions-catalogresource.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Immutable" - }, "AWS::LakeFormation::PrincipalPermissions.ColumnWildcard": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-principalpermissions-columnwildcard.html", "Properties": { "ExcludedColumnNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-principalpermissions-columnwildcard.html#cfn-lakeformation-principalpermissions-columnwildcard-excludedcolumnnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -306,6 +302,7 @@ }, "TagValues": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-principalpermissions-lftag.html#cfn-lakeformation-principalpermissions-lftag-tagvalues", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -330,6 +327,7 @@ }, "TagValues": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-principalpermissions-lftagkeyresource.html#cfn-lakeformation-principalpermissions-lftagkeyresource-tagvalues", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -348,6 +346,7 @@ }, "Expression": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-principalpermissions-lftagpolicyresource.html#cfn-lakeformation-principalpermissions-lftagpolicyresource-expression", + "DuplicatesAllowed": true, "ItemType": "LFTag", "Required": true, "Type": "List", @@ -366,8 +365,8 @@ "Properties": { "Catalog": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-principalpermissions-resource.html#cfn-lakeformation-principalpermissions-resource-catalog", + "PrimitiveType": "Json", "Required": false, - "Type": "CatalogResource", "UpdateType": "Immutable" }, "DataCellsFilter": { @@ -437,18 +436,12 @@ }, "TableWildcard": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-principalpermissions-tableresource.html#cfn-lakeformation-principalpermissions-tableresource-tablewildcard", + "PrimitiveType": "Json", "Required": false, - "Type": "TableWildcard", "UpdateType": "Immutable" } } }, - "AWS::LakeFormation::PrincipalPermissions.TableWildcard": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-principalpermissions-tablewildcard.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Immutable" - }, "AWS::LakeFormation::PrincipalPermissions.TableWithColumnsResource": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-principalpermissions-tablewithcolumnsresource.html", "Properties": { @@ -460,6 +453,7 @@ }, "ColumnNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-principalpermissions-tablewithcolumnsresource.html#cfn-lakeformation-principalpermissions-tablewithcolumnsresource-columnnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -485,12 +479,6 @@ } } }, - "AWS::LakeFormation::TagAssociation.CatalogResource": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-tagassociation-catalogresource.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Immutable" - }, "AWS::LakeFormation::TagAssociation.DatabaseResource": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-tagassociation-databaseresource.html", "Properties": { @@ -525,6 +513,7 @@ }, "TagValues": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-tagassociation-lftagpair.html#cfn-lakeformation-tagassociation-lftagpair-tagvalues", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -537,8 +526,8 @@ "Properties": { "Catalog": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-tagassociation-resource.html#cfn-lakeformation-tagassociation-resource-catalog", + "PrimitiveType": "Json", "Required": false, - "Type": "CatalogResource", "UpdateType": "Immutable" }, "Database": { @@ -584,18 +573,12 @@ }, "TableWildcard": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-tagassociation-tableresource.html#cfn-lakeformation-tagassociation-tableresource-tablewildcard", + "PrimitiveType": "Json", "Required": false, - "Type": "TableWildcard", "UpdateType": "Immutable" } } }, - "AWS::LakeFormation::TagAssociation.TableWildcard": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-tagassociation-tablewildcard.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Immutable" - }, "AWS::LakeFormation::TagAssociation.TableWithColumnsResource": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-tagassociation-tablewithcolumnsresource.html", "Properties": { @@ -607,6 +590,7 @@ }, "ColumnNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lakeformation-tagassociation-tablewithcolumnsresource.html#cfn-lakeformation-tagassociation-tablewithcolumnsresource-columnnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -633,6 +617,7 @@ "Properties": { "ColumnNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lakeformation-datacellsfilter.html#cfn-lakeformation-datacellsfilter-columnnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -744,6 +729,7 @@ }, "Permissions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lakeformation-principalpermissions.html#cfn-lakeformation-principalpermissions-permissions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -751,6 +737,7 @@ }, "PermissionsWithGrantOption": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lakeformation-principalpermissions.html#cfn-lakeformation-principalpermissions-permissionswithgrantoption", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -810,6 +797,7 @@ }, "TagValues": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lakeformation-tag.html#cfn-lakeformation-tag-tagvalues", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -830,6 +818,7 @@ "Properties": { "LFTags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lakeformation-tagassociation.html#cfn-lakeformation-tagassociation-lftags", + "DuplicatesAllowed": true, "ItemType": "LFTagPair", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Lambda.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Lambda.json index ee0f254b2b03b..440e02e52be29 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Lambda.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Lambda.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Lambda::Alias.AliasRoutingConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-alias-aliasroutingconfiguration.html", @@ -47,6 +47,7 @@ "Properties": { "SigningProfileVersionArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-codesigningconfig-allowedpublishers.html#cfn-lambda-codesigningconfig-allowedpublishers-signingprofileversionarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -174,6 +175,17 @@ } } }, + "AWS::Lambda::EventSourceMapping.ScalingConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-eventsourcemapping-scalingconfig.html", + "Properties": { + "MaximumConcurrency": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-eventsourcemapping-scalingconfig.html#cfn-lambda-eventsourcemapping-scalingconfig-maximumconcurrency", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::Lambda::EventSourceMapping.SelfManagedEventSource": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-eventsourcemapping-selfmanagedeventsource.html", "Properties": { @@ -337,6 +349,23 @@ } } }, + "AWS::Lambda::Function.SnapStartResponse": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-snapstartresponse.html", + "Properties": { + "ApplyOn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-snapstartresponse.html#cfn-lambda-function-snapstartresponse-applyon", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "OptimizationStatus": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-snapstartresponse.html#cfn-lambda-function-snapstartresponse-optimizationstatus", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::Lambda::Function.TracingConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-tracingconfig.html", "Properties": { @@ -403,6 +432,7 @@ }, "AllowHeaders": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-url-cors.html#cfn-lambda-url-cors-allowheaders", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -410,6 +440,7 @@ }, "AllowMethods": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-url-cors.html#cfn-lambda-url-cors-allowmethods", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -417,6 +448,7 @@ }, "AllowOrigins": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-url-cors.html#cfn-lambda-url-cors-alloworigins", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -424,6 +456,7 @@ }, "ExposeHeaders": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-url-cors.html#cfn-lambda-url-cors-exposeheaders", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -653,6 +686,12 @@ "Type": "List", "UpdateType": "Mutable" }, + "ScalingConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html#cfn-lambda-eventsourcemapping-scalingconfig", + "Required": false, + "Type": "ScalingConfig", + "UpdateType": "Mutable" + }, "SelfManagedEventSource": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html#cfn-lambda-eventsourcemapping-selfmanagedeventsource", "Required": false, @@ -705,6 +744,15 @@ "Attributes": { "Arn": { "PrimitiveType": "String" + }, + "SnapStartResponse": { + "Type": "SnapStartResponse" + }, + "SnapStartResponse.ApplyOn": { + "PrimitiveType": "String" + }, + "SnapStartResponse.OptimizationStatus": { + "PrimitiveType": "String" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html", @@ -755,6 +803,7 @@ }, "FileSystemConfigs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-filesystemconfigs", + "DuplicatesAllowed": true, "ItemType": "FileSystemConfig", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Lex.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Lex.json index 93096b34d7d4d..3f82440c29089 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Lex.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Lex.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Lex::Bot.AdvancedRecognitionSetting": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-advancedrecognitionsetting.html", @@ -232,6 +232,7 @@ "Properties": { "AudioLogSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-conversationlogsettings.html#cfn-lex-bot-conversationlogsettings-audiologsettings", + "DuplicatesAllowed": false, "ItemType": "AudioLogSetting", "Required": false, "Type": "List", @@ -239,6 +240,7 @@ }, "TextLogSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-conversationlogsettings.html#cfn-lex-bot-conversationlogsettings-textlogsettings", + "DuplicatesAllowed": false, "ItemType": "TextLogSetting", "Required": false, "Type": "List", @@ -262,6 +264,7 @@ "Properties": { "CustomVocabularyItems": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-customvocabulary.html#cfn-lex-bot-customvocabulary-customvocabularyitems", + "DuplicatesAllowed": false, "ItemType": "CustomVocabularyItem", "Required": true, "Type": "List", @@ -315,6 +318,17 @@ } } }, + "AWS::Lex::Bot.DataPrivacy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-dataprivacy.html", + "Properties": { + "ChildDirected": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-dataprivacy.html#cfn-lex-bot-dataprivacy-childdirected", + "PrimitiveType": "Boolean", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::Lex::Bot.DialogCodeHookSetting": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-dialogcodehooksetting.html", "Properties": { @@ -377,6 +391,7 @@ }, "MessageGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-fulfillmentstartresponsespecification.html#cfn-lex-bot-fulfillmentstartresponsespecification-messagegroups", + "DuplicatesAllowed": true, "ItemType": "MessageGroup", "Required": true, "Type": "List", @@ -401,6 +416,7 @@ }, "MessageGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-fulfillmentupdateresponsespecification.html#cfn-lex-bot-fulfillmentupdateresponsespecification-messagegroups", + "DuplicatesAllowed": true, "ItemType": "MessageGroup", "Required": true, "Type": "List", @@ -476,6 +492,7 @@ "Properties": { "Buttons": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-imageresponsecard.html#cfn-lex-bot-imageresponsecard-buttons", + "DuplicatesAllowed": true, "ItemType": "Button", "Required": false, "Type": "List", @@ -535,6 +552,7 @@ }, "InputContexts": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-intent.html#cfn-lex-bot-intent-inputcontexts", + "DuplicatesAllowed": true, "ItemType": "InputContext", "Required": false, "Type": "List", @@ -566,6 +584,7 @@ }, "OutputContexts": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-intent.html#cfn-lex-bot-intent-outputcontexts", + "DuplicatesAllowed": true, "ItemType": "OutputContext", "Required": false, "Type": "List", @@ -579,6 +598,7 @@ }, "SampleUtterances": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-intent.html#cfn-lex-bot-intent-sampleutterances", + "DuplicatesAllowed": true, "ItemType": "SampleUtterance", "Required": false, "Type": "List", @@ -586,6 +606,7 @@ }, "SlotPriorities": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-intent.html#cfn-lex-bot-intent-slotpriorities", + "DuplicatesAllowed": true, "ItemType": "SlotPriority", "Required": false, "Type": "List", @@ -721,6 +742,7 @@ }, "Variations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-messagegroup.html#cfn-lex-bot-messagegroup-variations", + "DuplicatesAllowed": true, "ItemType": "Message", "Required": false, "Type": "List", @@ -853,6 +875,7 @@ }, "MessageGroupsList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-promptspecification.html#cfn-lex-bot-promptspecification-messagegroupslist", + "DuplicatesAllowed": true, "ItemType": "MessageGroup", "Required": true, "Type": "List", @@ -884,6 +907,7 @@ }, "MessageGroupsList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-responsespecification.html#cfn-lex-bot-responsespecification-messagegroupslist", + "DuplicatesAllowed": true, "ItemType": "MessageGroup", "Required": true, "Type": "List", @@ -970,6 +994,17 @@ } } }, + "AWS::Lex::Bot.SentimentAnalysisSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-sentimentanalysissettings.html", + "Properties": { + "DetectSentiment": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-sentimentanalysissettings.html#cfn-lex-bot-sentimentanalysissettings-detectsentiment", + "PrimitiveType": "Boolean", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::Lex::Bot.Slot": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-slot.html", "Properties": { @@ -1027,6 +1062,7 @@ "Properties": { "DefaultValueList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-slotdefaultvaluespecification.html#cfn-lex-bot-slotdefaultvaluespecification-defaultvaluelist", + "DuplicatesAllowed": true, "ItemType": "SlotDefaultValue", "Required": true, "Type": "List", @@ -1080,6 +1116,7 @@ }, "SlotTypeValues": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-slottype.html#cfn-lex-bot-slottype-slottypevalues", + "DuplicatesAllowed": true, "ItemType": "SlotTypeValue", "Required": false, "Type": "List", @@ -1104,6 +1141,7 @@ }, "Synonyms": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-slottypevalue.html#cfn-lex-bot-slottypevalue-synonyms", + "DuplicatesAllowed": true, "ItemType": "SampleValue", "Required": false, "Type": "List", @@ -1128,6 +1166,7 @@ }, "SampleUtterances": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-slotvalueelicitationsetting.html#cfn-lex-bot-slotvalueelicitationsetting-sampleutterances", + "DuplicatesAllowed": true, "ItemType": "SampleUtterance", "Required": false, "Type": "List", @@ -1198,6 +1237,7 @@ }, "MessageGroupsList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-stillwaitingresponsespecification.html#cfn-lex-bot-stillwaitingresponsespecification-messagegroupslist", + "DuplicatesAllowed": true, "ItemType": "MessageGroup", "Required": true, "Type": "List", @@ -1216,6 +1256,7 @@ "Properties": { "BotAliasLocaleSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-testbotaliassettings.html#cfn-lex-bot-testbotaliassettings-botaliaslocalesettings", + "DuplicatesAllowed": false, "ItemType": "BotAliasLocaleSettingsItem", "Required": false, "Type": "List", @@ -1235,8 +1276,8 @@ }, "SentimentAnalysisSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-bot-testbotaliassettings.html#cfn-lex-bot-testbotaliassettings-sentimentanalysissettings", - "PrimitiveType": "Json", "Required": false, + "Type": "SentimentAnalysisSettings", "UpdateType": "Mutable" } } @@ -1421,6 +1462,7 @@ "Properties": { "AudioLogSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-botalias-conversationlogsettings.html#cfn-lex-botalias-conversationlogsettings-audiologsettings", + "DuplicatesAllowed": false, "ItemType": "AudioLogSetting", "Required": false, "Type": "List", @@ -1428,6 +1470,7 @@ }, "TextLogSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-botalias-conversationlogsettings.html#cfn-lex-botalias-conversationlogsettings-textlogsettings", + "DuplicatesAllowed": false, "ItemType": "TextLogSetting", "Required": false, "Type": "List", @@ -1475,6 +1518,17 @@ } } }, + "AWS::Lex::BotAlias.SentimentAnalysisSettings": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-botalias-sentimentanalysissettings.html", + "Properties": { + "DetectSentiment": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-botalias-sentimentanalysissettings.html#cfn-lex-botalias-sentimentanalysissettings-detectsentiment", + "PrimitiveType": "Boolean", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::Lex::BotAlias.TextLogDestination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-botalias-textlogdestination.html", "Properties": { @@ -1530,12 +1584,6 @@ "UpdateType": "Mutable" } } - }, - "AWS::Lex::ResourcePolicy.Policy": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lex-resourcepolicy-policy.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" } }, "ResourceTypes": { @@ -1580,8 +1628,8 @@ }, "DataPrivacy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lex-bot.html#cfn-lex-bot-dataprivacy", - "PrimitiveType": "Json", "Required": true, + "Type": "DataPrivacy", "UpdateType": "Mutable" }, "Description": { @@ -1686,8 +1734,8 @@ }, "SentimentAnalysisSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lex-botalias.html#cfn-lex-botalias-sentimentanalysissettings", - "PrimitiveType": "Json", "Required": false, + "Type": "SentimentAnalysisSettings", "UpdateType": "Mutable" } } @@ -1708,6 +1756,7 @@ }, "BotVersionLocaleSpecification": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lex-botversion.html#cfn-lex-botversion-botversionlocalespecification", + "DuplicatesAllowed": true, "ItemType": "BotVersionLocaleSpecification", "Required": true, "Type": "List", @@ -1734,8 +1783,8 @@ "Properties": { "Policy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lex-resourcepolicy.html#cfn-lex-resourcepolicy-policy", + "PrimitiveType": "Json", "Required": true, - "Type": "Policy", "UpdateType": "Mutable" }, "ResourceArn": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LicenseManager.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LicenseManager.json index c3faeaa36c680..313b071e4a5f2 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LicenseManager.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LicenseManager.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::LicenseManager::License.BorrowConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-licensemanager-license-borrowconfiguration.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Lightsail.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Lightsail.json index d1535317dda2e..bfb81125fc774 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Lightsail.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Lightsail.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Lightsail::Bucket.AccessRules": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lightsail-bucket-accessrules.html", @@ -282,6 +282,23 @@ } } }, + "AWS::Lightsail::Disk.Location": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lightsail-disk-location.html", + "Properties": { + "AvailabilityZone": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lightsail-disk-location.html#cfn-lightsail-disk-location-availabilityzone", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "RegionName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lightsail-disk-location.html#cfn-lightsail-disk-location-regionname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::Lightsail::Distribution.CacheBehavior": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lightsail-distribution-cachebehavior.html", "Properties": { @@ -619,6 +636,7 @@ }, "CidrListAliases": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lightsail-instance-port.html#cfn-lightsail-instance-port-cidrlistaliases", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -626,6 +644,7 @@ }, "Cidrs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lightsail-instance-port.html#cfn-lightsail-instance-port-cidrs", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -645,6 +664,7 @@ }, "Ipv6Cidrs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lightsail-instance-port.html#cfn-lightsail-instance-port-ipv6cidrs", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1051,6 +1071,15 @@ "IsAttached": { "PrimitiveType": "Boolean" }, + "Location": { + "Type": "Location" + }, + "Location.AvailabilityZone": { + "PrimitiveType": "String" + }, + "Location.RegionName": { + "PrimitiveType": "String" + }, "Path": { "PrimitiveType": "String" }, @@ -1068,6 +1097,7 @@ "Properties": { "AddOns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-disk.html#cfn-lightsail-disk-addons", + "DuplicatesAllowed": true, "ItemType": "AddOn", "Required": false, "Type": "List", @@ -1233,6 +1263,7 @@ "Properties": { "AddOns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-instance.html#cfn-lightsail-instance-addons", + "DuplicatesAllowed": true, "ItemType": "AddOn", "Required": false, "Type": "List", @@ -1274,12 +1305,24 @@ "Required": false, "UpdateType": "Mutable" }, + "Location": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-instance.html#cfn-lightsail-instance-location", + "Required": false, + "Type": "Location", + "UpdateType": "Mutable" + }, "Networking": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-instance.html#cfn-lightsail-instance-networking", "Required": false, "Type": "Networking", "UpdateType": "Mutable" }, + "State": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-instance.html#cfn-lightsail-instance-state", + "Required": false, + "Type": "State", + "UpdateType": "Mutable" + }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-instance.html#cfn-lightsail-instance-tags", "DuplicatesAllowed": false, diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Location.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Location.json index 729b721832d98..f649c0a543b20 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Location.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Location.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Location::Map.MapConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-location-map-mapconfiguration.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Logs.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Logs.json index 82ea90c8592f4..77490b5284f1e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Logs.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Logs.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Logs::MetricFilter.Dimension": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-logs-metricfilter-dimension.html", @@ -179,6 +179,7 @@ }, "MetricTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-metricfilter.html#cfn-logs-metricfilter-metrictransformations", + "DuplicatesAllowed": true, "ItemType": "MetricTransformation", "Required": true, "Type": "List", @@ -196,6 +197,7 @@ "Properties": { "LogGroupNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-querydefinition.html#cfn-logs-querydefinition-loggroupnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LookoutEquipment.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LookoutEquipment.json index c75f4df57bf53..9189165273e5f 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LookoutEquipment.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LookoutEquipment.json @@ -1,6 +1,98 @@ { - "$version": "100.0.0", - "PropertyTypes": {}, + "$version": "101.0.0", + "PropertyTypes": { + "AWS::LookoutEquipment::InferenceScheduler.DataInputConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-datainputconfiguration.html", + "Properties": { + "InferenceInputNameConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-datainputconfiguration.html#cfn-lookoutequipment-inferencescheduler-datainputconfiguration-inferenceinputnameconfiguration", + "Required": false, + "Type": "InputNameConfiguration", + "UpdateType": "Mutable" + }, + "InputTimeZoneOffset": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-datainputconfiguration.html#cfn-lookoutequipment-inferencescheduler-datainputconfiguration-inputtimezoneoffset", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "S3InputConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-datainputconfiguration.html#cfn-lookoutequipment-inferencescheduler-datainputconfiguration-s3inputconfiguration", + "Required": true, + "Type": "S3InputConfiguration", + "UpdateType": "Mutable" + } + } + }, + "AWS::LookoutEquipment::InferenceScheduler.DataOutputConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-dataoutputconfiguration.html", + "Properties": { + "KmsKeyId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-dataoutputconfiguration.html#cfn-lookoutequipment-inferencescheduler-dataoutputconfiguration-kmskeyid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "S3OutputConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-dataoutputconfiguration.html#cfn-lookoutequipment-inferencescheduler-dataoutputconfiguration-s3outputconfiguration", + "Required": true, + "Type": "S3OutputConfiguration", + "UpdateType": "Mutable" + } + } + }, + "AWS::LookoutEquipment::InferenceScheduler.InputNameConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-inputnameconfiguration.html", + "Properties": { + "ComponentTimestampDelimiter": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-inputnameconfiguration.html#cfn-lookoutequipment-inferencescheduler-inputnameconfiguration-componenttimestampdelimiter", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "TimestampFormat": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-inputnameconfiguration.html#cfn-lookoutequipment-inferencescheduler-inputnameconfiguration-timestampformat", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::LookoutEquipment::InferenceScheduler.S3InputConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-s3inputconfiguration.html", + "Properties": { + "Bucket": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-s3inputconfiguration.html#cfn-lookoutequipment-inferencescheduler-s3inputconfiguration-bucket", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Prefix": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-s3inputconfiguration.html#cfn-lookoutequipment-inferencescheduler-s3inputconfiguration-prefix", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::LookoutEquipment::InferenceScheduler.S3OutputConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-s3outputconfiguration.html", + "Properties": { + "Bucket": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-s3outputconfiguration.html#cfn-lookoutequipment-inferencescheduler-s3outputconfiguration-bucket", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Prefix": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutequipment-inferencescheduler-s3outputconfiguration.html#cfn-lookoutequipment-inferencescheduler-s3outputconfiguration-prefix", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + } + }, "ResourceTypes": { "AWS::LookoutEquipment::InferenceScheduler": { "Attributes": { @@ -18,14 +110,14 @@ }, "DataInputConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lookoutequipment-inferencescheduler.html#cfn-lookoutequipment-inferencescheduler-datainputconfiguration", - "PrimitiveType": "Json", "Required": true, + "Type": "DataInputConfiguration", "UpdateType": "Mutable" }, "DataOutputConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lookoutequipment-inferencescheduler.html#cfn-lookoutequipment-inferencescheduler-dataoutputconfiguration", - "PrimitiveType": "Json", "Required": true, + "Type": "DataOutputConfiguration", "UpdateType": "Mutable" }, "DataUploadFrequency": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LookoutMetrics.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LookoutMetrics.json index 18853c9cdddc2..cbfbe86de0f37 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LookoutMetrics.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LookoutMetrics.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::LookoutMetrics::Alert.Action": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutmetrics-alert-action.html", @@ -120,6 +120,7 @@ }, "HeaderList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutmetrics-anomalydetector-csvformatdescriptor.html#cfn-lookoutmetrics-anomalydetector-csvformatdescriptor-headerlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -195,6 +196,7 @@ "Properties": { "DimensionList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutmetrics-anomalydetector-metricset.html#cfn-lookoutmetrics-anomalydetector-metricset-dimensionlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -202,6 +204,7 @@ }, "MetricList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutmetrics-anomalydetector-metricset.html#cfn-lookoutmetrics-anomalydetector-metricset-metriclist", + "DuplicatesAllowed": true, "ItemType": "Metric", "Required": true, "Type": "List", @@ -403,6 +406,7 @@ }, "HistoricalDataPathList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutmetrics-anomalydetector-s3sourceconfig.html#cfn-lookoutmetrics-anomalydetector-s3sourceconfig-historicaldatapathlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -416,6 +420,7 @@ }, "TemplatedPathList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutmetrics-anomalydetector-s3sourceconfig.html#cfn-lookoutmetrics-anomalydetector-s3sourceconfig-templatedpathlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -445,6 +450,7 @@ "Properties": { "SecurityGroupIdList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutmetrics-anomalydetector-vpcconfiguration.html#cfn-lookoutmetrics-anomalydetector-vpcconfiguration-securitygroupidlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -452,6 +458,7 @@ }, "SubnetIdList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lookoutmetrics-anomalydetector-vpcconfiguration.html#cfn-lookoutmetrics-anomalydetector-vpcconfiguration-subnetidlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -535,6 +542,7 @@ }, "MetricSetList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lookoutmetrics-anomalydetector.html#cfn-lookoutmetrics-anomalydetector-metricsetlist", + "DuplicatesAllowed": true, "ItemType": "MetricSet", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LookoutVision.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LookoutVision.json index 4f41c47ce890a..17bb842ad834e 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LookoutVision.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_LookoutVision.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::LookoutVision::Project": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_M2.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_M2.json index 14f07683d1027..9c3ffeb547487 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_M2.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_M2.json @@ -1,41 +1,19 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { - "AWS::M2::Application.Content": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-m2-application-content.html", - "Properties": { - "S3Location": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-m2-application-content.html#cfn-m2-application-content", - "PrimitiveType": "String", - "Required": true, - "UpdateType": "Mutable" - } - } - }, "AWS::M2::Application.Definition": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-m2-application-definition.html", "Properties": { "Content": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-m2-application-definition.html#cfn-m2-application-definition-content", + "PrimitiveType": "String", "Required": false, - "Type": "Content", "UpdateType": "Mutable" }, "S3Location": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-m2-application-definition.html#cfn-m2-application-definition-s3location", - "Required": false, - "Type": "S3Location", - "UpdateType": "Mutable" - } - } - }, - "AWS::M2::Application.S3Location": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-m2-application-s3location.html", - "Properties": { - "S3Location": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-m2-application-s3location.html#cfn-m2-application-s3location", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Mutable" } } @@ -209,6 +187,7 @@ }, "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-m2-environment.html#cfn-m2-environment-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -216,6 +195,7 @@ }, "StorageConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-m2-environment.html#cfn-m2-environment-storageconfigurations", + "DuplicatesAllowed": true, "ItemType": "StorageConfiguration", "Required": false, "Type": "List", @@ -223,6 +203,7 @@ }, "SubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-m2-environment.html#cfn-m2-environment-subnetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MSK.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MSK.json index c003bc5848d5b..728ee1ed77323 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MSK.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MSK.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::MSK::Cluster.BrokerLogs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-brokerlogs.html", @@ -134,6 +134,12 @@ "Required": false, "Type": "PublicAccess", "UpdateType": "Mutable" + }, + "VpcConnectivity": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-connectivityinfo.html#cfn-msk-cluster-connectivityinfo-vpcconnectivity", + "Required": false, + "Type": "VpcConnectivity", + "UpdateType": "Mutable" } } }, @@ -408,6 +414,84 @@ } } }, + "AWS::MSK::Cluster.VpcConnectivity": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivity.html", + "Properties": { + "ClientAuthentication": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivity.html#cfn-msk-cluster-vpcconnectivity-clientauthentication", + "Required": false, + "Type": "VpcConnectivityClientAuthentication", + "UpdateType": "Mutable" + } + } + }, + "AWS::MSK::Cluster.VpcConnectivityClientAuthentication": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivityclientauthentication.html", + "Properties": { + "Sasl": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivityclientauthentication.html#cfn-msk-cluster-vpcconnectivityclientauthentication-sasl", + "Required": false, + "Type": "VpcConnectivitySasl", + "UpdateType": "Mutable" + }, + "Tls": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivityclientauthentication.html#cfn-msk-cluster-vpcconnectivityclientauthentication-tls", + "Required": false, + "Type": "VpcConnectivityTls", + "UpdateType": "Mutable" + } + } + }, + "AWS::MSK::Cluster.VpcConnectivityIam": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivityiam.html", + "Properties": { + "Enabled": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivityiam.html#cfn-msk-cluster-vpcconnectivityiam-enabled", + "PrimitiveType": "Boolean", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::MSK::Cluster.VpcConnectivitySasl": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivitysasl.html", + "Properties": { + "Iam": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivitysasl.html#cfn-msk-cluster-vpcconnectivitysasl-iam", + "Required": false, + "Type": "VpcConnectivityIam", + "UpdateType": "Mutable" + }, + "Scram": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivitysasl.html#cfn-msk-cluster-vpcconnectivitysasl-scram", + "Required": false, + "Type": "VpcConnectivityScram", + "UpdateType": "Mutable" + } + } + }, + "AWS::MSK::Cluster.VpcConnectivityScram": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivityscram.html", + "Properties": { + "Enabled": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivityscram.html#cfn-msk-cluster-vpcconnectivityscram-enabled", + "PrimitiveType": "Boolean", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::MSK::Cluster.VpcConnectivityTls": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivitytls.html", + "Properties": { + "Enabled": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-cluster-vpcconnectivitytls.html#cfn-msk-cluster-vpcconnectivitytls-enabled", + "PrimitiveType": "Boolean", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::MSK::ServerlessCluster.ClientAuthentication": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-msk-serverlesscluster-clientauthentication.html", "Properties": { @@ -475,6 +559,7 @@ }, "SecretArnList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-msk-batchscramsecret.html#cfn-msk-batchscramsecret-secretarnlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -587,6 +672,7 @@ }, "KafkaVersionsList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-msk-configuration.html#cfn-msk-configuration-kafkaversionslist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MWAA.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MWAA.json index 2fb9f890b6da6..53f19cfe3a113 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MWAA.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MWAA.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::MWAA::Environment.LoggingConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mwaa-environment-loggingconfiguration.html", @@ -64,6 +64,7 @@ "Properties": { "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mwaa-environment-networkconfiguration.html#cfn-mwaa-environment-networkconfiguration-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -71,6 +72,7 @@ }, "SubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mwaa-environment-networkconfiguration.html#cfn-mwaa-environment-networkconfiguration-subnetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Macie.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Macie.json index d46210a38c285..570c901e94d83 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Macie.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Macie.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Macie::AllowList.Criteria": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-macie-allowlist-criteria.html", @@ -35,19 +35,59 @@ } } }, - "AWS::Macie::FindingsFilter.Criterion": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-macie-findingsfilter-criterion.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" + "AWS::Macie::FindingsFilter.CriterionAdditionalProperties": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-macie-findingsfilter-criterionadditionalproperties.html", + "Properties": { + "eq": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-macie-findingsfilter-criterionadditionalproperties.html#cfn-macie-findingsfilter-criterionadditionalproperties-eq", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "gt": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-macie-findingsfilter-criterionadditionalproperties.html#cfn-macie-findingsfilter-criterionadditionalproperties-gt", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "gte": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-macie-findingsfilter-criterionadditionalproperties.html#cfn-macie-findingsfilter-criterionadditionalproperties-gte", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "lt": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-macie-findingsfilter-criterionadditionalproperties.html#cfn-macie-findingsfilter-criterionadditionalproperties-lt", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "lte": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-macie-findingsfilter-criterionadditionalproperties.html#cfn-macie-findingsfilter-criterionadditionalproperties-lte", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "neq": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-macie-findingsfilter-criterionadditionalproperties.html#cfn-macie-findingsfilter-criterionadditionalproperties-neq", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } }, "AWS::Macie::FindingsFilter.FindingCriteria": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-macie-findingsfilter-findingcriteria.html", "Properties": { "Criterion": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-macie-findingsfilter-findingcriteria.html#cfn-macie-findingsfilter-findingcriteria-criterion", + "ItemType": "CriterionAdditionalProperties", "Required": false, - "Type": "Criterion", + "Type": "Map", "UpdateType": "Mutable" } } @@ -105,6 +145,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-macie-allowlist.html#cfn-macie-allowlist-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -131,6 +172,7 @@ }, "IgnoreWords": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-macie-customdataidentifier.html#cfn-macie-customdataidentifier-ignorewords", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -138,6 +180,7 @@ }, "Keywords": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-macie-customdataidentifier.html#cfn-macie-customdataidentifier-keywords", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ManagedBlockchain.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ManagedBlockchain.json index 78109a85a0e19..ecd4d144d62e1 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ManagedBlockchain.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ManagedBlockchain.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ManagedBlockchain::Member.ApprovalThresholdPolicy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-managedblockchain-member-approvalthresholdpolicy.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaConnect.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaConnect.json index 5fe0aa15b2f87..c3577c41e6c61 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaConnect.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaConnect.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::MediaConnect::Flow.Encryption": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-encryption.html", @@ -63,12 +63,24 @@ "AWS::MediaConnect::Flow.FailoverConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-failoverconfig.html", "Properties": { + "FailoverMode": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-failoverconfig.html#cfn-mediaconnect-flow-failoverconfig-failovermode", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "RecoveryWindow": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-failoverconfig.html#cfn-mediaconnect-flow-failoverconfig-recoverywindow", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" }, + "SourcePriority": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-failoverconfig.html#cfn-mediaconnect-flow-failoverconfig-sourcepriority", + "Required": false, + "Type": "SourcePriority", + "UpdateType": "Mutable" + }, "State": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-failoverconfig.html#cfn-mediaconnect-flow-failoverconfig-state", "PrimitiveType": "String", @@ -140,6 +152,18 @@ "Required": false, "UpdateType": "Mutable" }, + "SenderControlPort": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-sendercontrolport", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "SenderIpAddress": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-senderipaddress", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, "SourceArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-sourcearn", "PrimitiveType": "String", @@ -152,6 +176,18 @@ "Required": false, "UpdateType": "Mutable" }, + "SourceListenerAddress": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-sourcelisteneraddress", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SourceListenerPort": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-sourcelistenerport", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, "StreamId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-source.html#cfn-mediaconnect-flow-source-streamid", "PrimitiveType": "String", @@ -172,6 +208,17 @@ } } }, + "AWS::MediaConnect::Flow.SourcePriority": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-sourcepriority.html", + "Properties": { + "PrimarySource": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flow-sourcepriority.html#cfn-mediaconnect-flow-sourcepriority-primarysource", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::MediaConnect::FlowEntitlement.Encryption": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconnect-flowentitlement-encryption.html", "Properties": { @@ -424,6 +471,7 @@ }, "Subscribers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowentitlement.html#cfn-mediaconnect-flowentitlement-subscribers", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -441,6 +489,7 @@ "Properties": { "CidrAllowList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowoutput.html#cfn-mediaconnect-flowoutput-cidrallowlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -643,6 +692,7 @@ }, "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediaconnect-flowvpcinterface.html#cfn-mediaconnect-flowvpcinterface-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaConvert.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaConvert.json index 20a6cae9aeee0..1786d1f272602 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaConvert.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaConvert.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::MediaConvert::JobTemplate.AccelerationSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediaconvert-jobtemplate-accelerationsettings.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaLive.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaLive.json index 25c9ea9c7159e..265c4626316f3 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaLive.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaLive.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::MediaLive::Channel.AacSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaPackage.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaPackage.json index 3401c0b052594..b0e93f807c399 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaPackage.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaPackage.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::MediaPackage::Asset.EgressEndpoint": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-asset-egressendpoint.html", @@ -18,6 +18,48 @@ } } }, + "AWS::MediaPackage::Channel.HlsIngest": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-hlsingest.html", + "Properties": { + "ingestEndpoints": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-hlsingest.html#cfn-mediapackage-channel-hlsingest-ingestendpoints", + "DuplicatesAllowed": true, + "ItemType": "IngestEndpoint", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::MediaPackage::Channel.IngestEndpoint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-ingestendpoint.html", + "Properties": { + "Id": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-ingestendpoint.html#cfn-mediapackage-channel-ingestendpoint-id", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Password": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-ingestendpoint.html#cfn-mediapackage-channel-ingestendpoint-password", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Url": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-ingestendpoint.html#cfn-mediapackage-channel-ingestendpoint-url", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Username": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-ingestendpoint.html#cfn-mediapackage-channel-ingestendpoint-username", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::MediaPackage::Channel.LogConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-channel-logconfiguration.html", "Properties": { @@ -86,6 +128,7 @@ }, "HlsManifests": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-cmafpackage.html#cfn-mediapackage-originendpoint-cmafpackage-hlsmanifests", + "DuplicatesAllowed": true, "ItemType": "HlsManifest", "Required": false, "Type": "List", @@ -133,6 +176,7 @@ "Properties": { "AdTriggers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-adtriggers", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -182,6 +226,7 @@ }, "PeriodTriggers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-dashpackage.html#cfn-mediapackage-originendpoint-dashpackage-periodtriggers", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -294,6 +339,7 @@ }, "AdTriggers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlsmanifest.html#cfn-mediapackage-originendpoint-hlsmanifest-adtriggers", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -360,6 +406,7 @@ }, "AdTriggers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-hlspackage.html#cfn-mediapackage-originendpoint-hlspackage-adtriggers", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -496,6 +543,7 @@ }, "SystemIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-originendpoint-spekekeyprovider.html#cfn-mediapackage-originendpoint-spekekeyprovider-systemids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -554,6 +602,7 @@ }, "HlsManifests": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-cmafpackage.html#cfn-mediapackage-packagingconfiguration-cmafpackage-hlsmanifests", + "DuplicatesAllowed": true, "ItemType": "HlsManifest", "Required": true, "Type": "List", @@ -630,6 +679,7 @@ "Properties": { "DashManifests": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashpackage.html#cfn-mediapackage-packagingconfiguration-dashpackage-dashmanifests", + "DuplicatesAllowed": true, "ItemType": "DashManifest", "Required": true, "Type": "List", @@ -649,6 +699,7 @@ }, "PeriodTriggers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-dashpackage.html#cfn-mediapackage-packagingconfiguration-dashpackage-periodtriggers", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -760,6 +811,7 @@ }, "HlsManifests": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-hlspackage.html#cfn-mediapackage-packagingconfiguration-hlspackage-hlsmanifests", + "DuplicatesAllowed": true, "ItemType": "HlsManifest", "Required": true, "Type": "List", @@ -824,6 +876,7 @@ }, "MssManifests": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-msspackage.html#cfn-mediapackage-packagingconfiguration-msspackage-mssmanifests", + "DuplicatesAllowed": true, "ItemType": "MssManifest", "Required": true, "Type": "List", @@ -854,6 +907,7 @@ }, "SystemIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediapackage-packagingconfiguration-spekekeyprovider.html#cfn-mediapackage-packagingconfiguration-spekekeyprovider-systemids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -979,6 +1033,13 @@ "Attributes": { "Arn": { "PrimitiveType": "String" + }, + "HlsIngest": { + "Type": "HlsIngest" + }, + "HlsIngest.ingestEndpoints": { + "ItemType": "IngestEndpoint", + "Type": "List" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-channel.html", @@ -1110,6 +1171,7 @@ }, "Whitelist": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediapackage-originendpoint.html#cfn-mediapackage-originendpoint-whitelist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaStore.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaStore.json index 61651895b4a85..8cbc5a1529986 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaStore.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaStore.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::MediaStore::Container.CorsRule": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediastore-container-corsrule.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaTailor.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaTailor.json index 6647132db90a0..8ebea0464ec6d 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaTailor.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MediaTailor.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::MediaTailor::PlaybackConfiguration.AdMarkerPassthrough": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-mediatailor-playbackconfiguration-admarkerpassthrough.html", @@ -184,6 +184,12 @@ "Type": "DashConfiguration", "UpdateType": "Mutable" }, + "HlsConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediatailor-playbackconfiguration.html#cfn-mediatailor-playbackconfiguration-hlsconfiguration", + "Required": false, + "Type": "HlsConfiguration", + "UpdateType": "Mutable" + }, "LivePreRollConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-mediatailor-playbackconfiguration.html#cfn-mediatailor-playbackconfiguration-liveprerollconfiguration", "Required": false, diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MemoryDB.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MemoryDB.json index 633dcb44e8bc9..2bc8ed470bcc1 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MemoryDB.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_MemoryDB.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::MemoryDB::Cluster.Endpoint": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-memorydb-cluster-endpoint.html", @@ -17,6 +17,25 @@ "UpdateType": "Mutable" } } + }, + "AWS::MemoryDB::User.AuthenticationMode": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-memorydb-user-authenticationmode.html", + "Properties": { + "Passwords": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-memorydb-user-authenticationmode.html#cfn-memorydb-user-authenticationmode-passwords", + "DuplicatesAllowed": false, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-memorydb-user-authenticationmode.html#cfn-memorydb-user-authenticationmode-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } } }, "ResourceTypes": { @@ -87,6 +106,12 @@ "Required": false, "UpdateType": "Mutable" }, + "ClusterEndpoint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-memorydb-cluster.html#cfn-memorydb-cluster-clusterendpoint", + "Required": false, + "Type": "Endpoint", + "UpdateType": "Mutable" + }, "ClusterName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-memorydb-cluster.html#cfn-memorydb-cluster-clustername", "PrimitiveType": "String", @@ -326,8 +351,8 @@ }, "AuthenticationMode": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-memorydb-user.html#cfn-memorydb-user-authenticationmode", - "PrimitiveType": "Json", "Required": true, + "Type": "AuthenticationMode", "UpdateType": "Mutable" }, "Tags": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Neptune.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Neptune.json index 134bd1fad6971..4971321b57d0f 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Neptune.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Neptune.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Neptune::DBCluster.DBClusterRole": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-neptune-dbcluster-dbclusterrole.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_NetworkFirewall.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_NetworkFirewall.json index 2352f50049760..07ee0e9ea5861 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_NetworkFirewall.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_NetworkFirewall.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::NetworkFirewall::Firewall.SubnetMapping": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkfirewall-firewall-subnetmapping.html", @@ -214,6 +214,7 @@ "Properties": { "LogDestinationConfigs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkfirewall-loggingconfiguration-loggingconfiguration.html#cfn-networkfirewall-loggingconfiguration-loggingconfiguration-logdestinationconfigs", + "DuplicatesAllowed": true, "ItemType": "LogDestinationConfig", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_NetworkManager.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_NetworkManager.json index 05c6edf9eed8e..7dfde74f5c542 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_NetworkManager.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_NetworkManager.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::NetworkManager::ConnectAttachment.ConnectAttachmentOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectattachment-connectattachmentoptions.html", @@ -12,6 +12,31 @@ } } }, + "AWS::NetworkManager::ConnectAttachment.ProposedSegmentChange": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectattachment-proposedsegmentchange.html", + "Properties": { + "AttachmentPolicyRuleNumber": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectattachment-proposedsegmentchange.html#cfn-networkmanager-connectattachment-proposedsegmentchange-attachmentpolicyrulenumber", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "SegmentName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectattachment-proposedsegmentchange.html#cfn-networkmanager-connectattachment-proposedsegmentchange-segmentname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectattachment-proposedsegmentchange.html#cfn-networkmanager-connectattachment-proposedsegmentchange-tags", + "DuplicatesAllowed": true, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::NetworkManager::ConnectPeer.BgpOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectpeer-bgpoptions.html", "Properties": { @@ -23,6 +48,74 @@ } } }, + "AWS::NetworkManager::ConnectPeer.ConnectPeerBgpConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectpeer-connectpeerbgpconfiguration.html", + "Properties": { + "CoreNetworkAddress": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectpeer-connectpeerbgpconfiguration.html#cfn-networkmanager-connectpeer-connectpeerbgpconfiguration-corenetworkaddress", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "CoreNetworkAsn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectpeer-connectpeerbgpconfiguration.html#cfn-networkmanager-connectpeer-connectpeerbgpconfiguration-corenetworkasn", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + }, + "PeerAddress": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectpeer-connectpeerbgpconfiguration.html#cfn-networkmanager-connectpeer-connectpeerbgpconfiguration-peeraddress", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PeerAsn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectpeer-connectpeerbgpconfiguration.html#cfn-networkmanager-connectpeer-connectpeerbgpconfiguration-peerasn", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::NetworkManager::ConnectPeer.ConnectPeerConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectpeer-connectpeerconfiguration.html", + "Properties": { + "BgpConfigurations": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectpeer-connectpeerconfiguration.html#cfn-networkmanager-connectpeer-connectpeerconfiguration-bgpconfigurations", + "DuplicatesAllowed": true, + "ItemType": "ConnectPeerBgpConfiguration", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "CoreNetworkAddress": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectpeer-connectpeerconfiguration.html#cfn-networkmanager-connectpeer-connectpeerconfiguration-corenetworkaddress", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "InsideCidrBlocks": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectpeer-connectpeerconfiguration.html#cfn-networkmanager-connectpeer-connectpeerconfiguration-insidecidrblocks", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "PeerAddress": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectpeer-connectpeerconfiguration.html#cfn-networkmanager-connectpeer-connectpeerconfiguration-peeraddress", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Protocol": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-connectpeer-connectpeerconfiguration.html#cfn-networkmanager-connectpeer-connectpeerconfiguration-protocol", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::NetworkManager::CoreNetwork.CoreNetworkEdge": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-corenetwork-corenetworkedge.html", "Properties": { @@ -40,6 +133,7 @@ }, "InsideCidrBlocks": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-corenetwork-corenetworkedge.html#cfn-networkmanager-corenetwork-corenetworkedge-insidecidrblocks", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -52,6 +146,7 @@ "Properties": { "EdgeLocations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-corenetwork-corenetworksegment.html#cfn-networkmanager-corenetwork-corenetworksegment-edgelocations", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -65,6 +160,7 @@ }, "SharedSegments": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-corenetwork-corenetworksegment.html#cfn-networkmanager-corenetwork-corenetworksegment-sharedsegments", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -135,6 +231,56 @@ } } }, + "AWS::NetworkManager::SiteToSiteVpnAttachment.ProposedSegmentChange": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-sitetositevpnattachment-proposedsegmentchange.html", + "Properties": { + "AttachmentPolicyRuleNumber": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-sitetositevpnattachment-proposedsegmentchange.html#cfn-networkmanager-sitetositevpnattachment-proposedsegmentchange-attachmentpolicyrulenumber", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "SegmentName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-sitetositevpnattachment-proposedsegmentchange.html#cfn-networkmanager-sitetositevpnattachment-proposedsegmentchange-segmentname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-sitetositevpnattachment-proposedsegmentchange.html#cfn-networkmanager-sitetositevpnattachment-proposedsegmentchange-tags", + "DuplicatesAllowed": true, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::NetworkManager::VpcAttachment.ProposedSegmentChange": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-vpcattachment-proposedsegmentchange.html", + "Properties": { + "AttachmentPolicyRuleNumber": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-vpcattachment-proposedsegmentchange.html#cfn-networkmanager-vpcattachment-proposedsegmentchange-attachmentpolicyrulenumber", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "SegmentName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-vpcattachment-proposedsegmentchange.html#cfn-networkmanager-vpcattachment-proposedsegmentchange-segmentname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-vpcattachment-proposedsegmentchange.html#cfn-networkmanager-vpcattachment-proposedsegmentchange-tags", + "DuplicatesAllowed": true, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::NetworkManager::VpcAttachment.VpcOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-networkmanager-vpcattachment-vpcoptions.html", "Properties": { @@ -168,6 +314,19 @@ "OwnerAccountId": { "PrimitiveType": "String" }, + "ProposedSegmentChange": { + "Type": "ProposedSegmentChange" + }, + "ProposedSegmentChange.AttachmentPolicyRuleNumber": { + "PrimitiveType": "Integer" + }, + "ProposedSegmentChange.SegmentName": { + "PrimitiveType": "String" + }, + "ProposedSegmentChange.Tags": { + "ItemType": "Tag", + "Type": "List" + }, "ResourceArn": { "PrimitiveType": "String" }, @@ -186,23 +345,24 @@ "CoreNetworkId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-connectattachment.html#cfn-networkmanager-connectattachment-corenetworkid", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Immutable" }, "EdgeLocation": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-connectattachment.html#cfn-networkmanager-connectattachment-edgelocation", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Immutable" }, "Options": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-connectattachment.html#cfn-networkmanager-connectattachment-options", - "Required": false, + "Required": true, "Type": "ConnectAttachmentOptions", "UpdateType": "Immutable" }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-connectattachment.html#cfn-networkmanager-connectattachment-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -211,13 +371,33 @@ "TransportAttachmentId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-connectattachment.html#cfn-networkmanager-connectattachment-transportattachmentid", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Immutable" } } }, "AWS::NetworkManager::ConnectPeer": { "Attributes": { + "Configuration": { + "Type": "ConnectPeerConfiguration" + }, + "Configuration.BgpConfigurations": { + "ItemType": "ConnectPeerBgpConfiguration", + "Type": "List" + }, + "Configuration.CoreNetworkAddress": { + "PrimitiveType": "String" + }, + "Configuration.InsideCidrBlocks": { + "PrimitiveItemType": "String", + "Type": "List" + }, + "Configuration.PeerAddress": { + "PrimitiveType": "String" + }, + "Configuration.Protocol": { + "PrimitiveType": "String" + }, "ConnectPeerId": { "PrimitiveType": "String" }, @@ -256,6 +436,7 @@ }, "InsideCidrBlocks": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-connectpeer.html#cfn-networkmanager-connectpeer-insidecidrblocks", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -269,6 +450,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-connectpeer.html#cfn-networkmanager-connectpeer-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -324,6 +506,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-corenetwork.html#cfn-networkmanager-corenetwork-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -409,6 +592,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-device.html#cfn-networkmanager-device-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -447,6 +631,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-globalnetwork.html#cfn-networkmanager-globalnetwork-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -497,6 +682,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-link.html#cfn-networkmanager-link-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -564,6 +750,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-site.html#cfn-networkmanager-site-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -594,6 +781,19 @@ "OwnerAccountId": { "PrimitiveType": "String" }, + "ProposedSegmentChange": { + "Type": "ProposedSegmentChange" + }, + "ProposedSegmentChange.AttachmentPolicyRuleNumber": { + "PrimitiveType": "Integer" + }, + "ProposedSegmentChange.SegmentName": { + "PrimitiveType": "String" + }, + "ProposedSegmentChange.Tags": { + "ItemType": "Tag", + "Type": "List" + }, "ResourceArn": { "PrimitiveType": "String" }, @@ -617,6 +817,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-sitetositevpnattachment.html#cfn-networkmanager-sitetositevpnattachment-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -670,6 +871,19 @@ "OwnerAccountId": { "PrimitiveType": "String" }, + "ProposedSegmentChange": { + "Type": "ProposedSegmentChange" + }, + "ProposedSegmentChange.AttachmentPolicyRuleNumber": { + "PrimitiveType": "Integer" + }, + "ProposedSegmentChange.SegmentName": { + "PrimitiveType": "String" + }, + "ProposedSegmentChange.Tags": { + "ItemType": "Tag", + "Type": "List" + }, "ResourceArn": { "PrimitiveType": "String" }, @@ -688,7 +902,7 @@ "CoreNetworkId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-vpcattachment.html#cfn-networkmanager-vpcattachment-corenetworkid", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Immutable" }, "Options": { @@ -699,13 +913,15 @@ }, "SubnetArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-vpcattachment.html#cfn-networkmanager-vpcattachment-subnetarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", - "Required": false, + "Required": true, "Type": "List", "UpdateType": "Mutable" }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-vpcattachment.html#cfn-networkmanager-vpcattachment-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -714,7 +930,7 @@ "VpcArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-networkmanager-vpcattachment.html#cfn-networkmanager-vpcattachment-vpcarn", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Immutable" } } diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_NimbleStudio.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_NimbleStudio.json index 774e2bcac9fc4..5a956407c5cc5 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_NimbleStudio.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_NimbleStudio.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::NimbleStudio::LaunchProfile.StreamConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-nimblestudio-launchprofile-streamconfiguration.html", @@ -12,6 +12,7 @@ }, "Ec2InstanceTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-nimblestudio-launchprofile-streamconfiguration.html#cfn-nimblestudio-launchprofile-streamconfiguration-ec2instancetypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -37,6 +38,7 @@ }, "StreamingImageIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-nimblestudio-launchprofile-streamconfiguration.html#cfn-nimblestudio-launchprofile-streamconfiguration-streamingimageids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -49,6 +51,7 @@ "Properties": { "Mode": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-nimblestudio-launchprofile-streamconfigurationsessionstorage.html#cfn-nimblestudio-launchprofile-streamconfigurationsessionstorage-mode", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -79,6 +82,23 @@ } } }, + "AWS::NimbleStudio::StreamingImage.StreamingImageEncryptionConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-nimblestudio-streamingimage-streamingimageencryptionconfiguration.html", + "Properties": { + "KeyArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-nimblestudio-streamingimage-streamingimageencryptionconfiguration.html#cfn-nimblestudio-streamingimage-streamingimageencryptionconfiguration-keyarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "KeyType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-nimblestudio-streamingimage-streamingimageencryptionconfiguration.html#cfn-nimblestudio-streamingimage-streamingimageencryptionconfiguration-keytype", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::NimbleStudio::Studio.StudioEncryptionConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-nimblestudio-studio-studioencryptionconfiguration.html", "Properties": { @@ -293,6 +313,7 @@ }, "Ec2SubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-nimblestudio-launchprofile.html#cfn-nimblestudio-launchprofile-ec2subnetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -300,6 +321,7 @@ }, "LaunchProfileProtocolVersions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-nimblestudio-launchprofile.html#cfn-nimblestudio-launchprofile-launchprofileprotocolversions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -319,6 +341,7 @@ }, "StudioComponentIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-nimblestudio-launchprofile.html#cfn-nimblestudio-launchprofile-studiocomponentids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -341,6 +364,15 @@ }, "AWS::NimbleStudio::StreamingImage": { "Attributes": { + "EncryptionConfiguration": { + "Type": "StreamingImageEncryptionConfiguration" + }, + "EncryptionConfiguration.KeyArn": { + "PrimitiveType": "String" + }, + "EncryptionConfiguration.KeyType": { + "PrimitiveType": "String" + }, "EulaIds": { "PrimitiveItemType": "String", "Type": "List" diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Oam.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Oam.json index e6a683fa7ed74..1e4057cc8ec2b 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Oam.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Oam.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::Oam::Link": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpenSearchServerless.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpenSearchServerless.json new file mode 100644 index 0000000000000..27d3fe0d1abbe --- /dev/null +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpenSearchServerless.json @@ -0,0 +1,211 @@ +{ + "$version": "101.0.0", + "PropertyTypes": { + "AWS::OpenSearchServerless::SecurityConfig.SamlConfigOptions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchserverless-securityconfig-samlconfigoptions.html", + "Properties": { + "GroupAttribute": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchserverless-securityconfig-samlconfigoptions.html#cfn-opensearchserverless-securityconfig-samlconfigoptions-groupattribute", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Metadata": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchserverless-securityconfig-samlconfigoptions.html#cfn-opensearchserverless-securityconfig-samlconfigoptions-metadata", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "SessionTimeout": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchserverless-securityconfig-samlconfigoptions.html#cfn-opensearchserverless-securityconfig-samlconfigoptions-sessiontimeout", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "UserAttribute": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchserverless-securityconfig-samlconfigoptions.html#cfn-opensearchserverless-securityconfig-samlconfigoptions-userattribute", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + } + }, + "ResourceTypes": { + "AWS::OpenSearchServerless::AccessPolicy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-accesspolicy.html", + "Properties": { + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-accesspolicy.html#cfn-opensearchserverless-accesspolicy-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-accesspolicy.html#cfn-opensearchserverless-accesspolicy-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Policy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-accesspolicy.html#cfn-opensearchserverless-accesspolicy-policy", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-accesspolicy.html#cfn-opensearchserverless-accesspolicy-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::OpenSearchServerless::Collection": { + "Attributes": { + "Arn": { + "PrimitiveType": "String" + }, + "CollectionEndpoint": { + "PrimitiveType": "String" + }, + "DashboardEndpoint": { + "PrimitiveType": "String" + }, + "Id": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-collection.html", + "Properties": { + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-collection.html#cfn-opensearchserverless-collection-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-collection.html#cfn-opensearchserverless-collection-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-collection.html#cfn-opensearchserverless-collection-tags", + "DuplicatesAllowed": true, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-collection.html#cfn-opensearchserverless-collection-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::OpenSearchServerless::SecurityConfig": { + "Attributes": { + "Id": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-securityconfig.html", + "Properties": { + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-securityconfig.html#cfn-opensearchserverless-securityconfig-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-securityconfig.html#cfn-opensearchserverless-securityconfig-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "SamlOptions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-securityconfig.html#cfn-opensearchserverless-securityconfig-samloptions", + "Required": false, + "Type": "SamlConfigOptions", + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-securityconfig.html#cfn-opensearchserverless-securityconfig-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::OpenSearchServerless::SecurityPolicy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-securitypolicy.html", + "Properties": { + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-securitypolicy.html#cfn-opensearchserverless-securitypolicy-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-securitypolicy.html#cfn-opensearchserverless-securitypolicy-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Policy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-securitypolicy.html#cfn-opensearchserverless-securitypolicy-policy", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-securitypolicy.html#cfn-opensearchserverless-securitypolicy-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::OpenSearchServerless::VpcEndpoint": { + "Attributes": { + "Id": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-vpcendpoint.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-vpcendpoint.html#cfn-opensearchserverless-vpcendpoint-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "SecurityGroupIds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-vpcendpoint.html#cfn-opensearchserverless-vpcendpoint-securitygroupids", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "SubnetIds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-vpcendpoint.html#cfn-opensearchserverless-vpcendpoint-subnetids", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "VpcId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchserverless-vpcendpoint.html#cfn-opensearchserverless-vpcendpoint-vpcid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + } + } +} diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpenSearchService.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpenSearchService.json index 716893cb5af2b..6e8abd7e301e9 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpenSearchService.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpenSearchService.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::OpenSearchService::Domain.AdvancedSecurityOptionsInput": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-advancedsecurityoptionsinput.html", @@ -256,6 +256,59 @@ } } }, + "AWS::OpenSearchService::Domain.ServiceSoftwareOptions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-servicesoftwareoptions.html", + "Properties": { + "AutomatedUpdateDate": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-servicesoftwareoptions.html#cfn-opensearchservice-domain-servicesoftwareoptions-automatedupdatedate", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Cancellable": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-servicesoftwareoptions.html#cfn-opensearchservice-domain-servicesoftwareoptions-cancellable", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "CurrentVersion": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-servicesoftwareoptions.html#cfn-opensearchservice-domain-servicesoftwareoptions-currentversion", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-servicesoftwareoptions.html#cfn-opensearchservice-domain-servicesoftwareoptions-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "NewVersion": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-servicesoftwareoptions.html#cfn-opensearchservice-domain-servicesoftwareoptions-newversion", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "OptionalDeployment": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-servicesoftwareoptions.html#cfn-opensearchservice-domain-servicesoftwareoptions-optionaldeployment", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "UpdateAvailable": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-servicesoftwareoptions.html#cfn-opensearchservice-domain-servicesoftwareoptions-updateavailable", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "UpdateStatus": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-servicesoftwareoptions.html#cfn-opensearchservice-domain-servicesoftwareoptions-updatestatus", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::OpenSearchService::Domain.SnapshotOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-snapshotoptions.html", "Properties": { @@ -312,8 +365,39 @@ "DomainEndpoint": { "PrimitiveType": "String" }, + "DomainEndpoints": { + "PrimitiveItemType": "String", + "Type": "Map" + }, "Id": { "PrimitiveType": "String" + }, + "ServiceSoftwareOptions": { + "Type": "ServiceSoftwareOptions" + }, + "ServiceSoftwareOptions.AutomatedUpdateDate": { + "PrimitiveType": "String" + }, + "ServiceSoftwareOptions.Cancellable": { + "PrimitiveType": "Boolean" + }, + "ServiceSoftwareOptions.CurrentVersion": { + "PrimitiveType": "String" + }, + "ServiceSoftwareOptions.Description": { + "PrimitiveType": "String" + }, + "ServiceSoftwareOptions.NewVersion": { + "PrimitiveType": "String" + }, + "ServiceSoftwareOptions.OptionalDeployment": { + "PrimitiveType": "Boolean" + }, + "ServiceSoftwareOptions.UpdateAvailable": { + "PrimitiveType": "Boolean" + }, + "ServiceSoftwareOptions.UpdateStatus": { + "PrimitiveType": "String" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchservice-domain.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpsWorks.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpsWorks.json index be6e12d747e9f..f3a67752ed5e5 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpsWorks.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpsWorks.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::OpsWorks::App.DataSource": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworks-app-datasource.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpsWorksCM.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpsWorksCM.json index 757500a05b2a4..508d9e9e20a58 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpsWorksCM.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_OpsWorksCM.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::OpsWorksCM::Server.EngineAttribute": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opsworkscm-server-engineattribute.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Organizations.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Organizations.json index 3181e9c1f8c1d..dc8ae1c498891 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Organizations.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Organizations.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::Organizations::Account": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Panorama.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Panorama.json index 6173864739da7..dfeb231a236fb 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Panorama.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Panorama.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Panorama::ApplicationInstance.ManifestOverridesPayload": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-panorama-applicationinstance-manifestoverridespayload.html", @@ -188,6 +188,12 @@ "Required": true, "UpdateType": "Immutable" }, + "StorageLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-panorama-package.html#cfn-panorama-package-storagelocation", + "Required": false, + "Type": "StorageLocation", + "UpdateType": "Mutable" + }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-panorama-package.html#cfn-panorama-package-tags", "DuplicatesAllowed": false, diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Personalize.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Personalize.json index d2234a4d01287..947498a6b2e31 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Personalize.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Personalize.json @@ -1,13 +1,24 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { + "AWS::Personalize::Dataset.DataSource": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-dataset-datasource.html", + "Properties": { + "DataLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-dataset-datasource.html#cfn-personalize-dataset-datasource-datalocation", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::Personalize::Dataset.DatasetImportJob": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-dataset-datasetimportjob.html", "Properties": { "DataSource": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-dataset-datasetimportjob.html#cfn-personalize-dataset-datasetimportjob-datasource", - "PrimitiveType": "Json", "Required": false, + "Type": "DataSource", "UpdateType": "Mutable" }, "DatasetArn": { @@ -36,6 +47,182 @@ } } }, + "AWS::Personalize::Solution.AlgorithmHyperParameterRanges": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-algorithmhyperparameterranges.html", + "Properties": { + "CategoricalHyperParameterRanges": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-algorithmhyperparameterranges.html#cfn-personalize-solution-algorithmhyperparameterranges-categoricalhyperparameterranges", + "DuplicatesAllowed": true, + "ItemType": "CategoricalHyperParameterRange", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + }, + "ContinuousHyperParameterRanges": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-algorithmhyperparameterranges.html#cfn-personalize-solution-algorithmhyperparameterranges-continuoushyperparameterranges", + "DuplicatesAllowed": true, + "ItemType": "ContinuousHyperParameterRange", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + }, + "IntegerHyperParameterRanges": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-algorithmhyperparameterranges.html#cfn-personalize-solution-algorithmhyperparameterranges-integerhyperparameterranges", + "DuplicatesAllowed": true, + "ItemType": "IntegerHyperParameterRange", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + } + } + }, + "AWS::Personalize::Solution.AutoMLConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-automlconfig.html", + "Properties": { + "MetricName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-automlconfig.html#cfn-personalize-solution-automlconfig-metricname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "RecipeList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-automlconfig.html#cfn-personalize-solution-automlconfig-recipelist", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + } + } + }, + "AWS::Personalize::Solution.CategoricalHyperParameterRange": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-categoricalhyperparameterrange.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-categoricalhyperparameterrange.html#cfn-personalize-solution-categoricalhyperparameterrange-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Values": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-categoricalhyperparameterrange.html#cfn-personalize-solution-categoricalhyperparameterrange-values", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + } + } + }, + "AWS::Personalize::Solution.ContinuousHyperParameterRange": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-continuoushyperparameterrange.html", + "Properties": { + "MaxValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-continuoushyperparameterrange.html#cfn-personalize-solution-continuoushyperparameterrange-maxvalue", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Immutable" + }, + "MinValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-continuoushyperparameterrange.html#cfn-personalize-solution-continuoushyperparameterrange-minvalue", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Immutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-continuoushyperparameterrange.html#cfn-personalize-solution-continuoushyperparameterrange-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::Personalize::Solution.HpoConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-hpoconfig.html", + "Properties": { + "AlgorithmHyperParameterRanges": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-hpoconfig.html#cfn-personalize-solution-hpoconfig-algorithmhyperparameterranges", + "Required": false, + "Type": "AlgorithmHyperParameterRanges", + "UpdateType": "Immutable" + }, + "HpoObjective": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-hpoconfig.html#cfn-personalize-solution-hpoconfig-hpoobjective", + "Required": false, + "Type": "HpoObjective", + "UpdateType": "Immutable" + }, + "HpoResourceConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-hpoconfig.html#cfn-personalize-solution-hpoconfig-hporesourceconfig", + "Required": false, + "Type": "HpoResourceConfig", + "UpdateType": "Immutable" + } + } + }, + "AWS::Personalize::Solution.HpoObjective": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-hpoobjective.html", + "Properties": { + "MetricName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-hpoobjective.html#cfn-personalize-solution-hpoobjective-metricname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "MetricRegex": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-hpoobjective.html#cfn-personalize-solution-hpoobjective-metricregex", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-hpoobjective.html#cfn-personalize-solution-hpoobjective-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::Personalize::Solution.HpoResourceConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-hporesourceconfig.html", + "Properties": { + "MaxNumberOfTrainingJobs": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-hporesourceconfig.html#cfn-personalize-solution-hporesourceconfig-maxnumberoftrainingjobs", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "MaxParallelTrainingJobs": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-hporesourceconfig.html#cfn-personalize-solution-hporesourceconfig-maxparalleltrainingjobs", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::Personalize::Solution.IntegerHyperParameterRange": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-integerhyperparameterrange.html", + "Properties": { + "MaxValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-integerhyperparameterrange.html#cfn-personalize-solution-integerhyperparameterrange-maxvalue", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + }, + "MinValue": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-integerhyperparameterrange.html#cfn-personalize-solution-integerhyperparameterrange-minvalue", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-integerhyperparameterrange.html#cfn-personalize-solution-integerhyperparameterrange-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, "AWS::Personalize::Solution.SolutionConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-solutionconfig.html", "Properties": { @@ -48,8 +235,8 @@ }, "AutoMLConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-solutionconfig.html#cfn-personalize-solution-solutionconfig-automlconfig", - "PrimitiveType": "Json", "Required": false, + "Type": "AutoMLConfig", "UpdateType": "Immutable" }, "EventValueThreshold": { @@ -67,8 +254,8 @@ }, "HpoConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-personalize-solution-solutionconfig.html#cfn-personalize-solution-solutionconfig-hpoconfig", - "PrimitiveType": "Json", "Required": false, + "Type": "HpoConfig", "UpdateType": "Immutable" } } diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Pinpoint.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Pinpoint.json index 21fa8f7c6e708..3f517f2dffcba 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Pinpoint.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Pinpoint.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Pinpoint::ApplicationSettings.CampaignHook": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pinpoint-applicationsettings-campaignhook.html", @@ -2001,6 +2001,7 @@ "Properties": { "Content": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pinpoint-inapptemplate.html#cfn-pinpoint-inapptemplate-content", + "DuplicatesAllowed": true, "ItemType": "InAppMessageContent", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_PinpointEmail.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_PinpointEmail.json index 1af3e38dc95bc..507a952e44211 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_PinpointEmail.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_PinpointEmail.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::PinpointEmail::ConfigurationSet.DeliveryOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pinpointemail-configurationset-deliveryoptions.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Pipes.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Pipes.json index 9e81a8b9aec41..7c76c553708b4 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Pipes.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Pipes.json @@ -1,5 +1,1429 @@ { - "$version": "0.0.0", - "PropertyTypes": {}, - "ResourceTypes": {} + "$version": "101.0.0", + "PropertyTypes": { + "AWS::Pipes::Pipe.AwsVpcConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-awsvpcconfiguration.html", + "Properties": { + "AssignPublicIp": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-awsvpcconfiguration.html#cfn-pipes-pipe-awsvpcconfiguration-assignpublicip", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SecurityGroups": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-awsvpcconfiguration.html#cfn-pipes-pipe-awsvpcconfiguration-securitygroups", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Subnets": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-awsvpcconfiguration.html#cfn-pipes-pipe-awsvpcconfiguration-subnets", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.BatchArrayProperties": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batcharrayproperties.html", + "Properties": { + "Size": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batcharrayproperties.html#cfn-pipes-pipe-batcharrayproperties-size", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.BatchContainerOverrides": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchcontaineroverrides.html", + "Properties": { + "Command": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchcontaineroverrides.html#cfn-pipes-pipe-batchcontaineroverrides-command", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Environment": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchcontaineroverrides.html#cfn-pipes-pipe-batchcontaineroverrides-environment", + "DuplicatesAllowed": true, + "ItemType": "BatchEnvironmentVariable", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "InstanceType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchcontaineroverrides.html#cfn-pipes-pipe-batchcontaineroverrides-instancetype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ResourceRequirements": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchcontaineroverrides.html#cfn-pipes-pipe-batchcontaineroverrides-resourcerequirements", + "DuplicatesAllowed": true, + "ItemType": "BatchResourceRequirement", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.BatchEnvironmentVariable": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchenvironmentvariable.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchenvironmentvariable.html#cfn-pipes-pipe-batchenvironmentvariable-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchenvironmentvariable.html#cfn-pipes-pipe-batchenvironmentvariable-value", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.BatchJobDependency": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchjobdependency.html", + "Properties": { + "JobId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchjobdependency.html#cfn-pipes-pipe-batchjobdependency-jobid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchjobdependency.html#cfn-pipes-pipe-batchjobdependency-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.BatchResourceRequirement": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchresourcerequirement.html", + "Properties": { + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchresourcerequirement.html#cfn-pipes-pipe-batchresourcerequirement-type", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchresourcerequirement.html#cfn-pipes-pipe-batchresourcerequirement-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.BatchRetryStrategy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchretrystrategy.html", + "Properties": { + "Attempts": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-batchretrystrategy.html#cfn-pipes-pipe-batchretrystrategy-attempts", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.CapacityProviderStrategyItem": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-capacityproviderstrategyitem.html", + "Properties": { + "Base": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-capacityproviderstrategyitem.html#cfn-pipes-pipe-capacityproviderstrategyitem-base", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "CapacityProvider": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-capacityproviderstrategyitem.html#cfn-pipes-pipe-capacityproviderstrategyitem-capacityprovider", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Weight": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-capacityproviderstrategyitem.html#cfn-pipes-pipe-capacityproviderstrategyitem-weight", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.DeadLetterConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-deadletterconfig.html", + "Properties": { + "Arn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-deadletterconfig.html#cfn-pipes-pipe-deadletterconfig-arn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.EcsContainerOverride": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html", + "Properties": { + "Command": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-command", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Cpu": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-cpu", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Environment": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-environment", + "DuplicatesAllowed": true, + "ItemType": "EcsEnvironmentVariable", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "EnvironmentFiles": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-environmentfiles", + "DuplicatesAllowed": true, + "ItemType": "EcsEnvironmentFile", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Memory": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-memory", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MemoryReservation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-memoryreservation", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ResourceRequirements": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecscontaineroverride.html#cfn-pipes-pipe-ecscontaineroverride-resourcerequirements", + "DuplicatesAllowed": true, + "ItemType": "EcsResourceRequirement", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.EcsEnvironmentFile": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsenvironmentfile.html", + "Properties": { + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsenvironmentfile.html#cfn-pipes-pipe-ecsenvironmentfile-type", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsenvironmentfile.html#cfn-pipes-pipe-ecsenvironmentfile-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.EcsEnvironmentVariable": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsenvironmentvariable.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsenvironmentvariable.html#cfn-pipes-pipe-ecsenvironmentvariable-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsenvironmentvariable.html#cfn-pipes-pipe-ecsenvironmentvariable-value", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.EcsEphemeralStorage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsephemeralstorage.html", + "Properties": { + "SizeInGiB": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsephemeralstorage.html#cfn-pipes-pipe-ecsephemeralstorage-sizeingib", + "PrimitiveType": "Integer", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.EcsInferenceAcceleratorOverride": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsinferenceacceleratoroverride.html", + "Properties": { + "DeviceName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsinferenceacceleratoroverride.html#cfn-pipes-pipe-ecsinferenceacceleratoroverride-devicename", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DeviceType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsinferenceacceleratoroverride.html#cfn-pipes-pipe-ecsinferenceacceleratoroverride-devicetype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.EcsResourceRequirement": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsresourcerequirement.html", + "Properties": { + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsresourcerequirement.html#cfn-pipes-pipe-ecsresourcerequirement-type", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecsresourcerequirement.html#cfn-pipes-pipe-ecsresourcerequirement-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.EcsTaskOverride": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html", + "Properties": { + "ContainerOverrides": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-containeroverrides", + "DuplicatesAllowed": true, + "ItemType": "EcsContainerOverride", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Cpu": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-cpu", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "EphemeralStorage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-ephemeralstorage", + "Required": false, + "Type": "EcsEphemeralStorage", + "UpdateType": "Mutable" + }, + "ExecutionRoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-executionrolearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "InferenceAcceleratorOverrides": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-inferenceacceleratoroverrides", + "DuplicatesAllowed": true, + "ItemType": "EcsInferenceAcceleratorOverride", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Memory": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-memory", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "TaskRoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-ecstaskoverride.html#cfn-pipes-pipe-ecstaskoverride-taskrolearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.Filter": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-filter.html", + "Properties": { + "Pattern": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-filter.html#cfn-pipes-pipe-filter-pattern", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.FilterCriteria": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-filtercriteria.html", + "Properties": { + "Filters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-filtercriteria.html#cfn-pipes-pipe-filtercriteria-filters", + "DuplicatesAllowed": true, + "ItemType": "Filter", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.MQBrokerAccessCredentials": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-mqbrokeraccesscredentials.html", + "Properties": { + "BasicAuth": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-mqbrokeraccesscredentials.html#cfn-pipes-pipe-mqbrokeraccesscredentials-basicauth", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.MSKAccessCredentials": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-mskaccesscredentials.html", + "Properties": { + "ClientCertificateTlsAuth": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-mskaccesscredentials.html#cfn-pipes-pipe-mskaccesscredentials-clientcertificatetlsauth", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SaslScram512Auth": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-mskaccesscredentials.html#cfn-pipes-pipe-mskaccesscredentials-saslscram512auth", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.NetworkConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-networkconfiguration.html", + "Properties": { + "AwsvpcConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-networkconfiguration.html#cfn-pipes-pipe-networkconfiguration-awsvpcconfiguration", + "Required": false, + "Type": "AwsVpcConfiguration", + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeEnrichmentHttpParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmenthttpparameters.html", + "Properties": { + "HeaderParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmenthttpparameters.html#cfn-pipes-pipe-pipeenrichmenthttpparameters-headerparameters", + "PrimitiveItemType": "String", + "Required": false, + "Type": "Map", + "UpdateType": "Mutable" + }, + "PathParameterValues": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmenthttpparameters.html#cfn-pipes-pipe-pipeenrichmenthttpparameters-pathparametervalues", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "QueryStringParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmenthttpparameters.html#cfn-pipes-pipe-pipeenrichmenthttpparameters-querystringparameters", + "PrimitiveItemType": "String", + "Required": false, + "Type": "Map", + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeEnrichmentParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmentparameters.html", + "Properties": { + "HttpParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmentparameters.html#cfn-pipes-pipe-pipeenrichmentparameters-httpparameters", + "Required": false, + "Type": "PipeEnrichmentHttpParameters", + "UpdateType": "Mutable" + }, + "InputTemplate": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipeenrichmentparameters.html#cfn-pipes-pipe-pipeenrichmentparameters-inputtemplate", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeSourceActiveMQBrokerParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceactivemqbrokerparameters.html", + "Properties": { + "BatchSize": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceactivemqbrokerparameters.html#cfn-pipes-pipe-pipesourceactivemqbrokerparameters-batchsize", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Credentials": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceactivemqbrokerparameters.html#cfn-pipes-pipe-pipesourceactivemqbrokerparameters-credentials", + "Required": true, + "Type": "MQBrokerAccessCredentials", + "UpdateType": "Mutable" + }, + "MaximumBatchingWindowInSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceactivemqbrokerparameters.html#cfn-pipes-pipe-pipesourceactivemqbrokerparameters-maximumbatchingwindowinseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "QueueName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceactivemqbrokerparameters.html#cfn-pipes-pipe-pipesourceactivemqbrokerparameters-queuename", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, + "AWS::Pipes::Pipe.PipeSourceDynamoDBStreamParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html", + "Properties": { + "BatchSize": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-batchsize", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "DeadLetterConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-deadletterconfig", + "Required": false, + "Type": "DeadLetterConfig", + "UpdateType": "Mutable" + }, + "MaximumBatchingWindowInSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-maximumbatchingwindowinseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MaximumRecordAgeInSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-maximumrecordageinseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MaximumRetryAttempts": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-maximumretryattempts", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "OnPartialBatchItemFailure": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-onpartialbatchitemfailure", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ParallelizationFactor": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-parallelizationfactor", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "StartingPosition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcedynamodbstreamparameters.html#cfn-pipes-pipe-pipesourcedynamodbstreamparameters-startingposition", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, + "AWS::Pipes::Pipe.PipeSourceKinesisStreamParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html", + "Properties": { + "BatchSize": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-batchsize", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "DeadLetterConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-deadletterconfig", + "Required": false, + "Type": "DeadLetterConfig", + "UpdateType": "Mutable" + }, + "MaximumBatchingWindowInSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-maximumbatchingwindowinseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MaximumRecordAgeInSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-maximumrecordageinseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MaximumRetryAttempts": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-maximumretryattempts", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "OnPartialBatchItemFailure": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-onpartialbatchitemfailure", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ParallelizationFactor": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-parallelizationfactor", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "StartingPosition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-startingposition", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "StartingPositionTimestamp": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcekinesisstreamparameters.html#cfn-pipes-pipe-pipesourcekinesisstreamparameters-startingpositiontimestamp", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::Pipes::Pipe.PipeSourceManagedStreamingKafkaParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html", + "Properties": { + "BatchSize": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html#cfn-pipes-pipe-pipesourcemanagedstreamingkafkaparameters-batchsize", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "ConsumerGroupID": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html#cfn-pipes-pipe-pipesourcemanagedstreamingkafkaparameters-consumergroupid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Credentials": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html#cfn-pipes-pipe-pipesourcemanagedstreamingkafkaparameters-credentials", + "Required": false, + "Type": "MSKAccessCredentials", + "UpdateType": "Mutable" + }, + "MaximumBatchingWindowInSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html#cfn-pipes-pipe-pipesourcemanagedstreamingkafkaparameters-maximumbatchingwindowinseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "StartingPosition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html#cfn-pipes-pipe-pipesourcemanagedstreamingkafkaparameters-startingposition", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "TopicName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcemanagedstreamingkafkaparameters.html#cfn-pipes-pipe-pipesourcemanagedstreamingkafkaparameters-topicname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, + "AWS::Pipes::Pipe.PipeSourceParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html", + "Properties": { + "ActiveMQBrokerParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-activemqbrokerparameters", + "Required": false, + "Type": "PipeSourceActiveMQBrokerParameters", + "UpdateType": "Mutable" + }, + "DynamoDBStreamParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-dynamodbstreamparameters", + "Required": false, + "Type": "PipeSourceDynamoDBStreamParameters", + "UpdateType": "Mutable" + }, + "FilterCriteria": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-filtercriteria", + "Required": false, + "Type": "FilterCriteria", + "UpdateType": "Mutable" + }, + "KinesisStreamParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-kinesisstreamparameters", + "Required": false, + "Type": "PipeSourceKinesisStreamParameters", + "UpdateType": "Mutable" + }, + "ManagedStreamingKafkaParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-managedstreamingkafkaparameters", + "Required": false, + "Type": "PipeSourceManagedStreamingKafkaParameters", + "UpdateType": "Mutable" + }, + "RabbitMQBrokerParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-rabbitmqbrokerparameters", + "Required": false, + "Type": "PipeSourceRabbitMQBrokerParameters", + "UpdateType": "Mutable" + }, + "SelfManagedKafkaParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-selfmanagedkafkaparameters", + "Required": false, + "Type": "PipeSourceSelfManagedKafkaParameters", + "UpdateType": "Mutable" + }, + "SqsQueueParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceparameters.html#cfn-pipes-pipe-pipesourceparameters-sqsqueueparameters", + "Required": false, + "Type": "PipeSourceSqsQueueParameters", + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeSourceRabbitMQBrokerParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcerabbitmqbrokerparameters.html", + "Properties": { + "BatchSize": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcerabbitmqbrokerparameters.html#cfn-pipes-pipe-pipesourcerabbitmqbrokerparameters-batchsize", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Credentials": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcerabbitmqbrokerparameters.html#cfn-pipes-pipe-pipesourcerabbitmqbrokerparameters-credentials", + "Required": true, + "Type": "MQBrokerAccessCredentials", + "UpdateType": "Mutable" + }, + "MaximumBatchingWindowInSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcerabbitmqbrokerparameters.html#cfn-pipes-pipe-pipesourcerabbitmqbrokerparameters-maximumbatchingwindowinseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "QueueName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcerabbitmqbrokerparameters.html#cfn-pipes-pipe-pipesourcerabbitmqbrokerparameters-queuename", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "VirtualHost": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcerabbitmqbrokerparameters.html#cfn-pipes-pipe-pipesourcerabbitmqbrokerparameters-virtualhost", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::Pipes::Pipe.PipeSourceSelfManagedKafkaParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html", + "Properties": { + "AdditionalBootstrapServers": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-additionalbootstrapservers", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "BatchSize": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-batchsize", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "ConsumerGroupID": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-consumergroupid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Credentials": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-credentials", + "Required": false, + "Type": "SelfManagedKafkaAccessConfigurationCredentials", + "UpdateType": "Mutable" + }, + "MaximumBatchingWindowInSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-maximumbatchingwindowinseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "ServerRootCaCertificate": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-serverrootcacertificate", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "StartingPosition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-startingposition", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "TopicName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-topicname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Vpc": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourceselfmanagedkafkaparameters.html#cfn-pipes-pipe-pipesourceselfmanagedkafkaparameters-vpc", + "Required": false, + "Type": "SelfManagedKafkaAccessConfigurationVpc", + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeSourceSqsQueueParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcesqsqueueparameters.html", + "Properties": { + "BatchSize": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcesqsqueueparameters.html#cfn-pipes-pipe-pipesourcesqsqueueparameters-batchsize", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "MaximumBatchingWindowInSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipesourcesqsqueueparameters.html#cfn-pipes-pipe-pipesourcesqsqueueparameters-maximumbatchingwindowinseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeTargetBatchJobParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html", + "Properties": { + "ArrayProperties": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-arrayproperties", + "Required": false, + "Type": "BatchArrayProperties", + "UpdateType": "Mutable" + }, + "ContainerOverrides": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-containeroverrides", + "Required": false, + "Type": "BatchContainerOverrides", + "UpdateType": "Mutable" + }, + "DependsOn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-dependson", + "DuplicatesAllowed": true, + "ItemType": "BatchJobDependency", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "JobDefinition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-jobdefinition", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "JobName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-jobname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Parameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-parameters", + "PrimitiveItemType": "String", + "Required": false, + "Type": "Map", + "UpdateType": "Mutable" + }, + "RetryStrategy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetbatchjobparameters.html#cfn-pipes-pipe-pipetargetbatchjobparameters-retrystrategy", + "Required": false, + "Type": "BatchRetryStrategy", + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeTargetCloudWatchLogsParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetcloudwatchlogsparameters.html", + "Properties": { + "LogStreamName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetcloudwatchlogsparameters.html#cfn-pipes-pipe-pipetargetcloudwatchlogsparameters-logstreamname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Timestamp": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetcloudwatchlogsparameters.html#cfn-pipes-pipe-pipetargetcloudwatchlogsparameters-timestamp", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeTargetEcsTaskParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html", + "Properties": { + "CapacityProviderStrategy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-capacityproviderstrategy", + "DuplicatesAllowed": true, + "ItemType": "CapacityProviderStrategyItem", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "EnableECSManagedTags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-enableecsmanagedtags", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "EnableExecuteCommand": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-enableexecutecommand", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "Group": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-group", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "LaunchType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-launchtype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "NetworkConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-networkconfiguration", + "Required": false, + "Type": "NetworkConfiguration", + "UpdateType": "Mutable" + }, + "Overrides": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-overrides", + "Required": false, + "Type": "EcsTaskOverride", + "UpdateType": "Mutable" + }, + "PlacementConstraints": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-placementconstraints", + "DuplicatesAllowed": true, + "ItemType": "PlacementConstraint", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "PlacementStrategy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-placementstrategy", + "DuplicatesAllowed": true, + "ItemType": "PlacementStrategy", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "PlatformVersion": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-platformversion", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PropagateTags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-propagatetags", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ReferenceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-referenceid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-tags", + "DuplicatesAllowed": true, + "ItemType": "Tag", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "TaskCount": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-taskcount", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "TaskDefinitionArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetecstaskparameters.html#cfn-pipes-pipe-pipetargetecstaskparameters-taskdefinitionarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeTargetEventBridgeEventBusParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargeteventbridgeeventbusparameters.html", + "Properties": { + "DetailType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargeteventbridgeeventbusparameters.html#cfn-pipes-pipe-pipetargeteventbridgeeventbusparameters-detailtype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "EndpointId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargeteventbridgeeventbusparameters.html#cfn-pipes-pipe-pipetargeteventbridgeeventbusparameters-endpointid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Resources": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargeteventbridgeeventbusparameters.html#cfn-pipes-pipe-pipetargeteventbridgeeventbusparameters-resources", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Source": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargeteventbridgeeventbusparameters.html#cfn-pipes-pipe-pipetargeteventbridgeeventbusparameters-source", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Time": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargeteventbridgeeventbusparameters.html#cfn-pipes-pipe-pipetargeteventbridgeeventbusparameters-time", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeTargetHttpParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargethttpparameters.html", + "Properties": { + "HeaderParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargethttpparameters.html#cfn-pipes-pipe-pipetargethttpparameters-headerparameters", + "PrimitiveItemType": "String", + "Required": false, + "Type": "Map", + "UpdateType": "Mutable" + }, + "PathParameterValues": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargethttpparameters.html#cfn-pipes-pipe-pipetargethttpparameters-pathparametervalues", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "QueryStringParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargethttpparameters.html#cfn-pipes-pipe-pipetargethttpparameters-querystringparameters", + "PrimitiveItemType": "String", + "Required": false, + "Type": "Map", + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeTargetKinesisStreamParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetkinesisstreamparameters.html", + "Properties": { + "PartitionKey": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetkinesisstreamparameters.html#cfn-pipes-pipe-pipetargetkinesisstreamparameters-partitionkey", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeTargetLambdaFunctionParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetlambdafunctionparameters.html", + "Properties": { + "InvocationType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetlambdafunctionparameters.html#cfn-pipes-pipe-pipetargetlambdafunctionparameters-invocationtype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeTargetParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html", + "Properties": { + "BatchJobParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-batchjobparameters", + "Required": false, + "Type": "PipeTargetBatchJobParameters", + "UpdateType": "Mutable" + }, + "CloudWatchLogsParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-cloudwatchlogsparameters", + "Required": false, + "Type": "PipeTargetCloudWatchLogsParameters", + "UpdateType": "Mutable" + }, + "EcsTaskParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-ecstaskparameters", + "Required": false, + "Type": "PipeTargetEcsTaskParameters", + "UpdateType": "Mutable" + }, + "EventBridgeEventBusParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-eventbridgeeventbusparameters", + "Required": false, + "Type": "PipeTargetEventBridgeEventBusParameters", + "UpdateType": "Mutable" + }, + "HttpParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-httpparameters", + "Required": false, + "Type": "PipeTargetHttpParameters", + "UpdateType": "Mutable" + }, + "InputTemplate": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-inputtemplate", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "KinesisStreamParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-kinesisstreamparameters", + "Required": false, + "Type": "PipeTargetKinesisStreamParameters", + "UpdateType": "Mutable" + }, + "LambdaFunctionParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-lambdafunctionparameters", + "Required": false, + "Type": "PipeTargetLambdaFunctionParameters", + "UpdateType": "Mutable" + }, + "RedshiftDataParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-redshiftdataparameters", + "Required": false, + "Type": "PipeTargetRedshiftDataParameters", + "UpdateType": "Mutable" + }, + "SageMakerPipelineParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-sagemakerpipelineparameters", + "Required": false, + "Type": "PipeTargetSageMakerPipelineParameters", + "UpdateType": "Mutable" + }, + "SqsQueueParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-sqsqueueparameters", + "Required": false, + "Type": "PipeTargetSqsQueueParameters", + "UpdateType": "Mutable" + }, + "StepFunctionStateMachineParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetparameters.html#cfn-pipes-pipe-pipetargetparameters-stepfunctionstatemachineparameters", + "Required": false, + "Type": "PipeTargetStateMachineParameters", + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeTargetRedshiftDataParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html", + "Properties": { + "Database": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html#cfn-pipes-pipe-pipetargetredshiftdataparameters-database", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "DbUser": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html#cfn-pipes-pipe-pipetargetredshiftdataparameters-dbuser", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SecretManagerArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html#cfn-pipes-pipe-pipetargetredshiftdataparameters-secretmanagerarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Sqls": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html#cfn-pipes-pipe-pipetargetredshiftdataparameters-sqls", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + }, + "StatementName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html#cfn-pipes-pipe-pipetargetredshiftdataparameters-statementname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "WithEvent": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetredshiftdataparameters.html#cfn-pipes-pipe-pipetargetredshiftdataparameters-withevent", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeTargetSageMakerPipelineParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetsagemakerpipelineparameters.html", + "Properties": { + "PipelineParameterList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetsagemakerpipelineparameters.html#cfn-pipes-pipe-pipetargetsagemakerpipelineparameters-pipelineparameterlist", + "DuplicatesAllowed": true, + "ItemType": "SageMakerPipelineParameter", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeTargetSqsQueueParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetsqsqueueparameters.html", + "Properties": { + "MessageDeduplicationId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetsqsqueueparameters.html#cfn-pipes-pipe-pipetargetsqsqueueparameters-messagededuplicationid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "MessageGroupId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetsqsqueueparameters.html#cfn-pipes-pipe-pipetargetsqsqueueparameters-messagegroupid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PipeTargetStateMachineParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetstatemachineparameters.html", + "Properties": { + "InvocationType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-pipetargetstatemachineparameters.html#cfn-pipes-pipe-pipetargetstatemachineparameters-invocationtype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PlacementConstraint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-placementconstraint.html", + "Properties": { + "Expression": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-placementconstraint.html#cfn-pipes-pipe-placementconstraint-expression", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-placementconstraint.html#cfn-pipes-pipe-placementconstraint-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.PlacementStrategy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-placementstrategy.html", + "Properties": { + "Field": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-placementstrategy.html#cfn-pipes-pipe-placementstrategy-field", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-placementstrategy.html#cfn-pipes-pipe-placementstrategy-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.SageMakerPipelineParameter": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-sagemakerpipelineparameter.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-sagemakerpipelineparameter.html#cfn-pipes-pipe-sagemakerpipelineparameter-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-sagemakerpipelineparameter.html#cfn-pipes-pipe-sagemakerpipelineparameter-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.SelfManagedKafkaAccessConfigurationCredentials": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-selfmanagedkafkaaccessconfigurationcredentials.html", + "Properties": { + "BasicAuth": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-selfmanagedkafkaaccessconfigurationcredentials.html#cfn-pipes-pipe-selfmanagedkafkaaccessconfigurationcredentials-basicauth", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ClientCertificateTlsAuth": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-selfmanagedkafkaaccessconfigurationcredentials.html#cfn-pipes-pipe-selfmanagedkafkaaccessconfigurationcredentials-clientcertificatetlsauth", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SaslScram256Auth": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-selfmanagedkafkaaccessconfigurationcredentials.html#cfn-pipes-pipe-selfmanagedkafkaaccessconfigurationcredentials-saslscram256auth", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SaslScram512Auth": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-selfmanagedkafkaaccessconfigurationcredentials.html#cfn-pipes-pipe-selfmanagedkafkaaccessconfigurationcredentials-saslscram512auth", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Pipes::Pipe.SelfManagedKafkaAccessConfigurationVpc": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-selfmanagedkafkaaccessconfigurationvpc.html", + "Properties": { + "SecurityGroup": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-selfmanagedkafkaaccessconfigurationvpc.html#cfn-pipes-pipe-selfmanagedkafkaaccessconfigurationvpc-securitygroup", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Subnets": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-pipes-pipe-selfmanagedkafkaaccessconfigurationvpc.html#cfn-pipes-pipe-selfmanagedkafkaaccessconfigurationvpc-subnets", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + } + }, + "ResourceTypes": { + "AWS::Pipes::Pipe": { + "Attributes": { + "Arn": { + "PrimitiveType": "String" + }, + "CreationTime": { + "PrimitiveType": "String" + }, + "CurrentState": { + "PrimitiveType": "String" + }, + "LastModifiedTime": { + "PrimitiveType": "String" + }, + "StateReason": { + "PrimitiveType": "String" + } + }, + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html", + "Properties": { + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DesiredState": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-desiredstate", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Enrichment": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-enrichment", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "EnrichmentParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-enrichmentparameters", + "Required": false, + "Type": "PipeEnrichmentParameters", + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "RoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-rolearn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Source": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-source", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "SourceParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-sourceparameters", + "Required": false, + "Type": "PipeSourceParameters", + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-tags", + "PrimitiveItemType": "String", + "Required": false, + "Type": "Map", + "UpdateType": "Mutable" + }, + "Target": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-target", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "TargetParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pipes-pipe.html#cfn-pipes-pipe-targetparameters", + "Required": false, + "Type": "PipeTargetParameters", + "UpdateType": "Mutable" + } + } + } + } } diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_QLDB.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_QLDB.json index a5cb2d4e6b3d8..7e9a67eb3df76 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_QLDB.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_QLDB.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::QLDB::Stream.KinesisConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-qldb-stream-kinesisconfiguration.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_QuickSight.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_QuickSight.json index d6d5e42fa7c8f..0fd91deb4df5c 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_QuickSight.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_QuickSight.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::QuickSight::Analysis.AnalysisError": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-analysiserror.html", @@ -40,6 +40,7 @@ }, "DataSetReferences": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-analysissourcetemplate.html#cfn-quicksight-analysis-analysissourcetemplate-datasetreferences", + "DuplicatesAllowed": true, "ItemType": "DataSetReference", "Required": true, "Type": "List", @@ -75,6 +76,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-datetimeparameter.html#cfn-quicksight-analysis-datetimeparameter-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -93,6 +95,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-decimalparameter.html#cfn-quicksight-analysis-decimalparameter-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "Double", "Required": true, "Type": "List", @@ -111,6 +114,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-integerparameter.html#cfn-quicksight-analysis-integerparameter-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "Double", "Required": true, "Type": "List", @@ -123,6 +127,7 @@ "Properties": { "DateTimeParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parameters.html#cfn-quicksight-analysis-parameters-datetimeparameters", + "DuplicatesAllowed": true, "ItemType": "DateTimeParameter", "Required": false, "Type": "List", @@ -130,6 +135,7 @@ }, "DecimalParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parameters.html#cfn-quicksight-analysis-parameters-decimalparameters", + "DuplicatesAllowed": true, "ItemType": "DecimalParameter", "Required": false, "Type": "List", @@ -137,6 +143,7 @@ }, "IntegerParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parameters.html#cfn-quicksight-analysis-parameters-integerparameters", + "DuplicatesAllowed": true, "ItemType": "IntegerParameter", "Required": false, "Type": "List", @@ -144,6 +151,7 @@ }, "StringParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-parameters.html#cfn-quicksight-analysis-parameters-stringparameters", + "DuplicatesAllowed": true, "ItemType": "StringParameter", "Required": false, "Type": "List", @@ -156,6 +164,7 @@ "Properties": { "Actions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-resourcepermission.html#cfn-quicksight-analysis-resourcepermission-actions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -197,6 +206,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-analysis-stringparameter.html#cfn-quicksight-analysis-stringparameter-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -215,6 +225,23 @@ } } }, + "AWS::QuickSight::Dashboard.DashboardError": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboarderror.html", + "Properties": { + "Message": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboarderror.html#cfn-quicksight-dashboard-dashboarderror-message", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboarderror.html#cfn-quicksight-dashboard-dashboarderror-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::QuickSight::Dashboard.DashboardPublishOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardpublishoptions.html", "Properties": { @@ -260,6 +287,7 @@ }, "DataSetReferences": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardsourcetemplate.html#cfn-quicksight-dashboard-dashboardsourcetemplate-datasetreferences", + "DuplicatesAllowed": true, "ItemType": "DataSetReference", "Required": true, "Type": "List", @@ -267,6 +295,77 @@ } } }, + "AWS::QuickSight::Dashboard.DashboardVersion": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversion.html", + "Properties": { + "Arn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversion.html#cfn-quicksight-dashboard-dashboardversion-arn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "CreatedTime": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversion.html#cfn-quicksight-dashboard-dashboardversion-createdtime", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DataSetArns": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversion.html#cfn-quicksight-dashboard-dashboardversion-datasetarns", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversion.html#cfn-quicksight-dashboard-dashboardversion-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Errors": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversion.html#cfn-quicksight-dashboard-dashboardversion-errors", + "DuplicatesAllowed": true, + "ItemType": "DashboardError", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Sheets": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversion.html#cfn-quicksight-dashboard-dashboardversion-sheets", + "DuplicatesAllowed": true, + "ItemType": "Sheet", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "SourceEntityArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversion.html#cfn-quicksight-dashboard-dashboardversion-sourceentityarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Status": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversion.html#cfn-quicksight-dashboard-dashboardversion-status", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ThemeArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversion.html#cfn-quicksight-dashboard-dashboardversion-themearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "VersionNumber": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-dashboardversion.html#cfn-quicksight-dashboard-dashboardversion-versionnumber", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::QuickSight::Dashboard.DataSetReference": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datasetreference.html", "Properties": { @@ -295,6 +394,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-datetimeparameter.html#cfn-quicksight-dashboard-datetimeparameter-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -313,6 +413,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-decimalparameter.html#cfn-quicksight-dashboard-decimalparameter-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "Double", "Required": true, "Type": "List", @@ -342,6 +443,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-integerparameter.html#cfn-quicksight-dashboard-integerparameter-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "Double", "Required": true, "Type": "List", @@ -354,6 +456,7 @@ "Properties": { "DateTimeParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parameters.html#cfn-quicksight-dashboard-parameters-datetimeparameters", + "DuplicatesAllowed": true, "ItemType": "DateTimeParameter", "Required": false, "Type": "List", @@ -361,6 +464,7 @@ }, "DecimalParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parameters.html#cfn-quicksight-dashboard-parameters-decimalparameters", + "DuplicatesAllowed": true, "ItemType": "DecimalParameter", "Required": false, "Type": "List", @@ -368,6 +472,7 @@ }, "IntegerParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parameters.html#cfn-quicksight-dashboard-parameters-integerparameters", + "DuplicatesAllowed": true, "ItemType": "IntegerParameter", "Required": false, "Type": "List", @@ -375,6 +480,7 @@ }, "StringParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-parameters.html#cfn-quicksight-dashboard-parameters-stringparameters", + "DuplicatesAllowed": true, "ItemType": "StringParameter", "Required": false, "Type": "List", @@ -387,6 +493,7 @@ "Properties": { "Actions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-resourcepermission.html#cfn-quicksight-dashboard-resourcepermission-actions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -400,6 +507,23 @@ } } }, + "AWS::QuickSight::Dashboard.Sheet": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheet.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheet.html#cfn-quicksight-dashboard-sheet-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SheetId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheet.html#cfn-quicksight-dashboard-sheet-sheetid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::QuickSight::Dashboard.SheetControlsOption": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-sheetcontrolsoption.html", "Properties": { @@ -422,6 +546,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dashboard-stringparameter.html#cfn-quicksight-dashboard-stringparameter-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -502,6 +627,7 @@ "Properties": { "ColumnNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-columnlevelpermissionrule.html#cfn-quicksight-dataset-columnlevelpermissionrule-columnnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -509,6 +635,7 @@ }, "Principals": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-columnlevelpermissionrule.html#cfn-quicksight-dataset-columnlevelpermissionrule-principals", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -538,6 +665,7 @@ "Properties": { "Columns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-createcolumnsoperation.html#cfn-quicksight-dataset-createcolumnsoperation-columns", + "DuplicatesAllowed": true, "ItemType": "CalculatedColumn", "Required": true, "Type": "List", @@ -550,6 +678,7 @@ "Properties": { "Columns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-customsql.html#cfn-quicksight-dataset-customsql-columns", + "DuplicatesAllowed": true, "ItemType": "InputColumn", "Required": true, "Type": "List", @@ -597,6 +726,7 @@ "Properties": { "Columns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-fieldfolder.html#cfn-quicksight-dataset-fieldfolder-columns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -626,6 +756,7 @@ "Properties": { "Columns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-geospatialcolumngroup.html#cfn-quicksight-dataset-geospatialcolumngroup-columns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -742,6 +873,7 @@ }, "DataTransforms": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-logicaltable.html#cfn-quicksight-dataset-logicaltable-datatransforms", + "DuplicatesAllowed": true, "ItemType": "TransformOperation", "Required": false, "Type": "List", @@ -829,6 +961,7 @@ "Properties": { "ProjectedColumns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-projectoperation.html#cfn-quicksight-dataset-projectoperation-projectedcolumns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -853,6 +986,7 @@ }, "InputColumns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-relationaltable.html#cfn-quicksight-dataset-relationaltable-inputcolumns", + "DuplicatesAllowed": true, "ItemType": "InputColumn", "Required": true, "Type": "List", @@ -894,6 +1028,7 @@ "Properties": { "Actions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-resourcepermission.html#cfn-quicksight-dataset-resourcepermission-actions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -947,6 +1082,7 @@ }, "InputColumns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-s3source.html#cfn-quicksight-dataset-s3source-inputcolumns", + "DuplicatesAllowed": true, "ItemType": "InputColumn", "Required": true, "Type": "List", @@ -971,6 +1107,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-dataset-tagcolumnoperation.html#cfn-quicksight-dataset-tagcolumnoperation-tags", + "DuplicatesAllowed": true, "ItemType": "ColumnTag", "Required": true, "Type": "List", @@ -1138,6 +1275,7 @@ "Properties": { "AlternateDataSourceParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-credentialpair.html#cfn-quicksight-datasource-credentialpair-alternatedatasourceparameters", + "DuplicatesAllowed": true, "ItemType": "DataSourceParameters", "Required": false, "Type": "List", @@ -1487,6 +1625,7 @@ "Properties": { "Actions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-datasource-resourcepermission.html#cfn-quicksight-datasource-resourcepermission-actions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1619,6 +1758,84 @@ } } }, + "AWS::QuickSight::Template.ColumnGroupColumnSchema": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columngroupcolumnschema.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columngroupcolumnschema.html#cfn-quicksight-template-columngroupcolumnschema-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::QuickSight::Template.ColumnGroupSchema": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columngroupschema.html", + "Properties": { + "ColumnGroupColumnSchemaList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columngroupschema.html#cfn-quicksight-template-columngroupschema-columngroupcolumnschemalist", + "DuplicatesAllowed": true, + "ItemType": "ColumnGroupColumnSchema", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columngroupschema.html#cfn-quicksight-template-columngroupschema-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::QuickSight::Template.ColumnSchema": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columnschema.html", + "Properties": { + "DataType": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columnschema.html#cfn-quicksight-template-columnschema-datatype", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "GeographicRole": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columnschema.html#cfn-quicksight-template-columnschema-geographicrole", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-columnschema.html#cfn-quicksight-template-columnschema-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::QuickSight::Template.DataSetConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datasetconfiguration.html", + "Properties": { + "ColumnGroupSchemaList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datasetconfiguration.html#cfn-quicksight-template-datasetconfiguration-columngroupschemalist", + "DuplicatesAllowed": true, + "ItemType": "ColumnGroupSchema", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "DataSetSchema": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datasetconfiguration.html#cfn-quicksight-template-datasetconfiguration-datasetschema", + "Required": false, + "Type": "DataSetSchema", + "UpdateType": "Mutable" + }, + "Placeholder": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datasetconfiguration.html#cfn-quicksight-template-datasetconfiguration-placeholder", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::QuickSight::Template.DataSetReference": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datasetreference.html", "Properties": { @@ -1636,11 +1853,25 @@ } } }, + "AWS::QuickSight::Template.DataSetSchema": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datasetschema.html", + "Properties": { + "ColumnSchemaList": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-datasetschema.html#cfn-quicksight-template-datasetschema-columnschemalist", + "DuplicatesAllowed": true, + "ItemType": "ColumnSchema", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::QuickSight::Template.ResourcePermission": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-resourcepermission.html", "Properties": { "Actions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-resourcepermission.html#cfn-quicksight-template-resourcepermission-actions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1654,6 +1885,40 @@ } } }, + "AWS::QuickSight::Template.Sheet": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheet.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheet.html#cfn-quicksight-template-sheet-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SheetId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-sheet.html#cfn-quicksight-template-sheet-sheetid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::QuickSight::Template.TemplateError": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateerror.html", + "Properties": { + "Message": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateerror.html#cfn-quicksight-template-templateerror-message", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateerror.html#cfn-quicksight-template-templateerror-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::QuickSight::Template.TemplateSourceAnalysis": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templatesourceanalysis.html", "Properties": { @@ -1665,6 +1930,7 @@ }, "DataSetReferences": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templatesourceanalysis.html#cfn-quicksight-template-templatesourceanalysis-datasetreferences", + "DuplicatesAllowed": true, "ItemType": "DataSetReference", "Required": true, "Type": "List", @@ -1700,6 +1966,71 @@ } } }, + "AWS::QuickSight::Template.TemplateVersion": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateversion.html", + "Properties": { + "CreatedTime": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateversion.html#cfn-quicksight-template-templateversion-createdtime", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DataSetConfigurations": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateversion.html#cfn-quicksight-template-templateversion-datasetconfigurations", + "DuplicatesAllowed": true, + "ItemType": "DataSetConfiguration", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateversion.html#cfn-quicksight-template-templateversion-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Errors": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateversion.html#cfn-quicksight-template-templateversion-errors", + "DuplicatesAllowed": true, + "ItemType": "TemplateError", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Sheets": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateversion.html#cfn-quicksight-template-templateversion-sheets", + "DuplicatesAllowed": true, + "ItemType": "Sheet", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "SourceEntityArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateversion.html#cfn-quicksight-template-templateversion-sourceentityarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Status": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateversion.html#cfn-quicksight-template-templateversion-status", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ThemeArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateversion.html#cfn-quicksight-template-templateversion-themearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "VersionNumber": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-template-templateversion.html#cfn-quicksight-template-templateversion-versionnumber", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::QuickSight::Theme.BorderStyle": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-borderstyle.html", "Properties": { @@ -1716,6 +2047,7 @@ "Properties": { "Colors": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-datacolorpalette.html#cfn-quicksight-theme-datacolorpalette-colors", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1729,6 +2061,7 @@ }, "MinMaxGradient": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-datacolorpalette.html#cfn-quicksight-theme-datacolorpalette-minmaxgradient", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1774,6 +2107,7 @@ "Properties": { "Actions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-resourcepermission.html#cfn-quicksight-theme-resourcepermission-actions", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1833,6 +2167,78 @@ } } }, + "AWS::QuickSight::Theme.ThemeError": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeerror.html", + "Properties": { + "Message": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeerror.html#cfn-quicksight-theme-themeerror-message", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeerror.html#cfn-quicksight-theme-themeerror-type", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::QuickSight::Theme.ThemeVersion": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeversion.html", + "Properties": { + "Arn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeversion.html#cfn-quicksight-theme-themeversion-arn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "BaseThemeId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeversion.html#cfn-quicksight-theme-themeversion-basethemeid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Configuration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeversion.html#cfn-quicksight-theme-themeversion-configuration", + "Required": false, + "Type": "ThemeConfiguration", + "UpdateType": "Mutable" + }, + "CreatedTime": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeversion.html#cfn-quicksight-theme-themeversion-createdtime", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Description": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeversion.html#cfn-quicksight-theme-themeversion-description", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Errors": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeversion.html#cfn-quicksight-theme-themeversion-errors", + "DuplicatesAllowed": true, + "ItemType": "ThemeError", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Status": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeversion.html#cfn-quicksight-theme-themeversion-status", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "VersionNumber": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-themeversion.html#cfn-quicksight-theme-themeversion-versionnumber", + "PrimitiveType": "Double", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::QuickSight::Theme.TileLayoutStyle": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-tilelayoutstyle.html", "Properties": { @@ -1866,6 +2272,7 @@ "Properties": { "FontFamilies": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-quicksight-theme-typography.html#cfn-quicksight-theme-typography-fontfamilies", + "DuplicatesAllowed": true, "ItemType": "Font", "Required": false, "Type": "List", @@ -2015,6 +2422,7 @@ }, "Errors": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-analysis.html#cfn-quicksight-analysis-errors", + "DuplicatesAllowed": true, "ItemType": "AnalysisError", "Required": false, "Type": "List", @@ -2034,6 +2442,7 @@ }, "Permissions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-analysis.html#cfn-quicksight-analysis-permissions", + "DuplicatesAllowed": true, "ItemType": "ResourcePermission", "Required": false, "Type": "List", @@ -2047,6 +2456,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-analysis.html#cfn-quicksight-analysis-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2073,6 +2483,42 @@ }, "LastUpdatedTime": { "PrimitiveType": "String" + }, + "Version": { + "Type": "DashboardVersion" + }, + "Version.Arn": { + "PrimitiveType": "String" + }, + "Version.CreatedTime": { + "PrimitiveType": "String" + }, + "Version.DataSetArns": { + "PrimitiveItemType": "String", + "Type": "List" + }, + "Version.Description": { + "PrimitiveType": "String" + }, + "Version.Errors": { + "ItemType": "DashboardError", + "Type": "List" + }, + "Version.Sheets": { + "ItemType": "Sheet", + "Type": "List" + }, + "Version.SourceEntityArn": { + "PrimitiveType": "String" + }, + "Version.Status": { + "PrimitiveType": "String" + }, + "Version.ThemeArn": { + "PrimitiveType": "String" + }, + "Version.VersionNumber": { + "PrimitiveType": "Double" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-dashboard.html", @@ -2109,6 +2555,7 @@ }, "Permissions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-dashboard.html#cfn-quicksight-dashboard-permissions", + "DuplicatesAllowed": true, "ItemType": "ResourcePermission", "Required": false, "Type": "List", @@ -2122,6 +2569,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-dashboard.html#cfn-quicksight-dashboard-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2170,6 +2618,7 @@ }, "ColumnGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-dataset.html#cfn-quicksight-dataset-columngroups", + "DuplicatesAllowed": true, "ItemType": "ColumnGroup", "Required": false, "Type": "List", @@ -2177,6 +2626,7 @@ }, "ColumnLevelPermissionRules": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-dataset.html#cfn-quicksight-dataset-columnlevelpermissionrules", + "DuplicatesAllowed": true, "ItemType": "ColumnLevelPermissionRule", "Required": false, "Type": "List", @@ -2228,6 +2678,7 @@ }, "Permissions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-dataset.html#cfn-quicksight-dataset-permissions", + "DuplicatesAllowed": true, "ItemType": "ResourcePermission", "Required": false, "Type": "List", @@ -2248,6 +2699,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-dataset.html#cfn-quicksight-dataset-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2274,6 +2726,7 @@ "Properties": { "AlternateDataSourceParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-datasource.html#cfn-quicksight-datasource-alternatedatasourceparameters", + "DuplicatesAllowed": true, "ItemType": "DataSourceParameters", "Required": false, "Type": "List", @@ -2317,6 +2770,7 @@ }, "Permissions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-datasource.html#cfn-quicksight-datasource-permissions", + "DuplicatesAllowed": true, "ItemType": "ResourcePermission", "Required": false, "Type": "List", @@ -2330,6 +2784,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-datasource.html#cfn-quicksight-datasource-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2359,6 +2814,39 @@ }, "LastUpdatedTime": { "PrimitiveType": "String" + }, + "Version": { + "Type": "TemplateVersion" + }, + "Version.CreatedTime": { + "PrimitiveType": "String" + }, + "Version.DataSetConfigurations": { + "ItemType": "DataSetConfiguration", + "Type": "List" + }, + "Version.Description": { + "PrimitiveType": "String" + }, + "Version.Errors": { + "ItemType": "TemplateError", + "Type": "List" + }, + "Version.Sheets": { + "ItemType": "Sheet", + "Type": "List" + }, + "Version.SourceEntityArn": { + "PrimitiveType": "String" + }, + "Version.Status": { + "PrimitiveType": "String" + }, + "Version.ThemeArn": { + "PrimitiveType": "String" + }, + "Version.VersionNumber": { + "PrimitiveType": "Double" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-template.html", @@ -2377,6 +2865,7 @@ }, "Permissions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-template.html#cfn-quicksight-template-permissions", + "DuplicatesAllowed": true, "ItemType": "ResourcePermission", "Required": false, "Type": "List", @@ -2390,6 +2879,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-template.html#cfn-quicksight-template-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2422,6 +2912,46 @@ }, "Type": { "PrimitiveType": "String" + }, + "Version": { + "Type": "ThemeVersion" + }, + "Version.Arn": { + "PrimitiveType": "String" + }, + "Version.BaseThemeId": { + "PrimitiveType": "String" + }, + "Version.Configuration": { + "Type": "ThemeConfiguration" + }, + "Version.Configuration.DataColorPalette": { + "Type": "DataColorPalette" + }, + "Version.Configuration.Sheet": { + "Type": "SheetStyle" + }, + "Version.Configuration.Typography": { + "Type": "Typography" + }, + "Version.Configuration.UIColorPalette": { + "Type": "UIColorPalette" + }, + "Version.CreatedTime": { + "PrimitiveType": "String" + }, + "Version.Description": { + "PrimitiveType": "String" + }, + "Version.Errors": { + "ItemType": "ThemeError", + "Type": "List" + }, + "Version.Status": { + "PrimitiveType": "String" + }, + "Version.VersionNumber": { + "PrimitiveType": "Double" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-theme.html", @@ -2452,6 +2982,7 @@ }, "Permissions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-theme.html#cfn-quicksight-theme-permissions", + "DuplicatesAllowed": true, "ItemType": "ResourcePermission", "Required": false, "Type": "List", @@ -2459,6 +2990,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-quicksight-theme.html#cfn-quicksight-theme-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RAM.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RAM.json index a3c6f1a0ddfec..f559e767cd549 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RAM.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RAM.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::RAM::ResourceShare": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RDS.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RDS.json index 2cc4ad9ce9ab5..3edd97de23b96 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RDS.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RDS.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::RDS::DBCluster.DBClusterRole": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbcluster-dbclusterrole.html", @@ -18,6 +18,23 @@ } } }, + "AWS::RDS::DBCluster.Endpoint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbcluster-endpoint.html", + "Properties": { + "Address": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbcluster-endpoint.html#cfn-rds-dbcluster-endpoint-address", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Port": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbcluster-endpoint.html#cfn-rds-dbcluster-endpoint-port", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::RDS::DBCluster.ReadEndpoint": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbcluster-readendpoint.html", "Properties": { @@ -236,6 +253,7 @@ }, "SessionPinningFilters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-dbproxytargetgroup-connectionpoolconfigurationinfoformat.html#cfn-rds-dbproxytargetgroup-connectionpoolconfigurationinfoformat-sessionpinningfilters", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -291,6 +309,7 @@ }, "OptionSettings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-optiongroup-optionconfiguration.html#cfn-rds-optiongroup-optionconfiguration-optionsettings", + "DuplicatesAllowed": true, "ItemType": "OptionSetting", "Required": false, "Type": "List", @@ -342,6 +361,12 @@ "DBClusterArn": { "PrimitiveType": "String" }, + "DBClusterResourceId": { + "PrimitiveType": "String" + }, + "Endpoint": { + "Type": "Endpoint" + }, "Endpoint.Address": { "PrimitiveType": "String" }, @@ -477,7 +502,7 @@ "Engine": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-engine", "PrimitiveType": "String", - "Required": true, + "Required": false, "UpdateType": "Conditional" }, "EngineMode": { @@ -689,6 +714,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbclusterparametergroup.html#cfn-rds-dbclusterparametergroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -730,6 +756,7 @@ }, "AssociatedRoles": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-associatedroles", + "DuplicatesAllowed": true, "ItemType": "DBInstanceRole", "Required": false, "Type": "List", @@ -739,19 +766,19 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-autominorversionupgrade", "PrimitiveType": "Boolean", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "AvailabilityZone": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-availabilityzone", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "BackupRetentionPeriod": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-backupretentionperiod", "PrimitiveType": "Integer", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "CACertificateIdentifier": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-cacertificateidentifier", @@ -805,7 +832,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-dbparametergroupname", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "DBSecurityGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-dbsecuritygroups", @@ -819,7 +846,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-dbsnapshotidentifier", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "DBSubnetGroupName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-dbsubnetgroupname", @@ -853,6 +880,7 @@ }, "EnableCloudwatchLogsExports": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-enablecloudwatchlogsexports", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -870,11 +898,17 @@ "Required": false, "UpdateType": "Mutable" }, + "Endpoint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-endpoint", + "Required": false, + "Type": "Endpoint", + "UpdateType": "Mutable" + }, "Engine": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-engine", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "EngineVersion": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-engineversion", @@ -934,7 +968,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-multiaz", "PrimitiveType": "Boolean", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "NcharCharacterSetName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-ncharcharactersetname", @@ -958,7 +992,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-performanceinsightskmskeyid", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "PerformanceInsightsRetentionPeriod": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-performanceinsightsretentionperiod", @@ -982,10 +1016,11 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-preferredmaintenancewindow", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "ProcessorFeatures": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-processorfeatures", + "DuplicatesAllowed": true, "ItemType": "ProcessorFeature", "Required": false, "Type": "List", @@ -1013,7 +1048,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-sourcedbinstanceidentifier", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "SourceRegion": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-sourceregion", @@ -1037,7 +1072,7 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-storagetype", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html#cfn-rds-dbinstance-tags", @@ -1127,6 +1162,7 @@ "Properties": { "Auth": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbproxy.html#cfn-rds-dbproxy-auth", + "DuplicatesAllowed": true, "ItemType": "AuthFormat", "Required": true, "Type": "List", @@ -1170,6 +1206,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbproxy.html#cfn-rds-dbproxy-tags", + "DuplicatesAllowed": true, "ItemType": "TagFormat", "Required": false, "Type": "List", @@ -1177,6 +1214,7 @@ }, "VpcSecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbproxy.html#cfn-rds-dbproxy-vpcsecuritygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1184,6 +1222,7 @@ }, "VpcSubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbproxy.html#cfn-rds-dbproxy-vpcsubnetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1222,6 +1261,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbproxyendpoint.html#cfn-rds-dbproxyendpoint-tags", + "DuplicatesAllowed": true, "ItemType": "TagFormat", "Required": false, "Type": "List", @@ -1235,6 +1275,7 @@ }, "VpcSecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbproxyendpoint.html#cfn-rds-dbproxyendpoint-vpcsecuritygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1242,6 +1283,7 @@ }, "VpcSubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbproxyendpoint.html#cfn-rds-dbproxyendpoint-vpcsubnetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1265,6 +1307,7 @@ }, "DBClusterIdentifiers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbproxytargetgroup.html#cfn-rds-dbproxytargetgroup-dbclusteridentifiers", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1272,6 +1315,7 @@ }, "DBInstanceIdentifiers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbproxytargetgroup.html#cfn-rds-dbproxytargetgroup-dbinstanceidentifiers", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1503,6 +1547,7 @@ }, "OptionConfigurations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-optiongroup.html#cfn-rds-optiongroup-optionconfigurations", + "DuplicatesAllowed": true, "ItemType": "OptionConfiguration", "Required": false, "Type": "List", @@ -1522,6 +1567,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-optiongroup.html#cfn-rds-optiongroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RUM.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RUM.json index 360d808f35d03..695d8ce0e0f7f 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RUM.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RUM.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::RUM::AppMonitor.AppMonitorConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rum-appmonitor-appmonitorconfiguration.html", @@ -18,6 +18,7 @@ }, "ExcludedPages": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rum-appmonitor-appmonitorconfiguration.html#cfn-rum-appmonitor-appmonitorconfiguration-excludedpages", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -25,6 +26,7 @@ }, "FavoritePages": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rum-appmonitor-appmonitorconfiguration.html#cfn-rum-appmonitor-appmonitorconfiguration-favoritepages", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -44,6 +46,7 @@ }, "IncludedPages": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rum-appmonitor-appmonitorconfiguration.html#cfn-rum-appmonitor-appmonitorconfiguration-includedpages", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -65,6 +68,7 @@ }, "Telemetries": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rum-appmonitor-appmonitorconfiguration.html#cfn-rum-appmonitor-appmonitorconfiguration-telemetries", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Redshift.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Redshift.json index 5c804d93dbdba..81854ec83c506 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Redshift.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Redshift.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Redshift::Cluster.Endpoint": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-cluster-endpoint.html", @@ -52,6 +52,60 @@ } } }, + "AWS::Redshift::EndpointAccess.NetworkInterface": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-endpointaccess-networkinterface.html", + "Properties": { + "AvailabilityZone": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-endpointaccess-networkinterface.html#cfn-redshift-endpointaccess-networkinterface-availabilityzone", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "NetworkInterfaceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-endpointaccess-networkinterface.html#cfn-redshift-endpointaccess-networkinterface-networkinterfaceid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PrivateIpAddress": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-endpointaccess-networkinterface.html#cfn-redshift-endpointaccess-networkinterface-privateipaddress", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SubnetId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-endpointaccess-networkinterface.html#cfn-redshift-endpointaccess-networkinterface-subnetid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Redshift::EndpointAccess.VpcEndpoint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-endpointaccess-vpcendpoint.html", + "Properties": { + "NetworkInterfaces": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-endpointaccess-vpcendpoint.html#cfn-redshift-endpointaccess-vpcendpoint-networkinterfaces", + "DuplicatesAllowed": true, + "ItemType": "NetworkInterface", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "VpcEndpointId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-endpointaccess-vpcendpoint.html#cfn-redshift-endpointaccess-vpcendpoint-vpcendpointid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "VpcId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-endpointaccess-vpcendpoint.html#cfn-redshift-endpointaccess-vpcendpoint-vpcid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::Redshift::EndpointAccess.VpcSecurityGroup": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshift-endpointaccess-vpcsecuritygroup.html", "Properties": { @@ -296,6 +350,12 @@ "Required": false, "UpdateType": "Mutable" }, + "Endpoint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-endpoint", + "Required": false, + "Type": "Endpoint", + "UpdateType": "Mutable" + }, "EnhancedVpcRouting": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-enhancedvpcrouting", "PrimitiveType": "Boolean", @@ -316,6 +376,7 @@ }, "IamRoles": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-cluster.html#cfn-redshift-cluster-iamroles", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -481,6 +542,7 @@ }, "Parameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clusterparametergroup.html#cfn-redshift-clusterparametergroup-parameters", + "DuplicatesAllowed": true, "ItemType": "Parameter", "Required": false, "Type": "List", @@ -488,6 +550,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clusterparametergroup.html#cfn-redshift-clusterparametergroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -559,6 +622,7 @@ }, "SubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersubnetgroup.html#cfn-redshift-clustersubnetgroup-subnetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -566,6 +630,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-clustersubnetgroup.html#cfn-redshift-clustersubnetgroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -586,6 +651,12 @@ }, "Port": { "PrimitiveType": "Integer" + }, + "VpcEndpoint.VpcEndpointId": { + "PrimitiveType": "String" + }, + "VpcEndpoint.VpcId": { + "PrimitiveType": "String" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-endpointaccess.html", @@ -616,12 +687,13 @@ }, "VpcEndpoint": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-endpointaccess.html#cfn-redshift-endpointaccess-vpcendpoint", - "PrimitiveType": "Json", "Required": false, + "Type": "VpcEndpoint", "UpdateType": "Mutable" }, "VpcSecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-endpointaccess.html#cfn-redshift-endpointaccess-vpcsecuritygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -629,6 +701,7 @@ }, "VpcSecurityGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-endpointaccess.html#cfn-redshift-endpointaccess-vpcsecuritygroups", + "DuplicatesAllowed": true, "ItemType": "VpcSecurityGroup", "Required": false, "Type": "List", @@ -686,6 +759,7 @@ }, "VpcIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-endpointauthorization.html#cfn-redshift-endpointauthorization-vpcids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -702,7 +776,6 @@ "PrimitiveType": "String" }, "EventCategoriesList": { - "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Type": "List" }, @@ -747,6 +820,7 @@ }, "SourceIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-eventsubscription.html#cfn-redshift-eventsubscription-sourceids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -766,6 +840,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshift-eventsubscription.html#cfn-redshift-eventsubscription-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RedshiftServerless.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RedshiftServerless.json index 85b2e87b7dcf4..426f492fda652 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RedshiftServerless.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RedshiftServerless.json @@ -1,6 +1,81 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { + "AWS::RedshiftServerless::Namespace.Namespace": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-namespace-namespace.html", + "Properties": { + "AdminUsername": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-namespace-namespace.html#cfn-redshiftserverless-namespace-namespace-adminusername", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "CreationDate": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-namespace-namespace.html#cfn-redshiftserverless-namespace-namespace-creationdate", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DbName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-namespace-namespace.html#cfn-redshiftserverless-namespace-namespace-dbname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "DefaultIamRoleArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-namespace-namespace.html#cfn-redshiftserverless-namespace-namespace-defaultiamrolearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "IamRoles": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-namespace-namespace.html#cfn-redshiftserverless-namespace-namespace-iamroles", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "KmsKeyId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-namespace-namespace.html#cfn-redshiftserverless-namespace-namespace-kmskeyid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "LogExports": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-namespace-namespace.html#cfn-redshiftserverless-namespace-namespace-logexports", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "NamespaceArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-namespace-namespace.html#cfn-redshiftserverless-namespace-namespace-namespacearn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "NamespaceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-namespace-namespace.html#cfn-redshiftserverless-namespace-namespace-namespaceid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "NamespaceName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-namespace-namespace.html#cfn-redshiftserverless-namespace-namespace-namespacename", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Status": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-namespace-namespace.html#cfn-redshiftserverless-namespace-namespace-status", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::RedshiftServerless::Workgroup.ConfigParameter": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-configparameter.html", "Properties": { @@ -17,10 +92,218 @@ "UpdateType": "Mutable" } } + }, + "AWS::RedshiftServerless::Workgroup.Endpoint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-endpoint.html", + "Properties": { + "Address": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-endpoint.html#cfn-redshiftserverless-workgroup-endpoint-address", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Port": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-endpoint.html#cfn-redshiftserverless-workgroup-endpoint-port", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "VpcEndpoints": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-endpoint.html#cfn-redshiftserverless-workgroup-endpoint-vpcendpoints", + "DuplicatesAllowed": true, + "ItemType": "VpcEndpoint", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::RedshiftServerless::Workgroup.NetworkInterface": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-networkinterface.html", + "Properties": { + "AvailabilityZone": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-networkinterface.html#cfn-redshiftserverless-workgroup-networkinterface-availabilityzone", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "NetworkInterfaceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-networkinterface.html#cfn-redshiftserverless-workgroup-networkinterface-networkinterfaceid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PrivateIpAddress": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-networkinterface.html#cfn-redshiftserverless-workgroup-networkinterface-privateipaddress", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SubnetId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-networkinterface.html#cfn-redshiftserverless-workgroup-networkinterface-subnetid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::RedshiftServerless::Workgroup.VpcEndpoint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-vpcendpoint.html", + "Properties": { + "NetworkInterfaces": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-vpcendpoint.html#cfn-redshiftserverless-workgroup-vpcendpoint-networkinterfaces", + "DuplicatesAllowed": true, + "ItemType": "NetworkInterface", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "VpcEndpointId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-vpcendpoint.html#cfn-redshiftserverless-workgroup-vpcendpoint-vpcendpointid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "VpcId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-vpcendpoint.html#cfn-redshiftserverless-workgroup-vpcendpoint-vpcid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::RedshiftServerless::Workgroup.Workgroup": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html", + "Properties": { + "BaseCapacity": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-basecapacity", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "ConfigParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-configparameters", + "DuplicatesAllowed": false, + "ItemType": "ConfigParameter", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "CreationDate": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-creationdate", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Endpoint": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-endpoint", + "Required": false, + "Type": "Endpoint", + "UpdateType": "Mutable" + }, + "EnhancedVpcRouting": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-enhancedvpcrouting", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "NamespaceName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-namespacename", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PubliclyAccessible": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-publiclyaccessible", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "SecurityGroupIds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-securitygroupids", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "Status": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-status", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SubnetIds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-subnetids", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "WorkgroupArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-workgrouparn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "WorkgroupId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-workgroupid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "WorkgroupName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-redshiftserverless-workgroup-workgroup.html#cfn-redshiftserverless-workgroup-workgroup-workgroupname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } } }, "ResourceTypes": { "AWS::RedshiftServerless::Namespace": { + "Attributes": { + "Namespace": { + "Type": "Namespace" + }, + "Namespace.AdminUsername": { + "PrimitiveType": "String" + }, + "Namespace.CreationDate": { + "PrimitiveType": "String" + }, + "Namespace.DbName": { + "PrimitiveType": "String" + }, + "Namespace.DefaultIamRoleArn": { + "PrimitiveType": "String" + }, + "Namespace.IamRoles": { + "PrimitiveItemType": "String", + "Type": "List" + }, + "Namespace.KmsKeyId": { + "PrimitiveType": "String" + }, + "Namespace.LogExports": { + "PrimitiveItemType": "String", + "Type": "List" + }, + "Namespace.NamespaceArn": { + "PrimitiveType": "String" + }, + "Namespace.NamespaceId": { + "PrimitiveType": "String" + }, + "Namespace.NamespaceName": { + "PrimitiveType": "String" + }, + "Namespace.Status": { + "PrimitiveType": "String" + } + }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-namespace.html", "Properties": { "AdminUserPassword": { @@ -61,6 +344,7 @@ }, "IamRoles": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-namespace.html#cfn-redshiftserverless-namespace-iamroles", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -74,6 +358,7 @@ }, "LogExports": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-namespace.html#cfn-redshiftserverless-namespace-logexports", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -87,6 +372,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-namespace.html#cfn-redshiftserverless-namespace-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -95,6 +381,63 @@ } }, "AWS::RedshiftServerless::Workgroup": { + "Attributes": { + "Workgroup": { + "Type": "Workgroup" + }, + "Workgroup.BaseCapacity": { + "PrimitiveType": "Integer" + }, + "Workgroup.ConfigParameters": { + "ItemType": "ConfigParameter", + "Type": "List" + }, + "Workgroup.CreationDate": { + "PrimitiveType": "String" + }, + "Workgroup.Endpoint": { + "Type": "Endpoint" + }, + "Workgroup.Endpoint.Address": { + "PrimitiveType": "String" + }, + "Workgroup.Endpoint.Port": { + "PrimitiveType": "Integer" + }, + "Workgroup.Endpoint.VpcEndpoints": { + "ItemType": "VpcEndpoint", + "Type": "List" + }, + "Workgroup.EnhancedVpcRouting": { + "PrimitiveType": "Boolean" + }, + "Workgroup.NamespaceName": { + "PrimitiveType": "String" + }, + "Workgroup.PubliclyAccessible": { + "PrimitiveType": "Boolean" + }, + "Workgroup.SecurityGroupIds": { + "PrimitiveItemType": "String", + "Type": "List" + }, + "Workgroup.Status": { + "PrimitiveType": "String" + }, + "Workgroup.SubnetIds": { + "PrimitiveItemType": "String", + "Type": "List" + }, + "Workgroup.WorkgroupArn": { + "PrimitiveType": "String" + }, + "Workgroup.WorkgroupId": { + "PrimitiveType": "String" + }, + "Workgroup.WorkgroupName": { + "PrimitiveType": "String" + } + }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-workgroup.html", "Properties": { "BaseCapacity": { @@ -131,6 +474,7 @@ }, "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-workgroup.html#cfn-redshiftserverless-workgroup-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -138,6 +482,7 @@ }, "SubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-workgroup.html#cfn-redshiftserverless-workgroup-subnetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -145,6 +490,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-redshiftserverless-workgroup.html#cfn-redshiftserverless-workgroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RefactorSpaces.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RefactorSpaces.json index dff3ba0227274..0fb9ffe381bba 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RefactorSpaces.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RefactorSpaces.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::RefactorSpaces::Application.ApiGatewayProxyInput": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-refactorspaces-application-apigatewayproxyinput.html", @@ -46,6 +46,7 @@ }, "Methods": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-refactorspaces-route-uripathrouteinput.html#cfn-refactorspaces-route-uripathrouteinput-methods", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -144,6 +145,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-refactorspaces-application.html#cfn-refactorspaces-application-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -191,6 +193,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-refactorspaces-environment.html#cfn-refactorspaces-environment-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -244,6 +247,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-refactorspaces-route.html#cfn-refactorspaces-route-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -306,6 +310,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-refactorspaces-service.html#cfn-refactorspaces-service-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Rekognition.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Rekognition.json index deb280faa3c96..816565388b8b7 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Rekognition.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Rekognition.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Rekognition::StreamProcessor.BoundingBox": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rekognition-streamprocessor-boundingbox.html", @@ -35,6 +35,7 @@ "Properties": { "Labels": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rekognition-streamprocessor-connectedhomesettings.html#cfn-rekognition-streamprocessor-connectedhomesettings-labels", + "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -109,36 +110,6 @@ } } }, - "AWS::Rekognition::StreamProcessor.Point": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rekognition-streamprocessor-point.html", - "Properties": { - "X": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rekognition-streamprocessor-point.html#cfn-rekognition-streamprocessor-x", - "PrimitiveType": "Integer", - "Required": true, - "UpdateType": "Mutable" - }, - "Y": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rekognition-streamprocessor-point.html#cfn-rekognition-streamprocessor-y", - "PrimitiveType": "Integer", - "Required": true, - "UpdateType": "Mutable" - } - } - }, - "AWS::Rekognition::StreamProcessor.Polygon": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rekognition-streamprocessor-polygon.html", - "Properties": { - "Polygon": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rekognition-streamprocessor-polygon.html#cfn-rekognition-streamprocessor-polygon", - "DuplicatesAllowed": false, - "ItemType": "Point", - "Required": true, - "Type": "List", - "UpdateType": "Mutable" - } - } - }, "AWS::Rekognition::StreamProcessor.S3Destination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rekognition-streamprocessor-s3destination.html", "Properties": { @@ -270,10 +241,8 @@ }, "PolygonRegionsOfInterest": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rekognition-streamprocessor.html#cfn-rekognition-streamprocessor-polygonregionsofinterest", - "DuplicatesAllowed": false, - "ItemType": "Polygon", + "PrimitiveType": "Json", "Required": false, - "Type": "List", "UpdateType": "Immutable" }, "RoleArn": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ResilienceHub.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ResilienceHub.json index a2b41cf08bbf1..77b93e52d800a 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ResilienceHub.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ResilienceHub.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ResilienceHub::App.PhysicalResourceId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resiliencehub-app-physicalresourceid.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ResourceExplorer2.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ResourceExplorer2.json index 29362a4bb43bd..e3fbb2c9744d8 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ResourceExplorer2.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ResourceExplorer2.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ResourceExplorer2::View.Filters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resourceexplorer2-view-filters.html", @@ -83,6 +83,7 @@ }, "IncludedProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-resourceexplorer2-view.html#cfn-resourceexplorer2-view-includedproperties", + "DuplicatesAllowed": true, "ItemType": "IncludedProperty", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ResourceGroups.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ResourceGroups.json index 8226b9483d89e..276b433122257 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ResourceGroups.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ResourceGroups.json @@ -1,11 +1,12 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ResourceGroups::Group.ConfigurationItem": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resourcegroups-group-configurationitem.html", "Properties": { "Parameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resourcegroups-group-configurationitem.html#cfn-resourcegroups-group-configurationitem-parameters", + "DuplicatesAllowed": true, "ItemType": "ConfigurationParameter", "Required": false, "Type": "List", @@ -30,6 +31,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resourcegroups-group-configurationparameter.html#cfn-resourcegroups-group-configurationparameter-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -42,6 +44,7 @@ "Properties": { "ResourceTypeFilters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resourcegroups-group-query.html#cfn-resourcegroups-group-query-resourcetypefilters", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -55,6 +58,7 @@ }, "TagFilters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resourcegroups-group-query.html#cfn-resourcegroups-group-query-tagfilters", + "DuplicatesAllowed": true, "ItemType": "TagFilter", "Required": false, "Type": "List", @@ -90,6 +94,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resourcegroups-group-tagfilter.html#cfn-resourcegroups-group-tagfilter-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -109,6 +114,7 @@ "Properties": { "Configuration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-resourcegroups-group.html#cfn-resourcegroups-group-configuration", + "DuplicatesAllowed": true, "ItemType": "ConfigurationItem", "Required": false, "Type": "List", @@ -134,6 +140,7 @@ }, "Resources": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-resourcegroups-group.html#cfn-resourcegroups-group-resources", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -141,6 +148,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-resourcegroups-group.html#cfn-resourcegroups-group-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RoboMaker.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RoboMaker.json index 8a101d3ba98f7..e58f5c5c32af3 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RoboMaker.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RoboMaker.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::RoboMaker::RobotApplication.RobotSoftwareSuite": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-robomaker-robotapplication-robotsoftwaresuite.html", @@ -218,6 +218,7 @@ }, "Sources": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-robomaker-robotapplication.html#cfn-robomaker-robotapplication-sources", + "DuplicatesAllowed": true, "ItemType": "SourceConfig", "Required": false, "Type": "List", @@ -306,6 +307,7 @@ }, "Sources": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-robomaker-simulationapplication.html#cfn-robomaker-simulationapplication-sources", + "DuplicatesAllowed": true, "ItemType": "SourceConfig", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RolesAnywhere.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RolesAnywhere.json index 489f0b9d99a27..fe16bca594ea8 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RolesAnywhere.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_RolesAnywhere.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::RolesAnywhere::TrustAnchor.Source": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rolesanywhere-trustanchor-source.html", @@ -65,6 +65,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rolesanywhere-crl.html#cfn-rolesanywhere-crl-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -103,6 +104,7 @@ }, "ManagedPolicyArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rolesanywhere-profile.html#cfn-rolesanywhere-profile-managedpolicyarns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -122,6 +124,7 @@ }, "RoleArns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rolesanywhere-profile.html#cfn-rolesanywhere-profile-rolearns", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -135,6 +138,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rolesanywhere-profile.html#cfn-rolesanywhere-profile-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -173,6 +177,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rolesanywhere-trustanchor.html#cfn-rolesanywhere-trustanchor-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53.json index 8d66b194de73b..8081dd86031b7 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Route53::CidrCollection.Location": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-cidrcollection-location.html", @@ -20,6 +20,134 @@ } } }, + "AWS::Route53::HealthCheck.AlarmIdentifier": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-alarmidentifier.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-alarmidentifier.html#cfn-route53-healthcheck-alarmidentifier-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Region": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-alarmidentifier.html#cfn-route53-healthcheck-alarmidentifier-region", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::Route53::HealthCheck.HealthCheckConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html", + "Properties": { + "AlarmIdentifier": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-alarmidentifier", + "Required": false, + "Type": "AlarmIdentifier", + "UpdateType": "Mutable" + }, + "ChildHealthChecks": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-childhealthchecks", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "EnableSNI": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-enablesni", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "FailureThreshold": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-failurethreshold", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "FullyQualifiedDomainName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-fullyqualifieddomainname", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "HealthThreshold": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-healththreshold", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "IPAddress": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-ipaddress", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "InsufficientDataHealthStatus": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-insufficientdatahealthstatus", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Inverted": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-inverted", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "MeasureLatency": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-measurelatency", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + }, + "Port": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-port", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Mutable" + }, + "Regions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-regions", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, + "RequestInterval": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-requestinterval", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + }, + "ResourcePath": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-resourcepath", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "RoutingControlArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-routingcontrolarn", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SearchString": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-searchstring", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Type": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthcheckconfig.html#cfn-route53-healthcheck-healthcheckconfig-type", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, "AWS::Route53::HealthCheck.HealthCheckTag": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-healthcheck-healthchecktag.html", "Properties": { @@ -366,8 +494,8 @@ "Properties": { "HealthCheckConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-healthcheck.html#cfn-route53-healthcheck-healthcheckconfig", - "PrimitiveType": "Json", "Required": true, + "Type": "HealthCheckConfig", "UpdateType": "Mutable" }, "HealthCheckTags": { @@ -386,7 +514,6 @@ "PrimitiveType": "String" }, "NameServers": { - "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Type": "List" } diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53RecoveryControl.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53RecoveryControl.json index 0654c7e7ec6a6..144d4983523c0 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53RecoveryControl.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53RecoveryControl.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Route53RecoveryControl::Cluster.ClusterEndpoint": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53recoverycontrol-cluster-clusterendpoint.html", @@ -23,6 +23,7 @@ "Properties": { "AssertedControls": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53recoverycontrol-safetyrule-assertionrule.html#cfn-route53recoverycontrol-safetyrule-assertionrule-assertedcontrols", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -41,6 +42,7 @@ "Properties": { "GatingControls": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53recoverycontrol-safetyrule-gatingrule.html#cfn-route53recoverycontrol-safetyrule-gatingrule-gatingcontrols", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -48,6 +50,7 @@ }, "TargetControls": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53recoverycontrol-safetyrule-gatingrule.html#cfn-route53recoverycontrol-safetyrule-gatingrule-targetcontrols", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -109,6 +112,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53recoverycontrol-cluster.html#cfn-route53recoverycontrol-cluster-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -147,6 +151,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53recoverycontrol-controlpanel.html#cfn-route53recoverycontrol-controlpanel-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -228,6 +233,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53recoverycontrol-safetyrule.html#cfn-route53recoverycontrol-safetyrule-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53RecoveryReadiness.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53RecoveryReadiness.json index a9a02e2a1d9a3..4b4ecf8246065 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53RecoveryReadiness.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53RecoveryReadiness.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Route53RecoveryReadiness::ResourceSet.DNSTargetResource": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53recoveryreadiness-resourceset-dnstargetresource.html", @@ -81,6 +81,7 @@ }, "ReadinessScopes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53recoveryreadiness-resourceset-resource.html#cfn-route53recoveryreadiness-resourceset-resource-readinessscopes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -133,6 +134,7 @@ }, "Cells": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53recoveryreadiness-cell.html#cfn-route53recoveryreadiness-cell-cells", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -140,6 +142,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53recoveryreadiness-cell.html#cfn-route53recoveryreadiness-cell-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -169,6 +172,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53recoveryreadiness-readinesscheck.html#cfn-route53recoveryreadiness-readinesscheck-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -186,6 +190,7 @@ "Properties": { "Cells": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53recoveryreadiness-recoverygroup.html#cfn-route53recoveryreadiness-recoverygroup-cells", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -199,6 +204,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53recoveryreadiness-recoverygroup.html#cfn-route53recoveryreadiness-recoverygroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -228,6 +234,7 @@ }, "Resources": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53recoveryreadiness-resourceset.html#cfn-route53recoveryreadiness-resourceset-resources", + "DuplicatesAllowed": true, "ItemType": "Resource", "Required": true, "Type": "List", @@ -235,6 +242,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53recoveryreadiness-resourceset.html#cfn-route53recoveryreadiness-resourceset-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53Resolver.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53Resolver.json index 6eec62290b5d2..7c33984914004 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53Resolver.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Route53Resolver.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Route53Resolver::FirewallRuleGroup.FirewallRule": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53resolver-firewallrulegroup-firewallrule.html", @@ -477,7 +477,6 @@ "PrimitiveType": "String" }, "TargetIps": { - "DuplicatesAllowed": true, "ItemType": "TargetAddress", "Type": "List" } diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_S3.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_S3.json index c97a9ff463ad2..128786014c5ad 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_S3.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_S3.json @@ -1,6 +1,17 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { + "AWS::S3::AccessPoint.PolicyStatus": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-accesspoint-policystatus.html", + "Properties": { + "IsPublic": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-accesspoint-policystatus.html#cfn-s3-accesspoint-policystatus-ispublic", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::S3::AccessPoint.PublicAccessBlockConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-accesspoint-publicaccessblockconfiguration.html", "Properties": { @@ -1319,6 +1330,17 @@ } } }, + "AWS::S3::MultiRegionAccessPointPolicy.PolicyStatus": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-multiregionaccesspointpolicy-policystatus.html", + "Properties": { + "IsPublic": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-multiregionaccesspointpolicy-policystatus.html#cfn-s3-multiregionaccesspointpolicy-policystatus-ispublic", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::S3::StorageLens.AccountLevel": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-accountlevel.html", "Properties": { @@ -1711,8 +1733,8 @@ }, "PolicyStatus": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3-accesspoint.html#cfn-s3-accesspoint-policystatus", - "PrimitiveType": "Json", "Required": false, + "Type": "PolicyStatus", "UpdateType": "Mutable" }, "PublicAccessBlockConfiguration": { @@ -1932,6 +1954,14 @@ } }, "AWS::S3::MultiRegionAccessPointPolicy": { + "Attributes": { + "PolicyStatus": { + "Type": "PolicyStatus" + }, + "PolicyStatus.IsPublic": { + "PrimitiveType": "String" + } + }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3-multiregionaccesspointpolicy.html", "Properties": { "MrapName": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_S3ObjectLambda.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_S3ObjectLambda.json index 34775557482f2..eb297e93d425c 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_S3ObjectLambda.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_S3ObjectLambda.json @@ -1,6 +1,34 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { + "AWS::S3ObjectLambda::AccessPoint.AwsLambda": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-awslambda.html", + "Properties": { + "FunctionArn": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-awslambda.html#cfn-s3objectlambda-accesspoint-awslambda-functionarn", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "FunctionPayload": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-awslambda.html#cfn-s3objectlambda-accesspoint-awslambda-functionpayload", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::S3ObjectLambda::AccessPoint.ContentTransformation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-contenttransformation.html", + "Properties": { + "AwsLambda": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-contenttransformation.html#cfn-s3objectlambda-accesspoint-contenttransformation-awslambda", + "Required": true, + "Type": "AwsLambda", + "UpdateType": "Mutable" + } + } + }, "AWS::S3ObjectLambda::AccessPoint.ObjectLambdaConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-objectlambdaconfiguration.html", "Properties": { @@ -34,6 +62,46 @@ } } }, + "AWS::S3ObjectLambda::AccessPoint.PolicyStatus": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-policystatus.html", + "Properties": { + "IsPublic": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-policystatus.html#cfn-s3objectlambda-accesspoint-policystatus-ispublic", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::S3ObjectLambda::AccessPoint.PublicAccessBlockConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-publicaccessblockconfiguration.html", + "Properties": { + "BlockPublicAcls": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-publicaccessblockconfiguration.html#cfn-s3objectlambda-accesspoint-publicaccessblockconfiguration-blockpublicacls", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "BlockPublicPolicy": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-publicaccessblockconfiguration.html#cfn-s3objectlambda-accesspoint-publicaccessblockconfiguration-blockpublicpolicy", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "IgnorePublicAcls": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-publicaccessblockconfiguration.html#cfn-s3objectlambda-accesspoint-publicaccessblockconfiguration-ignorepublicacls", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + }, + "RestrictPublicBuckets": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-publicaccessblockconfiguration.html#cfn-s3objectlambda-accesspoint-publicaccessblockconfiguration-restrictpublicbuckets", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::S3ObjectLambda::AccessPoint.TransformationConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-transformationconfiguration.html", "Properties": { @@ -47,8 +115,8 @@ }, "ContentTransformation": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3objectlambda-accesspoint-transformationconfiguration.html#cfn-s3objectlambda-accesspoint-transformationconfiguration-contenttransformation", - "PrimitiveType": "Json", "Required": true, + "Type": "ContentTransformation", "UpdateType": "Mutable" } } @@ -62,6 +130,27 @@ }, "CreationDate": { "PrimitiveType": "String" + }, + "PolicyStatus": { + "Type": "PolicyStatus" + }, + "PolicyStatus.IsPublic": { + "PrimitiveType": "Boolean" + }, + "PublicAccessBlockConfiguration": { + "Type": "PublicAccessBlockConfiguration" + }, + "PublicAccessBlockConfiguration.BlockPublicAcls": { + "PrimitiveType": "Boolean" + }, + "PublicAccessBlockConfiguration.BlockPublicPolicy": { + "PrimitiveType": "Boolean" + }, + "PublicAccessBlockConfiguration.IgnorePublicAcls": { + "PrimitiveType": "Boolean" + }, + "PublicAccessBlockConfiguration.RestrictPublicBuckets": { + "PrimitiveType": "Boolean" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3objectlambda-accesspoint.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_S3Outposts.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_S3Outposts.json index 8f968de759e66..181098c47ebae 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_S3Outposts.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_S3Outposts.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::S3Outposts::AccessPoint.VpcConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-accesspoint-vpcconfiguration.html", @@ -23,6 +23,65 @@ } } }, + "AWS::S3Outposts::Bucket.Filter": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-filter.html", + "Properties": { + "AndOperator": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-filter.html#cfn-s3outposts-bucket-filter-andoperator", + "Required": false, + "Type": "FilterAndOperator", + "UpdateType": "Mutable" + }, + "Prefix": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-filter.html#cfn-s3outposts-bucket-filter-prefix", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Tag": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-filter.html#cfn-s3outposts-bucket-filter-tag", + "Required": false, + "Type": "FilterTag", + "UpdateType": "Mutable" + } + } + }, + "AWS::S3Outposts::Bucket.FilterAndOperator": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-filterandoperator.html", + "Properties": { + "Prefix": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-filterandoperator.html#cfn-s3outposts-bucket-filterandoperator-prefix", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-filterandoperator.html#cfn-s3outposts-bucket-filterandoperator-tags", + "DuplicatesAllowed": false, + "ItemType": "FilterTag", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::S3Outposts::Bucket.FilterTag": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-filtertag.html", + "Properties": { + "Key": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-filtertag.html#cfn-s3outposts-bucket-filtertag-key", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-filtertag.html#cfn-s3outposts-bucket-filtertag-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::S3Outposts::Bucket.LifecycleConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-lifecycleconfiguration.html", "Properties": { @@ -59,8 +118,8 @@ }, "Filter": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-rule.html#cfn-s3outposts-bucket-rule-filter", - "PrimitiveType": "Json", "Required": false, + "Type": "Filter", "UpdateType": "Mutable" }, "Id": { @@ -72,7 +131,7 @@ "Status": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3outposts-bucket-rule.html#cfn-s3outposts-bucket-rule-status", "PrimitiveType": "String", - "Required": false, + "Required": true, "UpdateType": "Mutable" } } @@ -192,7 +251,6 @@ "PrimitiveType": "String" }, "NetworkInterfaces": { - "DuplicatesAllowed": false, "ItemType": "NetworkInterface", "Type": "List" }, diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SDB.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SDB.json index b2baca472ec6b..5f3b88cb49e82 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SDB.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SDB.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::SDB::Domain": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SES.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SES.json index b2d291671278a..717ec6213ac37 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SES.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SES.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::SES::ConfigurationSet.DashboardOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ses-configurationset-dashboardoptions.html", @@ -730,6 +730,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ses-contactlist.html#cfn-ses-contactlist-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -737,6 +738,7 @@ }, "Topics": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ses-contactlist.html#cfn-ses-contactlist-topics", + "DuplicatesAllowed": true, "ItemType": "Topic", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SNS.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SNS.json index 0f53487e0a23f..ab820adbe7ea7 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SNS.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SNS.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::SNS::Topic.Subscription": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic-subscription.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SQS.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SQS.json index 5851a02d625c7..3953d456c9798 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SQS.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SQS.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::SQS::Queue": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSM.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSM.json index 6f20922f97ab7..ade88d008d6c0 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSM.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSM.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::SSM::Association.InstanceAssociationOutputLocation": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssm-association-instanceassociationoutputlocation.html", @@ -46,6 +46,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssm-association-target.html#cfn-ssm-association-target-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -70,6 +71,7 @@ }, "Values": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssm-document-attachmentssource.html#cfn-ssm-document-attachmentssource-values", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -573,6 +575,7 @@ }, "CalendarNames": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-association.html#cfn-ssm-association-calendarnames", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -622,9 +625,8 @@ }, "Parameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-association.html#cfn-ssm-association-parameters", - "PrimitiveItemType": "Json", + "PrimitiveType": "Json", "Required": false, - "Type": "Map", "UpdateType": "Mutable" }, "ScheduleExpression": { @@ -647,6 +649,7 @@ }, "Targets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-association.html#cfn-ssm-association-targets", + "DuplicatesAllowed": true, "ItemType": "Target", "Required": false, "Type": "List", @@ -665,6 +668,7 @@ "Properties": { "Attachments": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-document.html#cfn-ssm-document-attachments", + "DuplicatesAllowed": true, "ItemType": "AttachmentsSource", "Required": false, "Type": "List", @@ -696,6 +700,7 @@ }, "Requires": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-document.html#cfn-ssm-document-requires", + "DuplicatesAllowed": true, "ItemType": "DocumentRequires", "Required": false, "Type": "List", @@ -703,6 +708,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssm-document.html#cfn-ssm-document-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSMContacts.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSMContacts.json index 3c95eab5147c5..d95224b0eb142 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSMContacts.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSMContacts.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::SSMContacts::Contact.ChannelTargetInfo": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmcontacts-contact-channeltargetinfo.html", @@ -46,6 +46,7 @@ }, "Targets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmcontacts-contact-stage.html#cfn-ssmcontacts-contact-stage-targets", + "DuplicatesAllowed": true, "ItemType": "Targets", "Required": false, "Type": "List", @@ -94,6 +95,7 @@ }, "Plan": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssmcontacts-contact.html#cfn-ssmcontacts-contact-plan", + "DuplicatesAllowed": true, "ItemType": "Stage", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSMIncidents.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSMIncidents.json index 2613f73d2ce48..1166804f23185 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSMIncidents.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSMIncidents.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::SSMIncidents::ReplicationSet.RegionConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-replicationset-regionconfiguration.html", @@ -45,6 +45,7 @@ "Properties": { "ChatbotSns": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-responseplan-chatchannel.html#cfn-ssmincidents-responseplan-chatchannel-chatbotsns", + "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -105,6 +106,7 @@ }, "NotificationTargets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-responseplan-incidenttemplate.html#cfn-ssmincidents-responseplan-incidenttemplate-notificationtargets", + "DuplicatesAllowed": true, "ItemType": "NotificationTargetItem", "Required": false, "Type": "List", @@ -124,6 +126,17 @@ } } }, + "AWS::SSMIncidents::ResponsePlan.Integration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-responseplan-integration.html", + "Properties": { + "PagerDutyConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-responseplan-integration.html#cfn-ssmincidents-responseplan-integration-pagerdutyconfiguration", + "Required": true, + "Type": "PagerDutyConfiguration", + "UpdateType": "Mutable" + } + } + }, "AWS::SSMIncidents::ResponsePlan.NotificationTargetItem": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-responseplan-notificationtargetitem.html", "Properties": { @@ -135,6 +148,40 @@ } } }, + "AWS::SSMIncidents::ResponsePlan.PagerDutyConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-responseplan-pagerdutyconfiguration.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-responseplan-pagerdutyconfiguration.html#cfn-ssmincidents-responseplan-pagerdutyconfiguration-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "PagerDutyIncidentConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-responseplan-pagerdutyconfiguration.html#cfn-ssmincidents-responseplan-pagerdutyconfiguration-pagerdutyincidentconfiguration", + "Required": true, + "Type": "PagerDutyIncidentConfiguration", + "UpdateType": "Mutable" + }, + "SecretId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-responseplan-pagerdutyconfiguration.html#cfn-ssmincidents-responseplan-pagerdutyconfiguration-secretid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::SSMIncidents::ResponsePlan.PagerDutyIncidentConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-responseplan-pagerdutyincidentconfiguration.html", + "Properties": { + "ServiceId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-responseplan-pagerdutyincidentconfiguration.html#cfn-ssmincidents-responseplan-pagerdutyincidentconfiguration-serviceid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::SSMIncidents::ResponsePlan.SsmAutomation": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ssmincidents-responseplan-ssmautomation.html", "Properties": { @@ -267,6 +314,14 @@ "Type": "IncidentTemplate", "UpdateType": "Mutable" }, + "Integrations": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssmincidents-responseplan.html#cfn-ssmincidents-responseplan-integrations", + "DuplicatesAllowed": false, + "ItemType": "Integration", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + }, "Name": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ssmincidents-responseplan.html#cfn-ssmincidents-responseplan-name", "PrimitiveType": "String", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSO.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSO.json index 209d3469c8394..7a545e114a75c 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSO.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SSO.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::SSO::InstanceAccessControlAttributeConfiguration.AccessControlAttribute": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattribute.html", @@ -23,6 +23,7 @@ "Properties": { "Source": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevalue.html#cfn-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributevalue-source", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -112,6 +113,7 @@ "Properties": { "AccessControlAttributes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-instanceaccesscontrolattributeconfiguration.html#cfn-sso-instanceaccesscontrolattributeconfiguration-accesscontrolattributes", + "DuplicatesAllowed": true, "ItemType": "AccessControlAttribute", "Required": false, "Type": "List", @@ -135,6 +137,7 @@ "Properties": { "CustomerManagedPolicyReferences": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-permissionset.html#cfn-sso-permissionset-customermanagedpolicyreferences", + "DuplicatesAllowed": true, "ItemType": "CustomerManagedPolicyReference", "Required": false, "Type": "List", @@ -160,6 +163,7 @@ }, "ManagedPolicies": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-permissionset.html#cfn-sso-permissionset-managedpolicies", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -191,6 +195,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sso-permissionset.html#cfn-sso-permissionset-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SageMaker.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SageMaker.json index 18f6889a031eb..1c5a850fdc7c7 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SageMaker.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SageMaker.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::SageMaker::App.ResourceSpec": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-app-resourcespec.html", @@ -58,6 +58,7 @@ }, "KernelSpecs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-appimageconfig-kernelgatewayimageconfig.html#cfn-sagemaker-appimageconfig-kernelgatewayimageconfig-kernelspecs", + "DuplicatesAllowed": true, "ItemType": "KernelSpec", "Required": true, "Type": "List", @@ -196,6 +197,7 @@ "Properties": { "ContainerArguments": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualityappspecification.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityappspecification-containerarguments", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -203,6 +205,7 @@ }, "ContainerEntrypoint": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualityappspecification.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityappspecification-containerentrypoint", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -360,6 +363,7 @@ }, "MonitoringOutputs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-monitoringoutputconfig.html#cfn-sagemaker-dataqualityjobdefinition-monitoringoutputconfig-monitoringoutputs", + "DuplicatesAllowed": true, "ItemType": "MonitoringOutput", "Required": true, "Type": "List", @@ -451,6 +455,7 @@ "Properties": { "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-vpcconfig.html#cfn-sagemaker-dataqualityjobdefinition-vpcconfig-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -458,6 +463,7 @@ }, "Subnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-vpcconfig.html#cfn-sagemaker-dataqualityjobdefinition-vpcconfig-subnets", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -649,25 +655,25 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-resourcespec.html#cfn-sagemaker-domain-resourcespec-instancetype", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "LifecycleConfigArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-resourcespec.html#cfn-sagemaker-domain-resourcespec-lifecycleconfigarn", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "SageMakerImageArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-resourcespec.html#cfn-sagemaker-domain-resourcespec-sagemakerimagearn", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "SageMakerImageVersionArn": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-resourcespec.html#cfn-sagemaker-domain-resourcespec-sagemakerimageversionarn", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" } } }, @@ -1280,6 +1286,29 @@ } } }, + "AWS::SageMaker::FeatureGroup.DataCatalogConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-datacatalogconfig.html", + "Properties": { + "Catalog": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-datacatalogconfig.html#cfn-sagemaker-featuregroup-datacatalogconfig-catalog", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Database": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-datacatalogconfig.html#cfn-sagemaker-featuregroup-datacatalogconfig-database", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "TableName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-datacatalogconfig.html#cfn-sagemaker-featuregroup-datacatalogconfig-tablename", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, "AWS::SageMaker::FeatureGroup.FeatureDefinition": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-featuredefinition.html", "Properties": { @@ -1297,6 +1326,80 @@ } } }, + "AWS::SageMaker::FeatureGroup.OfflineStoreConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-offlinestoreconfig.html", + "Properties": { + "DataCatalogConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-offlinestoreconfig.html#cfn-sagemaker-featuregroup-offlinestoreconfig-datacatalogconfig", + "Required": false, + "Type": "DataCatalogConfig", + "UpdateType": "Immutable" + }, + "DisableGlueTableCreation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-offlinestoreconfig.html#cfn-sagemaker-featuregroup-offlinestoreconfig-disablegluetablecreation", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + }, + "S3StorageConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-offlinestoreconfig.html#cfn-sagemaker-featuregroup-offlinestoreconfig-s3storageconfig", + "Required": true, + "Type": "S3StorageConfig", + "UpdateType": "Immutable" + }, + "TableFormat": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-offlinestoreconfig.html#cfn-sagemaker-featuregroup-offlinestoreconfig-tableformat", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::SageMaker::FeatureGroup.OnlineStoreConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-onlinestoreconfig.html", + "Properties": { + "EnableOnlineStore": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-onlinestoreconfig.html#cfn-sagemaker-featuregroup-onlinestoreconfig-enableonlinestore", + "PrimitiveType": "Boolean", + "Required": false, + "UpdateType": "Immutable" + }, + "SecurityConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-onlinestoreconfig.html#cfn-sagemaker-featuregroup-onlinestoreconfig-securityconfig", + "Required": false, + "Type": "OnlineStoreSecurityConfig", + "UpdateType": "Immutable" + } + } + }, + "AWS::SageMaker::FeatureGroup.OnlineStoreSecurityConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-onlinestoresecurityconfig.html", + "Properties": { + "KmsKeyId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-onlinestoresecurityconfig.html#cfn-sagemaker-featuregroup-onlinestoresecurityconfig-kmskeyid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::SageMaker::FeatureGroup.S3StorageConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-s3storageconfig.html", + "Properties": { + "KmsKeyId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-s3storageconfig.html#cfn-sagemaker-featuregroup-s3storageconfig-kmskeyid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "S3Uri": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-s3storageconfig.html#cfn-sagemaker-featuregroup-s3storageconfig-s3uri", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, "AWS::SageMaker::Model.ContainerDefinition": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html", "Properties": { @@ -1743,6 +1846,7 @@ }, "MonitoringOutputs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-monitoringoutputconfig.html#cfn-sagemaker-modelbiasjobdefinition-monitoringoutputconfig-monitoringoutputs", + "DuplicatesAllowed": true, "ItemType": "MonitoringOutput", "Required": true, "Type": "List", @@ -1823,6 +1927,7 @@ "Properties": { "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-vpcconfig.html#cfn-sagemaker-modelbiasjobdefinition-vpcconfig-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1830,6 +1935,7 @@ }, "Subnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-vpcconfig.html#cfn-sagemaker-modelbiasjobdefinition-vpcconfig-subnets", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -2102,6 +2208,7 @@ }, "MonitoringOutputs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-monitoringoutputconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-monitoringoutputconfig-monitoringoutputs", + "DuplicatesAllowed": true, "ItemType": "MonitoringOutput", "Required": true, "Type": "List", @@ -2182,6 +2289,7 @@ "Properties": { "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-vpcconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-vpcconfig-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -2189,6 +2297,7 @@ }, "Subnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-vpcconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-vpcconfig-subnets", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -2201,6 +2310,7 @@ "Properties": { "Containers": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html#cfn-sagemaker-modelpackage-additionalinferencespecificationdefinition-containers", + "DuplicatesAllowed": true, "ItemType": "ModelPackageContainerDefinition", "Required": true, "Type": "List", @@ -2220,6 +2330,7 @@ }, "SupportedContentTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html#cfn-sagemaker-modelpackage-additionalinferencespecificationdefinition-supportedcontenttypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2227,6 +2338,7 @@ }, "SupportedRealtimeInferenceInstanceTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html#cfn-sagemaker-modelpackage-additionalinferencespecificationdefinition-supportedrealtimeinferenceinstancetypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2234,6 +2346,7 @@ }, "SupportedResponseMIMETypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html#cfn-sagemaker-modelpackage-additionalinferencespecificationdefinition-supportedresponsemimetypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2241,6 +2354,7 @@ }, "SupportedTransformInstanceTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html#cfn-sagemaker-modelpackage-additionalinferencespecificationdefinition-supportedtransforminstancetypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2385,12 +2499,6 @@ } } }, - "AWS::SageMaker::ModelPackage.Environment": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-environment.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "AWS::SageMaker::ModelPackage.Explainability": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-explainability.html", "Properties": { @@ -2438,6 +2546,7 @@ }, "SupportedContentTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-inferencespecification.html#cfn-sagemaker-modelpackage-inferencespecification-supportedcontenttypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -2445,6 +2554,7 @@ }, "SupportedRealtimeInferenceInstanceTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-inferencespecification.html#cfn-sagemaker-modelpackage-inferencespecification-supportedrealtimeinferenceinstancetypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2452,6 +2562,7 @@ }, "SupportedResponseMIMETypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-inferencespecification.html#cfn-sagemaker-modelpackage-inferencespecification-supportedresponsemimetypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -2459,6 +2570,7 @@ }, "SupportedTransformInstanceTypes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-inferencespecification.html#cfn-sagemaker-modelpackage-inferencespecification-supportedtransforminstancetypes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -2535,6 +2647,17 @@ } } }, + "AWS::SageMaker::ModelPackage.ModelInput": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelinput.html", + "Properties": { + "DataInputConfig": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelinput.html#cfn-sagemaker-modelpackage-modelinput-datainputconfig", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Conditional" + } + } + }, "AWS::SageMaker::ModelPackage.ModelMetrics": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelmetrics.html", "Properties": { @@ -2571,61 +2694,62 @@ "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-containerhostname", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "Environment": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-environment", + "PrimitiveItemType": "String", "Required": false, - "Type": "Environment", - "UpdateType": "Mutable" + "Type": "Map", + "UpdateType": "Conditional" }, "Framework": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-framework", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "FrameworkVersion": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-frameworkversion", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "Image": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-image", "PrimitiveType": "String", "Required": true, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "ImageDigest": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-imagedigest", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "ModelDataUrl": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-modeldataurl", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "ModelInput": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-modelinput", - "PrimitiveType": "Json", "Required": false, - "UpdateType": "Mutable" + "Type": "ModelInput", + "UpdateType": "Conditional" }, "NearestModelName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-nearestmodelname", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" }, "ProductId": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-productid", "PrimitiveType": "String", "Required": false, - "UpdateType": "Mutable" + "UpdateType": "Conditional" } } }, @@ -2634,6 +2758,7 @@ "Properties": { "ImageScanStatuses": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagestatusdetails.html#cfn-sagemaker-modelpackage-modelpackagestatusdetails-imagescanstatuses", + "DuplicatesAllowed": true, "ItemType": "ModelPackageStatusItem", "Required": false, "Type": "List", @@ -2641,6 +2766,7 @@ }, "ValidationStatuses": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagestatusdetails.html#cfn-sagemaker-modelpackage-modelpackagestatusdetails-validationstatuses", + "DuplicatesAllowed": true, "ItemType": "ModelPackageStatusItem", "Required": true, "Type": "List", @@ -2727,6 +2853,7 @@ "Properties": { "SourceAlgorithms": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-sourcealgorithmspecification.html#cfn-sagemaker-modelpackage-sourcealgorithmspecification-sourcealgorithms", + "DuplicatesAllowed": true, "ItemType": "SourceAlgorithm", "Required": true, "Type": "List", @@ -2774,8 +2901,9 @@ }, "Environment": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformjobdefinition.html#cfn-sagemaker-modelpackage-transformjobdefinition-environment", + "PrimitiveItemType": "String", "Required": false, - "Type": "Environment", + "Type": "Map", "UpdateType": "Immutable" }, "MaxConcurrentTransforms": { @@ -2907,6 +3035,7 @@ "Properties": { "ValidationProfiles": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-validationspecification.html#cfn-sagemaker-modelpackage-validationspecification-validationprofiles", + "DuplicatesAllowed": true, "ItemType": "ValidationProfile", "Required": true, "Type": "List", @@ -3134,6 +3263,7 @@ "Properties": { "ContainerArguments": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityappspecification.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityappspecification-containerarguments", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -3141,6 +3271,7 @@ }, "ContainerEntrypoint": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityappspecification.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityappspecification-containerentrypoint", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -3252,6 +3383,7 @@ }, "MonitoringOutputs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-monitoringoutputconfig.html#cfn-sagemaker-modelqualityjobdefinition-monitoringoutputconfig-monitoringoutputs", + "DuplicatesAllowed": true, "ItemType": "MonitoringOutput", "Required": true, "Type": "List", @@ -3332,6 +3464,7 @@ "Properties": { "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-vpcconfig.html#cfn-sagemaker-modelqualityjobdefinition-vpcconfig-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -3339,6 +3472,7 @@ }, "Subnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-vpcconfig.html#cfn-sagemaker-modelqualityjobdefinition-vpcconfig-subnets", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -3517,6 +3651,7 @@ "Properties": { "ContainerArguments": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringappspecification.html#cfn-sagemaker-monitoringschedule-monitoringappspecification-containerarguments", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -3524,6 +3659,7 @@ }, "ContainerEntrypoint": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringappspecification.html#cfn-sagemaker-monitoringschedule-monitoringappspecification-containerentrypoint", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -3643,6 +3779,7 @@ }, "MonitoringInputs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringjobdefinition.html#cfn-sagemaker-monitoringschedule-monitoringjobdefinition-monitoringinputs", + "DuplicatesAllowed": true, "ItemType": "MonitoringInput", "Required": true, "Type": "List", @@ -3702,6 +3839,7 @@ }, "MonitoringOutputs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringoutputconfig.html#cfn-sagemaker-monitoringschedule-monitoringoutputconfig-monitoringoutputs", + "DuplicatesAllowed": true, "ItemType": "MonitoringOutput", "Required": true, "Type": "List", @@ -3833,6 +3971,7 @@ "Properties": { "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-vpcconfig.html#cfn-sagemaker-monitoringschedule-vpcconfig-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -3840,6 +3979,7 @@ }, "Subnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-vpcconfig.html#cfn-sagemaker-monitoringschedule-vpcconfig-subnets", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -3869,6 +4009,128 @@ } } }, + "AWS::SageMaker::Pipeline.ParallelismConfiguration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-parallelismconfiguration.html", + "Properties": { + "MaxParallelExecutionSteps": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-parallelismconfiguration.html#cfn-sagemaker-pipeline-parallelismconfiguration-maxparallelexecutionsteps", + "PrimitiveType": "Integer", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::SageMaker::Pipeline.PipelineDefinition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-pipelinedefinition.html", + "Properties": { + "PipelineDefinitionBody": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-pipelinedefinition.html#cfn-sagemaker-pipeline-pipelinedefinition-pipelinedefinitionbody", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PipelineDefinitionS3Location": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-pipelinedefinition.html#cfn-sagemaker-pipeline-pipelinedefinition-pipelinedefinitions3location", + "Required": false, + "Type": "S3Location", + "UpdateType": "Mutable" + } + } + }, + "AWS::SageMaker::Pipeline.S3Location": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-s3location.html", + "Properties": { + "Bucket": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-s3location.html#cfn-sagemaker-pipeline-s3location-bucket", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "ETag": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-s3location.html#cfn-sagemaker-pipeline-s3location-etag", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "Key": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-s3location.html#cfn-sagemaker-pipeline-s3location-key", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Version": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-s3location.html#cfn-sagemaker-pipeline-s3location-version", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::SageMaker::Project.ProvisioningParameter": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-provisioningparameter.html", + "Properties": { + "Key": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-provisioningparameter.html#cfn-sagemaker-project-provisioningparameter-key", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-provisioningparameter.html#cfn-sagemaker-project-provisioningparameter-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, + "AWS::SageMaker::Project.ServiceCatalogProvisionedProductDetails": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisionedproductdetails.html", + "Properties": { + "ProvisionedProductId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisionedproductdetails.html#cfn-sagemaker-project-servicecatalogprovisionedproductdetails-provisionedproductid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ProvisionedProductStatusMessage": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisionedproductdetails.html#cfn-sagemaker-project-servicecatalogprovisionedproductdetails-provisionedproductstatusmessage", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::SageMaker::Project.ServiceCatalogProvisioningDetails": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisioningdetails.html", + "Properties": { + "PathId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisioningdetails.html#cfn-sagemaker-project-servicecatalogprovisioningdetails-pathid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "ProductId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisioningdetails.html#cfn-sagemaker-project-servicecatalogprovisioningdetails-productid", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "ProvisioningArtifactId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisioningdetails.html#cfn-sagemaker-project-servicecatalogprovisioningdetails-provisioningartifactid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "ProvisioningParameters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisioningdetails.html#cfn-sagemaker-project-servicecatalogprovisioningdetails-provisioningparameters", + "DuplicatesAllowed": true, + "ItemType": "ProvisioningParameter", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + } + } + }, "AWS::SageMaker::UserProfile.CustomImage": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-customimage.html", "Properties": { @@ -4273,6 +4535,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html#cfn-sagemaker-dataqualityjobdefinition-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -4297,6 +4560,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html#cfn-sagemaker-device-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -4333,6 +4597,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html#cfn-sagemaker-devicefleet-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -4528,6 +4793,13 @@ "Type": "List", "UpdateType": "Immutable" }, + "ShadowProductionVariants": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-shadowproductionvariants", + "ItemType": "ProductionVariant", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-tags", "ItemType": "Tag", @@ -4568,14 +4840,14 @@ }, "OfflineStoreConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html#cfn-sagemaker-featuregroup-offlinestoreconfig", - "PrimitiveType": "Json", "Required": false, + "Type": "OfflineStoreConfig", "UpdateType": "Immutable" }, "OnlineStoreConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html#cfn-sagemaker-featuregroup-onlinestoreconfig", - "PrimitiveType": "Json", "Required": false, + "Type": "OnlineStoreConfig", "UpdateType": "Immutable" }, "RecordIdentifierFeatureName": { @@ -4634,6 +4906,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-image.html#cfn-sagemaker-image-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -4805,6 +5078,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html#cfn-sagemaker-modelbiasjobdefinition-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -4885,6 +5159,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html#cfn-sagemaker-modelexplainabilityjobdefinition-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -4914,6 +5189,7 @@ }, "AdditionalInferenceSpecifications": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-additionalinferencespecifications", + "DuplicatesAllowed": true, "ItemType": "AdditionalInferenceSpecificationDefinition", "Required": false, "Type": "List", @@ -4921,6 +5197,7 @@ }, "AdditionalInferenceSpecificationsToAdd": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-additionalinferencespecificationstoadd", + "DuplicatesAllowed": true, "ItemType": "AdditionalInferenceSpecificationDefinition", "Required": false, "Type": "List", @@ -5062,6 +5339,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -5115,6 +5393,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackagegroup.html#cfn-sagemaker-modelpackagegroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -5195,6 +5474,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html#cfn-sagemaker-modelqualityjobdefinition-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -5254,6 +5534,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-monitoringschedule.html#cfn-sagemaker-monitoringschedule-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -5406,14 +5687,14 @@ "Properties": { "ParallelismConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html#cfn-sagemaker-pipeline-parallelismconfiguration", - "PrimitiveType": "Json", "Required": false, + "Type": "ParallelismConfiguration", "UpdateType": "Mutable" }, "PipelineDefinition": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html#cfn-sagemaker-pipeline-pipelinedefinition", - "PrimitiveType": "Json", "Required": true, + "Type": "PipelineDefinition", "UpdateType": "Mutable" }, "PipelineDescription": { @@ -5463,6 +5744,15 @@ }, "ProjectStatus": { "PrimitiveType": "String" + }, + "ServiceCatalogProvisionedProductDetails": { + "Type": "ServiceCatalogProvisionedProductDetails" + }, + "ServiceCatalogProvisionedProductDetails.ProvisionedProductId": { + "PrimitiveType": "String" + }, + "ServiceCatalogProvisionedProductDetails.ProvisionedProductStatusMessage": { + "PrimitiveType": "String" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-project.html", @@ -5481,12 +5771,13 @@ }, "ServiceCatalogProvisioningDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-project.html#cfn-sagemaker-project-servicecatalogprovisioningdetails", - "PrimitiveType": "Json", "Required": true, + "Type": "ServiceCatalogProvisioningDetails", "UpdateType": "Immutable" }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-project.html#cfn-sagemaker-project-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Scheduler.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Scheduler.json index 574c9c054a519..02e6bb64cdf58 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Scheduler.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Scheduler.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Scheduler::Schedule.AwsVpcConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-scheduler-schedule-awsvpcconfiguration.html", @@ -12,6 +12,7 @@ }, "SecurityGroups": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-scheduler-schedule-awsvpcconfiguration.html#cfn-scheduler-schedule-awsvpcconfiguration-securitygroups", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -19,6 +20,7 @@ }, "Subnets": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-scheduler-schedule-awsvpcconfiguration.html#cfn-scheduler-schedule-awsvpcconfiguration-subnets", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -65,6 +67,7 @@ "Properties": { "CapacityProviderStrategy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-scheduler-schedule-ecsparameters.html#cfn-scheduler-schedule-ecsparameters-capacityproviderstrategy", + "DuplicatesAllowed": true, "ItemType": "CapacityProviderStrategyItem", "Required": false, "Type": "List", @@ -102,6 +105,7 @@ }, "PlacementConstraints": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-scheduler-schedule-ecsparameters.html#cfn-scheduler-schedule-ecsparameters-placementconstraints", + "DuplicatesAllowed": true, "ItemType": "PlacementConstraint", "Required": false, "Type": "List", @@ -109,6 +113,7 @@ }, "PlacementStrategy": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-scheduler-schedule-ecsparameters.html#cfn-scheduler-schedule-ecsparameters-placementstrategy", + "DuplicatesAllowed": true, "ItemType": "PlacementStrategy", "Required": false, "Type": "List", @@ -134,9 +139,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-scheduler-schedule-ecsparameters.html#cfn-scheduler-schedule-ecsparameters-tags", - "ItemType": "TagMap", + "PrimitiveType": "Json", "Required": false, - "Type": "List", "UpdateType": "Mutable" }, "TaskCount": { @@ -282,6 +286,7 @@ "Properties": { "PipelineParameterList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-scheduler-schedule-sagemakerpipelineparameters.html#cfn-scheduler-schedule-sagemakerpipelineparameters-pipelineparameterlist", + "DuplicatesAllowed": true, "ItemType": "SageMakerPipelineParameter", "Required": false, "Type": "List", @@ -300,12 +305,6 @@ } } }, - "AWS::Scheduler::Schedule.TagMap": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-scheduler-schedule-tagmap.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "AWS::Scheduler::Schedule.Target": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-scheduler-schedule-target.html", "Properties": { @@ -474,6 +473,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-scheduler-schedulegroup.html#cfn-scheduler-schedulegroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SecretsManager.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SecretsManager.json index 24eb3c88a02c1..792d0309174f7 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SecretsManager.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SecretsManager.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::SecretsManager::RotationSchedule.HostedRotationLambda": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SecurityHub.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SecurityHub.json index cebecaa087718..31eced5e7c203 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SecurityHub.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SecurityHub.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::SecurityHub::Hub": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ServiceCatalog.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ServiceCatalog.json index a7652019383f7..12c10618ac3e0 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ServiceCatalog.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ServiceCatalog.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ServiceCatalog::CloudFormationProduct.ProvisioningArtifactProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-servicecatalog-cloudformationproduct-provisioningartifactproperties.html", @@ -223,6 +223,10 @@ "CloudformationStackArn": { "PrimitiveType": "String" }, + "Outputs": { + "PrimitiveItemType": "String", + "Type": "Map" + }, "ProvisionedProductId": { "PrimitiveType": "String" }, @@ -290,6 +294,7 @@ }, "ProvisioningParameters": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-cloudformationprovisionedproduct.html#cfn-servicecatalog-cloudformationprovisionedproduct-provisioningparameters", + "DuplicatesAllowed": true, "ItemType": "ProvisioningParameter", "Required": false, "Type": "List", @@ -303,6 +308,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-cloudformationprovisionedproduct.html#cfn-servicecatalog-cloudformationprovisionedproduct-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -601,6 +607,7 @@ }, "Definition": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-serviceaction.html#cfn-servicecatalog-serviceaction-definition", + "DuplicatesAllowed": true, "ItemType": "DefinitionParameter", "Required": true, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ServiceCatalogAppRegistry.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ServiceCatalogAppRegistry.json index 14b940f9968ba..62e4d10f12659 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ServiceCatalogAppRegistry.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ServiceCatalogAppRegistry.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::ServiceCatalogAppRegistry::Application": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ServiceDiscovery.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ServiceDiscovery.json index 1b446f1c3fdd0..7365527d7e967 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ServiceDiscovery.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_ServiceDiscovery.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::ServiceDiscovery::PrivateDnsNamespace.PrivateDnsPropertiesMutable": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-servicediscovery-privatednsnamespace-privatednspropertiesmutable.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Signer.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Signer.json index 7b76b7e39579d..0db351eb5a91d 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Signer.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Signer.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Signer::SigningProfile.SignatureValidityPeriod": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-signer-signingprofile-signaturevalidityperiod.html", @@ -86,6 +86,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-signer-signingprofile.html#cfn-signer-signingprofile-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_StepFunctions.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_StepFunctions.json index bb136780577e3..f841c7451b1e2 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_StepFunctions.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_StepFunctions.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::StepFunctions::Activity.TagsEntry": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-activity-tagsentry.html", @@ -29,12 +29,6 @@ } } }, - "AWS::StepFunctions::StateMachine.Definition": { - "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-definition.html", - "PrimitiveType": "Json", - "Required": false, - "UpdateType": "Mutable" - }, "AWS::StepFunctions::StateMachine.LogDestination": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-logdestination.html", "Properties": { @@ -51,6 +45,7 @@ "Properties": { "Destinations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-loggingconfiguration.html#cfn-stepfunctions-statemachine-loggingconfiguration-destinations", + "DuplicatesAllowed": true, "ItemType": "LogDestination", "Required": false, "Type": "List", @@ -163,8 +158,8 @@ "Properties": { "Definition": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definition", + "PrimitiveType": "Json", "Required": false, - "Type": "Definition", "UpdateType": "Mutable" }, "DefinitionS3Location": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SupportApp.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SupportApp.json index adc8ed391845f..394c0409c819a 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SupportApp.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_SupportApp.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": {}, "ResourceTypes": { "AWS::SupportApp::AccountAlias": { diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Synthetics.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Synthetics.json index f7a82a245313d..e45bb710dd381 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Synthetics.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Synthetics.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Synthetics::Canary.ArtifactConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-synthetics-canary-artifactconfig.html", @@ -17,6 +17,7 @@ "Properties": { "IgnoreCoordinates": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-synthetics-canary-basescreenshot.html#cfn-synthetics-canary-basescreenshot-ignorecoordinates", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -134,6 +135,7 @@ "Properties": { "SecurityGroupIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-synthetics-canary-vpcconfig.html#cfn-synthetics-canary-vpcconfig-securitygroupids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -141,6 +143,7 @@ }, "SubnetIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-synthetics-canary-vpcconfig.html#cfn-synthetics-canary-vpcconfig-subnetids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -165,6 +168,7 @@ }, "BaseScreenshots": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-synthetics-canary-visualreference.html#cfn-synthetics-canary-visualreference-basescreenshots", + "DuplicatesAllowed": true, "ItemType": "BaseScreenshot", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Timestream.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Timestream.json index 99cf7d915aaf6..57e76bfce5dca 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Timestream.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Timestream.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Timestream::ScheduledQuery.DimensionMapping": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-scheduledquery-dimensionmapping.html", @@ -46,6 +46,7 @@ }, "MultiMeasureAttributeMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-scheduledquery-mixedmeasuremapping.html#cfn-timestream-scheduledquery-mixedmeasuremapping-multimeasureattributemappings", + "DuplicatesAllowed": true, "ItemType": "MultiMeasureAttributeMapping", "Required": false, "Type": "List", @@ -93,6 +94,7 @@ "Properties": { "MultiMeasureAttributeMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-scheduledquery-multimeasuremappings.html#cfn-timestream-scheduledquery-multimeasuremappings-multimeasureattributemappings", + "DuplicatesAllowed": true, "ItemType": "MultiMeasureAttributeMapping", "Required": true, "Type": "List", @@ -184,6 +186,7 @@ }, "DimensionMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-scheduledquery-timestreamconfiguration.html#cfn-timestream-scheduledquery-timestreamconfiguration-dimensionmappings", + "DuplicatesAllowed": true, "ItemType": "DimensionMapping", "Required": true, "Type": "List", @@ -197,6 +200,7 @@ }, "MixedMeasureMappings": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-scheduledquery-timestreamconfiguration.html#cfn-timestream-scheduledquery-timestreamconfiguration-mixedmeasuremappings", + "DuplicatesAllowed": true, "ItemType": "MixedMeasureMapping", "Required": false, "Type": "List", @@ -221,6 +225,80 @@ "UpdateType": "Immutable" } } + }, + "AWS::Timestream::Table.MagneticStoreRejectedDataLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-magneticstorerejecteddatalocation.html", + "Properties": { + "S3Configuration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-magneticstorerejecteddatalocation.html#cfn-timestream-table-magneticstorerejecteddatalocation-s3configuration", + "Required": false, + "Type": "S3Configuration", + "UpdateType": "Mutable" + } + } + }, + "AWS::Timestream::Table.MagneticStoreWriteProperties": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-magneticstorewriteproperties.html", + "Properties": { + "EnableMagneticStoreWrites": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-magneticstorewriteproperties.html#cfn-timestream-table-magneticstorewriteproperties-enablemagneticstorewrites", + "PrimitiveType": "Boolean", + "Required": true, + "UpdateType": "Mutable" + }, + "MagneticStoreRejectedDataLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-magneticstorewriteproperties.html#cfn-timestream-table-magneticstorewriteproperties-magneticstorerejecteddatalocation", + "Required": false, + "Type": "MagneticStoreRejectedDataLocation", + "UpdateType": "Mutable" + } + } + }, + "AWS::Timestream::Table.RetentionProperties": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-retentionproperties.html", + "Properties": { + "MagneticStoreRetentionPeriodInDays": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-retentionproperties.html#cfn-timestream-table-retentionproperties-magneticstoreretentionperiodindays", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "MemoryStoreRetentionPeriodInHours": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-retentionproperties.html#cfn-timestream-table-retentionproperties-memorystoreretentionperiodinhours", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, + "AWS::Timestream::Table.S3Configuration": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-s3configuration.html", + "Properties": { + "BucketName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-s3configuration.html#cfn-timestream-table-s3configuration-bucketname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "EncryptionOption": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-s3configuration.html#cfn-timestream-table-s3configuration-encryptionoption", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "KmsKeyId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-s3configuration.html#cfn-timestream-table-s3configuration-kmskeyid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ObjectKeyPrefix": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-timestream-table-s3configuration.html#cfn-timestream-table-s3configuration-objectkeyprefix", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } } }, "ResourceTypes": { @@ -246,6 +324,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-timestream-database.html#cfn-timestream-database-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -335,6 +414,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-timestream-scheduledquery.html#cfn-timestream-scheduledquery-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -367,14 +447,14 @@ }, "MagneticStoreWriteProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-timestream-table.html#cfn-timestream-table-magneticstorewriteproperties", - "PrimitiveType": "Json", "Required": false, + "Type": "MagneticStoreWriteProperties", "UpdateType": "Mutable" }, "RetentionProperties": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-timestream-table.html#cfn-timestream-table-retentionproperties", - "PrimitiveType": "Json", "Required": false, + "Type": "RetentionProperties", "UpdateType": "Mutable" }, "TableName": { @@ -385,6 +465,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-timestream-table.html#cfn-timestream-table-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Transfer.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Transfer.json index fd966ed7a9f0e..53f0d97799de8 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Transfer.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Transfer.json @@ -1,6 +1,59 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { + "AWS::Transfer::Connector.As2Config": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-connector-as2config.html", + "Properties": { + "Compression": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-connector-as2config.html#cfn-transfer-connector-as2config-compression", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "EncryptionAlgorithm": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-connector-as2config.html#cfn-transfer-connector-as2config-encryptionalgorithm", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "LocalProfileId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-connector-as2config.html#cfn-transfer-connector-as2config-localprofileid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "MdnResponse": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-connector-as2config.html#cfn-transfer-connector-as2config-mdnresponse", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "MdnSigningAlgorithm": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-connector-as2config.html#cfn-transfer-connector-as2config-mdnsigningalgorithm", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "MessageSubject": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-connector-as2config.html#cfn-transfer-connector-as2config-messagesubject", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "PartnerProfileId": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-connector-as2config.html#cfn-transfer-connector-as2config-partnerprofileid", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "SigningAlgorithm": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-connector-as2config.html#cfn-transfer-connector-as2config-signingalgorithm", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + } + } + }, "AWS::Transfer::Server.As2Transport": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-server-as2transport.html", "PrimitiveType": "String", @@ -193,31 +246,176 @@ "Required": false, "UpdateType": "Mutable" }, + "AWS::Transfer::Workflow.CopyStepDetails": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-copystepdetails.html", + "Properties": { + "DestinationFileLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-copystepdetails.html#cfn-transfer-workflow-copystepdetails-destinationfilelocation", + "Required": false, + "Type": "InputFileLocation", + "UpdateType": "Immutable" + }, + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-copystepdetails.html#cfn-transfer-workflow-copystepdetails-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "OverwriteExisting": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-copystepdetails.html#cfn-transfer-workflow-copystepdetails-overwriteexisting", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "SourceFileLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-copystepdetails.html#cfn-transfer-workflow-copystepdetails-sourcefilelocation", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::Transfer::Workflow.CustomStepDetails": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-customstepdetails.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-customstepdetails.html#cfn-transfer-workflow-customstepdetails-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "SourceFileLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-customstepdetails.html#cfn-transfer-workflow-customstepdetails-sourcefilelocation", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Target": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-customstepdetails.html#cfn-transfer-workflow-customstepdetails-target", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "TimeoutSeconds": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-customstepdetails.html#cfn-transfer-workflow-customstepdetails-timeoutseconds", + "PrimitiveType": "Integer", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::Transfer::Workflow.DeleteStepDetails": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-deletestepdetails.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-deletestepdetails.html#cfn-transfer-workflow-deletestepdetails-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "SourceFileLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-deletestepdetails.html#cfn-transfer-workflow-deletestepdetails-sourcefilelocation", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::Transfer::Workflow.InputFileLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-inputfilelocation.html", + "Properties": { + "S3FileLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-inputfilelocation.html#cfn-transfer-workflow-inputfilelocation-s3filelocation", + "Required": false, + "Type": "S3InputFileLocation", + "UpdateType": "Immutable" + } + } + }, + "AWS::Transfer::Workflow.S3InputFileLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-s3inputfilelocation.html", + "Properties": { + "Bucket": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-s3inputfilelocation.html#cfn-transfer-workflow-s3inputfilelocation-bucket", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Key": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-s3inputfilelocation.html#cfn-transfer-workflow-s3inputfilelocation-key", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + } + } + }, + "AWS::Transfer::Workflow.S3Tag": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-s3tag.html", + "Properties": { + "Key": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-s3tag.html#cfn-transfer-workflow-s3tag-key", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-s3tag.html#cfn-transfer-workflow-s3tag-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Immutable" + } + } + }, + "AWS::Transfer::Workflow.TagStepDetails": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-tagstepdetails.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-tagstepdetails.html#cfn-transfer-workflow-tagstepdetails-name", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "SourceFileLocation": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-tagstepdetails.html#cfn-transfer-workflow-tagstepdetails-sourcefilelocation", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Immutable" + }, + "Tags": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-tagstepdetails.html#cfn-transfer-workflow-tagstepdetails-tags", + "DuplicatesAllowed": false, + "ItemType": "S3Tag", + "Required": false, + "Type": "List", + "UpdateType": "Immutable" + } + } + }, "AWS::Transfer::Workflow.WorkflowStep": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-workflowstep.html", "Properties": { "CopyStepDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-workflowstep.html#cfn-transfer-workflow-workflowstep-copystepdetails", - "PrimitiveType": "Json", "Required": false, + "Type": "CopyStepDetails", "UpdateType": "Immutable" }, "CustomStepDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-workflowstep.html#cfn-transfer-workflow-workflowstep-customstepdetails", - "PrimitiveType": "Json", "Required": false, + "Type": "CustomStepDetails", "UpdateType": "Immutable" }, "DeleteStepDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-workflowstep.html#cfn-transfer-workflow-workflowstep-deletestepdetails", - "PrimitiveType": "Json", "Required": false, + "Type": "DeleteStepDetails", "UpdateType": "Immutable" }, "TagStepDetails": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-transfer-workflow-workflowstep.html#cfn-transfer-workflow-workflowstep-tagstepdetails", - "PrimitiveType": "Json", "Required": false, + "Type": "TagStepDetails", "UpdateType": "Immutable" }, "Type": { @@ -390,8 +588,8 @@ }, "As2Config": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-transfer-connector.html#cfn-transfer-connector-as2config", - "PrimitiveType": "Json", "Required": true, + "Type": "As2Config", "UpdateType": "Mutable" }, "LoggingRole": { @@ -435,6 +633,7 @@ }, "CertificateIds": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-transfer-profile.html#cfn-transfer-profile-certificateids", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_VoiceID.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_VoiceID.json index 719f526a665f4..8827a4bf858ff 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_VoiceID.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_VoiceID.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::VoiceID::Domain.ServerSideEncryptionConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-voiceid-domain-serversideencryptionconfiguration.html", @@ -42,6 +42,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-voiceid-domain.html#cfn-voiceid-domain-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WAF.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WAF.json index e22599e463102..7899b685747ce 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WAF.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WAF.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::WAF::ByteMatchSet.ByteMatchTuple": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waf-bytematchset-bytematchtuples.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WAFRegional.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WAFRegional.json index 8df069d5a9919..524a092c6a3f2 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WAFRegional.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WAFRegional.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::WAFRegional::ByteMatchSet.ByteMatchTuple": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafregional-bytematchset-bytematchtuple.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WAFv2.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WAFv2.json index 0fc0bc743f43e..675726ea94c60 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WAFv2.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WAFv2.json @@ -1,13 +1,41 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { + "AWS::WAFv2::LoggingConfiguration.ActionCondition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-actioncondition.html", + "Properties": { + "Action": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-actioncondition.html#cfn-wafv2-loggingconfiguration-actioncondition-action", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::LoggingConfiguration.Condition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-condition.html", + "Properties": { + "ActionCondition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-condition.html#cfn-wafv2-loggingconfiguration-condition-actioncondition", + "Required": false, + "Type": "ActionCondition", + "UpdateType": "Mutable" + }, + "LabelNameCondition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-condition.html#cfn-wafv2-loggingconfiguration-condition-labelnamecondition", + "Required": false, + "Type": "LabelNameCondition", + "UpdateType": "Mutable" + } + } + }, "AWS::WAFv2::LoggingConfiguration.FieldToMatch": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-fieldtomatch.html", "Properties": { "JsonBody": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-fieldtomatch.html#cfn-wafv2-loggingconfiguration-fieldtomatch-jsonbody", - "PrimitiveType": "Json", "Required": false, + "Type": "JsonBody", "UpdateType": "Mutable" }, "Method": { @@ -24,8 +52,8 @@ }, "SingleHeader": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-fieldtomatch.html#cfn-wafv2-loggingconfiguration-fieldtomatch-singleheader", - "PrimitiveType": "Json", "Required": false, + "Type": "SingleHeader", "UpdateType": "Mutable" }, "UriPath": { @@ -36,11 +64,131 @@ } } }, + "AWS::WAFv2::LoggingConfiguration.Filter": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-filter.html", + "Properties": { + "Behavior": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-filter.html#cfn-wafv2-loggingconfiguration-filter-behavior", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Conditions": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-filter.html#cfn-wafv2-loggingconfiguration-filter-conditions", + "DuplicatesAllowed": true, + "ItemType": "Condition", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + }, + "Requirement": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-filter.html#cfn-wafv2-loggingconfiguration-filter-requirement", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::LoggingConfiguration.JsonBody": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-jsonbody.html", + "Properties": { + "InvalidFallbackBehavior": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-jsonbody.html#cfn-wafv2-loggingconfiguration-jsonbody-invalidfallbackbehavior", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "MatchPattern": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-jsonbody.html#cfn-wafv2-loggingconfiguration-jsonbody-matchpattern", + "Required": true, + "Type": "MatchPattern", + "UpdateType": "Mutable" + }, + "MatchScope": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-jsonbody.html#cfn-wafv2-loggingconfiguration-jsonbody-matchscope", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::LoggingConfiguration.LabelNameCondition": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-labelnamecondition.html", + "Properties": { + "LabelName": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-labelnamecondition.html#cfn-wafv2-loggingconfiguration-labelnamecondition-labelname", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::LoggingConfiguration.LoggingFilter": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-loggingfilter.html", + "Properties": { + "DefaultBehavior": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-loggingfilter.html#cfn-wafv2-loggingconfiguration-loggingfilter-defaultbehavior", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Filters": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-loggingfilter.html#cfn-wafv2-loggingconfiguration-loggingfilter-filters", + "DuplicatesAllowed": true, + "ItemType": "Filter", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::LoggingConfiguration.MatchPattern": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-matchpattern.html", + "Properties": { + "All": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-matchpattern.html#cfn-wafv2-loggingconfiguration-matchpattern-all", + "PrimitiveType": "Json", + "Required": false, + "UpdateType": "Mutable" + }, + "IncludedPaths": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-matchpattern.html#cfn-wafv2-loggingconfiguration-matchpattern-includedpaths", + "DuplicatesAllowed": true, + "PrimitiveItemType": "String", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::LoggingConfiguration.SingleHeader": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-singleheader.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-loggingconfiguration-singleheader.html#cfn-wafv2-loggingconfiguration-singleheader-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::RuleGroup.Allow": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-allow.html", + "Properties": { + "CustomRequestHandling": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-allow.html#cfn-wafv2-rulegroup-allow-customrequesthandling", + "Required": false, + "Type": "CustomRequestHandling", + "UpdateType": "Mutable" + } + } + }, "AWS::WAFv2::RuleGroup.AndStatement": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-andstatement.html", "Properties": { "Statements": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-andstatement.html#cfn-wafv2-rulegroup-andstatement-statements", + "DuplicatesAllowed": true, "ItemType": "Statement", "Required": true, "Type": "List", @@ -48,6 +196,17 @@ } } }, + "AWS::WAFv2::RuleGroup.Block": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-block.html", + "Properties": { + "CustomResponse": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-block.html#cfn-wafv2-rulegroup-block-customresponse", + "Required": false, + "Type": "CustomResponse", + "UpdateType": "Mutable" + } + } + }, "AWS::WAFv2::RuleGroup.Body": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-body.html", "Properties": { @@ -88,6 +247,7 @@ }, "TextTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-bytematchstatement.html#cfn-wafv2-rulegroup-bytematchstatement-texttransformations", + "DuplicatesAllowed": true, "ItemType": "TextTransformation", "Required": true, "Type": "List", @@ -95,6 +255,17 @@ } } }, + "AWS::WAFv2::RuleGroup.Captcha": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-captcha.html", + "Properties": { + "CustomRequestHandling": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-captcha.html#cfn-wafv2-rulegroup-captcha-customrequesthandling", + "Required": false, + "Type": "CustomRequestHandling", + "UpdateType": "Mutable" + } + } + }, "AWS::WAFv2::RuleGroup.CaptchaConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-captchaconfig.html", "Properties": { @@ -117,6 +288,7 @@ }, "ExcludedCookies": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-cookiematchpattern.html#cfn-wafv2-rulegroup-cookiematchpattern-excludedcookies", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -124,6 +296,7 @@ }, "IncludedCookies": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-cookiematchpattern.html#cfn-wafv2-rulegroup-cookiematchpattern-includedcookies", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -154,6 +327,72 @@ } } }, + "AWS::WAFv2::RuleGroup.Count": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-count.html", + "Properties": { + "CustomRequestHandling": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-count.html#cfn-wafv2-rulegroup-count-customrequesthandling", + "Required": false, + "Type": "CustomRequestHandling", + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::RuleGroup.CustomHTTPHeader": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-customhttpheader.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-customhttpheader.html#cfn-wafv2-rulegroup-customhttpheader-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-customhttpheader.html#cfn-wafv2-rulegroup-customhttpheader-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::RuleGroup.CustomRequestHandling": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-customrequesthandling.html", + "Properties": { + "InsertHeaders": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-customrequesthandling.html#cfn-wafv2-rulegroup-customrequesthandling-insertheaders", + "DuplicatesAllowed": true, + "ItemType": "CustomHTTPHeader", + "Required": true, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::RuleGroup.CustomResponse": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-customresponse.html", + "Properties": { + "CustomResponseBodyKey": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-customresponse.html#cfn-wafv2-rulegroup-customresponse-customresponsebodykey", + "PrimitiveType": "String", + "Required": false, + "UpdateType": "Mutable" + }, + "ResponseCode": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-customresponse.html#cfn-wafv2-rulegroup-customresponse-responsecode", + "PrimitiveType": "Integer", + "Required": true, + "UpdateType": "Mutable" + }, + "ResponseHeaders": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-customresponse.html#cfn-wafv2-rulegroup-customresponse-responseheaders", + "DuplicatesAllowed": true, + "ItemType": "CustomHTTPHeader", + "Required": false, + "Type": "List", + "UpdateType": "Mutable" + } + } + }, "AWS::WAFv2::RuleGroup.CustomResponseBody": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-customresponsebody.html", "Properties": { @@ -218,14 +457,14 @@ }, "SingleHeader": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-fieldtomatch.html#cfn-wafv2-rulegroup-fieldtomatch-singleheader", - "PrimitiveType": "Json", "Required": false, + "Type": "SingleHeader", "UpdateType": "Mutable" }, "SingleQueryArgument": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-fieldtomatch.html#cfn-wafv2-rulegroup-fieldtomatch-singlequeryargument", - "PrimitiveType": "Json", "Required": false, + "Type": "SingleQueryArgument", "UpdateType": "Mutable" }, "UriPath": { @@ -258,6 +497,7 @@ "Properties": { "CountryCodes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-geomatchstatement.html#cfn-wafv2-rulegroup-geomatchstatement-countrycodes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -282,6 +522,7 @@ }, "ExcludedHeaders": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-headermatchpattern.html#cfn-wafv2-rulegroup-headermatchpattern-excludedheaders", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -289,6 +530,7 @@ }, "IncludedHeaders": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-headermatchpattern.html#cfn-wafv2-rulegroup-headermatchpattern-includedheaders", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -410,6 +652,7 @@ }, "IncludedPaths": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-jsonmatchpattern.html#cfn-wafv2-rulegroup-jsonmatchpattern-includedpaths", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -472,6 +715,7 @@ "Properties": { "Statements": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-orstatement.html#cfn-wafv2-rulegroup-orstatement-statements", + "DuplicatesAllowed": true, "ItemType": "Statement", "Required": true, "Type": "List", @@ -525,6 +769,7 @@ }, "TextTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-regexmatchstatement.html#cfn-wafv2-rulegroup-regexmatchstatement-texttransformations", + "DuplicatesAllowed": true, "ItemType": "TextTransformation", "Required": true, "Type": "List", @@ -549,6 +794,7 @@ }, "TextTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-regexpatternsetreferencestatement.html#cfn-wafv2-rulegroup-regexpatternsetreferencestatement-texttransformations", + "DuplicatesAllowed": true, "ItemType": "TextTransformation", "Required": true, "Type": "List", @@ -585,6 +831,7 @@ }, "RuleLabels": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-rule.html#cfn-wafv2-rulegroup-rule-rulelabels", + "DuplicatesAllowed": true, "ItemType": "Label", "Required": false, "Type": "List", @@ -609,26 +856,48 @@ "Properties": { "Allow": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-ruleaction.html#cfn-wafv2-rulegroup-ruleaction-allow", - "PrimitiveType": "Json", "Required": false, + "Type": "Allow", "UpdateType": "Mutable" }, "Block": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-ruleaction.html#cfn-wafv2-rulegroup-ruleaction-block", - "PrimitiveType": "Json", "Required": false, + "Type": "Block", "UpdateType": "Mutable" }, "Captcha": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-ruleaction.html#cfn-wafv2-rulegroup-ruleaction-captcha", - "PrimitiveType": "Json", "Required": false, + "Type": "Captcha", "UpdateType": "Mutable" }, "Count": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-ruleaction.html#cfn-wafv2-rulegroup-ruleaction-count", - "PrimitiveType": "Json", "Required": false, + "Type": "Count", + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::RuleGroup.SingleHeader": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-singleheader.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-singleheader.html#cfn-wafv2-rulegroup-singleheader-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::RuleGroup.SingleQueryArgument": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-singlequeryargument.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-singlequeryargument.html#cfn-wafv2-rulegroup-singlequeryargument-name", + "PrimitiveType": "String", + "Required": true, "UpdateType": "Mutable" } } @@ -656,6 +925,7 @@ }, "TextTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-sizeconstraintstatement.html#cfn-wafv2-rulegroup-sizeconstraintstatement-texttransformations", + "DuplicatesAllowed": true, "ItemType": "TextTransformation", "Required": true, "Type": "List", @@ -680,6 +950,7 @@ }, "TextTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-sqlimatchstatement.html#cfn-wafv2-rulegroup-sqlimatchstatement-texttransformations", + "DuplicatesAllowed": true, "ItemType": "TextTransformation", "Required": true, "Type": "List", @@ -821,6 +1092,7 @@ }, "TextTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-rulegroup-xssmatchstatement.html#cfn-wafv2-rulegroup-xssmatchstatement-texttransformations", + "DuplicatesAllowed": true, "ItemType": "TextTransformation", "Required": true, "Type": "List", @@ -844,6 +1116,7 @@ "Properties": { "Statements": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-andstatement.html#cfn-wafv2-webacl-andstatement-statements", + "DuplicatesAllowed": true, "ItemType": "Statement", "Required": true, "Type": "List", @@ -902,6 +1175,7 @@ }, "TextTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-bytematchstatement.html#cfn-wafv2-webacl-bytematchstatement-texttransformations", + "DuplicatesAllowed": true, "ItemType": "TextTransformation", "Required": true, "Type": "List", @@ -942,6 +1216,7 @@ }, "ExcludedCookies": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-cookiematchpattern.html#cfn-wafv2-webacl-cookiematchpattern-excludedcookies", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -949,6 +1224,7 @@ }, "IncludedCookies": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-cookiematchpattern.html#cfn-wafv2-webacl-cookiematchpattern-includedcookies", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1012,6 +1288,7 @@ "Properties": { "InsertHeaders": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-customrequesthandling.html#cfn-wafv2-webacl-customrequesthandling-insertheaders", + "DuplicatesAllowed": true, "ItemType": "CustomHTTPHeader", "Required": true, "Type": "List", @@ -1036,6 +1313,7 @@ }, "ResponseHeaders": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-customresponse.html#cfn-wafv2-webacl-customresponse-responseheaders", + "DuplicatesAllowed": true, "ItemType": "CustomHTTPHeader", "Required": false, "Type": "List", @@ -1146,14 +1424,14 @@ }, "SingleHeader": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-fieldtomatch.html#cfn-wafv2-webacl-fieldtomatch-singleheader", - "PrimitiveType": "Json", "Required": false, + "Type": "SingleHeader", "UpdateType": "Mutable" }, "SingleQueryArgument": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-fieldtomatch.html#cfn-wafv2-webacl-fieldtomatch-singlequeryargument", - "PrimitiveType": "Json", "Required": false, + "Type": "SingleQueryArgument", "UpdateType": "Mutable" }, "UriPath": { @@ -1186,6 +1464,7 @@ "Properties": { "CountryCodes": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-geomatchstatement.html#cfn-wafv2-webacl-geomatchstatement-countrycodes", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1210,6 +1489,7 @@ }, "ExcludedHeaders": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-headermatchpattern.html#cfn-wafv2-webacl-headermatchpattern-excludedheaders", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1217,6 +1497,7 @@ }, "IncludedHeaders": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-headermatchpattern.html#cfn-wafv2-webacl-headermatchpattern-includedheaders", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1338,6 +1619,7 @@ }, "IncludedPaths": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-jsonmatchpattern.html#cfn-wafv2-webacl-jsonmatchpattern-includedpaths", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": false, "Type": "List", @@ -1407,6 +1689,7 @@ "Properties": { "ExcludedRules": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-managedrulegroupstatement.html#cfn-wafv2-webacl-managedrulegroupstatement-excludedrules", + "DuplicatesAllowed": true, "ItemType": "ExcludedRule", "Required": false, "Type": "List", @@ -1414,6 +1697,7 @@ }, "ManagedRuleGroupConfigs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-managedrulegroupstatement.html#cfn-wafv2-webacl-managedrulegroupstatement-managedrulegroupconfigs", + "DuplicatesAllowed": true, "ItemType": "ManagedRuleGroupConfig", "Required": false, "Type": "List", @@ -1461,6 +1745,7 @@ "Properties": { "Statements": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-orstatement.html#cfn-wafv2-webacl-orstatement-statements", + "DuplicatesAllowed": true, "ItemType": "Statement", "Required": true, "Type": "List", @@ -1531,6 +1816,7 @@ }, "TextTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-regexmatchstatement.html#cfn-wafv2-webacl-regexmatchstatement-texttransformations", + "DuplicatesAllowed": true, "ItemType": "TextTransformation", "Required": true, "Type": "List", @@ -1555,6 +1841,7 @@ }, "TextTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-regexpatternsetreferencestatement.html#cfn-wafv2-webacl-regexpatternsetreferencestatement-texttransformations", + "DuplicatesAllowed": true, "ItemType": "TextTransformation", "Required": true, "Type": "List", @@ -1597,6 +1884,7 @@ }, "RuleLabels": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-rule.html#cfn-wafv2-webacl-rule-rulelabels", + "DuplicatesAllowed": true, "ItemType": "Label", "Required": false, "Type": "List", @@ -1656,6 +1944,7 @@ }, "ExcludedRules": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-rulegroupreferencestatement.html#cfn-wafv2-webacl-rulegroupreferencestatement-excludedrules", + "DuplicatesAllowed": true, "ItemType": "ExcludedRule", "Required": false, "Type": "List", @@ -1663,6 +1952,28 @@ } } }, + "AWS::WAFv2::WebACL.SingleHeader": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-singleheader.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-singleheader.html#cfn-wafv2-webacl-singleheader-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, + "AWS::WAFv2::WebACL.SingleQueryArgument": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-singlequeryargument.html", + "Properties": { + "Name": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-singlequeryargument.html#cfn-wafv2-webacl-singlequeryargument-name", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::WAFv2::WebACL.SizeConstraintStatement": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-sizeconstraintstatement.html", "Properties": { @@ -1686,6 +1997,7 @@ }, "TextTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-sizeconstraintstatement.html#cfn-wafv2-webacl-sizeconstraintstatement-texttransformations", + "DuplicatesAllowed": true, "ItemType": "TextTransformation", "Required": true, "Type": "List", @@ -1710,6 +2022,7 @@ }, "TextTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-sqlimatchstatement.html#cfn-wafv2-webacl-sqlimatchstatement-texttransformations", + "DuplicatesAllowed": true, "ItemType": "TextTransformation", "Required": true, "Type": "List", @@ -1863,6 +2176,7 @@ }, "TextTransformations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wafv2-webacl-xssmatchstatement.html#cfn-wafv2-webacl-xssmatchstatement-texttransformations", + "DuplicatesAllowed": true, "ItemType": "TextTransformation", "Required": true, "Type": "List", @@ -1885,6 +2199,7 @@ "Properties": { "Addresses": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-ipset.html#cfn-wafv2-ipset-addresses", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1916,6 +2231,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-ipset.html#cfn-wafv2-ipset-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -1933,6 +2249,7 @@ "Properties": { "LogDestinationConfigs": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-loggingconfiguration.html#cfn-wafv2-loggingconfiguration-logdestinationconfigs", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1940,12 +2257,13 @@ }, "LoggingFilter": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-loggingconfiguration.html#cfn-wafv2-loggingconfiguration-loggingfilter", - "PrimitiveType": "Json", "Required": false, + "Type": "LoggingFilter", "UpdateType": "Mutable" }, "RedactedFields": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-loggingconfiguration.html#cfn-wafv2-loggingconfiguration-redactedfields", + "DuplicatesAllowed": true, "ItemType": "FieldToMatch", "Required": false, "Type": "List", @@ -1984,6 +2302,7 @@ }, "RegularExpressionList": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-regexpatternset.html#cfn-wafv2-regexpatternset-regularexpressionlist", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -1997,6 +2316,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-regexpatternset.html#cfn-wafv2-regexpatternset-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2053,6 +2373,7 @@ }, "Rules": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-rulegroup.html#cfn-wafv2-rulegroup-rules", + "DuplicatesAllowed": true, "ItemType": "Rule", "Required": false, "Type": "List", @@ -2066,6 +2387,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-rulegroup.html#cfn-wafv2-rulegroup-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", @@ -2129,6 +2451,7 @@ }, "Rules": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-webacl.html#cfn-wafv2-webacl-rules", + "DuplicatesAllowed": true, "ItemType": "Rule", "Required": false, "Type": "List", @@ -2142,6 +2465,7 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-webacl.html#cfn-wafv2-webacl-tags", + "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Wisdom.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Wisdom.json index 8fbdfa35a08c0..d05f246604a15 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Wisdom.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_Wisdom.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::Wisdom::Assistant.ServerSideEncryptionConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wisdom-assistant-serversideencryptionconfiguration.html", @@ -34,6 +34,7 @@ }, "ObjectFields": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wisdom-knowledgebase-appintegrationsconfiguration.html#cfn-wisdom-knowledgebase-appintegrationsconfiguration-objectfields", + "DuplicatesAllowed": true, "PrimitiveItemType": "String", "Required": true, "Type": "List", @@ -68,7 +69,7 @@ "Properties": { "AppIntegrations": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-wisdom-knowledgebase-sourceconfiguration.html#cfn-wisdom-knowledgebase-sourceconfiguration-appintegrations", - "Required": false, + "Required": true, "Type": "AppIntegrationsConfiguration", "UpdateType": "Immutable" } diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WorkSpaces.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WorkSpaces.json index 23b3066b4d172..abc24d4ea91b6 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WorkSpaces.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_WorkSpaces.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::WorkSpaces::ConnectionAlias.ConnectionAliasAssociation": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-workspaces-connectionalias-connectionaliasassociation.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_XRay.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_XRay.json index ba00bd2ce9e6b..06c71478d66c5 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_XRay.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_AWS_XRay.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "AWS::XRay::Group.InsightsConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-xray-group-insightsconfiguration.html", @@ -18,6 +18,23 @@ } } }, + "AWS::XRay::Group.TagsItems": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-xray-group-tagsitems.html", + "Properties": { + "Key": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-xray-group-tagsitems.html#cfn-xray-group-tagsitems-key", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-xray-group-tagsitems.html#cfn-xray-group-tagsitems-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } + }, "AWS::XRay::SamplingRule.SamplingRule": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-xray-samplingrule-samplingrule.html", "Properties": { @@ -202,6 +219,23 @@ "UpdateType": "Mutable" } } + }, + "AWS::XRay::SamplingRule.TagsItems": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-xray-samplingrule-tagsitems.html", + "Properties": { + "Key": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-xray-samplingrule-tagsitems.html#cfn-xray-samplingrule-tagsitems-key", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + }, + "Value": { + "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-xray-samplingrule-tagsitems.html#cfn-xray-samplingrule-tagsitems-value", + "PrimitiveType": "String", + "Required": true, + "UpdateType": "Mutable" + } + } } }, "ResourceTypes": { @@ -233,7 +267,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-xray-group.html#cfn-xray-group-tags", - "PrimitiveItemType": "Json", + "DuplicatesAllowed": true, + "ItemType": "TagsItems", "Required": false, "Type": "List", "UpdateType": "Mutable" @@ -297,7 +332,8 @@ }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-xray-samplingrule.html#cfn-xray-samplingrule-tags", - "PrimitiveItemType": "Json", + "DuplicatesAllowed": true, + "ItemType": "TagsItems", "Required": false, "Type": "List", "UpdateType": "Mutable" diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_Alexa_ASK.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_Alexa_ASK.json index df2f958054436..ffd0e7f62250f 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_Alexa_ASK.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_Alexa_ASK.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "Alexa::ASK::Skill.AuthenticationConfiguration": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ask-skill-authenticationconfiguration.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_Tag.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_Tag.json index b9e394e89a4fd..a50f194b00750 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_Tag.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/000_Tag.json @@ -1,5 +1,5 @@ { - "$version": "100.0.0", + "$version": "101.0.0", "PropertyTypes": { "Tag": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html", diff --git a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/001_Version.json b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/001_Version.json index 1f1d775b3631d..8f06f8d54c8d3 100644 --- a/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/001_Version.json +++ b/packages/@aws-cdk/cfnspec/spec-source/specification/000_cfn/000_official/001_Version.json @@ -1,3 +1,3 @@ { - "ResourceSpecificationVersion": "100.0.0" + "ResourceSpecificationVersion": "101.0.0" } diff --git a/packages/@aws-cdk/cloudformation-diff/package.json b/packages/@aws-cdk/cloudformation-diff/package.json index 5642cd42c1b4d..c211a7f0d3a56 100644 --- a/packages/@aws-cdk/cloudformation-diff/package.json +++ b/packages/@aws-cdk/cloudformation-diff/package.json @@ -24,7 +24,7 @@ "license": "Apache-2.0", "dependencies": { "@aws-cdk/cfnspec": "0.0.0", - "@types/node": "^14.18.33", + "@types/node": "^14.18.34", "chalk": "^4", "diff": "^5.1.0", "fast-deep-equal": "^3.1.3", diff --git a/packages/@aws-cdk/cloudformation-include/package.json b/packages/@aws-cdk/cloudformation-include/package.json index 71a9df76ba456..1d672fde3d396 100644 --- a/packages/@aws-cdk/cloudformation-include/package.json +++ b/packages/@aws-cdk/cloudformation-include/package.json @@ -161,6 +161,7 @@ "@aws-cdk/aws-gamelift": "0.0.0", "@aws-cdk/aws-globalaccelerator": "0.0.0", "@aws-cdk/aws-glue": "0.0.0", + "@aws-cdk/aws-grafana": "0.0.0", "@aws-cdk/aws-greengrass": "0.0.0", "@aws-cdk/aws-greengrassv2": "0.0.0", "@aws-cdk/aws-groundstation": "0.0.0", @@ -218,6 +219,7 @@ "@aws-cdk/aws-networkmanager": "0.0.0", "@aws-cdk/aws-nimblestudio": "0.0.0", "@aws-cdk/aws-oam": "0.0.0", + "@aws-cdk/aws-opensearchserverless": "0.0.0", "@aws-cdk/aws-opensearchservice": "0.0.0", "@aws-cdk/aws-opsworks": "0.0.0", "@aws-cdk/aws-opsworkscm": "0.0.0", @@ -226,6 +228,7 @@ "@aws-cdk/aws-personalize": "0.0.0", "@aws-cdk/aws-pinpoint": "0.0.0", "@aws-cdk/aws-pinpointemail": "0.0.0", + "@aws-cdk/aws-pipes": "0.0.0", "@aws-cdk/aws-qldb": "0.0.0", "@aws-cdk/aws-quicksight": "0.0.0", "@aws-cdk/aws-ram": "0.0.0", @@ -369,6 +372,7 @@ "@aws-cdk/aws-gamelift": "0.0.0", "@aws-cdk/aws-globalaccelerator": "0.0.0", "@aws-cdk/aws-glue": "0.0.0", + "@aws-cdk/aws-grafana": "0.0.0", "@aws-cdk/aws-greengrass": "0.0.0", "@aws-cdk/aws-greengrassv2": "0.0.0", "@aws-cdk/aws-groundstation": "0.0.0", @@ -426,6 +430,7 @@ "@aws-cdk/aws-networkmanager": "0.0.0", "@aws-cdk/aws-nimblestudio": "0.0.0", "@aws-cdk/aws-oam": "0.0.0", + "@aws-cdk/aws-opensearchserverless": "0.0.0", "@aws-cdk/aws-opensearchservice": "0.0.0", "@aws-cdk/aws-opsworks": "0.0.0", "@aws-cdk/aws-opsworkscm": "0.0.0", @@ -434,6 +439,7 @@ "@aws-cdk/aws-personalize": "0.0.0", "@aws-cdk/aws-pinpoint": "0.0.0", "@aws-cdk/aws-pinpointemail": "0.0.0", + "@aws-cdk/aws-pipes": "0.0.0", "@aws-cdk/aws-qldb": "0.0.0", "@aws-cdk/aws-quicksight": "0.0.0", "@aws-cdk/aws-ram": "0.0.0", diff --git a/packages/@aws-cdk/core/lib/asset-staging.ts b/packages/@aws-cdk/core/lib/asset-staging.ts index 96b16554a67f1..6831790d50938 100644 --- a/packages/@aws-cdk/core/lib/asset-staging.ts +++ b/packages/@aws-cdk/core/lib/asset-staging.ts @@ -469,6 +469,7 @@ export class AssetStaging extends Construct { entrypoint: options.entrypoint, workingDirectory: options.workingDirectory ?? AssetStaging.BUNDLING_INPUT_DIR, securityOpt: options.securityOpt ?? '', + volumesFrom: options.volumesFrom, }); } } catch (err) { diff --git a/packages/@aws-cdk/core/lib/bundling.ts b/packages/@aws-cdk/core/lib/bundling.ts index c496bf31d8672..a78f5e8a6aca0 100644 --- a/packages/@aws-cdk/core/lib/bundling.ts +++ b/packages/@aws-cdk/core/lib/bundling.ts @@ -43,6 +43,13 @@ export interface BundlingOptions { */ readonly volumes?: DockerVolume[]; + /** + * Where to mount the specified volumes from + * @see https://docs.docker.com/engine/reference/commandline/run/#mount-volumes-from-container---volumes-from + * @default - no containers are specified to mount volumes from + */ + readonly volumesFrom?: string[]; + /** * The environment variables to pass to the Docker container. * @@ -210,6 +217,9 @@ export class BundlingDockerImage { ...options.user ? ['-u', options.user] : [], + ...options.volumesFrom + ? flatten(options.volumesFrom.map(v => ['--volumes-from', v])) + : [], ...flatten(volumes.map(v => ['-v', `${v.hostPath}:${v.containerPath}:${isSeLinux() ? 'z,' : ''}${v.consistency ?? DockerVolumeConsistency.DELEGATED}`])), ...flatten(Object.entries(environment).map(([k, v]) => ['--env', `${k}=${v}`])), ...options.workingDirectory @@ -441,6 +451,13 @@ export interface DockerRunOptions { */ readonly volumes?: DockerVolume[]; + /** + * Where to mount the specified volumes from + * @see https://docs.docker.com/engine/reference/commandline/run/#mount-volumes-from-container---volumes-from + * @default - no containers are specified to mount volumes from + */ + readonly volumesFrom?: string[]; + /** * The environment variables to pass to the container. * diff --git a/packages/@aws-cdk/core/lib/cfn-output.ts b/packages/@aws-cdk/core/lib/cfn-output.ts index a9d935829fb6f..e9b8d654cb81a 100644 --- a/packages/@aws-cdk/core/lib/cfn-output.ts +++ b/packages/@aws-cdk/core/lib/cfn-output.ts @@ -51,6 +51,10 @@ export class CfnOutput extends CfnElement { if (props.value === undefined) { throw new Error(`Missing value for CloudFormation output at path "${this.node.path}"`); + } else if (Array.isArray(props.value)) { + // `props.value` is a string, but because cross-stack exports allow passing any, + // we need to check for lists here. + throw new Error(`CloudFormation output was given a string list instead of a string at path "${this.node.path}"`); } this._description = props.description; diff --git a/packages/@aws-cdk/core/lib/cfn-parameter.ts b/packages/@aws-cdk/core/lib/cfn-parameter.ts index 18182f5ef7de2..3b250415f2df7 100644 --- a/packages/@aws-cdk/core/lib/cfn-parameter.ts +++ b/packages/@aws-cdk/core/lib/cfn-parameter.ts @@ -3,6 +3,7 @@ import { CfnElement } from './cfn-element'; import { CfnReference } from './private/cfn-reference'; import { IResolvable, IResolveContext } from './resolvable'; import { Token } from './token'; +import { ResolutionTypeHint } from './type-hints'; export interface CfnParameterProps { /** @@ -108,6 +109,7 @@ export class CfnParameter extends CfnElement { private _minLength?: number; private _minValue?: number; private _noEcho?: boolean; + private typeHint: ResolutionTypeHint; /** * Creates a parameter construct. @@ -131,6 +133,7 @@ export class CfnParameter extends CfnElement { this._minLength = props.minLength; this._minValue = props.minValue; this._noEcho = props.noEcho; + this.typeHint = typeToTypeHint(this._type); } /** @@ -144,6 +147,7 @@ export class CfnParameter extends CfnElement { public set type(type: string) { this._type = type; + this.typeHint = typeToTypeHint(this._type); } /** @@ -282,7 +286,7 @@ export class CfnParameter extends CfnElement { * The parameter value as a Token */ public get value(): IResolvable { - return CfnReference.for(this, 'Ref'); + return CfnReference.for(this, 'Ref', undefined, this.typeHint); } /** @@ -363,3 +367,13 @@ function isNumberType(type: string) { function isStringType(type: string) { return !isListType(type) && !isNumberType(type); } + +function typeToTypeHint(type: string): ResolutionTypeHint { + if (isListType(type)) { + return ResolutionTypeHint.STRING_LIST; + } else if (isNumberType(type)) { + return ResolutionTypeHint.NUMBER; + } + + return ResolutionTypeHint.STRING; +} diff --git a/packages/@aws-cdk/core/lib/cfn-resource.ts b/packages/@aws-cdk/core/lib/cfn-resource.ts index 9777268a7b328..ebd6e0825fdb8 100644 --- a/packages/@aws-cdk/core/lib/cfn-resource.ts +++ b/packages/@aws-cdk/core/lib/cfn-resource.ts @@ -15,6 +15,7 @@ import { TagManager } from './tag-manager'; import { Tokenization } from './token'; import { capitalizePropertyNames, ignoreEmpty, PostResolveToken } from './util'; import { FeatureFlags } from './feature-flags'; +import { ResolutionTypeHint } from './type-hints'; export interface CfnResourceProps { /** @@ -172,8 +173,8 @@ export class CfnResource extends CfnRefElement { * in case there is no generated attribute. * @param attributeName The name of the attribute. */ - public getAtt(attributeName: string): Reference { - return CfnReference.for(this, attributeName); + public getAtt(attributeName: string, typeHint?: ResolutionTypeHint): Reference { + return CfnReference.for(this, attributeName, undefined, typeHint); } /** diff --git a/packages/@aws-cdk/core/lib/index.ts b/packages/@aws-cdk/core/lib/index.ts index c3720c49b8a82..378017a1fdefb 100644 --- a/packages/@aws-cdk/core/lib/index.ts +++ b/packages/@aws-cdk/core/lib/index.ts @@ -3,6 +3,7 @@ export * from './tag-aspect'; export * from './token'; export * from './resolvable'; +export * from './type-hints'; export * from './lazy'; export * from './tag-manager'; export * from './string-fragments'; diff --git a/packages/@aws-cdk/core/lib/private/cfn-reference.ts b/packages/@aws-cdk/core/lib/private/cfn-reference.ts index ac91c60b1c107..fb331514ee191 100644 --- a/packages/@aws-cdk/core/lib/private/cfn-reference.ts +++ b/packages/@aws-cdk/core/lib/private/cfn-reference.ts @@ -54,7 +54,7 @@ export class CfnReference extends Reference { * Lazy.string({ produce: () => new CfnReference(...) }) * */ - public static for(target: CfnElement, attribute: string, refRender?: ReferenceRendering) { + public static for(target: CfnElement, attribute: string, refRender?: ReferenceRendering, typeHint?: ResolutionTypeHint) { return CfnReference.singletonReference(target, attribute, refRender, () => { const cfnIntrinsic = refRender === ReferenceRendering.FN_SUB ? ('${' + target.logicalId + (attribute === 'Ref' ? '' : `.${attribute}`) + '}') @@ -66,7 +66,7 @@ export class CfnReference extends Reference { : [target.logicalId, attribute], } ); - return new CfnReference(cfnIntrinsic, attribute, target); + return new CfnReference(cfnIntrinsic, attribute, target, typeHint); }); } @@ -118,9 +118,9 @@ export class CfnReference extends Reference { private readonly replacementTokens: Map; private readonly targetStack: Stack; - protected constructor(value: any, displayName: string, public readonly target: IConstruct) { + protected constructor(value: any, displayName: string, public readonly target: IConstruct, typeHint?: ResolutionTypeHint) { // prepend scope path to display name - super(value, target, displayName); + super(value, target, displayName, typeHint); this.replacementTokens = new Map(); this.targetStack = Stack.of(target); @@ -180,3 +180,4 @@ import { CfnElement } from '../cfn-element'; import { IResolvable, IResolveContext } from '../resolvable'; import { Stack } from '../stack'; import { Token } from '../token'; +import { ResolutionTypeHint } from '../type-hints'; diff --git a/packages/@aws-cdk/core/lib/private/cloudformation-lang.ts b/packages/@aws-cdk/core/lib/private/cloudformation-lang.ts index 82d2809255806..c66be435ee4f4 100644 --- a/packages/@aws-cdk/core/lib/private/cloudformation-lang.ts +++ b/packages/@aws-cdk/core/lib/private/cloudformation-lang.ts @@ -2,8 +2,9 @@ import { Lazy } from '../lazy'; import { DefaultTokenResolver, IFragmentConcatenator, IResolveContext } from '../resolvable'; import { Stack } from '../stack'; import { Token } from '../token'; +import { ResolutionTypeHint } from '../type-hints'; import { CfnUtils } from './cfn-utils-provider'; -import { INTRINSIC_KEY_PREFIX, ResolutionTypeHint, resolvedTypeHint } from './resolve'; +import { INTRINSIC_KEY_PREFIX, resolvedTypeHint } from './resolve'; /** * Routines that know how to do operations at the CloudFormation document language level @@ -216,7 +217,7 @@ function tokenAwareStringify(root: any, space: number, ctx: IResolveContext) { pushLiteral('"'); return; - case ResolutionTypeHint.LIST: + case ResolutionTypeHint.STRING_LIST: // We need this to look like: // // '{"listValue":' ++ STRINGIFY(CFN_EVAL({ Ref: MyList })) ++ '}' diff --git a/packages/@aws-cdk/core/lib/private/intrinsic.ts b/packages/@aws-cdk/core/lib/private/intrinsic.ts index 8a15e38806134..c6c8892b2c934 100644 --- a/packages/@aws-cdk/core/lib/private/intrinsic.ts +++ b/packages/@aws-cdk/core/lib/private/intrinsic.ts @@ -1,6 +1,7 @@ import { IResolvable, IResolveContext } from '../resolvable'; import { captureStackTrace } from '../stack-trace'; import { Token } from '../token'; +import { ResolutionTypeHint } from '../type-hints'; /** * Customization properties for an Intrinsic token @@ -13,6 +14,14 @@ export interface IntrinsicProps { * @default true */ readonly stackTrace?: boolean; + + /** + * + * Type that this token is expected to evaluate to + * + * @default ResolutionTypeHint.STRING + */ + readonly typeHint?: ResolutionTypeHint; } /** @@ -30,6 +39,11 @@ export class Intrinsic implements IResolvable { */ public readonly creationStack: string[]; + /** + * Type that the Intrinsic is expected to evaluate to. + */ + public readonly typeHint?: ResolutionTypeHint; + private readonly value: any; constructor(value: any, options: IntrinsicProps = {}) { @@ -39,6 +53,7 @@ export class Intrinsic implements IResolvable { this.creationStack = options.stackTrace ?? true ? captureStackTrace() : []; this.value = value; + this.typeHint = options.typeHint ?? ResolutionTypeHint.STRING; } public resolve(_context: IResolveContext) { diff --git a/packages/@aws-cdk/core/lib/private/refs.ts b/packages/@aws-cdk/core/lib/private/refs.ts index 7569907e62d87..cb208a5d47a3d 100644 --- a/packages/@aws-cdk/core/lib/private/refs.ts +++ b/packages/@aws-cdk/core/lib/private/refs.ts @@ -13,6 +13,7 @@ import { Reference } from '../reference'; import { IResolvable } from '../resolvable'; import { Stack } from '../stack'; import { Token, Tokenization } from '../token'; +import { ResolutionTypeHint } from '../type-hints'; import { CfnReference } from './cfn-reference'; import { Intrinsic } from './intrinsic'; import { findTokens } from './resolve'; @@ -192,9 +193,15 @@ function findAllReferences(root: IConstruct) { */ function createImportValue(reference: Reference): Intrinsic { const exportingStack = Stack.of(reference.target); + let importExpr; - const importExpr = exportingStack.exportValue(reference); + if (reference.typeHint === ResolutionTypeHint.STRING_LIST) { + importExpr = exportingStack.exportStringListValue(reference); + // I happen to know this returns a Fn.split() which implements Intrinsic. + return Tokenization.reverseList(importExpr) as Intrinsic; + } + importExpr = exportingStack.exportValue(reference); // I happen to know this returns a Fn.importValue() which implements Intrinsic. return Tokenization.reverseCompleteString(importExpr) as Intrinsic; } diff --git a/packages/@aws-cdk/core/lib/private/resolve.ts b/packages/@aws-cdk/core/lib/private/resolve.ts index 08c2e48fea811..eb91d529dbb9c 100644 --- a/packages/@aws-cdk/core/lib/private/resolve.ts +++ b/packages/@aws-cdk/core/lib/private/resolve.ts @@ -1,6 +1,7 @@ import { IConstruct } from 'constructs'; import { DefaultTokenResolver, IPostProcessor, IResolvable, IResolveContext, ITokenResolver, ResolveChangeContextOptions, StringConcat } from '../resolvable'; import { TokenizedStringFragments } from '../string-fragments'; +import { ResolutionTypeHint } from '../type-hints'; import { containsListTokenElement, TokenString, unresolved } from './encoding'; import { TokenMap } from './token-map'; @@ -28,15 +29,6 @@ const RESOLUTION_TYPEHINT_SYM = Symbol.for('@aws-cdk/core.resolvedTypeHint'); */ export const INTRINSIC_KEY_PREFIX = '$IntrinsicKey$'; -/** - * Type hints for resolved values - */ -export enum ResolutionTypeHint { - STRING = 'string', - NUMBER = 'number', - LIST = 'list', -} - /** * Options to the resolve() operation * @@ -190,7 +182,7 @@ export function resolve(obj: any, options: IResolveOptions): any { if (Array.isArray(obj)) { if (containsListTokenElement(obj)) { - return tagResolvedValue(options.resolver.resolveList(obj, makeContext()[0]), ResolutionTypeHint.LIST); + return tagResolvedValue(options.resolver.resolveList(obj, makeContext()[0]), ResolutionTypeHint.STRING_LIST); } const arr = obj diff --git a/packages/@aws-cdk/core/lib/reference.ts b/packages/@aws-cdk/core/lib/reference.ts index ae72c3fed9d82..d19fc696ac5c4 100644 --- a/packages/@aws-cdk/core/lib/reference.ts +++ b/packages/@aws-cdk/core/lib/reference.ts @@ -1,5 +1,6 @@ import { IConstruct } from 'constructs'; import { Intrinsic } from './private/intrinsic'; +import { ResolutionTypeHint } from './type-hints'; const REFERENCE_SYMBOL = Symbol.for('@aws-cdk/core.Reference'); @@ -19,8 +20,8 @@ export abstract class Reference extends Intrinsic { public readonly target: IConstruct; public readonly displayName: string; - constructor(value: any, target: IConstruct, displayName?: string) { - super(value); + constructor(value: any, target: IConstruct, displayName?: string, typeHint?: ResolutionTypeHint) { + super(value, { typeHint }); Object.defineProperty(this, REFERENCE_SYMBOL, { value: true }); this.target = target; this.displayName = displayName || 'Reference'; diff --git a/packages/@aws-cdk/core/lib/resolvable.ts b/packages/@aws-cdk/core/lib/resolvable.ts index 466683a3169df..92630d818eee2 100644 --- a/packages/@aws-cdk/core/lib/resolvable.ts +++ b/packages/@aws-cdk/core/lib/resolvable.ts @@ -2,6 +2,7 @@ import { IConstruct } from 'constructs'; import { TokenString } from './private/encoding'; import { TokenMap } from './private/token-map'; import { TokenizedStringFragments } from './string-fragments'; +import { ResolutionTypeHint } from './type-hints'; /** * Current resolution context for tokens @@ -60,6 +61,11 @@ export interface IResolvable { */ readonly creationStack: string[]; + /** + * The type that this token will likely resolve to. + */ + readonly typeHint?: ResolutionTypeHint; + /** * Produce the Token's value at resolution time */ diff --git a/packages/@aws-cdk/core/lib/stack.ts b/packages/@aws-cdk/core/lib/stack.ts index 1e4cc5b7f0d5c..e1e71d06ebdf3 100644 --- a/packages/@aws-cdk/core/lib/stack.ts +++ b/packages/@aws-cdk/core/lib/stack.ts @@ -31,6 +31,7 @@ const VALID_STACK_NAME_REGEX = /^[A-Za-z][A-Za-z0-9-]*$/; const MAX_RESOURCES = 500; +const STRING_LIST_REFERENCE_DELIMITER = '||'; export interface StackProps { /** * A description of the stack. @@ -970,7 +971,7 @@ export class Stack extends Construct implements ITaggable { /** - * Create a CloudFormation Export for a value + * Create a CloudFormation Export for a string value * * Returns a string representing the corresponding `Fn.importValue()` * expression for this Export. You can control the name for the export by @@ -1015,7 +1016,7 @@ export class Stack extends Construct implements ITaggable { * - Don't forget to remove the `exportValue()` call as well. * - Deploy again (this time only the `producerStack` will be changed -- the bucket will be deleted). */ - public exportValue(exportedValue: any, options: ExportValueOptions = {}) { + public exportValue(exportedValue: any, options: ExportValueOptions = {}): string { if (options.name) { new CfnOutput(this, `Export${options.name}`, { value: exportedValue, @@ -1024,36 +1025,77 @@ export class Stack extends Construct implements ITaggable { return Fn.importValue(options.name); } - const resolvable = Tokenization.reverse(exportedValue); - if (!resolvable || !Reference.isReference(resolvable)) { - throw new Error('exportValue: either supply \'name\' or make sure to export a resource attribute (like \'bucket.bucketName\')'); + const { exportName, exportsScope, id, exportable } = this.resolveExportedValue(exportedValue); + + const output = exportsScope.node.tryFindChild(id) as CfnOutput; + if (!output) { + new CfnOutput(exportsScope, id, { + value: Token.asString(exportable), + exportName, + }); } - // "teleport" the value here, in case it comes from a nested stack. This will also - // ensure the value is from our own scope. - const exportable = getExportable(this, resolvable); + const importValue = Fn.importValue(exportName); - // Ensure a singleton "Exports" scoping Construct - // This mostly exists to trigger LogicalID munging, which would be - // disabled if we parented constructs directly under Stack. - // Also it nicely prevents likely construct name clashes - const exportsScope = getCreateExportsScope(this); + if (Array.isArray(importValue)) { + throw new Error('Attempted to export a list value from `exportValue()`: use `exportStringListValue()` instead'); + } - // Ensure a singleton CfnOutput for this value - const resolved = this.resolve(exportable); - const id = 'Output' + JSON.stringify(resolved); - const exportName = generateExportName(exportsScope, id); + return importValue; + } - if (Token.isUnresolved(exportName)) { - throw new Error(`unresolved token in generated export name: ${JSON.stringify(this.resolve(exportName))}`); + /** + * Create a CloudFormation Export for a string list value + * + * Returns a string list representing the corresponding `Fn.importValue()` + * expression for this Export. The export expression is automatically wrapped with an + * `Fn::Join` and the import value with an `Fn::Split`, since CloudFormation can only + * export strings. You can control the name for the export by passing the `name` option. + * + * If you don't supply a value for `name`, the value you're exporting must be + * a Resource attribute (for example: `bucket.bucketName`) and it will be + * given the same name as the automatic cross-stack reference that would be created + * if you used the attribute in another Stack. + * + * One of the uses for this method is to *remove* the relationship between + * two Stacks established by automatic cross-stack references. It will + * temporarily ensure that the CloudFormation Export still exists while you + * remove the reference from the consuming stack. After that, you can remove + * the resource and the manual export. + * + * # See `exportValue` for an example of this process. + */ + public exportStringListValue(exportedValue: any, options: ExportValueOptions = {}): string[] { + if (options.name) { + new CfnOutput(this, `Export${options.name}`, { + value: Fn.join(STRING_LIST_REFERENCE_DELIMITER, exportedValue), + exportName: options.name, + }); + return Fn.split(STRING_LIST_REFERENCE_DELIMITER, Fn.importValue(options.name)); } + const { exportName, exportsScope, id, exportable } = this.resolveExportedValue(exportedValue); + const output = exportsScope.node.tryFindChild(id) as CfnOutput; if (!output) { - new CfnOutput(exportsScope, id, { value: Token.asString(exportable), exportName }); + new CfnOutput(exportsScope, id, { + // this is a list so export an Fn::Join expression + // and import an Fn::Split expression, + // since CloudFormation Outputs can only be strings + // (string lists are invalid) + value: Fn.join(STRING_LIST_REFERENCE_DELIMITER, Token.asList(exportable)), + exportName, + }); } - return Fn.importValue(exportName); + // we don't use `Fn.importListValue()` since this array is a CFN attribute, and we don't know how long this attribute is + const importValue = Fn.split(STRING_LIST_REFERENCE_DELIMITER, Fn.importValue(exportName)); + + if (!Array.isArray(importValue)) { + throw new Error('Attempted to export a string value from `exportStringListValue()`: use `exportValue()` instead'); + } + + return importValue; } /** @@ -1281,6 +1323,39 @@ export class Stack extends Construct implements ITaggable { return makeStackName(ids); } + private resolveExportedValue(exportedValue: any): ResolvedExport { + const resolvable = Tokenization.reverse(exportedValue); + if (!resolvable || !Reference.isReference(resolvable)) { + throw new Error('exportValue: either supply \'name\' or make sure to export a resource attribute (like \'bucket.bucketName\')'); + } + + // "teleport" the value here, in case it comes from a nested stack. This will also + // ensure the value is from our own scope. + const exportable = getExportable(this, resolvable); + + // Ensure a singleton "Exports" scoping Construct + // This mostly exists to trigger LogicalID munging, which would be + // disabled if we parented constructs directly under Stack. + // Also it nicely prevents likely construct name clashes + const exportsScope = getCreateExportsScope(this); + + // Ensure a singleton CfnOutput for this value + const resolved = this.resolve(exportable); + const id = 'Output' + JSON.stringify(resolved); + const exportName = generateExportName(exportsScope, id); + + if (Token.isUnresolved(exportName)) { + throw new Error(`unresolved token in generated export name: ${JSON.stringify(this.resolve(exportName))}`); + } + + return { + exportable, + exportsScope, + id, + exportName, + }; + } + /** * Indicates whether the stack requires bundling or not */ @@ -1467,6 +1542,12 @@ interface StackDependency { reasons: string[]; } +interface ResolvedExport { + exportable: Reference; + exportsScope: Construct; + id: string; + exportName: string; +} /** * Options for the `stack.exportValue()` method diff --git a/packages/@aws-cdk/core/lib/type-hints.ts b/packages/@aws-cdk/core/lib/type-hints.ts new file mode 100644 index 0000000000000..32d4e2ab3d61b --- /dev/null +++ b/packages/@aws-cdk/core/lib/type-hints.ts @@ -0,0 +1,17 @@ +/** + * Type hints for resolved values + */ +export enum ResolutionTypeHint { + /** + * This value is expected to resolve to a String + */ + STRING = 'string', + /** + * This value is expected to resolve to a Number + */ + NUMBER = 'number', + /** + * This value is expected to resolve to a String List + */ + STRING_LIST = 'string-list', +} diff --git a/packages/@aws-cdk/core/package.json b/packages/@aws-cdk/core/package.json index 615832a07ca3e..e8b28fdd5850c 100644 --- a/packages/@aws-cdk/core/package.json +++ b/packages/@aws-cdk/core/package.json @@ -184,13 +184,13 @@ "@aws-cdk/cdk-build-tools": "0.0.0", "@aws-cdk/cfn2ts": "0.0.0", "@aws-cdk/pkglint": "0.0.0", - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/fs-extra": "^8.1.2", "@types/jest": "^27.5.2", - "@types/lodash": "^4.14.189", + "@types/lodash": "^4.14.191", "@types/minimatch": "^3.0.5", "aws-sdk": "^2.928.0", - "@types/node": "^14.18.33", + "@types/node": "^14.18.34", "@types/sinon": "^9.0.11", "fast-check": "^2.25.0", "jest": "^27.5.1", @@ -205,7 +205,7 @@ "@balena/dockerignore": "^1.0.2", "constructs": "^10.0.0", "fs-extra": "^9.1.0", - "ignore": "^5.2.0", + "ignore": "^5.2.1", "minimatch": "^3.1.2" }, "bundledDependencies": [ diff --git a/packages/@aws-cdk/core/test/bundling.test.ts b/packages/@aws-cdk/core/test/bundling.test.ts index 49f26d8dab7b2..3879d0b27fc41 100644 --- a/packages/@aws-cdk/core/test/bundling.test.ts +++ b/packages/@aws-cdk/core/test/bundling.test.ts @@ -438,6 +438,44 @@ describe('bundling', () => { ], { stdio: ['ignore', process.stderr, 'inherit'] })).toEqual(true); }); + test('adding user provided docker volume options', () => { + // GIVEN + sinon.stub(process, 'platform').value('darwin'); + const spawnSyncStub = sinon.stub(child_process, 'spawnSync').returns({ + status: 1, + stderr: Buffer.from('stderr'), + stdout: Buffer.from('stdout'), + pid: 123, + output: ['stdout', 'stderr'], + signal: null, + }); + const image = DockerImage.fromRegistry('alpine'); + + try { + image.run({ + command: ['cool', 'command'], + volumesFrom: ['foo', 'bar'], + volumes: [{ hostPath: '/host-path', containerPath: '/container-path' }], + workingDirectory: '/working-directory', + user: 'user:group', + }); + } catch (e) { + // We expect this to fail as the test environment will not have the required docker setup for the command to exit successfully + // nevertheless what we want to check here is that the command was built correctly and triggered + }; + + expect(spawnSyncStub.calledWith('docker', [ + 'run', '--rm', + '-u', 'user:group', + '--volumes-from', 'foo', + '--volumes-from', 'bar', + '-v', '/host-path:/container-path:delegated', + '-w', '/working-directory', + 'alpine', + 'cool', 'command', + ], { stdio: ['ignore', process.stderr, 'inherit'] })).toEqual(true); + }); + test('ensure selinux docker mount', () => { // GIVEN sinon.stub(process, 'platform').value('linux'); diff --git a/packages/@aws-cdk/core/test/output.test.ts b/packages/@aws-cdk/core/test/output.test.ts index 32616e6b432de..8d28024a510a1 100644 --- a/packages/@aws-cdk/core/test/output.test.ts +++ b/packages/@aws-cdk/core/test/output.test.ts @@ -104,6 +104,13 @@ describe('output', () => { }).toThrow(/Add an exportName to the CfnOutput/); }); + test('throw if Output is passed a string list', () => { + // WHEN + expect(() => { + new CfnOutput(stack, 'SomeOutput', { value: ['listValue'] as any }); + }).toThrow(/CloudFormation output was given a string list instead of a string/); + }); + test('Verify maximum length of export name', () => { const output = new CfnOutput(stack, 'SomeOutput', { value: 'x', exportName: 'x'.repeat(260) }); const errors = output.node.validate(); diff --git a/packages/@aws-cdk/core/test/stack.test.ts b/packages/@aws-cdk/core/test/stack.test.ts index 5cb56c989ec21..8a7da057a9def 100644 --- a/packages/@aws-cdk/core/test/stack.test.ts +++ b/packages/@aws-cdk/core/test/stack.test.ts @@ -7,7 +7,7 @@ import { CfnResource, Lazy, ScopedAws, Stack, validateString, Tags, LegacyStackSynthesizer, DefaultStackSynthesizer, NestedStack, - Aws, + Aws, Fn, ResolutionTypeHint, PermissionsBoundary, PERMISSIONS_BOUNDARY_CONTEXT_KEY, Aspects, @@ -466,6 +466,190 @@ describe('stack', () => { }); }); + test('cross-stack references of lists returned from Fn::GetAtt work', () => { + // GIVEN + const app = new App(); + const stack1 = new Stack(app, 'Stack1'); + const exportResource = new CfnResource(stack1, 'exportedResource', { + type: 'BLA', + }); + const stack2 = new Stack(app, 'Stack2'); + // L1s represent attribute names with `attr${attributeName}` + (exportResource as any).attrList = ['magic-attr-value']; + + // WHEN - used in another stack + new CfnResource(stack2, 'SomeResource', { + type: 'BLA', + properties: { + Prop: exportResource.getAtt('List', ResolutionTypeHint.STRING_LIST), + }, + }); + + const assembly = app.synth(); + const template1 = assembly.getStackByName(stack1.stackName).template; + const template2 = assembly.getStackByName(stack2.stackName).template; + + // THEN + expect(template1).toMatchObject({ + Outputs: { + ExportsOutputFnGetAttexportedResourceList0EA3E0D9: { + Value: { + 'Fn::Join': [ + '||', { + 'Fn::GetAtt': [ + 'exportedResource', + 'List', + ], + }, + ], + }, + Export: { Name: 'Stack1:ExportsOutputFnGetAttexportedResourceList0EA3E0D9' }, + }, + }, + }); + + expect(template2).toMatchObject({ + Resources: { + SomeResource: { + Type: 'BLA', + Properties: { + Prop: { + 'Fn::Split': [ + '||', + { + 'Fn::ImportValue': 'Stack1:ExportsOutputFnGetAttexportedResourceList0EA3E0D9', + }, + ], + }, + }, + }, + }, + }); + }); + + test('cross-stack references of lists returned from Fn::GetAtt can be used with CFN intrinsics', () => { + // GIVEN + const app = new App(); + const stack1 = new Stack(app, 'Stack1'); + const exportResource = new CfnResource(stack1, 'exportedResource', { + type: 'BLA', + }); + const stack2 = new Stack(app, 'Stack2'); + // L1s represent attribute names with `attr${attributeName}` + (exportResource as any).attrList = ['magic-attr-value']; + + // WHEN - used in another stack + new CfnResource(stack2, 'SomeResource', { + type: 'BLA', + properties: { + Prop: Fn.select(3, exportResource.getAtt('List', ResolutionTypeHint.STRING_LIST) as any), + }, + }); + + const assembly = app.synth(); + const template1 = assembly.getStackByName(stack1.stackName).template; + const template2 = assembly.getStackByName(stack2.stackName).template; + + // THEN + expect(template1).toMatchObject({ + Outputs: { + ExportsOutputFnGetAttexportedResourceList0EA3E0D9: { + Value: { + 'Fn::Join': [ + '||', { + 'Fn::GetAtt': [ + 'exportedResource', + 'List', + ], + }, + ], + }, + Export: { Name: 'Stack1:ExportsOutputFnGetAttexportedResourceList0EA3E0D9' }, + }, + }, + }); + + expect(template2).toMatchObject({ + Resources: { + SomeResource: { + Type: 'BLA', + Properties: { + Prop: { + 'Fn::Select': [ + 3, + { + 'Fn::Split': [ + '||', + { + 'Fn::ImportValue': 'Stack1:ExportsOutputFnGetAttexportedResourceList0EA3E0D9', + }, + ], + }, + ], + }, + }, + }, + }, + }); + }); + + test('cross-stack references of lists returned from Fn::Ref work', () => { + // GIVEN + const app = new App(); + const stack1 = new Stack(app, 'Stack1'); + const param = new CfnParameter(stack1, 'magicParameter', { + default: 'BLAT,BLAH', + type: 'List', + }); + const stack2 = new Stack(app, 'Stack2'); + + // WHEN - used in another stack + new CfnResource(stack2, 'SomeResource', { + type: 'BLA', + properties: { + Prop: param.value, + }, + }); + + const assembly = app.synth(); + const template1 = assembly.getStackByName(stack1.stackName).template; + const template2 = assembly.getStackByName(stack2.stackName).template; + + // THEN + expect(template1).toMatchObject({ + Outputs: { + ExportsOutputRefmagicParameter4CC6F7BE: { + Value: { + 'Fn::Join': [ + '||', { + Ref: 'magicParameter', + }, + ], + }, + Export: { Name: 'Stack1:ExportsOutputRefmagicParameter4CC6F7BE' }, + }, + }, + }); + + expect(template2).toMatchObject({ + Resources: { + SomeResource: { + Type: 'BLA', + Properties: { + Prop: { + 'Fn::Split': [ + '||', + { + 'Fn::ImportValue': 'Stack1:ExportsOutputRefmagicParameter4CC6F7BE', + }, + ], + }, + }, + }, + }, + }); + }); + test('cross-region stack references, crossRegionReferences=true', () => { // GIVEN const app = new App(); @@ -953,6 +1137,29 @@ describe('stack', () => { expect(templateA).toEqual(templateM); }); + test('automatic cross-stack references and manual list exports look the same', () => { + // GIVEN: automatic + const appA = new App({ context: { '@aws-cdk/core:stackRelativeExports': true } }); + const producerA = new Stack(appA, 'Producer'); + const consumerA = new Stack(appA, 'Consumer'); + const resourceA = new CfnResource(producerA, 'Resource', { type: 'AWS::Resource' }); + (resourceA as any).attrAtt = ['Foo', 'Bar']; + new CfnOutput(consumerA, 'SomeOutput', { value: `${resourceA.getAtt('Att', ResolutionTypeHint.STRING_LIST)}` }); + + // GIVEN: manual + const appM = new App(); + const producerM = new Stack(appM, 'Producer'); + const resourceM = new CfnResource(producerM, 'Resource', { type: 'AWS::Resource' }); + (resourceM as any).attrAtt = ['Foo', 'Bar']; + producerM.exportStringListValue(resourceM.getAtt('Att', ResolutionTypeHint.STRING_LIST)); + + // THEN - producers are the same + const templateA = appA.synth().getStackByName(producerA.stackName).template; + const templateM = appM.synth().getStackByName(producerM.stackName).template; + + expect(templateA).toEqual(templateM); + }); + test('throw error if overrideLogicalId is used and logicalId is locked', () => { // GIVEN: manual const appM = new App(); @@ -1032,6 +1239,15 @@ describe('stack', () => { }).toThrow(/or make sure to export a resource attribute/); }); + test('manual list exports require a name if not supplying a resource attribute', () => { + const app = new App(); + const stack = new Stack(app, 'Stack'); + + expect(() => { + stack.exportStringListValue(['someValue']); + }).toThrow(/or make sure to export a resource attribute/); + }); + test('manual exports can also just be used to create an export of anything', () => { const app = new App(); const stack = new Stack(app, 'Stack'); @@ -1041,6 +1257,37 @@ describe('stack', () => { expect(stack.resolve(importV)).toEqual({ 'Fn::ImportValue': 'MyExport' }); }); + test('manual list exports can also just be used to create an export of anything', () => { + const app = new App(); + const stack = new Stack(app, 'Stack'); + + const importV = stack.exportStringListValue(['someValue', 'anotherValue'], { name: 'MyExport' }); + + expect(stack.resolve(importV)).toEqual( + { + 'Fn::Split': [ + '||', + { + 'Fn::ImportValue': 'MyExport', + }, + ], + }, + ); + + const template = app.synth().getStackByName(stack.stackName).template; + + expect(template).toMatchObject({ + Outputs: { + ExportMyExport: { + Value: 'someValue||anotherValue', + Export: { + Name: 'MyExport', + }, + }, + }, + }); + }); + test('CfnSynthesisError is ignored when preparing cross references', () => { // GIVEN const app = new App(); diff --git a/packages/@aws-cdk/custom-resources/lib/provider-framework/runtime/outbound.ts b/packages/@aws-cdk/custom-resources/lib/provider-framework/runtime/outbound.ts index 19dfd676bc92e..178931e6c3442 100644 --- a/packages/@aws-cdk/custom-resources/lib/provider-framework/runtime/outbound.ts +++ b/packages/@aws-cdk/custom-resources/lib/provider-framework/runtime/outbound.ts @@ -43,7 +43,31 @@ async function defaultInvokeFunction(req: AWS.Lambda.InvocationRequest): Promise lambda = new AWS.Lambda(awsSdkConfig); } - return lambda.invoke(req).promise(); + try { + /** + * Try an initial invoke. + * + * When you try to invoke a function that is inactive, the invocation fails and Lambda sets + * the function to pending state until the function resources are recreated. + * If Lambda fails to recreate the resources, the function is set to the inactive state. + * + * We're using invoke first because `waitFor` doesn't trigger an inactive function to do anything, + * it just runs `getFunction` and checks the state. + */ + return await lambda.invoke(req).promise(); + } catch (error) { + + /** + * The status of the Lambda function is checked every second for up to 300 seconds. + * Exits the loop on 'Active' state and throws an error on 'Inactive' or 'Failed'. + * + * And now we wait. + */ + await lambda.waitFor('functionActiveV2', { + FunctionName: req.FunctionName, + }).promise(); + return await lambda.invoke(req).promise(); + } } export let startExecution = defaultStartExecution; diff --git a/packages/@aws-cdk/custom-resources/package.json b/packages/@aws-cdk/custom-resources/package.json index 770c741b0dc28..0ba8640b7350c 100644 --- a/packages/@aws-cdk/custom-resources/package.json +++ b/packages/@aws-cdk/custom-resources/package.json @@ -89,7 +89,7 @@ "@aws-cdk/integ-tests": "0.0.0", "@aws-cdk/cfn2ts": "0.0.0", "@aws-cdk/pkglint": "0.0.0", - "@types/aws-lambda": "^8.10.108", + "@types/aws-lambda": "^8.10.109", "@types/fs-extra": "^8.1.2", "@types/jest": "^27.5.2", "@types/sinon": "^9.0.11", diff --git a/packages/@aws-cdk/custom-resources/test/provider-framework/outbound.test.ts b/packages/@aws-cdk/custom-resources/test/provider-framework/outbound.test.ts new file mode 100644 index 0000000000000..b506d8949b227 --- /dev/null +++ b/packages/@aws-cdk/custom-resources/test/provider-framework/outbound.test.ts @@ -0,0 +1,174 @@ +import * as aws from 'aws-sdk'; +import { invokeFunction } from '../../lib/provider-framework/runtime/outbound'; + +jest.mock('aws-sdk', () => { + return { + Lambda: class { + public invoke() { + return { promise: () => mockInvoke() }; + } + + public waitFor() { + return { promise: () => mockWaitFor() }; + } + }, + }; +}); + +let mockInvoke: () => Promise; + +const req: aws.Lambda.InvocationRequest = { + FunctionName: 'Whatever', + Payload: { + IsThisATest: 'Yes, this is a test', + AreYouSure: 'Yes, I am sure', + }, +}; + +let invokeCount: number = 0; +let expectedFunctionStates: string[] = []; +let receivedFunctionStates: string[] = []; + +const mockWaitFor = async (): Promise => { + let state = expectedFunctionStates.pop(); + while (state !== 'Active') { + receivedFunctionStates.push(state!); + // If it goes back to inactive it's failed + if (state === 'Inactive') throw new Error('Not today'); + // If failed... it's failed + if (state === 'Failed') throw new Error('Broken'); + // If pending, continue the loop, no other valid options + if (state !== 'Pending') throw new Error('State is confused'); + state = expectedFunctionStates.pop(); + } + receivedFunctionStates.push(state); + return { + Configuration: { + State: 'Active', + }, + }; +}; + +describe('invokeFunction tests', () => { + afterEach(() => { + invokeCount = 0; + expectedFunctionStates = []; + receivedFunctionStates = []; + }); + + // Success cases + test('Inactive function that reactivates does not throw error', async () => { + mockInvoke = async () => { + if (invokeCount == 0) { + invokeCount++; + throw new Error('Better luck next time'); + } + invokeCount++; + return { Payload: req.Payload }; + }; + + expectedFunctionStates.push('Active'); + expectedFunctionStates.push('Pending'); + + expect(await invokeFunction(req)).toEqual({ Payload: req.Payload }); + expect(invokeCount).toEqual(2); + expect(receivedFunctionStates).toEqual(['Pending', 'Active']); + }); + + test('Active function does not run waitFor or retry invoke', async () => { + mockInvoke = async () => { + if (invokeCount == 1) { + invokeCount++; + throw new Error('This should not happen in this test'); + } + invokeCount++; + return { Payload: req.Payload }; + }; + + expectedFunctionStates.push('Active'); + + expect(await invokeFunction(req)).toEqual({ Payload: req.Payload }); + expect(invokeCount).toEqual(1); + expect(receivedFunctionStates).toEqual([]); + }); + + // Failure cases + test('Inactive function that goes back to inactive throws error', async () => { + mockInvoke = async () => { + if (invokeCount == 0) { + invokeCount++; + throw new Error('Better luck next time'); + } + invokeCount++; + return { Payload: req.Payload }; + }; + + expectedFunctionStates.push('Inactive'); + expectedFunctionStates.push('Pending'); + expectedFunctionStates.push('Pending'); + + await expect(invokeFunction(req)).rejects.toThrowError(new Error('Not today')); + expect(invokeCount).toEqual(1); + expect(receivedFunctionStates).toEqual(['Pending', 'Pending', 'Inactive']); + }); + + test('Inactive function that goes to failed throws error', async () => { + mockInvoke = async () => { + if (invokeCount == 0) { + invokeCount++; + throw new Error('Better luck next time'); + } + invokeCount++; + return { Payload: req.Payload }; + }; + + expectedFunctionStates.push('Failed'); + expectedFunctionStates.push('Pending'); + expectedFunctionStates.push('Pending'); + + await expect(invokeFunction(req)).rejects.toThrowError(new Error('Broken')); + expect(invokeCount).toEqual(1); + expect(receivedFunctionStates).toEqual(['Pending', 'Pending', 'Failed']); + }); + + test('Inactive function that returns other value throws error', async () => { + mockInvoke = async () => { + if (invokeCount == 0) { + invokeCount++; + throw new Error('Better luck next time'); + } + invokeCount++; + return { Payload: req.Payload }; + }; + + expectedFunctionStates.push('NewFunctionWhoDis'); + expectedFunctionStates.push('Pending'); + expectedFunctionStates.push('Pending'); + + await expect(invokeFunction(req)).rejects.toThrowError(new Error('State is confused')); + expect(invokeCount).toEqual(1); + expect(receivedFunctionStates).toEqual(['Pending', 'Pending', 'NewFunctionWhoDis']); + }); + + test('Wait for stops on terminal responses', async () => { + mockInvoke = async () => { + if (invokeCount == 0) { + invokeCount++; + throw new Error('Better luck next time'); + } + invokeCount++; + return { Payload: req.Payload }; + }; + + expectedFunctionStates.push('SomethingElse'); + expectedFunctionStates.push('Pending'); + expectedFunctionStates.push('Inactive'); + expectedFunctionStates.push('Pending'); + expectedFunctionStates.push('Pending'); + + await expect(invokeFunction(req)).rejects.toThrowError(new Error('Not today')); + expect(invokeCount).toEqual(1); + expect(receivedFunctionStates).toEqual(['Pending', 'Pending', 'Inactive']); + }); +}); + diff --git a/packages/@aws-cdk/integ-runner/THIRD_PARTY_LICENSES b/packages/@aws-cdk/integ-runner/THIRD_PARTY_LICENSES index ecb08da6644c0..fcd651e417466 100644 --- a/packages/@aws-cdk/integ-runner/THIRD_PARTY_LICENSES +++ b/packages/@aws-cdk/integ-runner/THIRD_PARTY_LICENSES @@ -156,7 +156,7 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH RE ---------------- -** aws-sdk@2.1260.0 - https://www.npmjs.com/package/aws-sdk/v/2.1260.0 | Apache-2.0 +** aws-sdk@2.1274.0 - https://www.npmjs.com/package/aws-sdk/v/2.1274.0 | Apache-2.0 AWS SDK for JavaScript Copyright 2012-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. @@ -1438,7 +1438,7 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------- -** minimatch@5.1.0 - https://www.npmjs.com/package/minimatch/v/5.1.0 | ISC +** minimatch@5.1.1 - https://www.npmjs.com/package/minimatch/v/5.1.1 | ISC The ISC License Copyright (c) 2011-2022 Isaac Z. Schlueter and Contributors diff --git a/packages/@aws-cdk/integ-runner/package.json b/packages/@aws-cdk/integ-runner/package.json index 2f9199680f427..a68ebd429ee39 100644 --- a/packages/@aws-cdk/integ-runner/package.json +++ b/packages/@aws-cdk/integ-runner/package.json @@ -57,7 +57,7 @@ "@aws-cdk/pkglint": "0.0.0", "@types/fs-extra": "^8.1.2", "@types/jest": "^27.5.2", - "@types/node": "^14.18.33", + "@types/node": "^14.18.34", "@types/workerpool": "^6.1.0", "@types/yargs": "^15.0.14", "jest": "^27.5.1" diff --git a/packages/@aws-cdk/integ-tests/package.json b/packages/@aws-cdk/integ-tests/package.json index d21986f31d2a6..8e9044d9cc566 100644 --- a/packages/@aws-cdk/integ-tests/package.json +++ b/packages/@aws-cdk/integ-tests/package.json @@ -67,7 +67,7 @@ "@aws-cdk/pkglint": "0.0.0", "@types/fs-extra": "^8.1.2", "@types/jest": "^27.5.2", - "@types/node": "^14.18.33", + "@types/node": "^14.18.34", "aws-sdk": "^2.1211.0", "aws-sdk-mock": "5.6.0", "jest": "^27.5.1", diff --git a/packages/@aws-cdk/lambda-layer-awscli/package.json b/packages/@aws-cdk/lambda-layer-awscli/package.json index 86b0888e7fb36..69218c3542cce 100644 --- a/packages/@aws-cdk/lambda-layer-awscli/package.json +++ b/packages/@aws-cdk/lambda-layer-awscli/package.json @@ -84,14 +84,14 @@ "dependencies": { "@aws-cdk/aws-lambda": "0.0.0", "@aws-cdk/core": "0.0.0", - "@aws-cdk/asset-awscli-v1": "^2.2.16", + "@aws-cdk/asset-awscli-v1": "^2.2.30", "constructs": "^10.0.0" }, "homepage": "https://github.com/aws/aws-cdk", "peerDependencies": { "@aws-cdk/aws-lambda": "0.0.0", "@aws-cdk/core": "0.0.0", - "@aws-cdk/asset-awscli-v1": "^2.2.16", + "@aws-cdk/asset-awscli-v1": "^2.2.30", "constructs": "^10.0.0" }, "engines": { diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510.zip b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510.zip index 3d588b4e64ea1..c0ca5ddf3c398 100644 Binary files a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510.zip and b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510.zip differ diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/outbound.js b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/outbound.js deleted file mode 100644 index 70203dcc42f3f..0000000000000 --- a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/outbound.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.httpRequest = exports.invokeFunction = exports.startExecution = void 0; -/* istanbul ignore file */ -const https = require("https"); -// eslint-disable-next-line import/no-extraneous-dependencies -const AWS = require("aws-sdk"); -const FRAMEWORK_HANDLER_TIMEOUT = 900000; // 15 minutes -// In order to honor the overall maximum timeout set for the target process, -// the default 2 minutes from AWS SDK has to be overriden: -// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#httpOptions-property -const awsSdkConfig = { - httpOptions: { timeout: FRAMEWORK_HANDLER_TIMEOUT }, -}; -async function defaultHttpRequest(options, 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); - } - }); -} -let sfn; -let lambda; -async function defaultStartExecution(req) { - if (!sfn) { - sfn = new AWS.StepFunctions(awsSdkConfig); - } - return sfn.startExecution(req).promise(); -} -async function defaultInvokeFunction(req) { - if (!lambda) { - lambda = new AWS.Lambda(awsSdkConfig); - } - return lambda.invoke(req).promise(); -} -exports.startExecution = defaultStartExecution; -exports.invokeFunction = defaultInvokeFunction; -exports.httpRequest = defaultHttpRequest; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvdXRib3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQkFBMEI7QUFDMUIsK0JBQStCO0FBQy9CLDZEQUE2RDtBQUM3RCwrQkFBK0I7QUFJL0IsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxhQUFhO0FBRXZELDRFQUE0RTtBQUM1RSwwREFBMEQ7QUFDMUQsMkZBQTJGO0FBQzNGLE1BQU0sWUFBWSxHQUF5QjtJQUN6QyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUU7Q0FDcEQsQ0FBQztBQUVGLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxPQUE2QixFQUFFLFlBQW9CO0lBQ25GLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsSUFBSSxHQUFzQixDQUFDO0FBQzNCLElBQUksTUFBa0IsQ0FBQztBQUV2QixLQUFLLFVBQVUscUJBQXFCLENBQUMsR0FBMEM7SUFDN0UsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDM0M7SUFFRCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUVELEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxHQUFpQztJQUNwRSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUN2QztJQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0FBRVUsUUFBQSxjQUFjLEdBQUcscUJBQXFCLENBQUM7QUFDdkMsUUFBQSxjQUFjLEdBQUcscUJBQXFCLENBQUM7QUFDdkMsUUFBQSxXQUFXLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uT3B0aW9ucyB9IGZyb20gJ2F3cy1zZGsvbGliL2NvbmZpZy1iYXNlJztcblxuY29uc3QgRlJBTUVXT1JLX0hBTkRMRVJfVElNRU9VVCA9IDkwMDAwMDsgLy8gMTUgbWludXRlc1xuXG4vLyBJbiBvcmRlciB0byBob25vciB0aGUgb3ZlcmFsbCBtYXhpbXVtIHRpbWVvdXQgc2V0IGZvciB0aGUgdGFyZ2V0IHByb2Nlc3MsXG4vLyB0aGUgZGVmYXVsdCAyIG1pbnV0ZXMgZnJvbSBBV1MgU0RLIGhhcyB0byBiZSBvdmVycmlkZW46XG4vLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL0NvbmZpZy5odG1sI2h0dHBPcHRpb25zLXByb3BlcnR5XG5jb25zdCBhd3NTZGtDb25maWc6IENvbmZpZ3VyYXRpb25PcHRpb25zID0ge1xuICBodHRwT3B0aW9uczogeyB0aW1lb3V0OiBGUkFNRVdPUktfSEFORExFUl9USU1FT1VUIH0sXG59O1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0SHR0cFJlcXVlc3Qob3B0aW9uczogaHR0cHMuUmVxdWVzdE9wdGlvbnMsIHJlc3BvbnNlQm9keTogc3RyaW5nKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIHJlc29sdmUpO1xuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgcmVxdWVzdC53cml0ZShyZXNwb25zZUJvZHkpO1xuICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cblxubGV0IHNmbjogQVdTLlN0ZXBGdW5jdGlvbnM7XG5sZXQgbGFtYmRhOiBBV1MuTGFtYmRhO1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0U3RhcnRFeGVjdXRpb24ocmVxOiBBV1MuU3RlcEZ1bmN0aW9ucy5TdGFydEV4ZWN1dGlvbklucHV0KTogUHJvbWlzZTxBV1MuU3RlcEZ1bmN0aW9ucy5TdGFydEV4ZWN1dGlvbk91dHB1dD4ge1xuICBpZiAoIXNmbikge1xuICAgIHNmbiA9IG5ldyBBV1MuU3RlcEZ1bmN0aW9ucyhhd3NTZGtDb25maWcpO1xuICB9XG5cbiAgcmV0dXJuIHNmbi5zdGFydEV4ZWN1dGlvbihyZXEpLnByb21pc2UoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEludm9rZUZ1bmN0aW9uKHJlcTogQVdTLkxhbWJkYS5JbnZvY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8QVdTLkxhbWJkYS5JbnZvY2F0aW9uUmVzcG9uc2U+IHtcbiAgaWYgKCFsYW1iZGEpIHtcbiAgICBsYW1iZGEgPSBuZXcgQVdTLkxhbWJkYShhd3NTZGtDb25maWcpO1xuICB9XG5cbiAgcmV0dXJuIGxhbWJkYS5pbnZva2UocmVxKS5wcm9taXNlKCk7XG59XG5cbmV4cG9ydCBsZXQgc3RhcnRFeGVjdXRpb24gPSBkZWZhdWx0U3RhcnRFeGVjdXRpb247XG5leHBvcnQgbGV0IGludm9rZUZ1bmN0aW9uID0gZGVmYXVsdEludm9rZUZ1bmN0aW9uO1xuZXhwb3J0IGxldCBodHRwUmVxdWVzdCA9IGRlZmF1bHRIdHRwUmVxdWVzdDtcbiJdfQ== \ No newline at end of file diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/cfn-response.js b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/cfn-response.js similarity index 100% rename from packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/cfn-response.js rename to packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/cfn-response.js diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/consts.js b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/consts.js similarity index 100% rename from packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/consts.js rename to packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/consts.js diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/framework.js b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/framework.js similarity index 100% rename from packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/framework.js rename to packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/framework.js diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/outbound.js b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/outbound.js new file mode 100644 index 0000000000000..cc0667d42f0e8 --- /dev/null +++ b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/outbound.js @@ -0,0 +1,69 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.httpRequest = exports.invokeFunction = exports.startExecution = void 0; +/* istanbul ignore file */ +const https = require("https"); +// eslint-disable-next-line import/no-extraneous-dependencies +const AWS = require("aws-sdk"); +const FRAMEWORK_HANDLER_TIMEOUT = 900000; // 15 minutes +// In order to honor the overall maximum timeout set for the target process, +// the default 2 minutes from AWS SDK has to be overriden: +// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#httpOptions-property +const awsSdkConfig = { + httpOptions: { timeout: FRAMEWORK_HANDLER_TIMEOUT }, +}; +async function defaultHttpRequest(options, 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); + } + }); +} +let sfn; +let lambda; +async function defaultStartExecution(req) { + if (!sfn) { + sfn = new AWS.StepFunctions(awsSdkConfig); + } + return sfn.startExecution(req).promise(); +} +async function defaultInvokeFunction(req) { + if (!lambda) { + lambda = new AWS.Lambda(awsSdkConfig); + } + try { + /** + * Try an initial invoke. + * + * When you try to invoke a function that is inactive, the invocation fails and Lambda sets + * the function to pending state until the function resources are recreated. + * If Lambda fails to recreate the resources, the function is set to the inactive state. + * + * We're using invoke first because `waitFor` doesn't trigger an inactive function to do anything, + * it just runs `getFunction` and checks the state. + */ + return await lambda.invoke(req).promise(); + } + catch (error) { + /** + * The status of the Lambda function is checked every second for up to 300 seconds. + * Exits the loop on 'Active' state and throws an error on 'Inactive' or 'Failed'. + * + * And now we wait. + */ + await lambda.waitFor('functionActiveV2', { + FunctionName: req.FunctionName, + }).promise(); + return await lambda.invoke(req).promise(); + } +} +exports.startExecution = defaultStartExecution; +exports.invokeFunction = defaultInvokeFunction; +exports.httpRequest = defaultHttpRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvdXRib3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQkFBMEI7QUFDMUIsK0JBQStCO0FBQy9CLDZEQUE2RDtBQUM3RCwrQkFBK0I7QUFJL0IsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxhQUFhO0FBRXZELDRFQUE0RTtBQUM1RSwwREFBMEQ7QUFDMUQsMkZBQTJGO0FBQzNGLE1BQU0sWUFBWSxHQUF5QjtJQUN6QyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUU7Q0FDcEQsQ0FBQztBQUVGLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxPQUE2QixFQUFFLFlBQW9CO0lBQ25GLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsSUFBSSxHQUFzQixDQUFDO0FBQzNCLElBQUksTUFBa0IsQ0FBQztBQUV2QixLQUFLLFVBQVUscUJBQXFCLENBQUMsR0FBMEM7SUFDN0UsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDM0M7SUFFRCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUVELEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxHQUFpQztJQUNwRSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUN2QztJQUVELElBQUk7UUFDRjs7Ozs7Ozs7O1dBU0c7UUFDSCxPQUFPLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUMzQztJQUFDLE9BQU8sS0FBSyxFQUFFO1FBRWQ7Ozs7O1dBS0c7UUFDSCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7WUFDdkMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO1NBQy9CLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQzNDO0FBQ0gsQ0FBQztBQUVVLFFBQUEsY0FBYyxHQUFHLHFCQUFxQixDQUFDO0FBQ3ZDLFFBQUEsY0FBYyxHQUFHLHFCQUFxQixDQUFDO0FBQ3ZDLFFBQUEsV0FBVyxHQUFHLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbmltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhdGlvbk9wdGlvbnMgfSBmcm9tICdhd3Mtc2RrL2xpYi9jb25maWctYmFzZSc7XG5cbmNvbnN0IEZSQU1FV09SS19IQU5ETEVSX1RJTUVPVVQgPSA5MDAwMDA7IC8vIDE1IG1pbnV0ZXNcblxuLy8gSW4gb3JkZXIgdG8gaG9ub3IgdGhlIG92ZXJhbGwgbWF4aW11bSB0aW1lb3V0IHNldCBmb3IgdGhlIHRhcmdldCBwcm9jZXNzLFxuLy8gdGhlIGRlZmF1bHQgMiBtaW51dGVzIGZyb20gQVdTIFNESyBoYXMgdG8gYmUgb3ZlcnJpZGVuOlxuLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvbGF0ZXN0L0FXUy9Db25maWcuaHRtbCNodHRwT3B0aW9ucy1wcm9wZXJ0eVxuY29uc3QgYXdzU2RrQ29uZmlnOiBDb25maWd1cmF0aW9uT3B0aW9ucyA9IHtcbiAgaHR0cE9wdGlvbnM6IHsgdGltZW91dDogRlJBTUVXT1JLX0hBTkRMRVJfVElNRU9VVCB9LFxufTtcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEh0dHBSZXF1ZXN0KG9wdGlvbnM6IGh0dHBzLlJlcXVlc3RPcHRpb25zLCByZXNwb25zZUJvZHk6IHN0cmluZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gaHR0cHMucmVxdWVzdChvcHRpb25zLCByZXNvbHZlKTtcbiAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIHJlcXVlc3Qud3JpdGUocmVzcG9uc2VCb2R5KTtcbiAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmxldCBzZm46IEFXUy5TdGVwRnVuY3Rpb25zO1xubGV0IGxhbWJkYTogQVdTLkxhbWJkYTtcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdFN0YXJ0RXhlY3V0aW9uKHJlcTogQVdTLlN0ZXBGdW5jdGlvbnMuU3RhcnRFeGVjdXRpb25JbnB1dCk6IFByb21pc2U8QVdTLlN0ZXBGdW5jdGlvbnMuU3RhcnRFeGVjdXRpb25PdXRwdXQ+IHtcbiAgaWYgKCFzZm4pIHtcbiAgICBzZm4gPSBuZXcgQVdTLlN0ZXBGdW5jdGlvbnMoYXdzU2RrQ29uZmlnKTtcbiAgfVxuXG4gIHJldHVybiBzZm4uc3RhcnRFeGVjdXRpb24ocmVxKS5wcm9taXNlKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRJbnZva2VGdW5jdGlvbihyZXE6IEFXUy5MYW1iZGEuSW52b2NhdGlvblJlcXVlc3QpOiBQcm9taXNlPEFXUy5MYW1iZGEuSW52b2NhdGlvblJlc3BvbnNlPiB7XG4gIGlmICghbGFtYmRhKSB7XG4gICAgbGFtYmRhID0gbmV3IEFXUy5MYW1iZGEoYXdzU2RrQ29uZmlnKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLyoqXG4gICAgICogVHJ5IGFuIGluaXRpYWwgaW52b2tlLlxuICAgICAqXG4gICAgICogV2hlbiB5b3UgdHJ5IHRvIGludm9rZSBhIGZ1bmN0aW9uIHRoYXQgaXMgaW5hY3RpdmUsIHRoZSBpbnZvY2F0aW9uIGZhaWxzIGFuZCBMYW1iZGEgc2V0c1xuICAgICAqIHRoZSBmdW5jdGlvbiB0byBwZW5kaW5nIHN0YXRlIHVudGlsIHRoZSBmdW5jdGlvbiByZXNvdXJjZXMgYXJlIHJlY3JlYXRlZC5cbiAgICAgKiBJZiBMYW1iZGEgZmFpbHMgdG8gcmVjcmVhdGUgdGhlIHJlc291cmNlcywgdGhlIGZ1bmN0aW9uIGlzIHNldCB0byB0aGUgaW5hY3RpdmUgc3RhdGUuXG4gICAgICpcbiAgICAgKiBXZSdyZSB1c2luZyBpbnZva2UgZmlyc3QgYmVjYXVzZSBgd2FpdEZvcmAgZG9lc24ndCB0cmlnZ2VyIGFuIGluYWN0aXZlIGZ1bmN0aW9uIHRvIGRvIGFueXRoaW5nLFxuICAgICAqIGl0IGp1c3QgcnVucyBgZ2V0RnVuY3Rpb25gIGFuZCBjaGVja3MgdGhlIHN0YXRlLlxuICAgICAqL1xuICAgIHJldHVybiBhd2FpdCBsYW1iZGEuaW52b2tlKHJlcSkucHJvbWlzZSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXR1cyBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uIGlzIGNoZWNrZWQgZXZlcnkgc2Vjb25kIGZvciB1cCB0byAzMDAgc2Vjb25kcy5cbiAgICAgKiBFeGl0cyB0aGUgbG9vcCBvbiAnQWN0aXZlJyBzdGF0ZSBhbmQgdGhyb3dzIGFuIGVycm9yIG9uICdJbmFjdGl2ZScgb3IgJ0ZhaWxlZCcuXG4gICAgICpcbiAgICAgKiBBbmQgbm93IHdlIHdhaXQuXG4gICAgICovXG4gICAgYXdhaXQgbGFtYmRhLndhaXRGb3IoJ2Z1bmN0aW9uQWN0aXZlVjInLCB7XG4gICAgICBGdW5jdGlvbk5hbWU6IHJlcS5GdW5jdGlvbk5hbWUsXG4gICAgfSkucHJvbWlzZSgpO1xuICAgIHJldHVybiBhd2FpdCBsYW1iZGEuaW52b2tlKHJlcSkucHJvbWlzZSgpO1xuICB9XG59XG5cbmV4cG9ydCBsZXQgc3RhcnRFeGVjdXRpb24gPSBkZWZhdWx0U3RhcnRFeGVjdXRpb247XG5leHBvcnQgbGV0IGludm9rZUZ1bmN0aW9uID0gZGVmYXVsdEludm9rZUZ1bmN0aW9uO1xuZXhwb3J0IGxldCBodHRwUmVxdWVzdCA9IGRlZmF1bHRIdHRwUmVxdWVzdDtcbiJdfQ== \ No newline at end of file diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/util.js b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/util.js similarity index 100% rename from packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/util.js rename to packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/util.js diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/cdk.out b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/cdk.out +++ b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/integ.json b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/integ.json index ae6afef00cc42..e75f4f6bd58dc 100644 --- a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/integ.json +++ b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "testCases": { "lambda-layer-awscli-integ-test/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/lambda-layer-awscli-integ-stack.assets.json b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/lambda-layer-awscli-integ-stack.assets.json index ca5cb04c57bb5..53aa1e55a2827 100644 --- a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/lambda-layer-awscli-integ-stack.assets.json +++ b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/lambda-layer-awscli-integ-stack.assets.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { "5d8d1d0aacea23824c62f362e1e3c14b7dd14a31c71b53bfae4d14a6373c5510": { "source": { @@ -27,20 +27,20 @@ } } }, - "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037": { + "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585": { "source": { - "path": "asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037", + "path": "asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip", + "objectKey": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "f24d942c1e583931f0e686cd0957356dd6f7fefc76b5b425ef2564562d029e7e": { + "7ec169829f19b8d3eccf423b3204fbbf3fea610313307042ada1acfeea32ff72": { "source": { "path": "lambda-layer-awscli-integ-stack.template.json", "packaging": "file" @@ -48,7 +48,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "f24d942c1e583931f0e686cd0957356dd6f7fefc76b5b425ef2564562d029e7e.json", + "objectKey": "7ec169829f19b8d3eccf423b3204fbbf3fea610313307042ada1acfeea32ff72.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/lambda-layer-awscli-integ-stack.template.json b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/lambda-layer-awscli-integ-stack.template.json index 586a29e6d6a99..501b81113459e 100644 --- a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/lambda-layer-awscli-integ-stack.template.json +++ b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/lambda-layer-awscli-integ-stack.template.json @@ -152,7 +152,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip" + "S3Key": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip" }, "Role": { "Fn::GetAtt": [ @@ -333,7 +333,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip" + "S3Key": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip" }, "Role": { "Fn::GetAtt": [ diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/lambdalayerawscliintegtestDefaultTestDeployAssert8E1153D3.assets.json b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/lambdalayerawscliintegtestDefaultTestDeployAssert8E1153D3.assets.json index a05ce77e50c09..93111bfc612cd 100644 --- a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/lambdalayerawscliintegtestDefaultTestDeployAssert8E1153D3.assets.json +++ b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/lambdalayerawscliintegtestDefaultTestDeployAssert8E1153D3.assets.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/manifest.json b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/manifest.json index 33666d6620a30..7d109e966321a 100644 --- a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/manifest.json +++ b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "artifacts": { "lambda-layer-awscli-integ-stack.assets": { "type": "cdk:asset-manifest", @@ -17,7 +17,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}/f24d942c1e583931f0e686cd0957356dd6f7fefc76b5b425ef2564562d029e7e.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/7ec169829f19b8d3eccf423b3204fbbf3fea610313307042ada1acfeea32ff72.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -36,10 +36,7 @@ "/lambda-layer-awscli-integ-stack/AwsCliLayer/Resource": [ { "type": "aws:cdk:logicalId", - "data": "AwsCliLayerF44AAF94", - "trace": [ - "!!DESTRUCTIVE_CHANGES: WILL_REPLACE" - ] + "data": "AwsCliLayerF44AAF94" } ], "/lambda-layer-awscli-integ-stack/Lambda$python3.7/ServiceRole/Resource": [ diff --git a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/tree.json b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/tree.json index f51213fa0b6bc..253f9f8d2559c 100644 --- a/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/tree.json +++ b/packages/@aws-cdk/lambda-layer-awscli/test/integ.awscli-layer.js.snapshot/tree.json @@ -72,6 +72,14 @@ "id": "ServiceRole", "path": "lambda-layer-awscli-integ-stack/Lambda$python3.7/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "lambda-layer-awscli-integ-stack/Lambda$python3.7/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-layer-awscli-integ-stack/Lambda$python3.7/ServiceRole/Resource", @@ -195,6 +203,14 @@ "id": "ServiceRole", "path": "lambda-layer-awscli-integ-stack/Providerpython3.7/framework-onEvent/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "lambda-layer-awscli-integ-stack/Providerpython3.7/framework-onEvent/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-layer-awscli-integ-stack/Providerpython3.7/framework-onEvent/ServiceRole/Resource", @@ -336,7 +352,7 @@ "s3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "s3Key": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip" + "s3Key": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip" }, "role": { "Fn::GetAtt": [ @@ -403,6 +419,14 @@ "id": "ServiceRole", "path": "lambda-layer-awscli-integ-stack/Lambda$python3.9/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "lambda-layer-awscli-integ-stack/Lambda$python3.9/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-layer-awscli-integ-stack/Lambda$python3.9/ServiceRole/Resource", @@ -526,6 +550,14 @@ "id": "ServiceRole", "path": "lambda-layer-awscli-integ-stack/Providerpython3.9/framework-onEvent/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "lambda-layer-awscli-integ-stack/Providerpython3.9/framework-onEvent/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-layer-awscli-integ-stack/Providerpython3.9/framework-onEvent/ServiceRole/Resource", @@ -667,7 +699,7 @@ "s3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "s3Key": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip" + "s3Key": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip" }, "role": { "Fn::GetAtt": [ @@ -744,8 +776,8 @@ } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.140" + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" } }, "lambda-layer-awscli-integ-test": { @@ -761,7 +793,7 @@ "path": "lambda-layer-awscli-integ-test/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.140" + "version": "10.1.168" } }, "DeployAssert": { @@ -786,8 +818,8 @@ } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.140" + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" } } }, @@ -807,7 +839,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.140" + "version": "10.1.168" } } }, diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/outbound.js b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/outbound.js deleted file mode 100644 index 70203dcc42f3f..0000000000000 --- a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/outbound.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.httpRequest = exports.invokeFunction = exports.startExecution = void 0; -/* istanbul ignore file */ -const https = require("https"); -// eslint-disable-next-line import/no-extraneous-dependencies -const AWS = require("aws-sdk"); -const FRAMEWORK_HANDLER_TIMEOUT = 900000; // 15 minutes -// In order to honor the overall maximum timeout set for the target process, -// the default 2 minutes from AWS SDK has to be overriden: -// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#httpOptions-property -const awsSdkConfig = { - httpOptions: { timeout: FRAMEWORK_HANDLER_TIMEOUT }, -}; -async function defaultHttpRequest(options, 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); - } - }); -} -let sfn; -let lambda; -async function defaultStartExecution(req) { - if (!sfn) { - sfn = new AWS.StepFunctions(awsSdkConfig); - } - return sfn.startExecution(req).promise(); -} -async function defaultInvokeFunction(req) { - if (!lambda) { - lambda = new AWS.Lambda(awsSdkConfig); - } - return lambda.invoke(req).promise(); -} -exports.startExecution = defaultStartExecution; -exports.invokeFunction = defaultInvokeFunction; -exports.httpRequest = defaultHttpRequest; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvdXRib3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQkFBMEI7QUFDMUIsK0JBQStCO0FBQy9CLDZEQUE2RDtBQUM3RCwrQkFBK0I7QUFJL0IsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxhQUFhO0FBRXZELDRFQUE0RTtBQUM1RSwwREFBMEQ7QUFDMUQsMkZBQTJGO0FBQzNGLE1BQU0sWUFBWSxHQUF5QjtJQUN6QyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUU7Q0FDcEQsQ0FBQztBQUVGLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxPQUE2QixFQUFFLFlBQW9CO0lBQ25GLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsSUFBSSxHQUFzQixDQUFDO0FBQzNCLElBQUksTUFBa0IsQ0FBQztBQUV2QixLQUFLLFVBQVUscUJBQXFCLENBQUMsR0FBMEM7SUFDN0UsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDM0M7SUFFRCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUVELEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxHQUFpQztJQUNwRSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUN2QztJQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0FBRVUsUUFBQSxjQUFjLEdBQUcscUJBQXFCLENBQUM7QUFDdkMsUUFBQSxjQUFjLEdBQUcscUJBQXFCLENBQUM7QUFDdkMsUUFBQSxXQUFXLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uT3B0aW9ucyB9IGZyb20gJ2F3cy1zZGsvbGliL2NvbmZpZy1iYXNlJztcblxuY29uc3QgRlJBTUVXT1JLX0hBTkRMRVJfVElNRU9VVCA9IDkwMDAwMDsgLy8gMTUgbWludXRlc1xuXG4vLyBJbiBvcmRlciB0byBob25vciB0aGUgb3ZlcmFsbCBtYXhpbXVtIHRpbWVvdXQgc2V0IGZvciB0aGUgdGFyZ2V0IHByb2Nlc3MsXG4vLyB0aGUgZGVmYXVsdCAyIG1pbnV0ZXMgZnJvbSBBV1MgU0RLIGhhcyB0byBiZSBvdmVycmlkZW46XG4vLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL0NvbmZpZy5odG1sI2h0dHBPcHRpb25zLXByb3BlcnR5XG5jb25zdCBhd3NTZGtDb25maWc6IENvbmZpZ3VyYXRpb25PcHRpb25zID0ge1xuICBodHRwT3B0aW9uczogeyB0aW1lb3V0OiBGUkFNRVdPUktfSEFORExFUl9USU1FT1VUIH0sXG59O1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0SHR0cFJlcXVlc3Qob3B0aW9uczogaHR0cHMuUmVxdWVzdE9wdGlvbnMsIHJlc3BvbnNlQm9keTogc3RyaW5nKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIHJlc29sdmUpO1xuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgcmVxdWVzdC53cml0ZShyZXNwb25zZUJvZHkpO1xuICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cblxubGV0IHNmbjogQVdTLlN0ZXBGdW5jdGlvbnM7XG5sZXQgbGFtYmRhOiBBV1MuTGFtYmRhO1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0U3RhcnRFeGVjdXRpb24ocmVxOiBBV1MuU3RlcEZ1bmN0aW9ucy5TdGFydEV4ZWN1dGlvbklucHV0KTogUHJvbWlzZTxBV1MuU3RlcEZ1bmN0aW9ucy5TdGFydEV4ZWN1dGlvbk91dHB1dD4ge1xuICBpZiAoIXNmbikge1xuICAgIHNmbiA9IG5ldyBBV1MuU3RlcEZ1bmN0aW9ucyhhd3NTZGtDb25maWcpO1xuICB9XG5cbiAgcmV0dXJuIHNmbi5zdGFydEV4ZWN1dGlvbihyZXEpLnByb21pc2UoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEludm9rZUZ1bmN0aW9uKHJlcTogQVdTLkxhbWJkYS5JbnZvY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8QVdTLkxhbWJkYS5JbnZvY2F0aW9uUmVzcG9uc2U+IHtcbiAgaWYgKCFsYW1iZGEpIHtcbiAgICBsYW1iZGEgPSBuZXcgQVdTLkxhbWJkYShhd3NTZGtDb25maWcpO1xuICB9XG5cbiAgcmV0dXJuIGxhbWJkYS5pbnZva2UocmVxKS5wcm9taXNlKCk7XG59XG5cbmV4cG9ydCBsZXQgc3RhcnRFeGVjdXRpb24gPSBkZWZhdWx0U3RhcnRFeGVjdXRpb247XG5leHBvcnQgbGV0IGludm9rZUZ1bmN0aW9uID0gZGVmYXVsdEludm9rZUZ1bmN0aW9uO1xuZXhwb3J0IGxldCBodHRwUmVxdWVzdCA9IGRlZmF1bHRIdHRwUmVxdWVzdDtcbiJdfQ== \ No newline at end of file diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7e5f48d1e79c915595d938c932b6f0101715a162780d01a55845367e014fbcda.zip b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7e5f48d1e79c915595d938c932b6f0101715a162780d01a55845367e014fbcda.zip index 22d14c992e600..4e72f4d0dd801 100644 Binary files a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7e5f48d1e79c915595d938c932b6f0101715a162780d01a55845367e014fbcda.zip and b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7e5f48d1e79c915595d938c932b6f0101715a162780d01a55845367e014fbcda.zip differ diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/cfn-response.js b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/cfn-response.js similarity index 100% rename from packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/cfn-response.js rename to packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/cfn-response.js diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/consts.js b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/consts.js similarity index 100% rename from packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/consts.js rename to packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/consts.js diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/framework.js b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/framework.js similarity index 100% rename from packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/framework.js rename to packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/framework.js diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/outbound.js b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/outbound.js new file mode 100644 index 0000000000000..cc0667d42f0e8 --- /dev/null +++ b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/outbound.js @@ -0,0 +1,69 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.httpRequest = exports.invokeFunction = exports.startExecution = void 0; +/* istanbul ignore file */ +const https = require("https"); +// eslint-disable-next-line import/no-extraneous-dependencies +const AWS = require("aws-sdk"); +const FRAMEWORK_HANDLER_TIMEOUT = 900000; // 15 minutes +// In order to honor the overall maximum timeout set for the target process, +// the default 2 minutes from AWS SDK has to be overriden: +// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#httpOptions-property +const awsSdkConfig = { + httpOptions: { timeout: FRAMEWORK_HANDLER_TIMEOUT }, +}; +async function defaultHttpRequest(options, 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); + } + }); +} +let sfn; +let lambda; +async function defaultStartExecution(req) { + if (!sfn) { + sfn = new AWS.StepFunctions(awsSdkConfig); + } + return sfn.startExecution(req).promise(); +} +async function defaultInvokeFunction(req) { + if (!lambda) { + lambda = new AWS.Lambda(awsSdkConfig); + } + try { + /** + * Try an initial invoke. + * + * When you try to invoke a function that is inactive, the invocation fails and Lambda sets + * the function to pending state until the function resources are recreated. + * If Lambda fails to recreate the resources, the function is set to the inactive state. + * + * We're using invoke first because `waitFor` doesn't trigger an inactive function to do anything, + * it just runs `getFunction` and checks the state. + */ + return await lambda.invoke(req).promise(); + } + catch (error) { + /** + * The status of the Lambda function is checked every second for up to 300 seconds. + * Exits the loop on 'Active' state and throws an error on 'Inactive' or 'Failed'. + * + * And now we wait. + */ + await lambda.waitFor('functionActiveV2', { + FunctionName: req.FunctionName, + }).promise(); + return await lambda.invoke(req).promise(); + } +} +exports.startExecution = defaultStartExecution; +exports.invokeFunction = defaultInvokeFunction; +exports.httpRequest = defaultHttpRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvdXRib3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQkFBMEI7QUFDMUIsK0JBQStCO0FBQy9CLDZEQUE2RDtBQUM3RCwrQkFBK0I7QUFJL0IsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxhQUFhO0FBRXZELDRFQUE0RTtBQUM1RSwwREFBMEQ7QUFDMUQsMkZBQTJGO0FBQzNGLE1BQU0sWUFBWSxHQUF5QjtJQUN6QyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUU7Q0FDcEQsQ0FBQztBQUVGLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxPQUE2QixFQUFFLFlBQW9CO0lBQ25GLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsSUFBSSxHQUFzQixDQUFDO0FBQzNCLElBQUksTUFBa0IsQ0FBQztBQUV2QixLQUFLLFVBQVUscUJBQXFCLENBQUMsR0FBMEM7SUFDN0UsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDM0M7SUFFRCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUVELEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxHQUFpQztJQUNwRSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUN2QztJQUVELElBQUk7UUFDRjs7Ozs7Ozs7O1dBU0c7UUFDSCxPQUFPLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUMzQztJQUFDLE9BQU8sS0FBSyxFQUFFO1FBRWQ7Ozs7O1dBS0c7UUFDSCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7WUFDdkMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO1NBQy9CLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQzNDO0FBQ0gsQ0FBQztBQUVVLFFBQUEsY0FBYyxHQUFHLHFCQUFxQixDQUFDO0FBQ3ZDLFFBQUEsY0FBYyxHQUFHLHFCQUFxQixDQUFDO0FBQ3ZDLFFBQUEsV0FBVyxHQUFHLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbmltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhdGlvbk9wdGlvbnMgfSBmcm9tICdhd3Mtc2RrL2xpYi9jb25maWctYmFzZSc7XG5cbmNvbnN0IEZSQU1FV09SS19IQU5ETEVSX1RJTUVPVVQgPSA5MDAwMDA7IC8vIDE1IG1pbnV0ZXNcblxuLy8gSW4gb3JkZXIgdG8gaG9ub3IgdGhlIG92ZXJhbGwgbWF4aW11bSB0aW1lb3V0IHNldCBmb3IgdGhlIHRhcmdldCBwcm9jZXNzLFxuLy8gdGhlIGRlZmF1bHQgMiBtaW51dGVzIGZyb20gQVdTIFNESyBoYXMgdG8gYmUgb3ZlcnJpZGVuOlxuLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvbGF0ZXN0L0FXUy9Db25maWcuaHRtbCNodHRwT3B0aW9ucy1wcm9wZXJ0eVxuY29uc3QgYXdzU2RrQ29uZmlnOiBDb25maWd1cmF0aW9uT3B0aW9ucyA9IHtcbiAgaHR0cE9wdGlvbnM6IHsgdGltZW91dDogRlJBTUVXT1JLX0hBTkRMRVJfVElNRU9VVCB9LFxufTtcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEh0dHBSZXF1ZXN0KG9wdGlvbnM6IGh0dHBzLlJlcXVlc3RPcHRpb25zLCByZXNwb25zZUJvZHk6IHN0cmluZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gaHR0cHMucmVxdWVzdChvcHRpb25zLCByZXNvbHZlKTtcbiAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIHJlcXVlc3Qud3JpdGUocmVzcG9uc2VCb2R5KTtcbiAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmxldCBzZm46IEFXUy5TdGVwRnVuY3Rpb25zO1xubGV0IGxhbWJkYTogQVdTLkxhbWJkYTtcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdFN0YXJ0RXhlY3V0aW9uKHJlcTogQVdTLlN0ZXBGdW5jdGlvbnMuU3RhcnRFeGVjdXRpb25JbnB1dCk6IFByb21pc2U8QVdTLlN0ZXBGdW5jdGlvbnMuU3RhcnRFeGVjdXRpb25PdXRwdXQ+IHtcbiAgaWYgKCFzZm4pIHtcbiAgICBzZm4gPSBuZXcgQVdTLlN0ZXBGdW5jdGlvbnMoYXdzU2RrQ29uZmlnKTtcbiAgfVxuXG4gIHJldHVybiBzZm4uc3RhcnRFeGVjdXRpb24ocmVxKS5wcm9taXNlKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRJbnZva2VGdW5jdGlvbihyZXE6IEFXUy5MYW1iZGEuSW52b2NhdGlvblJlcXVlc3QpOiBQcm9taXNlPEFXUy5MYW1iZGEuSW52b2NhdGlvblJlc3BvbnNlPiB7XG4gIGlmICghbGFtYmRhKSB7XG4gICAgbGFtYmRhID0gbmV3IEFXUy5MYW1iZGEoYXdzU2RrQ29uZmlnKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLyoqXG4gICAgICogVHJ5IGFuIGluaXRpYWwgaW52b2tlLlxuICAgICAqXG4gICAgICogV2hlbiB5b3UgdHJ5IHRvIGludm9rZSBhIGZ1bmN0aW9uIHRoYXQgaXMgaW5hY3RpdmUsIHRoZSBpbnZvY2F0aW9uIGZhaWxzIGFuZCBMYW1iZGEgc2V0c1xuICAgICAqIHRoZSBmdW5jdGlvbiB0byBwZW5kaW5nIHN0YXRlIHVudGlsIHRoZSBmdW5jdGlvbiByZXNvdXJjZXMgYXJlIHJlY3JlYXRlZC5cbiAgICAgKiBJZiBMYW1iZGEgZmFpbHMgdG8gcmVjcmVhdGUgdGhlIHJlc291cmNlcywgdGhlIGZ1bmN0aW9uIGlzIHNldCB0byB0aGUgaW5hY3RpdmUgc3RhdGUuXG4gICAgICpcbiAgICAgKiBXZSdyZSB1c2luZyBpbnZva2UgZmlyc3QgYmVjYXVzZSBgd2FpdEZvcmAgZG9lc24ndCB0cmlnZ2VyIGFuIGluYWN0aXZlIGZ1bmN0aW9uIHRvIGRvIGFueXRoaW5nLFxuICAgICAqIGl0IGp1c3QgcnVucyBgZ2V0RnVuY3Rpb25gIGFuZCBjaGVja3MgdGhlIHN0YXRlLlxuICAgICAqL1xuICAgIHJldHVybiBhd2FpdCBsYW1iZGEuaW52b2tlKHJlcSkucHJvbWlzZSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXR1cyBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uIGlzIGNoZWNrZWQgZXZlcnkgc2Vjb25kIGZvciB1cCB0byAzMDAgc2Vjb25kcy5cbiAgICAgKiBFeGl0cyB0aGUgbG9vcCBvbiAnQWN0aXZlJyBzdGF0ZSBhbmQgdGhyb3dzIGFuIGVycm9yIG9uICdJbmFjdGl2ZScgb3IgJ0ZhaWxlZCcuXG4gICAgICpcbiAgICAgKiBBbmQgbm93IHdlIHdhaXQuXG4gICAgICovXG4gICAgYXdhaXQgbGFtYmRhLndhaXRGb3IoJ2Z1bmN0aW9uQWN0aXZlVjInLCB7XG4gICAgICBGdW5jdGlvbk5hbWU6IHJlcS5GdW5jdGlvbk5hbWUsXG4gICAgfSkucHJvbWlzZSgpO1xuICAgIHJldHVybiBhd2FpdCBsYW1iZGEuaW52b2tlKHJlcSkucHJvbWlzZSgpO1xuICB9XG59XG5cbmV4cG9ydCBsZXQgc3RhcnRFeGVjdXRpb24gPSBkZWZhdWx0U3RhcnRFeGVjdXRpb247XG5leHBvcnQgbGV0IGludm9rZUZ1bmN0aW9uID0gZGVmYXVsdEludm9rZUZ1bmN0aW9uO1xuZXhwb3J0IGxldCBodHRwUmVxdWVzdCA9IGRlZmF1bHRIdHRwUmVxdWVzdDtcbiJdfQ== \ No newline at end of file diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/util.js b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/util.js similarity index 100% rename from packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/util.js rename to packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/util.js diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/cdk.out b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/cdk.out +++ b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/integ.json b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/integ.json index 77d305477e76d..0aae95cb52097 100644 --- a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/integ.json +++ b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "testCases": { "lambda-layer-kubectl-integ-test/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/lambda-layer-kubectl-integ-stack.assets.json b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/lambda-layer-kubectl-integ-stack.assets.json index 14938411a699e..68b178c09fe64 100644 --- a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/lambda-layer-kubectl-integ-stack.assets.json +++ b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/lambda-layer-kubectl-integ-stack.assets.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { "7e5f48d1e79c915595d938c932b6f0101715a162780d01a55845367e014fbcda": { "source": { @@ -27,20 +27,20 @@ } } }, - "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037": { + "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585": { "source": { - "path": "asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037", + "path": "asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip", + "objectKey": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "c9561db499a877b0b365fa1e87bf883d80b1bb21e22962350e2f5f367f40f693": { + "281f28b24c60025ec7e017770754588f6447b2342a089d75893892cd1eb1a09c": { "source": { "path": "lambda-layer-kubectl-integ-stack.template.json", "packaging": "file" @@ -48,7 +48,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "c9561db499a877b0b365fa1e87bf883d80b1bb21e22962350e2f5f367f40f693.json", + "objectKey": "281f28b24c60025ec7e017770754588f6447b2342a089d75893892cd1eb1a09c.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/lambda-layer-kubectl-integ-stack.template.json b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/lambda-layer-kubectl-integ-stack.template.json index 29611e020bcbc..f339d1b802e85 100644 --- a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/lambda-layer-kubectl-integ-stack.template.json +++ b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/lambda-layer-kubectl-integ-stack.template.json @@ -152,7 +152,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip" + "S3Key": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip" }, "Role": { "Fn::GetAtt": [ @@ -333,7 +333,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip" + "S3Key": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip" }, "Role": { "Fn::GetAtt": [ diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/lambdalayerkubectlintegtestDefaultTestDeployAssertB3B33DD7.assets.json b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/lambdalayerkubectlintegtestDefaultTestDeployAssertB3B33DD7.assets.json index d18fc594ee3cb..3fe4b410dcc04 100644 --- a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/lambdalayerkubectlintegtestDefaultTestDeployAssertB3B33DD7.assets.json +++ b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/lambdalayerkubectlintegtestDefaultTestDeployAssertB3B33DD7.assets.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/manifest.json b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/manifest.json index 7c17fe8ec56ce..665a6afa12fc0 100644 --- a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/manifest.json +++ b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "21.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "lambda-layer-kubectl-integ-stack.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,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}/c9561db499a877b0b365fa1e87bf883d80b1bb21e22962350e2f5f367f40f693.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/281f28b24c60025ec7e017770754588f6447b2342a089d75893892cd1eb1a09c.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -178,6 +172,12 @@ ] }, "displayName": "lambda-layer-kubectl-integ-test/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/tree.json b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/tree.json index 0005cc09a2cf8..6f3d226d27432 100644 --- a/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/tree.json +++ b/packages/@aws-cdk/lambda-layer-kubectl/test/integ.kubectl-layer.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.140" - } - }, "lambda-layer-kubectl-integ-stack": { "id": "lambda-layer-kubectl-integ-stack", "path": "lambda-layer-kubectl-integ-stack", @@ -80,6 +72,14 @@ "id": "ServiceRole", "path": "lambda-layer-kubectl-integ-stack/Lambda$python3.7/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "lambda-layer-kubectl-integ-stack/Lambda$python3.7/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-layer-kubectl-integ-stack/Lambda$python3.7/ServiceRole/Resource", @@ -203,6 +203,14 @@ "id": "ServiceRole", "path": "lambda-layer-kubectl-integ-stack/Providerpython3.7/framework-onEvent/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "lambda-layer-kubectl-integ-stack/Providerpython3.7/framework-onEvent/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-layer-kubectl-integ-stack/Providerpython3.7/framework-onEvent/ServiceRole/Resource", @@ -344,7 +352,7 @@ "s3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "s3Key": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip" + "s3Key": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip" }, "role": { "Fn::GetAtt": [ @@ -411,6 +419,14 @@ "id": "ServiceRole", "path": "lambda-layer-kubectl-integ-stack/Lambda$python3.9/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "lambda-layer-kubectl-integ-stack/Lambda$python3.9/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-layer-kubectl-integ-stack/Lambda$python3.9/ServiceRole/Resource", @@ -534,6 +550,14 @@ "id": "ServiceRole", "path": "lambda-layer-kubectl-integ-stack/Providerpython3.9/framework-onEvent/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "lambda-layer-kubectl-integ-stack/Providerpython3.9/framework-onEvent/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-layer-kubectl-integ-stack/Providerpython3.9/framework-onEvent/ServiceRole/Resource", @@ -675,7 +699,7 @@ "s3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "s3Key": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip" + "s3Key": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip" }, "role": { "Fn::GetAtt": [ @@ -733,6 +757,22 @@ "fqn": "@aws-cdk/core.CustomResource", "version": "0.0.0" } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "lambda-layer-kubectl-integ-stack/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "lambda-layer-kubectl-integ-stack/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } } }, "constructInfo": { @@ -753,12 +793,30 @@ "path": "lambda-layer-kubectl-integ-test/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.140" + "version": "10.1.168" } }, "DeployAssert": { "id": "DeployAssert", "path": "lambda-layer-kubectl-integ-test/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "lambda-layer-kubectl-integ-test/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "lambda-layer-kubectl-integ-test/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } + } + }, "constructInfo": { "fqn": "@aws-cdk/core.Stack", "version": "0.0.0" @@ -775,6 +833,14 @@ "fqn": "@aws-cdk/integ-tests.IntegTest", "version": "0.0.0" } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } } }, "constructInfo": { diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/package.json b/packages/@aws-cdk/lambda-layer-node-proxy-agent/package.json index 3fc037f1eb102..49108e4f703a9 100644 --- a/packages/@aws-cdk/lambda-layer-node-proxy-agent/package.json +++ b/packages/@aws-cdk/lambda-layer-node-proxy-agent/package.json @@ -84,14 +84,14 @@ "dependencies": { "@aws-cdk/aws-lambda": "0.0.0", "@aws-cdk/core": "0.0.0", - "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.21", + "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.38", "constructs": "^10.0.0" }, "homepage": "https://github.com/aws/aws-cdk", "peerDependencies": { "@aws-cdk/aws-lambda": "0.0.0", "@aws-cdk/core": "0.0.0", - "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.21", + "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.38", "constructs": "^10.0.0" }, "engines": { diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/outbound.js b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/outbound.js deleted file mode 100644 index 70203dcc42f3f..0000000000000 --- a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/outbound.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.httpRequest = exports.invokeFunction = exports.startExecution = void 0; -/* istanbul ignore file */ -const https = require("https"); -// eslint-disable-next-line import/no-extraneous-dependencies -const AWS = require("aws-sdk"); -const FRAMEWORK_HANDLER_TIMEOUT = 900000; // 15 minutes -// In order to honor the overall maximum timeout set for the target process, -// the default 2 minutes from AWS SDK has to be overriden: -// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#httpOptions-property -const awsSdkConfig = { - httpOptions: { timeout: FRAMEWORK_HANDLER_TIMEOUT }, -}; -async function defaultHttpRequest(options, 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); - } - }); -} -let sfn; -let lambda; -async function defaultStartExecution(req) { - if (!sfn) { - sfn = new AWS.StepFunctions(awsSdkConfig); - } - return sfn.startExecution(req).promise(); -} -async function defaultInvokeFunction(req) { - if (!lambda) { - lambda = new AWS.Lambda(awsSdkConfig); - } - return lambda.invoke(req).promise(); -} -exports.startExecution = defaultStartExecution; -exports.invokeFunction = defaultInvokeFunction; -exports.httpRequest = defaultHttpRequest; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvdXRib3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQkFBMEI7QUFDMUIsK0JBQStCO0FBQy9CLDZEQUE2RDtBQUM3RCwrQkFBK0I7QUFJL0IsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxhQUFhO0FBRXZELDRFQUE0RTtBQUM1RSwwREFBMEQ7QUFDMUQsMkZBQTJGO0FBQzNGLE1BQU0sWUFBWSxHQUF5QjtJQUN6QyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUU7Q0FDcEQsQ0FBQztBQUVGLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxPQUE2QixFQUFFLFlBQW9CO0lBQ25GLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsSUFBSSxHQUFzQixDQUFDO0FBQzNCLElBQUksTUFBa0IsQ0FBQztBQUV2QixLQUFLLFVBQVUscUJBQXFCLENBQUMsR0FBMEM7SUFDN0UsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDM0M7SUFFRCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUVELEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxHQUFpQztJQUNwRSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUN2QztJQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0FBRVUsUUFBQSxjQUFjLEdBQUcscUJBQXFCLENBQUM7QUFDdkMsUUFBQSxjQUFjLEdBQUcscUJBQXFCLENBQUM7QUFDdkMsUUFBQSxXQUFXLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uT3B0aW9ucyB9IGZyb20gJ2F3cy1zZGsvbGliL2NvbmZpZy1iYXNlJztcblxuY29uc3QgRlJBTUVXT1JLX0hBTkRMRVJfVElNRU9VVCA9IDkwMDAwMDsgLy8gMTUgbWludXRlc1xuXG4vLyBJbiBvcmRlciB0byBob25vciB0aGUgb3ZlcmFsbCBtYXhpbXVtIHRpbWVvdXQgc2V0IGZvciB0aGUgdGFyZ2V0IHByb2Nlc3MsXG4vLyB0aGUgZGVmYXVsdCAyIG1pbnV0ZXMgZnJvbSBBV1MgU0RLIGhhcyB0byBiZSBvdmVycmlkZW46XG4vLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL0NvbmZpZy5odG1sI2h0dHBPcHRpb25zLXByb3BlcnR5XG5jb25zdCBhd3NTZGtDb25maWc6IENvbmZpZ3VyYXRpb25PcHRpb25zID0ge1xuICBodHRwT3B0aW9uczogeyB0aW1lb3V0OiBGUkFNRVdPUktfSEFORExFUl9USU1FT1VUIH0sXG59O1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0SHR0cFJlcXVlc3Qob3B0aW9uczogaHR0cHMuUmVxdWVzdE9wdGlvbnMsIHJlc3BvbnNlQm9keTogc3RyaW5nKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMsIHJlc29sdmUpO1xuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgcmVxdWVzdC53cml0ZShyZXNwb25zZUJvZHkpO1xuICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cblxubGV0IHNmbjogQVdTLlN0ZXBGdW5jdGlvbnM7XG5sZXQgbGFtYmRhOiBBV1MuTGFtYmRhO1xuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0U3RhcnRFeGVjdXRpb24ocmVxOiBBV1MuU3RlcEZ1bmN0aW9ucy5TdGFydEV4ZWN1dGlvbklucHV0KTogUHJvbWlzZTxBV1MuU3RlcEZ1bmN0aW9ucy5TdGFydEV4ZWN1dGlvbk91dHB1dD4ge1xuICBpZiAoIXNmbikge1xuICAgIHNmbiA9IG5ldyBBV1MuU3RlcEZ1bmN0aW9ucyhhd3NTZGtDb25maWcpO1xuICB9XG5cbiAgcmV0dXJuIHNmbi5zdGFydEV4ZWN1dGlvbihyZXEpLnByb21pc2UoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEludm9rZUZ1bmN0aW9uKHJlcTogQVdTLkxhbWJkYS5JbnZvY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8QVdTLkxhbWJkYS5JbnZvY2F0aW9uUmVzcG9uc2U+IHtcbiAgaWYgKCFsYW1iZGEpIHtcbiAgICBsYW1iZGEgPSBuZXcgQVdTLkxhbWJkYShhd3NTZGtDb25maWcpO1xuICB9XG5cbiAgcmV0dXJuIGxhbWJkYS5pbnZva2UocmVxKS5wcm9taXNlKCk7XG59XG5cbmV4cG9ydCBsZXQgc3RhcnRFeGVjdXRpb24gPSBkZWZhdWx0U3RhcnRFeGVjdXRpb247XG5leHBvcnQgbGV0IGludm9rZUZ1bmN0aW9uID0gZGVmYXVsdEludm9rZUZ1bmN0aW9uO1xuZXhwb3J0IGxldCBodHRwUmVxdWVzdCA9IGRlZmF1bHRIdHRwUmVxdWVzdDtcbiJdfQ== \ No newline at end of file diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/cfn-response.js b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/cfn-response.js similarity index 100% rename from packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/cfn-response.js rename to packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/cfn-response.js diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/consts.js b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/consts.js similarity index 100% rename from packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/consts.js rename to packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/consts.js diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/framework.js b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/framework.js similarity index 100% rename from packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/framework.js rename to packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/framework.js diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/outbound.js b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/outbound.js new file mode 100644 index 0000000000000..cc0667d42f0e8 --- /dev/null +++ b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/outbound.js @@ -0,0 +1,69 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.httpRequest = exports.invokeFunction = exports.startExecution = void 0; +/* istanbul ignore file */ +const https = require("https"); +// eslint-disable-next-line import/no-extraneous-dependencies +const AWS = require("aws-sdk"); +const FRAMEWORK_HANDLER_TIMEOUT = 900000; // 15 minutes +// In order to honor the overall maximum timeout set for the target process, +// the default 2 minutes from AWS SDK has to be overriden: +// https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#httpOptions-property +const awsSdkConfig = { + httpOptions: { timeout: FRAMEWORK_HANDLER_TIMEOUT }, +}; +async function defaultHttpRequest(options, 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); + } + }); +} +let sfn; +let lambda; +async function defaultStartExecution(req) { + if (!sfn) { + sfn = new AWS.StepFunctions(awsSdkConfig); + } + return sfn.startExecution(req).promise(); +} +async function defaultInvokeFunction(req) { + if (!lambda) { + lambda = new AWS.Lambda(awsSdkConfig); + } + try { + /** + * Try an initial invoke. + * + * When you try to invoke a function that is inactive, the invocation fails and Lambda sets + * the function to pending state until the function resources are recreated. + * If Lambda fails to recreate the resources, the function is set to the inactive state. + * + * We're using invoke first because `waitFor` doesn't trigger an inactive function to do anything, + * it just runs `getFunction` and checks the state. + */ + return await lambda.invoke(req).promise(); + } + catch (error) { + /** + * The status of the Lambda function is checked every second for up to 300 seconds. + * Exits the loop on 'Active' state and throws an error on 'Inactive' or 'Failed'. + * + * And now we wait. + */ + await lambda.waitFor('functionActiveV2', { + FunctionName: req.FunctionName, + }).promise(); + return await lambda.invoke(req).promise(); + } +} +exports.startExecution = defaultStartExecution; +exports.invokeFunction = defaultInvokeFunction; +exports.httpRequest = defaultHttpRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvdXRib3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQkFBMEI7QUFDMUIsK0JBQStCO0FBQy9CLDZEQUE2RDtBQUM3RCwrQkFBK0I7QUFJL0IsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxhQUFhO0FBRXZELDRFQUE0RTtBQUM1RSwwREFBMEQ7QUFDMUQsMkZBQTJGO0FBQzNGLE1BQU0sWUFBWSxHQUF5QjtJQUN6QyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUU7Q0FDcEQsQ0FBQztBQUVGLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxPQUE2QixFQUFFLFlBQW9CO0lBQ25GLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsSUFBSSxHQUFzQixDQUFDO0FBQzNCLElBQUksTUFBa0IsQ0FBQztBQUV2QixLQUFLLFVBQVUscUJBQXFCLENBQUMsR0FBMEM7SUFDN0UsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDM0M7SUFFRCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUVELEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxHQUFpQztJQUNwRSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUN2QztJQUVELElBQUk7UUFDRjs7Ozs7Ozs7O1dBU0c7UUFDSCxPQUFPLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUMzQztJQUFDLE9BQU8sS0FBSyxFQUFFO1FBRWQ7Ozs7O1dBS0c7UUFDSCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7WUFDdkMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO1NBQy9CLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQzNDO0FBQ0gsQ0FBQztBQUVVLFFBQUEsY0FBYyxHQUFHLHFCQUFxQixDQUFDO0FBQ3ZDLFFBQUEsY0FBYyxHQUFHLHFCQUFxQixDQUFDO0FBQ3ZDLFFBQUEsV0FBVyxHQUFHLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbmltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhdGlvbk9wdGlvbnMgfSBmcm9tICdhd3Mtc2RrL2xpYi9jb25maWctYmFzZSc7XG5cbmNvbnN0IEZSQU1FV09SS19IQU5ETEVSX1RJTUVPVVQgPSA5MDAwMDA7IC8vIDE1IG1pbnV0ZXNcblxuLy8gSW4gb3JkZXIgdG8gaG9ub3IgdGhlIG92ZXJhbGwgbWF4aW11bSB0aW1lb3V0IHNldCBmb3IgdGhlIHRhcmdldCBwcm9jZXNzLFxuLy8gdGhlIGRlZmF1bHQgMiBtaW51dGVzIGZyb20gQVdTIFNESyBoYXMgdG8gYmUgb3ZlcnJpZGVuOlxuLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvbGF0ZXN0L0FXUy9Db25maWcuaHRtbCNodHRwT3B0aW9ucy1wcm9wZXJ0eVxuY29uc3QgYXdzU2RrQ29uZmlnOiBDb25maWd1cmF0aW9uT3B0aW9ucyA9IHtcbiAgaHR0cE9wdGlvbnM6IHsgdGltZW91dDogRlJBTUVXT1JLX0hBTkRMRVJfVElNRU9VVCB9LFxufTtcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEh0dHBSZXF1ZXN0KG9wdGlvbnM6IGh0dHBzLlJlcXVlc3RPcHRpb25zLCByZXNwb25zZUJvZHk6IHN0cmluZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gaHR0cHMucmVxdWVzdChvcHRpb25zLCByZXNvbHZlKTtcbiAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIHJlcXVlc3Qud3JpdGUocmVzcG9uc2VCb2R5KTtcbiAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmxldCBzZm46IEFXUy5TdGVwRnVuY3Rpb25zO1xubGV0IGxhbWJkYTogQVdTLkxhbWJkYTtcblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdFN0YXJ0RXhlY3V0aW9uKHJlcTogQVdTLlN0ZXBGdW5jdGlvbnMuU3RhcnRFeGVjdXRpb25JbnB1dCk6IFByb21pc2U8QVdTLlN0ZXBGdW5jdGlvbnMuU3RhcnRFeGVjdXRpb25PdXRwdXQ+IHtcbiAgaWYgKCFzZm4pIHtcbiAgICBzZm4gPSBuZXcgQVdTLlN0ZXBGdW5jdGlvbnMoYXdzU2RrQ29uZmlnKTtcbiAgfVxuXG4gIHJldHVybiBzZm4uc3RhcnRFeGVjdXRpb24ocmVxKS5wcm9taXNlKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRJbnZva2VGdW5jdGlvbihyZXE6IEFXUy5MYW1iZGEuSW52b2NhdGlvblJlcXVlc3QpOiBQcm9taXNlPEFXUy5MYW1iZGEuSW52b2NhdGlvblJlc3BvbnNlPiB7XG4gIGlmICghbGFtYmRhKSB7XG4gICAgbGFtYmRhID0gbmV3IEFXUy5MYW1iZGEoYXdzU2RrQ29uZmlnKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLyoqXG4gICAgICogVHJ5IGFuIGluaXRpYWwgaW52b2tlLlxuICAgICAqXG4gICAgICogV2hlbiB5b3UgdHJ5IHRvIGludm9rZSBhIGZ1bmN0aW9uIHRoYXQgaXMgaW5hY3RpdmUsIHRoZSBpbnZvY2F0aW9uIGZhaWxzIGFuZCBMYW1iZGEgc2V0c1xuICAgICAqIHRoZSBmdW5jdGlvbiB0byBwZW5kaW5nIHN0YXRlIHVudGlsIHRoZSBmdW5jdGlvbiByZXNvdXJjZXMgYXJlIHJlY3JlYXRlZC5cbiAgICAgKiBJZiBMYW1iZGEgZmFpbHMgdG8gcmVjcmVhdGUgdGhlIHJlc291cmNlcywgdGhlIGZ1bmN0aW9uIGlzIHNldCB0byB0aGUgaW5hY3RpdmUgc3RhdGUuXG4gICAgICpcbiAgICAgKiBXZSdyZSB1c2luZyBpbnZva2UgZmlyc3QgYmVjYXVzZSBgd2FpdEZvcmAgZG9lc24ndCB0cmlnZ2VyIGFuIGluYWN0aXZlIGZ1bmN0aW9uIHRvIGRvIGFueXRoaW5nLFxuICAgICAqIGl0IGp1c3QgcnVucyBgZ2V0RnVuY3Rpb25gIGFuZCBjaGVja3MgdGhlIHN0YXRlLlxuICAgICAqL1xuICAgIHJldHVybiBhd2FpdCBsYW1iZGEuaW52b2tlKHJlcSkucHJvbWlzZSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXR1cyBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uIGlzIGNoZWNrZWQgZXZlcnkgc2Vjb25kIGZvciB1cCB0byAzMDAgc2Vjb25kcy5cbiAgICAgKiBFeGl0cyB0aGUgbG9vcCBvbiAnQWN0aXZlJyBzdGF0ZSBhbmQgdGhyb3dzIGFuIGVycm9yIG9uICdJbmFjdGl2ZScgb3IgJ0ZhaWxlZCcuXG4gICAgICpcbiAgICAgKiBBbmQgbm93IHdlIHdhaXQuXG4gICAgICovXG4gICAgYXdhaXQgbGFtYmRhLndhaXRGb3IoJ2Z1bmN0aW9uQWN0aXZlVjInLCB7XG4gICAgICBGdW5jdGlvbk5hbWU6IHJlcS5GdW5jdGlvbk5hbWUsXG4gICAgfSkucHJvbWlzZSgpO1xuICAgIHJldHVybiBhd2FpdCBsYW1iZGEuaW52b2tlKHJlcSkucHJvbWlzZSgpO1xuICB9XG59XG5cbmV4cG9ydCBsZXQgc3RhcnRFeGVjdXRpb24gPSBkZWZhdWx0U3RhcnRFeGVjdXRpb247XG5leHBvcnQgbGV0IGludm9rZUZ1bmN0aW9uID0gZGVmYXVsdEludm9rZUZ1bmN0aW9uO1xuZXhwb3J0IGxldCBodHRwUmVxdWVzdCA9IGRlZmF1bHRIdHRwUmVxdWVzdDtcbiJdfQ== \ No newline at end of file diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/util.js b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/util.js similarity index 100% rename from packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037/util.js rename to packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585/util.js diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1.zip b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1.zip index 23f4ca7350c88..fbb7a0afe3db8 100644 Binary files a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1.zip and b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/asset.ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1.zip differ diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/cdk.out b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/cdk.out index 8ecc185e9dbee..145739f539580 100644 --- a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/cdk.out +++ b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"21.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/integ.json b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/integ.json index b35aa2f4a43a2..432a98b3f8163 100644 --- a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/integ.json +++ b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "testCases": { "lambda-layer-node-proxy-agent-integ-test/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/lambda-layer-node-proxy-agent-integ-stack.assets.json b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/lambda-layer-node-proxy-agent-integ-stack.assets.json index b0bb7d5e31b93..fb87817cbb36f 100644 --- a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/lambda-layer-node-proxy-agent-integ-stack.assets.json +++ b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/lambda-layer-node-proxy-agent-integ-stack.assets.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { "ad44c2b0638f04871c889d78e71dea90ffae67b9cc4aa4366d5102db42435ee1": { "source": { @@ -27,20 +27,20 @@ } } }, - "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037": { + "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585": { "source": { - "path": "asset.7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037", + "path": "asset.a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip", + "objectKey": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "d92b0867e764fcb66afca5961dfe575ce35b85b4467ed5270b0befc70291b086": { + "b883ea1add117070bf110900be40acfe7a91676b4d373ecac67423dfc7a3ab1e": { "source": { "path": "lambda-layer-node-proxy-agent-integ-stack.template.json", "packaging": "file" @@ -48,7 +48,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "d92b0867e764fcb66afca5961dfe575ce35b85b4467ed5270b0befc70291b086.json", + "objectKey": "b883ea1add117070bf110900be40acfe7a91676b4d373ecac67423dfc7a3ab1e.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/lambda-layer-node-proxy-agent-integ-stack.template.json b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/lambda-layer-node-proxy-agent-integ-stack.template.json index df9653a3569e1..f4912d46bdac5 100644 --- a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/lambda-layer-node-proxy-agent-integ-stack.template.json +++ b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/lambda-layer-node-proxy-agent-integ-stack.template.json @@ -152,7 +152,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip" + "S3Key": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip" }, "Role": { "Fn::GetAtt": [ diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/lambdalayernodeproxyagentintegtestDefaultTestDeployAssert951A1212.assets.json b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/lambdalayernodeproxyagentintegtestDefaultTestDeployAssert951A1212.assets.json index d7d69f16286d3..0dc65e3c8323c 100644 --- a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/lambdalayernodeproxyagentintegtestDefaultTestDeployAssert951A1212.assets.json +++ b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/lambdalayernodeproxyagentintegtestDefaultTestDeployAssert951A1212.assets.json @@ -1,5 +1,5 @@ { - "version": "21.0.0", + "version": "22.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/manifest.json b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/manifest.json index b0283918dbd1d..e19017622c318 100644 --- a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/manifest.json +++ b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "21.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "lambda-layer-node-proxy-agent-integ-stack.assets": { "type": "cdk:asset-manifest", "properties": { @@ -23,7 +17,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}/d92b0867e764fcb66afca5961dfe575ce35b85b4467ed5270b0befc70291b086.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/b883ea1add117070bf110900be40acfe7a91676b4d373ecac67423dfc7a3ab1e.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -142,6 +136,12 @@ ] }, "displayName": "lambda-layer-node-proxy-agent-integ-test/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/tree.json b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/tree.json index bca432f8f4aea..7dbf7ab9ed865 100644 --- a/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/tree.json +++ b/packages/@aws-cdk/lambda-layer-node-proxy-agent/test/integ.node-proxy-agent.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.140" - } - }, "lambda-layer-node-proxy-agent-integ-stack": { "id": "lambda-layer-node-proxy-agent-integ-stack", "path": "lambda-layer-node-proxy-agent-integ-stack", @@ -80,6 +72,14 @@ "id": "ServiceRole", "path": "lambda-layer-node-proxy-agent-integ-stack/Lambda$Node14/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "lambda-layer-node-proxy-agent-integ-stack/Lambda$Node14/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-layer-node-proxy-agent-integ-stack/Lambda$Node14/ServiceRole/Resource", @@ -203,6 +203,14 @@ "id": "ServiceRole", "path": "lambda-layer-node-proxy-agent-integ-stack/ProviderNode14/framework-onEvent/ServiceRole", "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "lambda-layer-node-proxy-agent-integ-stack/ProviderNode14/framework-onEvent/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "lambda-layer-node-proxy-agent-integ-stack/ProviderNode14/framework-onEvent/ServiceRole/Resource", @@ -344,7 +352,7 @@ "s3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "s3Key": "7215c88dd3e638d28329d4538b36cdbfb54233a4d972181795814f8b904d1037.zip" + "s3Key": "a8a62b989c7866e3ad5b24f3eb6228f8ca91ebff5f5c76f1da466f6c805c0585.zip" }, "role": { "Fn::GetAtt": [ @@ -402,6 +410,22 @@ "fqn": "@aws-cdk/core.CustomResource", "version": "0.0.0" } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "lambda-layer-node-proxy-agent-integ-stack/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "lambda-layer-node-proxy-agent-integ-stack/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } } }, "constructInfo": { @@ -422,12 +446,30 @@ "path": "lambda-layer-node-proxy-agent-integ-test/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.140" + "version": "10.1.168" } }, "DeployAssert": { "id": "DeployAssert", "path": "lambda-layer-node-proxy-agent-integ-test/DefaultTest/DeployAssert", + "children": { + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "lambda-layer-node-proxy-agent-integ-test/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "lambda-layer-node-proxy-agent-integ-test/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" + } + } + }, "constructInfo": { "fqn": "@aws-cdk/core.Stack", "version": "0.0.0" @@ -444,6 +486,14 @@ "fqn": "@aws-cdk/integ-tests.IntegTest", "version": "0.0.0" } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.1.168" + } } }, "constructInfo": { diff --git a/packages/@aws-cdk/region-info/build-tools/fact-tables.ts b/packages/@aws-cdk/region-info/build-tools/fact-tables.ts index 6d4e624526393..8392932e8d5c2 100644 --- a/packages/@aws-cdk/region-info/build-tools/fact-tables.ts +++ b/packages/@aws-cdk/region-info/build-tools/fact-tables.ts @@ -27,6 +27,7 @@ export const AWS_CDK_METADATA = new Set([ 'me-south-1', // 'me-central-1', 'sa-east-1', + // 'ap-south-2', ]); /** @@ -41,6 +42,7 @@ export const ROUTE_53_BUCKET_WEBSITE_ZONE_IDS: { [region: string]: string } = { 'ap-northeast-2': 'Z3W03O7B5YMIYP', 'ap-northeast-3': 'Z2YQB5RD63NC85', 'ap-south-1': 'Z11RGJOFQNVJUP', + 'ap-south-2': 'Z02976202B4EZMXIPMXF7', 'ap-southeast-1': 'Z3O0J2DXBE1FTB', 'ap-southeast-2': 'Z1WCIGYICN2BYD', 'ap-southeast-3': 'Z01613992JD795ZI93075', diff --git a/packages/@aws-cdk/region-info/lib/aws-entities.ts b/packages/@aws-cdk/region-info/lib/aws-entities.ts index 03c3072042e22..af5f6508d2ba5 100644 --- a/packages/@aws-cdk/region-info/lib/aws-entities.ts +++ b/packages/@aws-cdk/region-info/lib/aws-entities.ts @@ -58,6 +58,7 @@ export const AWS_REGIONS_AND_RULES: readonly (string | symbol)[] = [ 'eu-south-2', // Europe (Spain) 'ap-southeast-3', // Asia Pacific (Jakarta) 'me-central-1', // Middle East (UAE) + 'ap-south-2', // Asia Pacific (Hyderabad) ]; /** diff --git a/packages/@aws-cdk/region-info/test/__snapshots__/region-info.test.js.snap b/packages/@aws-cdk/region-info/test/__snapshots__/region-info.test.js.snap index 794fb4dd3e050..a33bddddc6207 100644 --- a/packages/@aws-cdk/region-info/test/__snapshots__/region-info.test.js.snap +++ b/packages/@aws-cdk/region-info/test/__snapshots__/region-info.test.js.snap @@ -206,6 +206,40 @@ Object { }, "vpcEndPointServiceNamePrefix": "com.amazonaws.vpce", }, + "ap-south-2": Object { + "cdkMetadataResourceAvailable": false, + "domainSuffix": "amazonaws.com", + "lambdaInsightsArmVersions": Object { + "1.0.119.0": undefined, + "1.0.135.0": undefined, + }, + "lambdaInsightsVersions": Object { + "1.0.119.0": undefined, + "1.0.135.0": undefined, + "1.0.143.0": undefined, + "1.0.54.0": undefined, + "1.0.86.0": undefined, + "1.0.89.0": undefined, + "1.0.98.0": undefined, + }, + "partition": "aws", + "s3StaticWebsiteEndpoint": "s3-website.ap-south-2.amazonaws.com", + "servicePrincipals": Object { + "application-autoscaling": "application-autoscaling.amazonaws.com", + "autoscaling": "autoscaling.amazonaws.com", + "codedeploy": "codedeploy.ap-south-2.amazonaws.com", + "ec2": "ec2.amazonaws.com", + "events": "events.amazonaws.com", + "lambda": "lambda.amazonaws.com", + "logs": "logs.ap-south-2.amazonaws.com", + "s3": "s3.amazonaws.com", + "sns": "sns.amazonaws.com", + "sqs": "sqs.amazonaws.com", + "ssm": "ssm.amazonaws.com", + "states": "states.ap-south-2.amazonaws.com", + }, + "vpcEndPointServiceNamePrefix": "com.amazonaws.vpce", + }, "ap-southeast-1": Object { "cdkMetadataResourceAvailable": true, "domainSuffix": "amazonaws.com", diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index 916af07981c5a..d8d0d03032efe 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -108,14 +108,14 @@ "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^9.1.0", - "ignore": "^5.2.0", + "ignore": "^5.2.1", "jsonschema": "^1.4.1", "minimatch": "^3.1.2", "punycode": "^2.1.1", "semver": "^7.3.8", "yaml": "1.10.2", - "@aws-cdk/asset-awscli-v1": "^2.2.16", - "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.21", + "@aws-cdk/asset-awscli-v1": "^2.2.30", + "@aws-cdk/asset-node-proxy-agent-v5": "^2.0.38", "@aws-cdk/asset-kubectl-v20": "^2.1.1" }, "devDependencies": { @@ -224,6 +224,7 @@ "@aws-cdk/aws-globalaccelerator": "0.0.0", "@aws-cdk/aws-globalaccelerator-endpoints": "0.0.0", "@aws-cdk/aws-glue": "0.0.0", + "@aws-cdk/aws-grafana": "0.0.0", "@aws-cdk/aws-greengrass": "0.0.0", "@aws-cdk/aws-greengrassv2": "0.0.0", "@aws-cdk/aws-groundstation": "0.0.0", @@ -291,6 +292,7 @@ "@aws-cdk/aws-networkmanager": "0.0.0", "@aws-cdk/aws-nimblestudio": "0.0.0", "@aws-cdk/aws-oam": "0.0.0", + "@aws-cdk/aws-opensearchserverless": "0.0.0", "@aws-cdk/aws-opensearchservice": "0.0.0", "@aws-cdk/aws-opsworks": "0.0.0", "@aws-cdk/aws-opsworkscm": "0.0.0", @@ -299,6 +301,7 @@ "@aws-cdk/aws-personalize": "0.0.0", "@aws-cdk/aws-pinpoint": "0.0.0", "@aws-cdk/aws-pinpointemail": "0.0.0", + "@aws-cdk/aws-pipes": "0.0.0", "@aws-cdk/aws-qldb": "0.0.0", "@aws-cdk/aws-quicksight": "0.0.0", "@aws-cdk/aws-ram": "0.0.0", @@ -373,9 +376,9 @@ "@aws-cdk/triggers": "0.0.0", "@aws-cdk/ubergen": "0.0.0", "@types/fs-extra": "^8.1.2", - "@types/node": "^14.18.33", + "@types/node": "^14.18.34", "constructs": "^10.0.0", - "esbuild": "^0.15.15", + "esbuild": "^0.16.6", "fs-extra": "^9.1.0", "ts-node": "^9.1.1", "typescript": "~3.8.3" diff --git a/packages/aws-cdk-migration/package.json b/packages/aws-cdk-migration/package.json index de27fe5c6fac3..40f3d2c8e0761 100644 --- a/packages/aws-cdk-migration/package.json +++ b/packages/aws-cdk-migration/package.json @@ -40,7 +40,7 @@ "devDependencies": { "@types/glob": "^7.2.0", "@types/jest": "^27.5.2", - "@types/node": "^14.18.33", + "@types/node": "^14.18.34", "@aws-cdk/cdk-build-tools": "0.0.0", "@aws-cdk/pkglint": "0.0.0" }, diff --git a/packages/aws-cdk/README.md b/packages/aws-cdk/README.md index 646d7676b68e3..5fab1e24809fa 100644 --- a/packages/aws-cdk/README.md +++ b/packages/aws-cdk/README.md @@ -588,7 +588,13 @@ Out of the box customization options are also available as arguments. To use a p - `--example-permissions-boundary` indicates the example permissions boundary, supplied by CDK - `--custom-permissions-boundary` specifies, by name a predefined, customer maintained, boundary -A few notes to add at this point. The CDK supplied permissions boundary policy should be regarded as an example. Edit the content and reference the example policy if you're testing out the feature, turn it into a new policy for actual deployments (if one does not already exist). The concern here is drift as, most likely, a permissions boundary is maintained and has dedicated conventions, naming included. +A few notes to add at this point. The CDK supplied permissions boundary policy should be regarded as +an example. Edit the content and reference the example policy if you're testing out the feature, turn +it into a new policy for actual deployments (if one does not already exist). The concern here is drift +as, most likely, a permissions boundary is maintained and has dedicated conventions, naming included. + +For more information on configuring permissions, including using permissions +boundaries see the [Security And Safety Dev Guide](https://github.com/aws/aws-cdk/wiki/Security-And-Safety-Dev-Guide) ### `cdk doctor` diff --git a/packages/aws-cdk/THIRD_PARTY_LICENSES b/packages/aws-cdk/THIRD_PARTY_LICENSES index fc44b1d72a587..4f6f25e78ba31 100644 --- a/packages/aws-cdk/THIRD_PARTY_LICENSES +++ b/packages/aws-cdk/THIRD_PARTY_LICENSES @@ -1,6 +1,6 @@ The aws-cdk package includes the following third-party software/licensing: -** @jsii/check-node@1.71.0 - https://www.npmjs.com/package/@jsii/check-node/v/1.71.0 | Apache-2.0 +** @jsii/check-node@1.72.0 - https://www.npmjs.com/package/@jsii/check-node/v/1.72.0 | Apache-2.0 jsii Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. @@ -268,7 +268,7 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH RE ---------------- -** aws-sdk@2.1260.0 - https://www.npmjs.com/package/aws-sdk/v/2.1260.0 | Apache-2.0 +** aws-sdk@2.1274.0 - https://www.npmjs.com/package/aws-sdk/v/2.1274.0 | Apache-2.0 AWS SDK for JavaScript Copyright 2012-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. @@ -2208,7 +2208,7 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------- -** minimatch@5.1.0 - https://www.npmjs.com/package/minimatch/v/5.1.0 | ISC +** minimatch@5.1.1 - https://www.npmjs.com/package/minimatch/v/5.1.1 | ISC The ISC License Copyright (c) 2011-2022 Isaac Z. Schlueter and Contributors @@ -3612,7 +3612,7 @@ OTHER DEALINGS IN THE SOFTWARE. ---------------- -** vm2@3.9.11 - https://www.npmjs.com/package/vm2/v/3.9.11 | MIT +** vm2@3.9.13 - https://www.npmjs.com/package/vm2/v/3.9.13 | MIT ---------------- diff --git a/packages/aws-cdk/lib/api/util/cloudformation.ts b/packages/aws-cdk/lib/api/util/cloudformation.ts index e4fa597e506b4..66f7752371f7c 100644 --- a/packages/aws-cdk/lib/api/util/cloudformation.ts +++ b/packages/aws-cdk/lib/api/util/cloudformation.ts @@ -371,6 +371,14 @@ export async function stabilizeStack(cfn: CloudFormation, stackName: string) { if (status.isInProgress) { debug('Stack %s has an ongoing operation in progress and is not stable (%s)', stackName, status); return undefined; + } else if (status.isReviewInProgress) { + // This may happen if a stack creation operation is interrupted before the ChangeSet execution starts. Recovering + // from this would requiring manual intervention (deleting or executing the pending ChangeSet), and failing to do + // so will result in an endless wait here (the ChangeSet wont delete or execute itself). Instead of blocking + // "forever" we proceed as if the stack was existing and stable. If there is a concurrent operation that just + // hasn't finished proceeding just yet, either this operation or the concurrent one may fail due to the other one + // having made progress. Which is fine. I guess. + debug('Stack %s is in REVIEW_IN_PROGRESS state. Considering this is a stable status (%s)', stackName, status); } return stack; diff --git a/packages/aws-cdk/lib/api/util/cloudformation/stack-status.ts b/packages/aws-cdk/lib/api/util/cloudformation/stack-status.ts index 76069868cf99b..8e2ae674a9074 100644 --- a/packages/aws-cdk/lib/api/util/cloudformation/stack-status.ts +++ b/packages/aws-cdk/lib/api/util/cloudformation/stack-status.ts @@ -26,7 +26,11 @@ export class StackStatus { } get isInProgress(): boolean { - return this.name.endsWith('_IN_PROGRESS'); + return this.name.endsWith('_IN_PROGRESS') && !this.isReviewInProgress; + } + + get isReviewInProgress(): boolean { + return this.name === 'REVIEW_IN_PROGRESS'; } get isNotFound(): boolean { diff --git a/packages/aws-cdk/lib/init-templates/app/javascript/package.json b/packages/aws-cdk/lib/init-templates/app/javascript/package.json index 065a5f226d93a..976b94ae09bf4 100644 --- a/packages/aws-cdk/lib/init-templates/app/javascript/package.json +++ b/packages/aws-cdk/lib/init-templates/app/javascript/package.json @@ -11,7 +11,7 @@ }, "devDependencies": { "aws-cdk": "%cdk-version%", - "jest": "^27.5.1" + "jest": "^29.3.1" }, "dependencies": { "aws-cdk-lib": "%cdk-version%", 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 5e8c69ae41a4d..d3818697611ed 100644 --- a/packages/aws-cdk/lib/init-templates/app/typescript/package.json +++ b/packages/aws-cdk/lib/init-templates/app/typescript/package.json @@ -11,15 +11,13 @@ "cdk": "cdk" }, "devDependencies": { - "@types/babel__traverse": "7.18.2", - "@types/jest": "^27.5.2", - "@types/node": "10.17.27", - "@types/prettier": "2.6.0", - "jest": "^27.5.1", - "ts-jest": "^27.1.4", + "@types/jest": "^29.2.4", + "@types/node": "18.11.15", + "jest": "^29.3.1", + "ts-jest": "^29.0.3", "aws-cdk": "%cdk-version%", "ts-node": "^10.9.1", - "typescript": "~3.9.7" + "typescript": "~4.9.4" }, "dependencies": { "aws-cdk-lib": "%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 d1f389889adf0..0f45043f42ce8 100644 --- a/packages/aws-cdk/lib/init-templates/lib/typescript/package.json +++ b/packages/aws-cdk/lib/init-templates/lib/typescript/package.json @@ -9,15 +9,13 @@ "test": "jest" }, "devDependencies": { - "@types/babel__traverse": "7.18.2", - "@types/jest": "^27.5.2", - "@types/node": "10.17.27", - "@types/prettier": "2.6.0", + "@types/jest": "^29.2.4", + "@types/node": "18.11.15", "aws-cdk-lib": "%cdk-version%", "constructs": "%constructs-version%", - "jest": "^27.5.1", - "ts-jest": "^27.1.4", - "typescript": "~3.9.7" + "jest": "^29.3.1", + "ts-jest": "^29.0.3", + "typescript": "~4.9.4" }, "peerDependencies": { "aws-cdk-lib": "%cdk-version%", diff --git a/packages/aws-cdk/lib/init-templates/sample-app/javascript/package.json b/packages/aws-cdk/lib/init-templates/sample-app/javascript/package.json index 065a5f226d93a..976b94ae09bf4 100644 --- a/packages/aws-cdk/lib/init-templates/sample-app/javascript/package.json +++ b/packages/aws-cdk/lib/init-templates/sample-app/javascript/package.json @@ -11,7 +11,7 @@ }, "devDependencies": { "aws-cdk": "%cdk-version%", - "jest": "^27.5.1" + "jest": "^29.3.1" }, "dependencies": { "aws-cdk-lib": "%cdk-version%", 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 ab4ef616cc1a8..e972921ec49f0 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 @@ -11,15 +11,13 @@ "cdk": "cdk" }, "devDependencies": { + "@types/jest": "^29.2.4", + "@types/node": "18.11.15", + "jest": "^29.3.1", + "ts-jest": "^29.0.3", "aws-cdk": "%cdk-version%", - "@types/babel__traverse": "7.18.2", - "@types/jest": "^27.5.2", - "@types/node": "10.17.27", - "@types/prettier": "2.6.0", - "jest": "^27.5.1", - "ts-jest": "^27.1.4", "ts-node": "^10.9.1", - "typescript": "~3.9.7" + "typescript": "~4.9.4" }, "dependencies": { "aws-cdk-lib": "%cdk-version%", diff --git a/packages/aws-cdk/package.json b/packages/aws-cdk/package.json index 50d7e4c340afd..cd0ab111f3327 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -67,7 +67,7 @@ "@types/jest": "^27.5.2", "@types/minimatch": "^3.0.5", "@types/mockery": "^1.4.30", - "@types/node": "^14.18.33", + "@types/node": "^14.18.34", "@types/promptly": "^3.0.2", "@types/semver": "^7.3.13", "@types/sinon": "^9.0.11", @@ -96,7 +96,7 @@ "@aws-cdk/cloudformation-diff": "0.0.0", "@aws-cdk/cx-api": "0.0.0", "@aws-cdk/region-info": "0.0.0", - "@jsii/check-node": "1.71.0", + "@jsii/check-node": "1.72.0", "archiver": "^5.3.1", "aws-sdk": "^2.1211.0", "camelcase": "^6.3.0", diff --git a/packages/aws-cdk/test/integ/cli/app/app.js b/packages/aws-cdk/test/integ/cli/app/app.js index 9c6fb9abef701..fee0058d33908 100755 --- a/packages/aws-cdk/test/integ/cli/app/app.js +++ b/packages/aws-cdk/test/integ/cli/app/app.js @@ -92,7 +92,7 @@ class StackUsingContext extends cdk.Stack { }); new cdk.CfnOutput(this, 'Output', { - value: this.availabilityZones, + value: this.availabilityZones[0], }); } } diff --git a/packages/aws-cdk/test/integ/init/test-typescript-versions.sh b/packages/aws-cdk/test/integ/init/test-typescript-versions.sh new file mode 100755 index 0000000000000..8df00129a7bff --- /dev/null +++ b/packages/aws-cdk/test/integ/init/test-typescript-versions.sh @@ -0,0 +1,29 @@ +#!/bin/bash +#------------------------------------------------------------------ +# setup +#------------------------------------------------------------------ +set -eu +scriptdir=$(cd $(dirname $0) && pwd) +integdir=$(dirname $scriptdir) +source ${scriptdir}/common.bash + +header TypeScript Versions + +#------------------------------------------------------------------ + +MIN_SUPPORTED_TS_VERSION=${1:-"3.9"} +SUPPORTED_TS_VERSIONS=$(node ${integdir}/typescript-versions.js ${MIN_SUPPORTED_TS_VERSION}) + +for version in $SUPPORTED_TS_VERSIONS; do + echo "Testing against TypeScript v$version" + + setup + + cdk init -l typescript sample-app --generate-only + npm pkg delete devDependencies + npm install --save-dev typescript@$version + npm prune && npm ls + rm test/* + npm run build + cdk synth +done diff --git a/packages/aws-cdk/test/integ/typescript-versions.ts b/packages/aws-cdk/test/integ/typescript-versions.ts new file mode 100644 index 0000000000000..cf86653b99793 --- /dev/null +++ b/packages/aws-cdk/test/integ/typescript-versions.ts @@ -0,0 +1,10 @@ +import { spawnSync } from 'child_process'; + +const minSupportedVersion = process.argv.slice(2, 3); + +const { stdout } = spawnSync('npm', ['--silent', 'view', `typescript@>=${minSupportedVersion}`, 'version', '--json']); + +const versions: string[] = JSON.parse(stdout); +const minorVersions = Array.from(new Set(versions.map(v => v.split('.').slice(0, 2).join('.')))); + +process.stdout.write(minorVersions.join(' ')); diff --git a/packages/awslint/lib/rules/resource.ts b/packages/awslint/lib/rules/resource.ts index 19eb107c7f267..95894c847f71d 100644 --- a/packages/awslint/lib/rules/resource.ts +++ b/packages/awslint/lib/rules/resource.ts @@ -185,6 +185,8 @@ resourceLinter.add({ }, }); +/* +// This rule is the worst resourceLinter.add({ code: 'resource-attribute', warning: true, @@ -203,6 +205,7 @@ resourceLinter.add({ } }, }); +*/ resourceLinter.add({ code: 'grant-result', diff --git a/packages/awslint/package.json b/packages/awslint/package.json index 69e11cd2ce4cd..2a78b367895f5 100644 --- a/packages/awslint/package.json +++ b/packages/awslint/package.json @@ -18,11 +18,11 @@ "awslint": "bin/awslint" }, "dependencies": { - "@jsii/spec": "1.71.0", + "@jsii/spec": "1.72.0", "camelcase": "^6.3.0", "chalk": "^4", "fs-extra": "^9.1.0", - "jsii-reflect": "1.71.0", + "jsii-reflect": "1.72.0", "yargs": "^16.2.0" }, "devDependencies": { diff --git a/packages/cdk-assets/package.json b/packages/cdk-assets/package.json index e64cefd02e0a2..5840a366d8f61 100644 --- a/packages/cdk-assets/package.json +++ b/packages/cdk-assets/package.json @@ -35,7 +35,7 @@ "@types/jest": "^27.5.2", "@types/mime": "^2.0.3", "@types/mock-fs": "^4.13.1", - "@types/node": "^14.18.33", + "@types/node": "^14.18.34", "@types/yargs": "^15.0.14", "@aws-cdk/cdk-build-tools": "0.0.0", "jest": "^27.5.1", diff --git a/packages/cdk-cli-wrapper/package.json b/packages/cdk-cli-wrapper/package.json index 5bf914719d410..72245a7fbab5d 100644 --- a/packages/cdk-cli-wrapper/package.json +++ b/packages/cdk-cli-wrapper/package.json @@ -62,7 +62,7 @@ "license": "Apache-2.0", "devDependencies": { "@types/jest": "^27.5.2", - "@types/node": "^14.18.33", + "@types/node": "^14.18.34", "@aws-cdk/cdk-build-tools": "0.0.0", "jest": "^27.5.1", "@aws-cdk/pkglint": "0.0.0" diff --git a/packages/cdk-dasm/package.json b/packages/cdk-dasm/package.json index 3e32d65e02f43..859409ad946c8 100644 --- a/packages/cdk-dasm/package.json +++ b/packages/cdk-dasm/package.json @@ -30,7 +30,7 @@ }, "license": "Apache-2.0", "dependencies": { - "codemaker": "1.71.0", + "codemaker": "1.72.0", "yaml": "1.10.2" }, "devDependencies": { diff --git a/tools/@aws-cdk/cdk-build-tools/package.json b/tools/@aws-cdk/cdk-build-tools/package.json index 1b7c32ffd932b..3f943a65cdde8 100644 --- a/tools/@aws-cdk/cdk-build-tools/package.json +++ b/tools/@aws-cdk/cdk-build-tools/package.json @@ -57,9 +57,9 @@ "fs-extra": "^9.1.0", "jest": "^27.5.1", "jest-junit": "^13.2.0", - "jsii": "1.71.0", - "jsii-pacmak": "1.71.0", - "jsii-reflect": "1.71.0", + "jsii": "1.72.0", + "jsii-pacmak": "1.72.0", + "jsii-reflect": "1.72.0", "markdownlint-cli": "^0.32.2", "nyc": "^15.1.0", "semver": "^7.3.8", diff --git a/tools/@aws-cdk/cfn2ts/lib/genspec.ts b/tools/@aws-cdk/cfn2ts/lib/genspec.ts index ed0da0655e7b2..a05daef0f54d9 100644 --- a/tools/@aws-cdk/cfn2ts/lib/genspec.ts +++ b/tools/@aws-cdk/cfn2ts/lib/genspec.ts @@ -212,7 +212,13 @@ export function attributeDefinition(attributeName: string, spec: schema.Attribut attrType = TOKEN_NAME.fqn; } - const constructorArguments = `this.getAtt('${attributeName}')`; + let typeHint = 'STRING'; + if (attrType === 'number') { + typeHint = 'NUMBER'; + } else if (attrType === 'string[]') { + typeHint = 'STRING_LIST'; + } + const constructorArguments = `this.getAtt('${attributeName}', cdk.ResolutionTypeHint.${typeHint})`; return new Attribute(propertyName, attrType, constructorArguments); } diff --git a/tools/@aws-cdk/cfn2ts/package.json b/tools/@aws-cdk/cfn2ts/package.json index 8eb82c2f6c2ae..3c47dd001f5d2 100644 --- a/tools/@aws-cdk/cfn2ts/package.json +++ b/tools/@aws-cdk/cfn2ts/package.json @@ -32,7 +32,7 @@ "license": "Apache-2.0", "dependencies": { "@aws-cdk/cfnspec": "0.0.0", - "codemaker": "1.71.0", + "codemaker": "1.72.0", "fast-json-patch": "^3.1.1", "fs-extra": "^9.1.0", "yargs": "^16.2.0" diff --git a/tools/@aws-cdk/eslint-plugin/package.json b/tools/@aws-cdk/eslint-plugin/package.json index 29d4c7210603f..92a3feaf8ea84 100644 --- a/tools/@aws-cdk/eslint-plugin/package.json +++ b/tools/@aws-cdk/eslint-plugin/package.json @@ -17,7 +17,7 @@ "@types/eslint": "^7.29.0", "@types/fs-extra": "^8.1.2", "@types/jest": "^27.5.2", - "@types/node": "^14.18.33", + "@types/node": "^14.18.34", "@types/estree": "*", "eslint-plugin-rulesdir": "^0.2.1", "jest": "^27.5.1", diff --git a/tools/@aws-cdk/node-bundle/package.json b/tools/@aws-cdk/node-bundle/package.json index e8d64b0d4f910..b21e01d5126fb 100644 --- a/tools/@aws-cdk/node-bundle/package.json +++ b/tools/@aws-cdk/node-bundle/package.json @@ -29,7 +29,7 @@ "@types/jest": "^27.5.2", "@types/license-checker": "^25.0.3", "@types/madge": "^5.0.0", - "@types/node": "^14.18.33", + "@types/node": "^14.18.34", "@typescript-eslint/eslint-plugin": "^5", "@typescript-eslint/parser": "^5", "eslint": "^8", @@ -40,13 +40,13 @@ "jest-junit": "^13", "json-schema": "^0.4.0", "npm-check-updates": "^12", - "projen": "^0.65.33", + "projen": "^0.65.59", "standard-version": "^9", "ts-jest": "^27", "typescript": "^4.5.5" }, "dependencies": { - "esbuild": "^0.15.15", + "esbuild": "^0.16.6", "fs-extra": "^10.1.0", "license-checker": "^25.0.1", "madge": "^5.0.1", diff --git a/tools/@aws-cdk/yarn-cling/package.json b/tools/@aws-cdk/yarn-cling/package.json index 1ad00d9576e1c..63bf9267b4f45 100644 --- a/tools/@aws-cdk/yarn-cling/package.json +++ b/tools/@aws-cdk/yarn-cling/package.json @@ -39,7 +39,7 @@ "devDependencies": { "@aws-cdk/pkglint": "0.0.0", "@types/jest": "^27.5.2", - "@types/node": "^14.18.33", + "@types/node": "^14.18.34", "@types/semver": "^7.3.13", "@types/yarnpkg__lockfile": "^1.1.5", "jest": "^27.5.1", diff --git a/version.v2.json b/version.v2.json index 737fbef9f2cee..8e92aa8457643 100644 --- a/version.v2.json +++ b/version.v2.json @@ -1,4 +1,4 @@ { - "version": "2.53.0", - "alphaVersion": "2.53.0-alpha.0" + "version": "2.55.0", + "alphaVersion": "2.55.0-alpha.0" } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 59cb9a55a6ced..1990c9ea63852 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35,25 +35,25 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" -"@aws-cdk/asset-awscli-v1@^2.2.16": - version "2.2.16" - resolved "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.16.tgz#e989372ebfc8540681102824545f611afaa0e3dc" - integrity sha512-xSz4m+F/lbbG/FpVI5ybcpbn5VylvaP3T5rtShLndZLRVY0nLkJ0jDn3zBT9d3ZqEInV+HcLSAMOe0ELWN9UKg== +"@aws-cdk/asset-awscli-v1@^2.2.30": + version "2.2.30" + resolved "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.30.tgz#68bcbeacce590fcc0570c9e3cfc48b2ec6de9a9f" + integrity sha512-mFRF5n1jxjKpX8ZZSCRhJc6Hj8BkeZFUPwK0j6jRcouQQZHsZyydbf4UuzMYQ4SZU6cCLM7DKmWO0Kx156ZSnw== "@aws-cdk/asset-kubectl-v20@^2.1.1": version "2.1.1" resolved "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.1.tgz#d01c1efb867fb7f2cfd8c8b230b8eae16447e156" integrity sha512-U1ntiX8XiMRRRH5J1IdC+1t5CE89015cwyt5U63Cpk0GnMlN5+h9WsWMlKlPXZR4rdq/m806JRlBMRpBUB2Dhw== -"@aws-cdk/asset-node-proxy-agent-v5@^2.0.21": - version "2.0.21" - resolved "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.21.tgz#dec9cfe82da64dffaa6c3f2413a195f587a36828" - integrity sha512-wf1GnVxrtICy96I6YrnksUoJf0N4QlHsgxT1JCjy5jgCd0A2I4LJxCUZRBHeoyoTSYvEvLPDjOWzsYIwo6cJtQ== +"@aws-cdk/asset-node-proxy-agent-v5@^2.0.38": + version "2.0.38" + resolved "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.38.tgz#6765bef55f95220c52decb4adba8f75c1817b0f7" + integrity sha512-BBwAjORhuUkTGO3CxGS5Evcp5n20h9v06Sftn2R1DuSm8zIoUlPsNlI1HUk8XqYuoEI4aD7IKRQBLglv09ciJQ== -"@aws-cdk/lambda-layer-kubectl-v24@^2.0.27": - version "2.0.27" - resolved "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl-v24/-/lambda-layer-kubectl-v24-2.0.27.tgz#453d0c87b14808088506ee5eb8209670ce6b42ba" - integrity sha512-U2mJ9TUvsXmmhj1dVUG7EXBK7EEOhU4pYUYxWqseeugVkFz5RAxa955AfrnIjAhD9tv7Q9I8zhhSn6pxk9Yq4w== +"@aws-cdk/lambda-layer-kubectl-v24@^2.0.57": + version "2.0.57" + resolved "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl-v24/-/lambda-layer-kubectl-v24-2.0.57.tgz#87927a32edf6a9c53e280ccbce5af0db316fbcbe" + integrity sha512-ejrHHiGxmayS8/ZgHChIZrWo7bBDvIlVHcURWxoNSZ79/udhFRuDsZIoIUBYuTfTnCTaPy2G2rSB5BhaKR2dIQ== "@babel/code-frame@7.12.11": version "7.12.11" @@ -70,37 +70,37 @@ "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.20.0": - version "7.20.1" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz#f2e6ef7790d8c8dbf03d379502dcc246dcce0b30" - integrity sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ== + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz#86f172690b093373a933223b4745deeb6049e733" + integrity sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g== "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": - version "7.20.2" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz#8dc9b1620a673f92d3624bd926dc49a52cf25b92" - integrity sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g== + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz#45e2114dc6cd4ab167f81daf7820e8fa1250d113" + integrity sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.2" + "@babel/generator" "^7.20.5" "@babel/helper-compilation-targets" "^7.20.0" "@babel/helper-module-transforms" "^7.20.2" - "@babel/helpers" "^7.20.1" - "@babel/parser" "^7.20.2" + "@babel/helpers" "^7.20.5" + "@babel/parser" "^7.20.5" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.1" - "@babel/types" "^7.20.2" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.20.1", "@babel/generator@^7.20.2", "@babel/generator@^7.7.2": - version "7.20.4" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz#4d9f8f0c30be75fd90a0562099a26e5839602ab8" - integrity sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA== +"@babel/generator@^7.20.5", "@babel/generator@^7.7.2": + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz#cb25abee3178adf58d6814b68517c62bdbfdda95" + integrity sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA== dependencies: - "@babel/types" "^7.20.2" + "@babel/types" "^7.20.5" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -189,14 +189,14 @@ resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== -"@babel/helpers@^7.20.1": - version "7.20.1" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz#2ab7a0fcb0a03b5bf76629196ed63c2d7311f4c9" - integrity sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg== +"@babel/helpers@^7.20.5": + version "7.20.6" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz#e64778046b70e04779dfbdf924e7ebb45992c763" + integrity sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w== dependencies: "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.1" - "@babel/types" "^7.20.0" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" "@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": version "7.18.6" @@ -207,10 +207,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.20.1", "@babel/parser@^7.20.2": - version "7.20.3" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz#5358cf62e380cf69efcb87a7bb922ff88bfac6e2" - integrity sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.20.5": + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8" + integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -312,26 +312,26 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.20.1", "@babel/traverse@^7.7.2": - version "7.20.1" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz#9b15ccbf882f6d107eeeecf263fbcdd208777ec8" - integrity sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA== +"@babel/traverse@^7.20.1", "@babel/traverse@^7.20.5", "@babel/traverse@^7.7.2": + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz#78eb244bea8270fdda1ef9af22a5d5e5b7e57133" + integrity sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.1" + "@babel/generator" "^7.20.5" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.19.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.1" - "@babel/types" "^7.20.0" + "@babel/parser" "^7.20.5" + "@babel/types" "^7.20.5" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.20.2" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz#67ac09266606190f496322dbaff360fdaa5e7842" - integrity sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog== +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84" + integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg== dependencies: "@babel/helper-string-parser" "^7.19.4" "@babel/helper-validator-identifier" "^7.19.1" @@ -354,15 +354,115 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@esbuild/android-arm@0.15.15": - version "0.15.15" - resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.15.tgz#35b3cc0f9e69cb53932d44f60b99dd440335d2f0" - integrity sha512-JJjZjJi2eBL01QJuWjfCdZxcIgot+VoK6Fq7eKF9w4YHm9hwl7nhBR1o2Wnt/WcANk5l9SkpvrldW1PLuXxcbw== - -"@esbuild/linux-loong64@0.15.15": - version "0.15.15" - resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.15.tgz#32c65517a09320b62530867345222fde7794fbe1" - integrity sha512-lhz6UNPMDXUhtXSulw8XlFAtSYO26WmHQnCi2Lg2p+/TMiJKNLtZCYUxV4wG6rZMzXmr8InGpNwk+DLT2Hm0PA== +"@esbuild/android-arm64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.6.tgz#670061e921b2ef56adfa04ed66013e892136ec58" + integrity sha512-5mSVUNQoEpnvWBgMnEKlHGjrK/3kqRoj+YkErK+RbKMlxCGzzkqh+vSGY0pq+RCobAXs0BlBQMQ+8ZutAkyStw== + +"@esbuild/android-arm@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.6.tgz#450a79c5b04f955106515b0d24d0a428f3b7b468" + integrity sha512-wc1AyHlFS8eejfAdePn2wr8/5zEa+FvF3ipBeTo4Qm9Xl0A0miTUfphwzXa3xdxU2pHimRCzIAUhjlbSSts8JQ== + +"@esbuild/android-x64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.6.tgz#d62788083113d54456c79d8aefb4a8f922ff9100" + integrity sha512-zqbsOaB908GEO4JyVlkV5a9jjHVk35eR6dd3VvOdbu0u0BufaCblFjslbUP8ARGoLS77TWRe1mBpbcySkyybKQ== + +"@esbuild/darwin-arm64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.6.tgz#2d1c78ce0752236fa088fc3cc4e33a4fd3d26c84" + integrity sha512-uc46Du5AiooWidDIkXeU3HWIuLTzVbYp95slpd9SdDH7FjXWgiiEo7DXzoUoPxGwkUfPgQvvgFKx3TqsYvy68w== + +"@esbuild/darwin-x64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.6.tgz#873b80540e5e8f0d1b87e2a48e7bfaecc097bfc0" + integrity sha512-ND/o8hoEpXxIOqhRbt73tyvnu3WWA8MeuMAVww0crdubpzzEevH0S8r6uRjrHn1H4etRSmWwTbM3rHul68BJOA== + +"@esbuild/freebsd-arm64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.6.tgz#3d432d5e9fa17955f1e8b23255a00207f22891c0" + integrity sha512-mMHz7ePkfVXW5wEhRR0XtoTlXDa5F1hIoxnfoeY+G0wWs4Q3HZgHZrXw3PSO26JnZOxIgyV/OuWIP87nQoWegQ== + +"@esbuild/freebsd-x64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.6.tgz#7e892ec08c9a11863e86feff169452f3cde967af" + integrity sha512-/BneBfb5v+VAqjDLt8Q/5llb7smIEJVPd1afNJDShRfj2qr5nIwh1FJaOjoEWe6I1sucdKJ/EbwOujH+iBkW/g== + +"@esbuild/linux-arm64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.6.tgz#d1e2b0099cb19dce96ef9e4d4b94bc861c9b39cc" + integrity sha512-1h2EyMOB9X2VfFzBv4/Xo+OcGj3fmZEwvGxOdDRPxSP8ZVQiqc4XesCVur85VjP0MLPC+y7PioDc/uWpwFadFw== + +"@esbuild/linux-arm@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.6.tgz#ecb1543b12c27f7e4c7ad67d5e13d9a08d034e55" + integrity sha512-hdw0JS24ToFAnWJJbexr62ZRTcl/yJSPeNZR4fAAJY4PcghgQcnp8lO5MdxBe2QCNz3i5WYCoGZcU4+TBJJMDg== + +"@esbuild/linux-ia32@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.6.tgz#916c13e4076d03cabbbfaa6735e6c195fe332932" + integrity sha512-MyBWPjAMAlnkYANHCjeun2QsOn5cY1RxXAqnG0hE+fEmeX/hJK9pj6wQ5QptAew7sKt9flcOLKEB/hn2mr/xUw== + +"@esbuild/linux-loong64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.6.tgz#d337a6cfb132288ac59e1f028be9b16cf4c7d339" + integrity sha512-wJAE0pZrY47xWRIYkBrOYRKWJ9vE1XBC7PtuGy4/Ii0Au2VRc52A/VxIHwRI0NyQMNRkjOD5PpS/ruhnNx7JNA== + +"@esbuild/linux-mips64el@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.6.tgz#cfcb7bcae8fbc91d07c93f3c2e26779ddaa7c738" + integrity sha512-/eR74aTs0dWrg/Y9m0H2iE6rIigkwxsaJlzlSoz6N5JspyARRXutAITveg1wGek4W5LkistZBjEeeyCnC3FT9Q== + +"@esbuild/linux-ppc64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.6.tgz#aa2b0fc6ab0dea618f23d13946032d327da7806e" + integrity sha512-zwIKMrYQzh59ftwiuXREcXwyjvsRNLELOgdIE17CwTnc5Xxj2IR9Gi8NvQcMTquFoGaHOh8O7F2zJ3vU5LQEhA== + +"@esbuild/linux-riscv64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.6.tgz#ade24a148fc7ded3a8a042f97a6441beba4f4f96" + integrity sha512-uqCmZ9GnYcD9Od9fiDYH4TLahw14S6ZgCVrIb1bBBwbAy4pEOPwB73vBX3mnG3ClHv7b5xsOYhCBZkfkoJEgMA== + +"@esbuild/linux-s390x@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.6.tgz#b3c051e15f6fd3f9af801aa2cfe2cad0e069e4ea" + integrity sha512-zt1vo5Zzu1Y+0K64wYIQR1pMVNYDbwDetrWy/4XyD4c+tnZfxGZwzZOmb65LSto8hxAYq5UG6DpHSNJ4zy5F1w== + +"@esbuild/linux-x64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.6.tgz#49368780003c0f32fc79738d20404e39429fdc48" + integrity sha512-g2aCp+XjWGbHq57ZUfyWNOMVDKr0flizfOa6BkP9Ezn2BLZ+gibxF+6M6272vfvALFYsbCUY+AyoNxuCVcaKFg== + +"@esbuild/netbsd-x64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.6.tgz#2227e9483c5a861bbecd740e525cd9b17dc01c61" + integrity sha512-q5tKkYilkgNLtp6szs/yXAHJJ4OEjoTRlHHPJtVyDj6AZsdDynrkoFUV98D+CncB9Im5CIRnPmJErb6EDvIR0Q== + +"@esbuild/openbsd-x64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.6.tgz#6c6d15c9f5797ce5f9c7bd105b867b8fbdc964b7" + integrity sha512-dR+DrQ2Dsfia71xKgdUPnf6lc3y4O8qNE4nmhEJHrR7teS0yScspommz28MaIe/8c5IubqPuOY2SYQFSExG55w== + +"@esbuild/sunos-x64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.6.tgz#3ac4275f948653a56d52eca7483f8d683bdd14ca" + integrity sha512-u0hH+njKsZCz7SHRIIkqnOCWITFL+uLaXB7ro3SSztWcx7iB//Lpg/2lkPZ7sZ1lVpO0nmaHWApZIbvMTCwz1Q== + +"@esbuild/win32-arm64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.6.tgz#8d913e77797c00e05922d46b6f74011bb0655bfd" + integrity sha512-d+hveGvPLoGQHOKVDWfWSLUFnPtdpzWdtmz3PFq4t/iLg1MMTnPy48TrgC/JFTwcxDgKJdFw6ogTXjYN1tVALw== + +"@esbuild/win32-ia32@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.6.tgz#573b4aa7389d1dc87ab1877a8ee19e2e13ad51b0" + integrity sha512-/e2x2+Gq7afiU9xxw5J0r0DCsfsWY+hmjLNzXh6O/9Kf2kFxyCLKsPyTJmj0jQ0icz5aGlxtueH2Hnm5Rczt/Q== + +"@esbuild/win32-x64@0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.6.tgz#26094ac38600cdac049cb320018bc34da9af22c2" + integrity sha512-BlXuMzOWhAcdLRzE/PQLAAyhItzvL1fRMvbmHV6k09Xiq8rZzFJB/CrfX3ZQI0nKBlfxO4sLN9H9WwK2nLo7Pg== "@eslint/eslintrc@^0.4.3": version "0.4.3" @@ -681,20 +781,20 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@jsii/check-node@1.71.0": - version "1.71.0" - resolved "https://registry.npmjs.org/@jsii/check-node/-/check-node-1.71.0.tgz#32e1b1abc9ace37ad58774079bed694ea0661b78" - integrity sha512-O4jN/3QhbUdzKVzyiP3P4X5CTPK1+g0+hSTnBSaHpi7F4T1klK+oUF9JBmhFdUtwVJE9bZuySnXkms2f/P0fsw== +"@jsii/check-node@1.72.0": + version "1.72.0" + resolved "https://registry.npmjs.org/@jsii/check-node/-/check-node-1.72.0.tgz#fde581956fb006489606ed09ef475cf2f05c2f91" + integrity sha512-OmXpp+Ipt6vhZVdVvaNCrGFgQg/FPh3wATz9WeLooMYtNPiaAmIkq29hZS1WzM4CGxJKc7T1i2e8lYPU3vGp0w== dependencies: chalk "^4.1.2" semver "^7.3.8" -"@jsii/spec@1.71.0", "@jsii/spec@^1.71.0": - version "1.71.0" - resolved "https://registry.npmjs.org/@jsii/spec/-/spec-1.71.0.tgz#d15b5f9ed9e8aa2eea9aaa9bf5d4344ab2ea5c56" - integrity sha512-qNwCoc1kMTVmjdQ6No8LG3OXAgoySd6CmFGHtRsE1Pc3sd7satYicivhUTtZQsNykf17TCcJLNEQ4aW6/lyF+g== +"@jsii/spec@1.72.0", "@jsii/spec@^1.72.0": + version "1.72.0" + resolved "https://registry.npmjs.org/@jsii/spec/-/spec-1.72.0.tgz#ce9d76ec221ed39b9f602477378bf1b957c63d8f" + integrity sha512-zlKTRU8Pu8gIFTMl7ctj+f0l5YPEjAitUfOnSSNv6rZUY20p/zPjkBBw75Nt/4wfkz4UVagWJKuangxfkpsMuw== dependencies: - ajv "^8.11.0" + ajv "^8.11.2" "@lerna/add@4.0.0": version "4.0.0" @@ -1648,9 +1748,9 @@ integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== "@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.1", "@sinonjs/commons@^1.8.3": - version "1.8.5" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz#e280c94c95f206dcfd5aca00a43f2156b758c764" - integrity sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA== + version "1.8.6" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== dependencies: type-detect "4.0.8" @@ -1749,10 +1849,10 @@ dependencies: "@types/glob" "*" -"@types/aws-lambda@^8.10.108": - version "8.10.108" - resolved "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.108.tgz#ddadf0d9182f2f5e689ce5fc05b5f711fad6d115" - integrity sha512-1yh1W1WoqK3lGHy+V/Fi55zobxrDHUUsluCWdMlOXkCvtsCmHPXOG+CQ2STIL4B1g6xi6I6XzxaF8V9+zeIFLA== +"@types/aws-lambda@^8.10.109": + version "8.10.109" + resolved "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.109.tgz#2f434cbfafe083529e365fe9c114787827a169a8" + integrity sha512-/ME92FneNyXQzrAfcnQQlW1XkCZGPDlpi2ao1MJwecN+6SbeonKeggU8eybv1DfKli90FAVT1MlIZVXfwVuCyg== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": version "7.1.20" @@ -1780,7 +1880,7 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": +"@types/babel__traverse@*", "@types/babel__traverse@7.18.2", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": version "7.18.2" resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz#235bf339d17185bdec25e024ca19cce257cc7309" integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== @@ -1892,10 +1992,10 @@ resolved "https://registry.npmjs.org/@types/license-checker/-/license-checker-25.0.3.tgz#fbe80df33f1ac9d4bc2d4c167da3c2fd2999eb73" integrity sha512-sFkIgeXh6HJR79DbTrZrsHWhfyr3q8v2Gswj3y0tRPEo57OEPVgDF/z/ePybHUGuSCwiDiAt/3YMta9ujUxQpQ== -"@types/lodash@^4.14.189": - version "4.14.189" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.189.tgz#975ff8c38da5ae58b751127b19ad5e44b5b7f6d2" - integrity sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA== +"@types/lodash@^4.14.191": + version "4.14.191" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" + integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== "@types/madge@^5.0.0": version "5.0.0" @@ -1942,19 +2042,19 @@ integrity sha512-uv53RrNdhbkV/3VmVCtfImfYCWC3GTTRn3R11Whni3EJ+gb178tkZBVNj2edLY5CMrB749dQi+SJkg87jsN8UQ== "@types/node@*": - version "18.11.9" - resolved "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" - integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== + version "18.11.15" + resolved "https://registry.npmjs.org/@types/node/-/node-18.11.15.tgz#de0e1fbd2b22b962d45971431e2ae696643d3f5d" + integrity sha512-VkhBbVo2+2oozlkdHXLrb3zjsRkpdnaU2bXmX8Wgle3PUi569eLRaHGlgETQHR7lLL1w7GiG3h9SnePhxNDecw== -"@types/node@^14.18.33": - version "14.18.33" - resolved "https://registry.npmjs.org/@types/node/-/node-14.18.33.tgz#8c29a0036771569662e4635790ffa9e057db379b" - integrity sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg== +"@types/node@^14.18.34": + version "14.18.34" + resolved "https://registry.npmjs.org/@types/node/-/node-14.18.34.tgz#cd2e6fa0dbfb08a62582a7b967558e73c32061ec" + integrity sha512-hcU9AIQVHmPnmjRK+XUUYlILlr9pQrsqSrwov/JK1pnf3GTQowVBhx54FbvM0AU/VXGH4i3+vgXS5EguR7fysA== "@types/node@^16.9.2": - version "16.18.3" - resolved "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz#d7f7ba828ad9e540270f01ce00d391c54e6e0abc" - integrity sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg== + version "16.18.9" + resolved "https://registry.npmjs.org/@types/node/-/node-16.18.9.tgz#47c491cfbc10460571d766c16526748fa9ad96a1" + integrity sha512-nhrqXYxiQ+5B/tPorWum37VgAiefi/wmfJ1QZKGKKecC8/3HqcTTJD0O+VABSPwtseMMF7NCPVT9uGgwn0YqsQ== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -2099,13 +2199,13 @@ tsutils "^3.21.0" "@typescript-eslint/eslint-plugin@^5": - version "5.44.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.44.0.tgz#105788f299050c917eb85c4d9fd04b089e3740de" - integrity sha512-j5ULd7FmmekcyWeArx+i8x7sdRHzAtXTkmDPthE4amxZOWKFK7bomoJ4r7PJ8K7PoMzD16U8MmuZFAonr1ERvw== + version "5.46.1" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.46.1.tgz#098abb4c9354e19f460d57ab18bff1f676a6cff0" + integrity sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA== dependencies: - "@typescript-eslint/scope-manager" "5.44.0" - "@typescript-eslint/type-utils" "5.44.0" - "@typescript-eslint/utils" "5.44.0" + "@typescript-eslint/scope-manager" "5.46.1" + "@typescript-eslint/type-utils" "5.46.1" + "@typescript-eslint/utils" "5.46.1" debug "^4.3.4" ignore "^5.2.0" natural-compare-lite "^1.4.0" @@ -2136,13 +2236,13 @@ debug "^4.3.1" "@typescript-eslint/parser@^5": - version "5.44.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.44.0.tgz#99e2c710a2252191e7a79113264f438338b846ad" - integrity sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA== + version "5.46.1" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.46.1.tgz#1fc8e7102c1141eb64276c3b89d70da8c0ba5699" + integrity sha512-RelQ5cGypPh4ySAtfIMBzBGyrNerQcmfA1oJvPj5f+H4jI59rl9xxpn4bonC0tQvUKOEN7eGBFWxFLK3Xepneg== dependencies: - "@typescript-eslint/scope-manager" "5.44.0" - "@typescript-eslint/types" "5.44.0" - "@typescript-eslint/typescript-estree" "5.44.0" + "@typescript-eslint/scope-manager" "5.46.1" + "@typescript-eslint/types" "5.46.1" + "@typescript-eslint/typescript-estree" "5.46.1" debug "^4.3.4" "@typescript-eslint/scope-manager@4.33.0": @@ -2153,21 +2253,21 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/scope-manager@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz#988c3f34b45b3474eb9ff0674c18309dedfc3e04" - integrity sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g== +"@typescript-eslint/scope-manager@5.46.1": + version "5.46.1" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz#70af8425c79bbc1178b5a63fb51102ddf48e104a" + integrity sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA== dependencies: - "@typescript-eslint/types" "5.44.0" - "@typescript-eslint/visitor-keys" "5.44.0" + "@typescript-eslint/types" "5.46.1" + "@typescript-eslint/visitor-keys" "5.46.1" -"@typescript-eslint/type-utils@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.44.0.tgz#bc5a6e8a0269850714a870c9268c038150dfb3c7" - integrity sha512-A1u0Yo5wZxkXPQ7/noGkRhV4J9opcymcr31XQtOzcc5nO/IHN2E2TPMECKWYpM3e6olWEM63fq/BaL1wEYnt/w== +"@typescript-eslint/type-utils@5.46.1": + version "5.46.1" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.46.1.tgz#195033e4b30b51b870dfcf2828e88d57b04a11cc" + integrity sha512-V/zMyfI+jDmL1ADxfDxjZ0EMbtiVqj8LUGPAGyBkXXStWmCUErMpW873zEHsyguWCuq2iN4BrlWUkmuVj84yng== dependencies: - "@typescript-eslint/typescript-estree" "5.44.0" - "@typescript-eslint/utils" "5.44.0" + "@typescript-eslint/typescript-estree" "5.46.1" + "@typescript-eslint/utils" "5.46.1" debug "^4.3.4" tsutils "^3.21.0" @@ -2176,10 +2276,10 @@ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/types@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.44.0.tgz#f3f0b89aaff78f097a2927fe5688c07e786a0241" - integrity sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ== +"@typescript-eslint/types@5.46.1": + version "5.46.1" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz#4e9db2107b9a88441c4d5ecacde3bb7a5ebbd47e" + integrity sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w== "@typescript-eslint/typescript-estree@4.33.0", "@typescript-eslint/typescript-estree@^4.33.0": version "4.33.0" @@ -2194,29 +2294,29 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz#0461b386203e8d383bb1268b1ed1da9bc905b045" - integrity sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw== +"@typescript-eslint/typescript-estree@5.46.1": + version "5.46.1" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz#5358088f98a8f9939355e0996f9c8f41c25eced2" + integrity sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg== dependencies: - "@typescript-eslint/types" "5.44.0" - "@typescript-eslint/visitor-keys" "5.44.0" + "@typescript-eslint/types" "5.46.1" + "@typescript-eslint/visitor-keys" "5.46.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.44.0.tgz#d733da4d79d6c30f1a68b531cdda1e0c1f00d52d" - integrity sha512-fMzA8LLQ189gaBjS0MZszw5HBdZgVwxVFShCO3QN+ws3GlPkcy9YuS3U4wkT6su0w+Byjq3mS3uamy9HE4Yfjw== +"@typescript-eslint/utils@5.46.1": + version "5.46.1" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.46.1.tgz#7da3c934d9fd0eb4002a6bb3429f33298b469b4a" + integrity sha512-RBdBAGv3oEpFojaCYT4Ghn4775pdjvwfDOfQ2P6qzNVgQOVrnSPe5/Pb88kv7xzYQjoio0eKHKB9GJ16ieSxvA== dependencies: "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.44.0" - "@typescript-eslint/types" "5.44.0" - "@typescript-eslint/typescript-estree" "5.44.0" + "@typescript-eslint/scope-manager" "5.46.1" + "@typescript-eslint/types" "5.46.1" + "@typescript-eslint/typescript-estree" "5.46.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" semver "^7.3.7" @@ -2229,15 +2329,15 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" -"@typescript-eslint/visitor-keys@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz#10740dc28902bb903d12ee3a005cc3a70207d433" - integrity sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ== +"@typescript-eslint/visitor-keys@5.46.1": + version "5.46.1" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz#126cc6fe3c0f83608b2b125c5d9daced61394242" + integrity sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg== dependencies: - "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/types" "5.46.1" eslint-visitor-keys "^3.3.0" -"@xmldom/xmldom@^0.8.5": +"@xmldom/xmldom@^0.8.6": version "0.8.6" resolved "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz#8a1524eb5bd5e965c1e3735476f0262469f71440" integrity sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg== @@ -2337,7 +2437,7 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1, ajv@^8.11.0: +ajv@^8.0.1, ajv@^8.11.2: version "8.11.2" resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz#aecb20b50607acf2569b6382167b65a96008bb78" integrity sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg== @@ -2523,6 +2623,11 @@ array-includes@^3.1.4: get-intrinsic "^1.1.3" is-string "^1.0.7" +array-timsort@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz#3c9e4199e54fb2b9c3fe5976396a21614ef0d926" + integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ== + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -2643,9 +2748,9 @@ aws-sdk-mock@5.6.0: traverse "^0.6.6" aws-sdk@^2.1211.0, aws-sdk@^2.596.0, aws-sdk@^2.928.0: - version "2.1260.0" - resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1260.0.tgz#3dc18f49dd4aaa18e4e9787c62f1ad02e5aaac4c" - integrity sha512-iciXVukPbhmh44xcF+5/CO15jtESqRkXuEH54XaU8IpCzbYkAcPBaS29vLRN2SRuN1Dy2S3X7SaZZxFJWLAHrg== + version "2.1274.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1274.0.tgz#cfffb1243b5b5a713c37c4bf30a7373856e76a59" + integrity sha512-s6Dg2ymytzvwTeA5ZhPvw8KkWbPEBXF/B5wmJK0QfBZwDCW3xRsfvYGTJC0w2M2hYrZOzjPYICsOspcAK333Cg== dependencies: buffer "4.9.2" events "1.1.1" @@ -3001,9 +3106,9 @@ camelcase@^6.2.0, camelcase@^6.3.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001400: - version "1.0.30001434" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz#ec1ec1cfb0a93a34a0600d37903853030520a4e5" - integrity sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA== + version "1.0.30001439" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz#ab7371faeb4adff4b74dad1718a6fd122e45d9cb" + integrity sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A== case@1.6.3, case@^1.6.3: version "1.6.3" @@ -3015,29 +3120,29 @@ caseless@~0.12.0: resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -cdk-generate-synthetic-examples@^0.1.71: - version "0.1.71" - resolved "https://registry.npmjs.org/cdk-generate-synthetic-examples/-/cdk-generate-synthetic-examples-0.1.71.tgz#9e775e77f91dc632b3b0e755bc24cd6e2e0db19b" - integrity sha512-XXb9OGhC6SrdIxQKLsLaNi441LzaNYA8mQHQoQX8PstANiICd9XsAgTTOnRdSqciSP3cwuIE9Wz5pINKxEHufQ== +cdk-generate-synthetic-examples@^0.1.92: + version "0.1.92" + resolved "https://registry.npmjs.org/cdk-generate-synthetic-examples/-/cdk-generate-synthetic-examples-0.1.92.tgz#cb484f88b504110328882112aa648de14f0a2be1" + integrity sha512-7OHs6iK4V6Px4SQPjrj5248+Pa6grS2AYo+7UylpeX1hm/tI1oaWMpZohnydhMrJk5l+vpYQ4NW2ZzldhLNFmQ== dependencies: - "@jsii/spec" "^1.71.0" + "@jsii/spec" "^1.72.0" fs-extra "^10.1.0" - jsii "^1.71.0" - jsii-reflect "^1.71.0" - jsii-rosetta "^1.71.0" + jsii "^1.72.0" + jsii-reflect "^1.72.0" + jsii-rosetta "^1.72.0" yargs "^17.6.2" -cdk8s-plus-24@2.0.28: - version "2.0.28" - resolved "https://registry.npmjs.org/cdk8s-plus-24/-/cdk8s-plus-24-2.0.28.tgz#cd5fbf531a7e4477491e44492001767e11a7f175" - integrity sha512-fnR3k4djVriOZNi4sTIqbvkmrVbhYa/+/jfgfsU7h3wA6+JzMiUWE860GEoE5FRKKJZPFqnL/PZL1MFfh7JoIg== +cdk8s-plus-24@2.0.59: + version "2.0.59" + resolved "https://registry.npmjs.org/cdk8s-plus-24/-/cdk8s-plus-24-2.0.59.tgz#6c5bee3120efb8a3c6aee7be8205cceb99bd364f" + integrity sha512-JuD/Q3lOI2Ymq67MKRmNvfl1aF1QlFhFj/Xi+7y/Q4hmh1MOl2rylKJ3W55FUGGk5XcieVntNZMFqvMxQHXHbQ== dependencies: minimatch "^3.1.2" -cdk8s@^2.5.53: - version "2.5.53" - resolved "https://registry.npmjs.org/cdk8s/-/cdk8s-2.5.53.tgz#17f6b7341c280fc7af74d638d9a5d60df849211d" - integrity sha512-uAIP+O738cp/CbKYGXN5AQ7JIBEAVCK0zzPR+RlVyvKf+YmyhD+7qj5BBSm/yBQqJ+bYryj9O74cAQ00XjiIKw== +cdk8s@^2.5.74: + version "2.5.74" + resolved "https://registry.npmjs.org/cdk8s/-/cdk8s-2.5.74.tgz#da2c0fefac4e5eafff8cfdfb2206b1a909264677" + integrity sha512-sXE9jv33fOu7VctLKCkla9UnnMejxU21JAX+IfWWFbSa05Bcouj22RTBLyGF9js7u+AqcfgnUZ+4mgxsQ5f9gg== dependencies: fast-json-patch "^3.1.1" follow-redirects "^1.15.2" @@ -3114,9 +3219,9 @@ ci-info@^2.0.0: integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== ci-info@^3.2.0: - version "3.6.2" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.6.2.tgz#362ea15378f1c39378ba786affbc1c9ef015ecfd" - integrity sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg== + version "3.7.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz#6d01b3696c59915b6ce057e4aa4adfc2fa25f5ef" + integrity sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog== cint@^8.2.1: version "8.2.1" @@ -3238,10 +3343,10 @@ co@^4.6.0: resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -codemaker@1.71.0, codemaker@^1.71.0: - version "1.71.0" - resolved "https://registry.npmjs.org/codemaker/-/codemaker-1.71.0.tgz#f065b290f33e730c877642d9456671470d3e5c38" - integrity sha512-kjpPxr5TRMYr2BG0EP9IEjQAeE6lTT9fybnCBxQdw3ebVoG8pvMshsQmoMwreL7IaloV8EYIkA+cfr/UpQ6CCg== +codemaker@1.72.0, codemaker@^1.72.0: + version "1.72.0" + resolved "https://registry.npmjs.org/codemaker/-/codemaker-1.72.0.tgz#ceef1aff84cb5d534f5be1226d5fc48103ccb50a" + integrity sha512-U4TM++FGA+vnWHTSMA8juU+C9iXn1TDauMFmn44gz9pKrbLtjGUiMjfC4vX5HachkNQgitRj6bc/g7PA4j0C3Q== dependencies: camelcase "^6.3.0" decamelize "^5.0.1" @@ -3316,6 +3421,17 @@ commander@^9.1.0, commander@~9.4.0: resolved "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== +comment-json@4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/comment-json/-/comment-json-4.2.2.tgz#5fae70a94e0c8f84a077bd31df5aa5269252f293" + integrity sha512-H8T+kl3nZesZu41zO2oNXIJWojNeK3mHxCLrsBNu6feksBXsgb+PtYz5daP5P86A0F3sz3840KVYehr04enISQ== + dependencies: + array-timsort "^1.0.3" + core-util-is "^1.0.3" + esprima "^4.0.1" + has-own-prop "^2.0.0" + repeat-string "^1.6.1" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -3390,9 +3506,9 @@ console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control- integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== constructs@^10.0.0: - version "10.1.168" - resolved "https://registry.npmjs.org/constructs/-/constructs-10.1.168.tgz#46b8578acfba2083bfc4f260b7e51a2519a50b02" - integrity sha512-tVFGDyqy6g1r+4/teAdBQayzy/UmkA1xm+eKvZ+h/Qs5P/C+IKUiwiwFNXCEFvinwuE1k2Oe6EvNjASjnYw9Zw== + version "10.1.189" + resolved "https://registry.npmjs.org/constructs/-/constructs-10.1.189.tgz#a701517dbb0070098e94e822567c4fe7d694fdf5" + integrity sha512-xBwsjkgzZVqND1qHH6JQcROtJSlJsdYYHv4Spmipf2KVGXk4v70OGfvT2vTSWXvIoivxhnzPhEPKnMmFDheCmA== conventional-changelog-angular@^5.0.12: version "5.0.13" @@ -3594,7 +3710,7 @@ core-util-is@1.0.2: resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== -core-util-is@~1.0.0: +core-util-is@^1.0.3, core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== @@ -3764,9 +3880,9 @@ decamelize@^5.0.1: integrity sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA== decimal.js@^10.2.1: - version "10.4.2" - resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e" - integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA== + version "10.4.3" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decode-uri-component@^0.2.0: version "0.2.2" @@ -3943,9 +4059,9 @@ detective-postcss@^4.0.0: postcss-values-parser "^2.0.1" detective-postcss@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/detective-postcss/-/detective-postcss-5.1.1.tgz#ec23ac3818f8be95ac3a38a8b9f3b6d43103ef87" - integrity sha512-YJMsvA0Y6/ST9abMNcQytl9iFQ2bfu4I7B74IUiAvyThfaI9Y666yipL+SrqfReoIekeIEwmGH72oeqX63mwUw== + version "5.1.3" + resolved "https://registry.npmjs.org/detective-postcss/-/detective-postcss-5.1.3.tgz#773314cd017621b7d382be81331eb0c7abbe8cc3" + integrity sha512-Wo7PUpF6wqeT1aRgajdyIdDRjFFJVxlXPRAlT1aankH/RVOgrJuEZFZ4ABxYXdzaRPO5Lkg8rHxsxpLnxdJIYA== dependencies: is-url "^1.2.4" postcss "^8.4.6" @@ -4132,11 +4248,11 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" enhanced-resolve@^5.8.3: - version "5.11.0" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.11.0.tgz#543cf6c847a85adba0c4a5e2170bded4d493919a" - integrity sha512-0Gcraf7gAJSQoPg+bTSXNhuzAYtXqLc4C011vb8S3B8XUSEkGYNBk20c68X9291VF4vvsCD8SPkr6Mza+DwU+g== + version "5.12.0" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" + integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== dependencies: - graceful-fs "^4.2.9" + graceful-fs "^4.2.4" tapable "^2.2.0" enquirer@^2.3.5: @@ -4179,9 +4295,9 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.20.4" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" - integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + version "1.20.5" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz#e6dc99177be37cacda5988e692c3fa8b218e95d2" + integrity sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -4189,6 +4305,7 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: function.prototype.name "^1.1.5" get-intrinsic "^1.1.3" get-symbol-description "^1.0.0" + gopd "^1.0.1" has "^1.0.3" has-property-descriptors "^1.0.0" has-symbols "^1.0.3" @@ -4204,8 +4321,8 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: object.assign "^4.1.4" regexp.prototype.flags "^1.4.3" safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" unbox-primitive "^1.0.2" es-array-method-boxes-properly@^1.0.0: @@ -4270,133 +4387,33 @@ es6-weak-map@^2.0.3: es6-iterator "^2.0.3" es6-symbol "^3.1.1" -esbuild-android-64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.15.tgz#fd959b034dd761d14e13dda6214b6948841ff4ff" - integrity sha512-F+WjjQxO+JQOva3tJWNdVjouFMLK6R6i5gjDvgUthLYJnIZJsp1HlF523k73hELY20WPyEO8xcz7aaYBVkeg5Q== - -esbuild-android-arm64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.15.tgz#9733b71cf0229b4356f106a455b2cfdf7884aa59" - integrity sha512-attlyhD6Y22jNyQ0fIIQ7mnPvDWKw7k6FKnsXlBvQE6s3z6s6cuEHcSgoirquQc7TmZgVCK5fD/2uxmRN+ZpcQ== - -esbuild-darwin-64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.15.tgz#fc3482fdf5e798dbc0b8b2fe13287d257a45efc6" - integrity sha512-ohZtF8W1SHJ4JWldsPVdk8st0r9ExbAOSrBOh5L+Mq47i696GVwv1ab/KlmbUoikSTNoXEhDzVpxUR/WIO19FQ== - -esbuild-darwin-arm64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.15.tgz#e922ec387c00fa84d664e14b5722fe13613f4adc" - integrity sha512-P8jOZ5zshCNIuGn+9KehKs/cq5uIniC+BeCykvdVhx/rBXSxmtj3CUIKZz4sDCuESMbitK54drf/2QX9QHG5Ag== - -esbuild-freebsd-64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.15.tgz#69a42d79137d7d3ea718414c432bc10e8bb97c68" - integrity sha512-KkTg+AmDXz1IvA9S1gt8dE24C8Thx0X5oM0KGF322DuP+P3evwTL9YyusHAWNsh4qLsR80nvBr/EIYs29VSwuA== - -esbuild-freebsd-arm64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.15.tgz#63b6d0dd492f7394f8d07a0e2b931151eb9d60c4" - integrity sha512-FUcML0DRsuyqCMfAC+HoeAqvWxMeq0qXvclZZ/lt2kLU6XBnDA5uKTLUd379WYEyVD4KKFctqWd9tTuk8C/96g== - -esbuild-linux-32@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.15.tgz#7f295795fd7e61ea57d1135f717424a6771a7472" - integrity sha512-q28Qn5pZgHNqug02aTkzw5sW9OklSo96b5nm17Mq0pDXrdTBcQ+M6Q9A1B+dalFeynunwh/pvfrNucjzwDXj+Q== - -esbuild-linux-64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.15.tgz#11a430a86403b0411ca0a355b891f1cb8c4c4ec6" - integrity sha512-217KPmWMirkf8liO+fj2qrPwbIbhNTGNVtvqI1TnOWJgcMjUWvd677Gq3fTzXEjilkx2yWypVnTswM2KbXgoAg== - -esbuild-linux-arm64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.15.tgz#b65f9a2c60e8e5b62f6cfd392cd0410f22e8c390" - integrity sha512-/ltmNFs0FivZkYsTzAsXIfLQX38lFnwJTWCJts0IbCqWZQe+jjj0vYBNbI0kmXLb3y5NljiM5USVAO1NVkdh2g== - -esbuild-linux-arm@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.15.tgz#c8e13e45a0a6f0cb145ce13ae26ce1d2551d9bcc" - integrity sha512-RYVW9o2yN8yM7SB1yaWr378CwrjvGCyGybX3SdzPHpikUHkME2AP55Ma20uNwkNyY2eSYFX9D55kDrfQmQBR4w== - -esbuild-linux-mips64le@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.15.tgz#d4c24d47e43966fcac748c90621be7edd53456c0" - integrity sha512-PksEPb321/28GFFxtvL33yVPfnMZihxkEv5zME2zapXGp7fA1X2jYeiTUK+9tJ/EGgcNWuwvtawPxJG7Mmn86A== - -esbuild-linux-ppc64le@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.15.tgz#2eba53fe2282438ceca5471bdb57ba2e00216ed6" - integrity sha512-ek8gJBEIhcpGI327eAZigBOHl58QqrJrYYIZBWQCnH3UnXoeWMrMZLeeZL8BI2XMBhP+sQ6ERctD5X+ajL/AIA== - -esbuild-linux-riscv64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.15.tgz#1afa8dfe55a6c312f1904ee608b81417205f5027" - integrity sha512-H5ilTZb33/GnUBrZMNJtBk7/OXzDHDXjIzoLXHSutwwsLxSNaLxzAaMoDGDd/keZoS+GDBqNVxdCkpuiRW4OSw== - -esbuild-linux-s390x@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.15.tgz#1f7b3c4429c8ca99920ba6bf356ccc5b38fabd34" - integrity sha512-jKaLUg78mua3rrtrkpv4Or2dNTJU7bgHN4bEjT4OX4GR7nLBSA9dfJezQouTxMmIW7opwEC5/iR9mpC18utnxQ== - -esbuild-netbsd-64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.15.tgz#d72c7155686c938c1aff126209b689c22823347c" - integrity sha512-aOvmF/UkjFuW6F36HbIlImJTTx45KUCHJndtKo+KdP8Dhq3mgLRKW9+6Ircpm8bX/RcS3zZMMmaBLkvGY06Gvw== - -esbuild-openbsd-64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.15.tgz#761bd87ecab97386948eaf667a065cb0ecaa0f76" - integrity sha512-HFFX+WYedx1w2yJ1VyR1Dfo8zyYGQZf1cA69bLdrHzu9svj6KH6ZLK0k3A1/LFPhcEY9idSOhsB2UyU0tHPxgQ== - -esbuild-sunos-64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.15.tgz#07e04cbf9747f281a967d09230a158a1be5b530c" - integrity sha512-jOPBudffG4HN8yJXcK9rib/ZTFoTA5pvIKbRrt3IKAGMq1EpBi4xoVoSRrq/0d4OgZLaQbmkHp8RO9eZIn5atA== - -esbuild-windows-32@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.15.tgz#130d1982cc41fb67461e9f8a65c6ebd13a1f35bb" - integrity sha512-MDkJ3QkjnCetKF0fKxCyYNBnOq6dmidcwstBVeMtXSgGYTy8XSwBeIE4+HuKiSsG6I/mXEb++px3IGSmTN0XiA== - -esbuild-windows-64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.15.tgz#638bdf495c109c1882e8b0529cb8e2fea11383fb" - integrity sha512-xaAUIB2qllE888SsMU3j9nrqyLbkqqkpQyWVkfwSil6BBPgcPk3zOFitTTncEKCLTQy3XV9RuH7PDj3aJDljWA== - -esbuild-windows-arm64@0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.15.tgz#5a277ce10de999d2a6465fc92a8c2a2d207ebd31" - integrity sha512-ttuoCYCIJAFx4UUKKWYnFdrVpoXa3+3WWkXVI6s09U+YjhnyM5h96ewTq/WgQj9LFSIlABQvadHSOQyAVjW5xQ== - -esbuild@^0.15.15: - version "0.15.15" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.15.15.tgz#503b70bdc18d72d8fc2962ed3ab9219249e58bbe" - integrity sha512-TEw/lwK4Zzld9x3FedV6jy8onOUHqcEX3ADFk4k+gzPUwrxn8nWV62tH0udo8jOtjFodlEfc4ypsqX3e+WWO6w== +esbuild@^0.16.6: + version "0.16.6" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.16.6.tgz#6f8aa19d2d41871f420a701e6df309337f6cb953" + integrity sha512-0Fn9lUX1yy2iP56L0BDAgnQFJfkDICdYZ0Xm6Kgdwa72AkHoKX0egau/ZIROYdjJWPLJtl9bDuW7Xs56TuKPhQ== optionalDependencies: - "@esbuild/android-arm" "0.15.15" - "@esbuild/linux-loong64" "0.15.15" - esbuild-android-64 "0.15.15" - esbuild-android-arm64 "0.15.15" - esbuild-darwin-64 "0.15.15" - esbuild-darwin-arm64 "0.15.15" - esbuild-freebsd-64 "0.15.15" - esbuild-freebsd-arm64 "0.15.15" - esbuild-linux-32 "0.15.15" - esbuild-linux-64 "0.15.15" - esbuild-linux-arm "0.15.15" - esbuild-linux-arm64 "0.15.15" - esbuild-linux-mips64le "0.15.15" - esbuild-linux-ppc64le "0.15.15" - esbuild-linux-riscv64 "0.15.15" - esbuild-linux-s390x "0.15.15" - esbuild-netbsd-64 "0.15.15" - esbuild-openbsd-64 "0.15.15" - esbuild-sunos-64 "0.15.15" - esbuild-windows-32 "0.15.15" - esbuild-windows-64 "0.15.15" - esbuild-windows-arm64 "0.15.15" + "@esbuild/android-arm" "0.16.6" + "@esbuild/android-arm64" "0.16.6" + "@esbuild/android-x64" "0.16.6" + "@esbuild/darwin-arm64" "0.16.6" + "@esbuild/darwin-x64" "0.16.6" + "@esbuild/freebsd-arm64" "0.16.6" + "@esbuild/freebsd-x64" "0.16.6" + "@esbuild/linux-arm" "0.16.6" + "@esbuild/linux-arm64" "0.16.6" + "@esbuild/linux-ia32" "0.16.6" + "@esbuild/linux-loong64" "0.16.6" + "@esbuild/linux-mips64el" "0.16.6" + "@esbuild/linux-ppc64" "0.16.6" + "@esbuild/linux-riscv64" "0.16.6" + "@esbuild/linux-s390x" "0.16.6" + "@esbuild/linux-x64" "0.16.6" + "@esbuild/netbsd-x64" "0.16.6" + "@esbuild/openbsd-x64" "0.16.6" + "@esbuild/sunos-x64" "0.16.6" + "@esbuild/win32-arm64" "0.16.6" + "@esbuild/win32-ia32" "0.16.6" + "@esbuild/win32-x64" "0.16.6" escalade@^3.1.1: version "3.1.1" @@ -4631,9 +4648,9 @@ eslint@^7.32.0: v8-compile-cache "^2.0.3" eslint@^8: - version "8.28.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz#81a680732634677cc890134bcdd9fdfea8e63d6e" - integrity sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ== + version "8.29.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz#d74a88a20fb44d59c51851625bc4ee8d0ec43f87" + integrity sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg== dependencies: "@eslint/eslintrc" "^1.3.3" "@humanwhocodes/config-array" "^0.11.6" @@ -4862,9 +4879,9 @@ fast-memoize@^2.5.2: integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.14.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" + integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== dependencies: reusify "^1.0.4" @@ -5209,7 +5226,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== @@ -5398,9 +5415,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.15.0, globals@^13.6.0, globals@^13.9.0: - version "13.18.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" - integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== + version "13.19.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" + integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== dependencies: type-fest "^0.20.2" @@ -5447,7 +5464,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -5509,6 +5526,11 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-own-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af" + integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== + has-property-descriptors@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" @@ -5695,10 +5717,10 @@ ignore@^4.0.6: resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0, ignore@~5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0, ignore@^5.2.1, ignore@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c" + integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== immediate@~3.0.5: version "3.0.6" @@ -5807,11 +5829,11 @@ inquirer@^7.3.3: through "^2.3.6" internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + version "1.0.4" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" + integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== dependencies: - get-intrinsic "^1.1.0" + get-intrinsic "^1.1.3" has "^1.0.3" side-channel "^1.0.4" @@ -6747,78 +6769,78 @@ jsesc@^2.5.1: resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -jsii-diff@1.71.0: - version "1.71.0" - resolved "https://registry.npmjs.org/jsii-diff/-/jsii-diff-1.71.0.tgz#9a3bd3c33b62ac09d762397c0f91b284601f71fe" - integrity sha512-v/HpJR33QZEf1nWlxoKUKfk23xkwgQQwcXN16xcLFB56WWoa1q6KA23YoAPn+FvsBzGhBqIdKv/2wRo/ZttkXw== +jsii-diff@1.72.0: + version "1.72.0" + resolved "https://registry.npmjs.org/jsii-diff/-/jsii-diff-1.72.0.tgz#a8689bba2886451ff1ad5da7e7383c60bc99cf3d" + integrity sha512-+rGhNuX2+pEXrGco6R36tgqtr7eg2ysLyILpCK6Rv4seiWZ8EUge/6Ifk6KzwgHmQ/v0Mk9Q2lmu8W22zWJNtQ== dependencies: - "@jsii/check-node" "1.71.0" - "@jsii/spec" "^1.71.0" + "@jsii/check-node" "1.72.0" + "@jsii/spec" "^1.72.0" fs-extra "^10.1.0" - jsii-reflect "^1.71.0" - log4js "^6.7.0" + jsii-reflect "^1.72.0" + log4js "^6.7.1" yargs "^16.2.0" -jsii-pacmak@1.71.0: - version "1.71.0" - resolved "https://registry.npmjs.org/jsii-pacmak/-/jsii-pacmak-1.71.0.tgz#5b5bfebc332a2164574b182b0219f81e13cf919d" - integrity sha512-IaAzJLcvE6fgr7PBjPm/mSb4RCmBT2Ecog8G352J/n15Vqu0vEByvsyK+kxF/ymGAEbODXVN0CV2HjxLQ5FdgA== +jsii-pacmak@1.72.0: + version "1.72.0" + resolved "https://registry.npmjs.org/jsii-pacmak/-/jsii-pacmak-1.72.0.tgz#3a981463d9fb5de0a3adf5dd297f32b1f251d523" + integrity sha512-yOrWXmtDA0CVZ21396pN0J9i9/Vh2F6EhKP9ZE/6N0G50gpTaoXDsAF4tIGe1XUMgtUcOLZUuOnMrpFk5l690A== dependencies: - "@jsii/check-node" "1.71.0" - "@jsii/spec" "^1.71.0" + "@jsii/check-node" "1.72.0" + "@jsii/spec" "^1.72.0" clone "^2.1.2" - codemaker "^1.71.0" + codemaker "^1.72.0" commonmark "^0.30.0" escape-string-regexp "^4.0.0" fs-extra "^10.1.0" - jsii-reflect "^1.71.0" - jsii-rosetta "^1.71.0" + jsii-reflect "^1.72.0" + jsii-rosetta "^1.72.0" semver "^7.3.8" spdx-license-list "^6.6.0" xmlbuilder "^15.1.1" yargs "^16.2.0" -jsii-reflect@1.71.0, jsii-reflect@^1.71.0: - version "1.71.0" - resolved "https://registry.npmjs.org/jsii-reflect/-/jsii-reflect-1.71.0.tgz#b6b3a9c68afae2e3c5bd6226cd48ef08286a994b" - integrity sha512-zaufJxtJi7X17bz0ya5Gp6TQ3m4/cbNSxvGboRo4dZGzz1Kaf4qXTlu08sN7NVM6ObTVeyp3atl1KLcf6MKIgw== +jsii-reflect@1.72.0, jsii-reflect@^1.72.0: + version "1.72.0" + resolved "https://registry.npmjs.org/jsii-reflect/-/jsii-reflect-1.72.0.tgz#33ac2529f81ff8482c01770fd66cbd31822b86b6" + integrity sha512-gEsL1QO8EY3OAjCkVt7Vnm0LeflTTXJkEYRCHdATjdXLMP3laSUWHcNuE+6KNBsVUMJr2zJgVQyi7moqRSonzw== dependencies: - "@jsii/check-node" "1.71.0" - "@jsii/spec" "^1.71.0" + "@jsii/check-node" "1.72.0" + "@jsii/spec" "^1.72.0" chalk "^4" fs-extra "^10.1.0" - oo-ascii-tree "^1.71.0" + oo-ascii-tree "^1.72.0" yargs "^16.2.0" -jsii-rosetta@1.71.0, jsii-rosetta@^1.71.0: - version "1.71.0" - resolved "https://registry.npmjs.org/jsii-rosetta/-/jsii-rosetta-1.71.0.tgz#180dd5c16bac3fe546562a343381c1341bb20850" - integrity sha512-Iu36Dxpu1JphYnicmnPvS4AsqmeOwExjenVqmGJaIJwdMG6W9ou3WM1FoUa7LzenaJiFY9jj1CvbD05xgAo+ow== +jsii-rosetta@1.72.0, jsii-rosetta@^1.72.0: + version "1.72.0" + resolved "https://registry.npmjs.org/jsii-rosetta/-/jsii-rosetta-1.72.0.tgz#4866b0149bcd3a7c333984c31fee835e7f3589d5" + integrity sha512-4B9jCfWTPU9s1FsDv7aq7C1kw/eS4WaC7uHujPr+UmALpkfRNu82paylZ5zG1vaUqcBLoQHLydvMRlUzc9xeZw== dependencies: - "@jsii/check-node" "1.71.0" - "@jsii/spec" "1.71.0" - "@xmldom/xmldom" "^0.8.5" + "@jsii/check-node" "1.72.0" + "@jsii/spec" "1.72.0" + "@xmldom/xmldom" "^0.8.6" commonmark "^0.30.0" fast-glob "^3.2.12" - jsii "1.71.0" + jsii "1.72.0" semver "^7.3.8" semver-intersect "^1.4.0" typescript "~3.9.10" - workerpool "^6.3.0" + workerpool "^6.3.1" yargs "^16.2.0" -jsii@1.71.0, jsii@^1.71.0: - version "1.71.0" - resolved "https://registry.npmjs.org/jsii/-/jsii-1.71.0.tgz#f1725de3c89462745970b6b0c9c475c2c8580554" - integrity sha512-Dn6TvKgMNEsMU/WKliSbVs93Cno238LZZeJTNXk9L6vOR3d7jjEsWh7PJ7NhdyZeft2M3RFJQDKhg8eKeKM/4g== +jsii@1.72.0, jsii@^1.72.0: + version "1.72.0" + resolved "https://registry.npmjs.org/jsii/-/jsii-1.72.0.tgz#fbed64c9cec3461a47dc9bc16a97df9fae82694a" + integrity sha512-dwMHlO5SXuwAhchGg8emAuKjQRKGEiuR+GV5SxdhzhylxbPUexSBnsxGYqVIHaXwmXBIH3cOfoiqilQ5Xm2pMg== dependencies: - "@jsii/check-node" "1.71.0" - "@jsii/spec" "^1.71.0" + "@jsii/check-node" "1.72.0" + "@jsii/spec" "^1.72.0" case "^1.6.3" chalk "^4" fast-deep-equal "^3.1.3" fs-extra "^10.1.0" - log4js "^6.7.0" + log4js "^6.7.1" semver "^7.3.8" semver-intersect "^1.4.0" sort-json "^2.0.1" @@ -7264,10 +7286,10 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log4js@^6.7.0: - version "6.7.0" - resolved "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz#fff671a74b2f6e956d135c3c756c79072809a23b" - integrity sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q== +log4js@^6.7.1: + version "6.7.1" + resolved "https://registry.npmjs.org/log4js/-/log4js-6.7.1.tgz#06e12b1ac915dd1067146ffad8215f666f7d2c51" + integrity sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ== dependencies: date-format "^4.0.14" debug "^4.3.4" @@ -7589,9 +7611,9 @@ min-indent@^1.0.0: integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== minimatch@>=3.1, minimatch@^5.0.1, minimatch@^5.1.0, minimatch@~5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + version "5.1.1" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.1.tgz#6c9dffcf9927ff2a31e74b5af11adf8b9604b022" + integrity sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g== dependencies: brace-expansion "^2.0.1" @@ -7683,9 +7705,16 @@ minipass@^2.6.0, minipass@^2.9.0: yallist "^3.0.0" minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: - version "3.3.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + version "3.3.6" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz#7cebb0f9fa7d56f0c5b17853cbe28838a8dbbd3b" + integrity sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw== dependencies: yallist "^4.0.0" @@ -7847,9 +7876,9 @@ nise@^4.0.4: path-to-regexp "^1.7.0" nise@^5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/nise/-/nise-5.1.2.tgz#a7b8909c216b3491fd4fc0b124efb69f3939b449" - integrity sha512-+gQjFi8v+tkfCuSCxfURHLhRhniE/+IaYbIphxAN2JRR9SHKhY8hgXpaXiYfHdw+gcGe4buxgbprBQFab9FkhA== + version "5.1.3" + resolved "https://registry.npmjs.org/nise/-/nise-5.1.3.tgz#f46197e5f60ae9a96401b602bd9d8239b1ee8656" + integrity sha512-U597iWTTBBYIV72986jyU382/MMZ70ApWcRmkoF1AZ75bpqOtI3Gugv/6+0jLgoDOabmcSwYBkSSAWIp1eA5cg== dependencies: "@sinonjs/commons" "^2.0.0" "@sinonjs/fake-timers" "^7.0.4" @@ -7936,9 +7965,9 @@ node-preload@^0.2.1: process-on-spawn "^1.0.0" node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + version "2.0.7" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.7.tgz#593edbc7c22860ee4d32d3933cfebdfab0c0e0e5" + integrity sha512-EJ3rzxL9pTWPjk5arA0s0dgXpnyiAbJDE6wHT62g7VsgrgQgmmZ+Ru++M1BFofncWja+Pnn3rEr3fieRySAdKQ== node-source-walk@^4.0.0, node-source-walk@^4.2.0, node-source-walk@^4.2.2: version "4.3.0" @@ -8327,10 +8356,10 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -oo-ascii-tree@^1.71.0: - version "1.71.0" - resolved "https://registry.npmjs.org/oo-ascii-tree/-/oo-ascii-tree-1.71.0.tgz#d3e06581f2a03a6f37b2a9302a0fead63cb8d06f" - integrity sha512-20AV6WE6Z9wUsmTmunnmSt7hDQCXWquYEtlkeITdHs4eGiZ/vgsf5E1TPyVLBpA6Nm0Dy9CXY87r83uotZLzbw== +oo-ascii-tree@^1.72.0: + version "1.72.0" + resolved "https://registry.npmjs.org/oo-ascii-tree/-/oo-ascii-tree-1.72.0.tgz#189a02f43a855d097cd2b13b11fe3643124a262b" + integrity sha512-MDsUvkANZaO6V62LMLSqxOROpMqmgEqC9KxPv1VDo9dwIQ5jTAHugkMEaaN9G/l2HHuzrZUgnZtmuRr8ZzXpHA== open@^7.4.2: version "7.4.2" @@ -8699,9 +8728,9 @@ patch-package@^6.5.0: yaml "^1.10.2" path-equal@^1.1.2: - version "1.2.4" - resolved "https://registry.npmjs.org/path-equal/-/path-equal-1.2.4.tgz#98b94ac8fb6348605d4c3a766866fd25055a4b3d" - integrity sha512-qYtLj9MtoSedTVGfJ1VesEKnO3378nofKJUSTKDZY658T3eXHGPCPnFQiH4bFyHg0TIRBI5qJb6MKjbv2LAmsQ== + version "1.2.5" + resolved "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz#9fcbdd5e5daee448e96f43f3bac06c666b5e982a" + integrity sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g== path-exists@^3.0.0: version "3.0.0" @@ -8823,9 +8852,9 @@ postcss-values-parser@^5.0.0: quote-unquote "^1.0.0" postcss@^8.1.7, postcss@^8.4.6: - version "8.4.19" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz#61178e2add236b17351897c8bcc0b4c8ecab56fc" - integrity sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA== + version "8.4.20" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz#64c52f509644cecad8567e949f4081d98349dc56" + integrity sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g== dependencies: nanoid "^3.3.4" picocolors "^1.0.0" @@ -8913,14 +8942,15 @@ progress@^2.0.0, progress@^2.0.3: resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -projen@^0.65.33: - version "0.65.33" - resolved "https://registry.npmjs.org/projen/-/projen-0.65.33.tgz#f2bbcfb85d3601660e36ee8899aaaf96b94b6da5" - integrity sha512-i7t7E5kyztGoCXR2BSWRYnREJ7vd1vMeREx7/BH8wZnOm5DF0HSZx/rk2X+bysJfWvPU92iu6kkGTQCGAgLlvw== +projen@^0.65.59: + version "0.65.59" + resolved "https://registry.npmjs.org/projen/-/projen-0.65.59.tgz#e1590272b444adae7c835f79c7229873a923bc49" + integrity sha512-BgZ2SbAGqTKvpGLxRzIvNTUz5s5FR4FXEPQKcNUTWXVns1MNGEMDCie4WaKWRF1Q7lIUNFDF8O1u+9Yz7PO4Fw== dependencies: "@iarna/toml" "^2.2.5" case "^1.6.3" chalk "^4.1.2" + comment-json "4.2.2" conventional-changelog-config-spec "^2.1.0" fast-json-patch "^3.1.1" fs-extra "^9.1.0" @@ -9373,6 +9403,11 @@ remove-markdown@^0.2.2: resolved "https://registry.npmjs.org/remove-markdown/-/remove-markdown-0.2.2.tgz#66b0ceeba9fb77ca9636bb1b0307ce21a32a12a6" integrity sha512-jwgEf3Yh/xi4WodWi/vPlasa9C9pMv1kz5ITOIAGjBW7PeZ/CHZCdBfJzQnn2VX2cBvf1xCuJv0tUJqn/FCMNA== +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -10043,7 +10078,7 @@ string.prototype.repeat@^0.2.0: resolved "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" integrity sha512-1BH+X+1hSthZFW+X+JaUkjkkUPwIlLEMJBLANN3hOob3RhEk5snLWNECDnYbgn/m5c5JV7Ersu1Yubaf+05cIA== -string.prototype.trimend@^1.0.5: +string.prototype.trimend@^1.0.6: version "1.0.6" resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== @@ -10052,7 +10087,7 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.5: +string.prototype.trimstart@^1.0.6: version "1.0.6" resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== @@ -10237,13 +10272,13 @@ tar@^4.4.12: yallist "^3.1.1" tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.12" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz#3b742fb05669b55671fb769ab67a7791ea1a62e6" - integrity sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw== + version "6.1.13" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" + integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^3.0.0" + minipass "^4.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" @@ -10606,9 +10641,9 @@ typescript@^3.9.10, typescript@^3.9.5, typescript@^3.9.7, typescript@~3.9.10: integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== typescript@^4.5.5: - version "4.9.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" - integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== + version "4.9.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" + integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== typescript@~3.8.3: version "3.8.3" @@ -10877,9 +10912,9 @@ verror@1.10.0: extsprintf "^1.2.0" vm2@^3.9.8: - version "3.9.11" - resolved "https://registry.npmjs.org/vm2/-/vm2-3.9.11.tgz#a880f510a606481719ec3f9803b940c5805a06fe" - integrity sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg== + version "3.9.13" + resolved "https://registry.npmjs.org/vm2/-/vm2-3.9.13.tgz#774a1a3d73b9b90b1aa45bcc5f25e349f2eef649" + integrity sha512-0rvxpB8P8Shm4wX2EKOiMp7H2zq+HUE/UwodY0pCZXs9IffIKZq6vUti5OgkVCTakKo9e/fgO4X1fkwfjWxE3Q== dependencies: acorn "^8.7.0" acorn-walk "^8.2.0" @@ -11027,7 +11062,7 @@ wordwrap@>=0.0.2, wordwrap@^1.0.0: resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -workerpool@^6.3.0, workerpool@^6.3.1: +workerpool@^6.3.1: version "6.3.1" resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.3.1.tgz#80a9b76e70556acfb1457a3984f8637717f7cdee" integrity sha512-0x7gJm1rhpn5SPG9NENOxPtbfUZZtK/qOg6gEdSqeDBA3dTeR91RJqSPjccPRCkhNfrnnl/dWxSSj5w9CtdzNA==