@kensio/yulin 1.21.2 → 1.21.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/service/athena/engine/sim-athena-column-types.d.ts +2 -0
- package/dist/service/athena/engine/sim-athena-column-types.js +4 -0
- package/dist/service/athena/engine/sim-athena-delimited-format.d.ts +7 -0
- package/dist/service/athena/engine/sim-athena-delimited-format.js +51 -0
- package/dist/service/athena/engine/sim-athena-engine-result.js +5 -0
- package/dist/service/athena/engine/sim-athena-engine-run.d.ts +22 -2
- package/dist/service/athena/engine/sim-athena-engine-run.js +21 -31
- package/dist/service/athena/engine/sim-athena-loaded-tables.d.ts +10 -0
- package/dist/service/athena/engine/sim-athena-loaded-tables.js +35 -0
- package/dist/service/athena/engine/sim-athena-parquet-module.d.ts +25 -0
- package/dist/service/athena/engine/sim-athena-parquet-module.js +39 -0
- package/dist/service/athena/engine/sim-athena-parquet-records.d.ts +13 -0
- package/dist/service/athena/engine/sim-athena-parquet-records.js +57 -0
- package/dist/service/athena/engine/sim-athena-query-engine.d.ts +23 -5
- package/dist/service/athena/engine/sim-athena-query-engine.js +31 -10
- package/dist/service/athena/engine/sim-athena-record-reader.d.ts +12 -6
- package/dist/service/athena/engine/sim-athena-record-reader.js +28 -53
- package/dist/service/athena/engine/sim-athena-sql-translation.d.ts +15 -9
- package/dist/service/athena/engine/sim-athena-sql-translation.js +25 -13
- package/dist/service/athena/engine/sim-athena-sqlite-values.d.ts +5 -0
- package/dist/service/athena/engine/sim-athena-sqlite-values.js +24 -1
- package/dist/service/athena/engine/sim-athena-table-objects.d.ts +7 -2
- package/dist/service/athena/engine/sim-athena-table-objects.js +8 -4
- package/dist/service/athena/engine/sim-athena-table-rows.js +4 -3
- package/dist/service/athena/engine/sim-athena-turn-down.d.ts +26 -0
- package/dist/service/athena/engine/sim-athena-turn-down.js +43 -0
- package/dist/service/athena/execution/sim-athena-query-completion.d.ts +3 -1
- package/dist/service/athena/execution/sim-athena-query-completion.js +7 -1
- package/dist/service/athena/index.d.ts +1 -1
- package/dist/service/athena/index.js +1 -1
- package/dist/service/athena/result/sim-athena-query-answer.d.ts +12 -0
- package/dist/service/athena/result/sim-athena-query-answer.js +26 -4
- package/dist/service/athena/sim-athena-answered-query.fixture.d.ts +2 -0
- package/dist/service/athena/sim-athena-answered-query.fixture.js +1 -0
- package/dist/service/athena/sim-athena-engine.fixture.d.ts +20 -0
- package/dist/service/athena/sim-athena-engine.fixture.js +34 -0
- package/dist/service/cloudformation/authorize/sim-cloudformation-authorization.d.ts +23 -0
- package/dist/service/cloudformation/authorize/sim-cloudformation-authorization.js +37 -0
- package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-copier.d.ts +2 -0
- package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-copier.js +1 -0
- package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-file.d.ts +7 -0
- package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-file.js +13 -1
- package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-pruner.d.ts +6 -0
- package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-pruner.js +7 -1
- package/dist/service/cloudformation/cdk/s3/bucket-deployment/notify/sim-cdk-bucket-deploy-notifier.d.ts +50 -0
- package/dist/service/cloudformation/cdk/s3/bucket-deployment/notify/sim-cdk-bucket-deploy-notifier.js +71 -0
- package/dist/service/cloudformation/cdk/s3/bucket-deployment/sim-cdk-bucket-deployment.js +6 -1
- package/dist/service/cloudformation/cdk/s3/bucket-deployment/source/sim-cdk-bucket-deploy-source.d.ts +5 -0
- package/dist/service/cloudformation/cdk/s3/bucket-deployment/source/sim-cdk-bucket-deploy-source.js +7 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-arn.d.ts +9 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-arn.js +12 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-changes.d.ts +42 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-changes.js +69 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-commands.d.ts +62 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-commands.js +89 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-execution.d.ts +31 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-execution.js +59 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-failure.d.ts +21 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-failure.js +19 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-input.d.ts +17 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-input.js +18 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack-id.d.ts +18 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack-id.js +13 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack.d.ts +45 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack.js +52 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-type.d.ts +12 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set-type.js +21 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set.d.ts +54 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set.js +49 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set.type.d.ts +35 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-set.type.js +1 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-sets.d.ts +53 -0
- package/dist/service/cloudformation/changeset/sim-cfn-change-sets.js +83 -0
- package/dist/service/cloudformation/command/create-change-set/create-change-set.command.d.ts +32 -0
- package/dist/service/cloudformation/command/create-change-set/create-change-set.command.js +1 -0
- package/dist/service/cloudformation/command/create-change-set/create-change-set.handler.d.ts +38 -0
- package/dist/service/cloudformation/command/create-change-set/create-change-set.handler.js +80 -0
- package/dist/service/cloudformation/command/create-stack/create-stack.handler.js +12 -12
- package/dist/service/cloudformation/command/delete-change-set/delete-change-set.command.d.ts +22 -0
- package/dist/service/cloudformation/command/delete-change-set/delete-change-set.command.js +1 -0
- package/dist/service/cloudformation/command/delete-change-set/delete-change-set.handler.d.ts +27 -0
- package/dist/service/cloudformation/command/delete-change-set/delete-change-set.handler.js +35 -0
- package/dist/service/cloudformation/command/delete-stack/delete-stack.command.d.ts +6 -0
- package/dist/service/cloudformation/command/delete-stack/delete-stack.handler.d.ts +11 -0
- package/dist/service/cloudformation/command/delete-stack/delete-stack.handler.js +15 -1
- package/dist/service/cloudformation/command/describe-change-set/describe-change-set.command.d.ts +48 -0
- package/dist/service/cloudformation/command/describe-change-set/describe-change-set.command.js +1 -0
- package/dist/service/cloudformation/command/describe-change-set/describe-change-set.handler.d.ts +23 -0
- package/dist/service/cloudformation/command/describe-change-set/describe-change-set.handler.js +52 -0
- package/dist/service/cloudformation/command/describe-stacks/describe-stacks.handler.d.ts +3 -0
- package/dist/service/cloudformation/command/describe-stacks/describe-stacks.handler.js +8 -4
- package/dist/service/cloudformation/command/describe-stacks/sim-cfn-described-stacks.d.ts +18 -6
- package/dist/service/cloudformation/command/describe-stacks/sim-cfn-described-stacks.js +22 -7
- package/dist/service/cloudformation/command/describe-stacks/sim-cfn-stack-describer.js +1 -1
- package/dist/service/cloudformation/command/execute-change-set/execute-change-set.command.d.ts +25 -0
- package/dist/service/cloudformation/command/execute-change-set/execute-change-set.command.js +1 -0
- package/dist/service/cloudformation/command/execute-change-set/execute-change-set.handler.d.ts +31 -0
- package/dist/service/cloudformation/command/execute-change-set/execute-change-set.handler.js +37 -0
- package/dist/service/cloudformation/command/list-change-sets/list-change-sets.command.d.ts +36 -0
- package/dist/service/cloudformation/command/list-change-sets/list-change-sets.command.js +1 -0
- package/dist/service/cloudformation/command/list-change-sets/list-change-sets.handler.d.ts +26 -0
- package/dist/service/cloudformation/command/list-change-sets/list-change-sets.handler.js +39 -0
- package/dist/service/cloudformation/command/update-stack/update-stack-previous-values.d.ts +31 -0
- package/dist/service/cloudformation/command/update-stack/update-stack-previous-values.js +52 -0
- package/dist/service/cloudformation/command/update-stack/update-stack-template.d.ts +22 -0
- package/dist/service/cloudformation/command/update-stack/update-stack-template.js +34 -0
- package/dist/service/cloudformation/command/update-stack/update-stack.command.d.ts +17 -1
- package/dist/service/cloudformation/command/update-stack/update-stack.handler.js +8 -15
- package/dist/service/cloudformation/error/sim-cloudformation.error.d.ts +21 -0
- package/dist/service/cloudformation/error/sim-cloudformation.error.js +25 -0
- package/dist/service/cloudformation/parameters/pseudo/sim-cfn-pseudo-parameters.d.ts +7 -0
- package/dist/service/cloudformation/parameters/pseudo/sim-cfn-pseudo-parameters.js +3 -1
- package/dist/service/cloudformation/parameters/sim-cfn-parameters.d.ts +9 -0
- package/dist/service/cloudformation/parameters/sim-cfn-parameters.js +12 -0
- package/dist/service/cloudformation/resource/delete/sim-cfn-resource-delete-operation.d.ts +4 -0
- package/dist/service/cloudformation/resource/delete/sim-cfn-resource-delete-operation.js +10 -0
- package/dist/service/cloudformation/resource/delete/sim-cfn-resource-retention.d.ts +44 -0
- package/dist/service/cloudformation/resource/delete/sim-cfn-resource-retention.js +33 -0
- package/dist/service/cloudformation/resource/factory/sim-cfn-resource-factory.type.d.ts +9 -0
- package/dist/service/cloudformation/resource/sim-cfn-resource-record.d.ts +15 -0
- package/dist/service/cloudformation/resource/sim-cfn-resource-record.js +21 -1
- package/dist/service/cloudformation/resource/sim-cfn-resource.d.ts +9 -7
- package/dist/service/cloudformation/resource/sim-cfn-resource.js +11 -11
- package/dist/service/cloudformation/resource/sim-cfn-resource.type.d.ts +19 -0
- package/dist/service/cloudformation/resource/state/sim-cfn-resource-deletion-state.d.ts +3 -3
- package/dist/service/cloudformation/resource/state/sim-cfn-resource-deletion-state.js +3 -3
- package/dist/service/cloudformation/resource/template/sim-cfn-resource-template-reader.d.ts +4 -0
- package/dist/service/cloudformation/resource/template/sim-cfn-resource-template-reader.js +9 -0
- package/dist/service/cloudformation/resource/update/sim-cfn-resource-update-validator.d.ts +26 -0
- package/dist/service/cloudformation/resource/update/sim-cfn-resource-update-validator.js +55 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.d.ts +37 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.js +77 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.types.d.ts +51 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.types.js +10 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-authorizers.d.ts +11 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-authorizers.js +34 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-identity.d.ts +21 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-identity.js +31 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-definition.d.ts +14 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-definition.js +1 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-function.d.ts +26 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-function.js +58 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-event-authorization.d.ts +18 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-event-authorization.js +89 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-api-auth.d.ts +15 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-api-auth.js +65 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-jwt-authorizer.d.ts +13 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-jwt-authorizer.js +60 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-lambda-authorizer.d.ts +13 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-lambda-authorizer.js +50 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-prefixes.d.ts +13 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-prefixes.js +30 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-source.d.ts +26 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-source.js +44 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-api-auth.d.ts +15 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-api-auth.js +59 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-cognito-authorizer.d.ts +11 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-cognito-authorizer.js +43 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-lambda-authorizer.d.ts +15 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-lambda-authorizer.js +67 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-template-api-auth.d.ts +26 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-template-api-auth.js +61 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-unsupported-auth.d.ts +18 -0
- package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-unsupported-auth.js +59 -0
- package/dist/service/cloudformation/sam/api/sim-cfn-sam-http-api-template.factory.js +1 -1
- package/dist/service/cloudformation/sam/api/sim-cfn-sam-http-api.d.ts +4 -0
- package/dist/service/cloudformation/sam/api/sim-cfn-sam-http-api.js +12 -5
- package/dist/service/cloudformation/sam/api/sim-cfn-sam-rest-api-template.factory.js +1 -1
- package/dist/service/cloudformation/sam/api/sim-cfn-sam-rest-api.js +7 -3
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-api-event.js +7 -3
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-cognito-event.d.ts +26 -0
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-cognito-event.js +88 -0
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-declared-event.d.ts +12 -0
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-declared-event.js +1 -0
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-function-events.js +8 -5
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-http-api-event.js +23 -1
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-http-api-route.d.ts +9 -2
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-http-api-route.js +5 -3
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-implicit-http-api.d.ts +6 -1
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-implicit-http-api.js +7 -1
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-triggered-user-pool.d.ts +19 -0
- package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-triggered-user-pool.js +69 -0
- package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-template.factory.d.ts +5 -0
- package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-template.factory.js +3 -1
- package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-type.d.ts +8 -0
- package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-type.js +8 -0
- package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-url.js +1 -4
- package/dist/service/cloudformation/sam/function/sim-cfn-sam-function.d.ts +6 -4
- package/dist/service/cloudformation/sam/function/sim-cfn-sam-function.js +2 -4
- package/dist/service/cloudformation/sam/sim-cfn-sam-error.d.ts +31 -0
- package/dist/service/cloudformation/sam/sim-cfn-sam-error.js +17 -0
- package/dist/service/cloudformation/sam/sim-cfn-sam-expansion.js +11 -6
- package/dist/service/cloudformation/sdk/sim-cloudformation-sdk-command-router.js +20 -0
- package/dist/service/cloudformation/serve/sim-cloudformation-api.d.ts +4 -3
- package/dist/service/cloudformation/serve/sim-cloudformation-api.js +6 -3
- package/dist/service/cloudformation/serve/sim-cloudformation-change-set-api.d.ts +10 -0
- package/dist/service/cloudformation/serve/sim-cloudformation-change-set-api.js +94 -0
- package/dist/service/cloudformation/sim-cloudformation.d.ts +31 -0
- package/dist/service/cloudformation/sim-cloudformation.js +56 -9
- package/dist/service/cloudformation/stack/resource-map/sim-cfn-stack-resource-map.js +1 -0
- package/dist/service/cloudformation/stack/sim-cfn-deleted-stacks.d.ts +20 -0
- package/dist/service/cloudformation/stack/sim-cfn-deleted-stacks.js +23 -0
- package/dist/service/cloudformation/stack/sim-cfn-deployed-stack.type.d.ts +6 -0
- package/dist/service/cloudformation/stack/sim-cfn-stack-id.d.ts +30 -0
- package/dist/service/cloudformation/stack/sim-cfn-stack-id.js +24 -0
- package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.d.ts +51 -3
- package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.js +84 -6
- package/dist/service/cloudformation/stack/sim-cfn-stack.d.ts +28 -16
- package/dist/service/cloudformation/stack/sim-cfn-stack.js +59 -32
- package/dist/service/cloudformation/stack/sim-cfn-stack.type.d.ts +7 -1
- package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-deletion-lifecycle.d.ts +7 -1
- package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-deletion-lifecycle.js +3 -1
- package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-batch-deleter.d.ts +3 -0
- package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-batch-deleter.js +3 -0
- package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-deleter.d.ts +3 -0
- package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-deleter.js +2 -1
- package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-retained-logical-ids.d.ts +18 -0
- package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-retained-logical-ids.js +30 -0
- package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-guard.d.ts +9 -0
- package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-guard.js +14 -0
- package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-lifecycle.d.ts +25 -14
- package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-lifecycle.js +41 -24
- package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-plan.d.ts +16 -1
- package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-plan.js +27 -0
- package/dist/service/cloudformation/stack/update/sim-cfn-stack-updater.js +7 -1
- package/dist/service/cloudformation/template/condition/sim-cfn-condition-expression.d.ts +12 -3
- package/dist/service/cloudformation/template/condition/sim-cfn-condition-expression.js +29 -3
- package/dist/service/cloudformation/template/condition/sim-cfn-output-conditions.d.ts +28 -0
- package/dist/service/cloudformation/template/condition/sim-cfn-output-conditions.js +39 -0
- package/dist/service/cloudformation/template/node/fn/find-in-map/sim-cfn-fn-find-in-map.d.ts +25 -1
- package/dist/service/cloudformation/template/node/fn/find-in-map/sim-cfn-fn-find-in-map.js +43 -11
- package/dist/service/cloudformation/template/parse/fn/find-in-map/sim-cfn-fn-find-in-map-parser.d.ts +7 -0
- package/dist/service/cloudformation/template/parse/fn/find-in-map/sim-cfn-fn-find-in-map-parser.js +29 -3
- package/dist/service/cloudformation/template/sim-cfn-command-template.d.ts +40 -0
- package/dist/service/cloudformation/template/sim-cfn-command-template.js +45 -0
- package/dist/service/cloudformation/template/sim-cfn-template.d.ts +7 -0
- package/dist/service/cloudformation/template/sim-cfn-template.js +15 -1
- package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-request.d.ts +2 -0
- package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-request.js +49 -0
- package/dist/service/cloudfront/origin/custom/sim-cloudfront-custom-origin.js +1 -0
- package/dist/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.js +1 -0
- package/dist/service/cognito/serve/page/sim-cognito-provider-page.js +1 -1
- package/dist/service/cognito/user-pool/idp/sim-cognito-attribute-mapping.d.ts +5 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-attribute-mapping.js +17 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-presented-external-user.d.ts +5 -5
- package/dist/service/cognito/user-pool/idp/sim-cognito-presented-external-user.js +24 -8
- package/dist/service/dynamodb/cfn/sim-cfn-dynamodb-resource-factory.d.ts +5 -0
- package/dist/service/dynamodb/cfn/sim-cfn-dynamodb-resource-factory.js +15 -0
- package/dist/service/dynamodb/cfn/table/sim-cfn-dynamodb-table-update-validator.d.ts +24 -0
- package/dist/service/dynamodb/cfn/table/sim-cfn-dynamodb-table-update-validator.js +38 -0
- package/dist/service/dynamodb/command/query/sim-dynamodb-query-expressions.d.ts +11 -8
- package/dist/service/dynamodb/command/query/sim-dynamodb-query-expressions.js +20 -8
- package/dist/service/dynamodb/command/query/sim-dynamodb-query.js +2 -0
- package/dist/service/dynamodb/command/query/sim-dynamodb-unsimulated-query-input.js +0 -1
- package/dist/service/dynamodb/command/read/sim-dynamodb-read-answer.d.ts +14 -4
- package/dist/service/dynamodb/command/read/sim-dynamodb-read-answer.js +16 -4
- package/dist/service/dynamodb/command/read/sim-dynamodb-table-read.fixture.d.ts +17 -0
- package/dist/service/dynamodb/command/read/sim-dynamodb-table-read.fixture.js +39 -0
- package/dist/service/dynamodb/command/scan/sim-dynamodb-scan-expressions.d.ts +28 -0
- package/dist/service/dynamodb/command/scan/sim-dynamodb-scan-expressions.js +50 -0
- package/dist/service/dynamodb/command/scan/sim-dynamodb-scan.js +12 -5
- package/dist/service/dynamodb/command/scan/sim-dynamodb-unsimulated-scan-input.d.ts +3 -3
- package/dist/service/dynamodb/command/scan/sim-dynamodb-unsimulated-scan-input.js +3 -4
- package/dist/service/dynamodb/expression/filter/sim-dynamodb-filter-expression.d.ts +5 -16
- package/dist/service/dynamodb/expression/filter/sim-dynamodb-filter-expression.js +4 -21
- package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection-expression.d.ts +15 -0
- package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection-expression.js +18 -1
- package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection.d.ts +13 -0
- package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection.js +15 -0
- package/dist/service/dynamodb/table/sim-dynamodb-index-update.js +1 -2
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-properties.js +2 -0
- package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-property-rules.js +5 -3
- package/dist/service/lambda/cfn/url/sim-cfn-lambda-url-cors.d.ts +21 -0
- package/dist/service/lambda/cfn/url/sim-cfn-lambda-url-cors.js +37 -0
- package/dist/service/lambda/cfn/url/sim-cfn-lambda-url-creator.js +6 -0
- package/dist/service/lambda/command/create-function/create-function.handler.d.ts +3 -0
- package/dist/service/lambda/command/create-function/create-function.handler.js +5 -1
- package/dist/service/lambda/command/create-function-url-config/create-function-url-config.command.d.ts +2 -3
- package/dist/service/lambda/command/create-function-url-config/create-function-url-config.handler.js +1 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-input.d.ts +6 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-input.js +10 -0
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-refusals.js +2 -6
- package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping.handler.js +1 -0
- package/dist/service/lambda/command/function/sim-lambda-function-commands.d.ts +2 -0
- package/dist/service/lambda/command/function-url/function-url-cors-constraints.d.ts +25 -0
- package/dist/service/lambda/command/function-url/function-url-cors-constraints.js +49 -0
- package/dist/service/lambda/command/function-url/function-url-cors-input.d.ts +25 -0
- package/dist/service/lambda/command/function-url/function-url-cors-input.js +57 -0
- package/dist/service/lambda/command/function-url/function-url-input.d.ts +7 -0
- package/dist/service/lambda/command/function-url/function-url-input.js +9 -0
- package/dist/service/lambda/command/invoke/async/sim-lambda-async-invocation.js +10 -13
- package/dist/service/lambda/command/invoke/async/sim-lambda-async-outcome.js +2 -0
- package/dist/service/lambda/command/invoke/async/sim-lambda-handler-attempt.d.ts +13 -0
- package/dist/service/lambda/command/invoke/async/sim-lambda-handler-attempt.js +12 -0
- package/dist/service/lambda/command/update-function-url-config/update-function-url-config.command.d.ts +2 -0
- package/dist/service/lambda/command/update-function-url-config/update-function-url-config.handler.js +1 -0
- package/dist/service/lambda/destination/deliver/sim-lambda-destination-bus.js +1 -1
- package/dist/service/lambda/destination/deliver/sim-lambda-destination-function.js +8 -12
- package/dist/service/lambda/destination/deliver/sim-lambda-destination-queue.js +4 -3
- package/dist/service/lambda/destination/deliver/sim-lambda-destination-send.d.ts +2 -0
- package/dist/service/lambda/destination/deliver/sim-lambda-destination-topic.js +4 -3
- package/dist/service/lambda/destination/sim-aws-lambda-destinations.d.ts +4 -6
- package/dist/service/lambda/destination/sim-aws-lambda-destinations.js +6 -6
- package/dist/service/lambda/destination/sim-lambda-destination-targets.d.ts +3 -0
- package/dist/service/lambda/event-source/poll/kinesis/sim-lambda-kinesis-stream-delivery.js +4 -9
- package/dist/service/lambda/event-source/poll/sim-lambda-dynamodb-stream-delivery.js +4 -9
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-outcome.d.ts +22 -3
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-outcome.js +39 -9
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-response.d.ts +7 -6
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-response.js +14 -12
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-checkpoint.d.ts +9 -15
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-checkpoint.js +9 -16
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-progress.d.ts +10 -6
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-progress.js +22 -12
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-record-times.d.ts +23 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-record-times.js +18 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry-backoff.d.ts +12 -13
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry-backoff.js +24 -17
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry.d.ts +64 -0
- package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry.js +86 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-arn.d.ts +6 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-arn.js +8 -1
- package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-rules.d.ts +6 -0
- package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-rules.js +7 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-mapping.d.ts +11 -1
- package/dist/service/lambda/event-source/sim-lambda-event-source-mapping.js +13 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-retry-limits.d.ts +39 -0
- package/dist/service/lambda/event-source/sim-lambda-event-source-retry-limits.js +46 -0
- package/dist/service/lambda/event-source/sim-lambda-stream-retry-limits.d.ts +56 -0
- package/dist/service/lambda/event-source/sim-lambda-stream-retry-limits.js +110 -0
- package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-arn.d.ts +5 -0
- package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-arn.js +7 -1
- package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-rules.d.ts +6 -0
- package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-rules.js +6 -0
- package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-arn.d.ts +6 -1
- package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-arn.js +8 -6
- package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-rules.d.ts +10 -8
- package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-rules.js +18 -1
- package/dist/service/lambda/function/code/sim-lambda-executable-code.d.ts +8 -2
- package/dist/service/lambda/function/code/sim-lambda-executable-code.js +2 -1
- package/dist/service/lambda/function/code/sim-lambda-vm-zip-code.d.ts +2 -11
- package/dist/service/lambda/function/code/sim-lambda-vm-zip-code.js +13 -39
- package/dist/service/lambda/function/code/vm/sim-lambda-vm-context.d.ts +7 -0
- package/dist/service/lambda/function/code/vm/sim-lambda-vm-context.js +13 -7
- package/dist/service/lambda/function/code/vm/sim-lambda-vm-handler-lookup.d.ts +23 -0
- package/dist/service/lambda/function/code/vm/sim-lambda-vm-handler-lookup.js +42 -0
- package/dist/service/lambda/function/code/vm/sim-lambda-vm-output-stream.d.ts +12 -4
- package/dist/service/lambda/function/code/vm/sim-lambda-vm-output-stream.js +15 -5
- package/dist/service/lambda/function/invoke/sim-lambda-host-scope.d.ts +7 -0
- package/dist/service/lambda/function/invoke/sim-lambda-host-scope.js +6 -2
- package/dist/service/lambda/function/invoke/sim-lambda-invocation-deadline.d.ts +26 -0
- package/dist/service/lambda/function/invoke/sim-lambda-invocation-deadline.js +84 -0
- package/dist/service/lambda/function/invoke/sim-lambda-invocation.d.ts +44 -0
- package/dist/service/lambda/function/invoke/sim-lambda-invocation.js +44 -0
- package/dist/service/lambda/function/invoke/sim-lambda-invoke-context-builder.d.ts +6 -0
- package/dist/service/lambda/function/invoke/sim-lambda-invoke-context-builder.js +1 -2
- package/dist/service/lambda/function/invoke/sim-lambda-process-output.d.ts +6 -1
- package/dist/service/lambda/function/invoke/sim-lambda-process-output.js +19 -6
- package/dist/service/lambda/function/invoke/sim-lambda-timed-out.error.d.ts +15 -0
- package/dist/service/lambda/function/invoke/sim-lambda-timed-out.error.js +18 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-clear-timer.d.ts +12 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-clear-timer.js +28 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-clock-timer.d.ts +46 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-clock-timer.js +104 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-host-timers.d.ts +24 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-host-timers.js +27 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-invocation-timers.d.ts +43 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-invocation-timers.js +112 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-process-timers.d.ts +57 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-process-timers.js +79 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-delay.d.ts +10 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-delay.js +15 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-global.d.ts +11 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-global.js +24 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-handle.d.ts +50 -0
- package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-handle.js +43 -0
- package/dist/service/lambda/function/logging/sim-lambda-function-logging.d.ts +17 -0
- package/dist/service/lambda/function/logging/sim-lambda-function-logging.js +12 -1
- package/dist/service/lambda/function/logging/sim-lambda-output.d.ts +56 -0
- package/dist/service/lambda/function/logging/sim-lambda-output.js +62 -0
- package/dist/service/lambda/function/outbound/sim-lambda-aws-api-outbound.d.ts +8 -0
- package/dist/service/lambda/function/outbound/sim-lambda-aws-api-outbound.js +27 -1
- package/dist/service/lambda/function/sim-lambda-function.d.ts +1 -1
- package/dist/service/lambda/function/sim-lambda-function.js +11 -9
- package/dist/service/lambda/function/sim-lambda-function.type.d.ts +15 -0
- package/dist/service/lambda/function/url/sim-lambda-function-url-cors.d.ts +16 -0
- package/dist/service/lambda/function/url/sim-lambda-function-url-cors.factory.d.ts +22 -0
- package/dist/service/lambda/function/url/sim-lambda-function-url-cors.factory.js +17 -0
- package/dist/service/lambda/function/url/sim-lambda-function-url-cors.js +1 -0
- package/dist/service/lambda/function/url/sim-lambda-function-url-factory.d.ts +2 -0
- package/dist/service/lambda/function/url/sim-lambda-function-url-factory.js +2 -1
- package/dist/service/lambda/function/url/sim-lambda-function-url-store.d.ts +2 -0
- package/dist/service/lambda/function/url/sim-lambda-function-url.d.ts +16 -0
- package/dist/service/lambda/function/url/sim-lambda-function-url.js +16 -1
- package/dist/service/lambda/index.d.ts +1 -0
- package/dist/service/lambda/index.js +1 -0
- package/dist/service/lambda/serve/response/sim-lambda-url-cors-headers.d.ts +50 -0
- package/dist/service/lambda/serve/response/sim-lambda-url-cors-headers.js +96 -0
- package/dist/service/lambda/serve/sim-lambda-controller.d.ts +14 -0
- package/dist/service/lambda/serve/sim-lambda-controller.js +27 -0
- package/dist/service/lambda/sim-lambda-commands.d.ts +10 -0
- package/dist/service/lambda/sim-lambda-commands.js +11 -0
- package/dist/service/lambda/sim-lambda.d.ts +12 -0
- package/dist/service/lambda/sim-lambda.js +13 -0
- package/dist/service/s3/bucket/encryption/sim-s3-bucket-encryption.d.ts +67 -0
- package/dist/service/s3/bucket/encryption/sim-s3-bucket-encryption.js +69 -0
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-configuration.d.ts +4 -31
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-configuration.js +7 -6
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-expiry.d.ts +5 -0
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-expiry.js +8 -4
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-selection.d.ts +1 -14
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-selection.js +16 -8
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-subject.d.ts +41 -0
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-subject.js +1 -0
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-sweep.d.ts +14 -0
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-sweep.js +32 -2
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition-instant.d.ts +33 -0
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition-instant.js +48 -0
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition.d.ts +16 -0
- package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition.js +44 -0
- package/dist/service/s3/bucket/lifecycle/sim-s3-noncurrent-sweep.d.ts +8 -0
- package/dist/service/s3/bucket/lifecycle/sim-s3-noncurrent-sweep.js +27 -0
- package/dist/service/s3/bucket/notification/sim-s3-notification-event.d.ts +1 -1
- package/dist/service/s3/bucket/notification/sim-s3-notification-event.js +5 -0
- package/dist/service/s3/bucket/notification/sim-s3-unsimulated-notification-events.js +0 -3
- package/dist/service/s3/bucket/sim-s3-bucket-access.d.ts +3 -0
- package/dist/service/s3/bucket/sim-s3-bucket-access.js +6 -2
- package/dist/service/s3/bucket/sim-s3-bucket-configuration.d.ts +84 -0
- package/dist/service/s3/bucket/sim-s3-bucket-configuration.js +115 -0
- package/dist/service/s3/bucket/sim-s3-bucket-objects.d.ts +10 -0
- package/dist/service/s3/bucket/sim-s3-bucket-objects.js +18 -0
- package/dist/service/s3/bucket/sim-s3-bucket-properties.d.ts +41 -0
- package/dist/service/s3/bucket/sim-s3-bucket-properties.js +1 -0
- package/dist/service/s3/bucket/sim-s3-bucket.d.ts +11 -83
- package/dist/service/s3/bucket/sim-s3-bucket.js +14 -83
- package/dist/service/s3/bucket/sim-s3-public-read.fixture.d.ts +6 -0
- package/dist/service/s3/bucket/sim-s3-public-read.fixture.js +20 -6
- package/dist/service/s3/bucket/tagging/sim-s3-taggable-object.d.ts +58 -0
- package/dist/service/s3/bucket/tagging/sim-s3-taggable-object.js +73 -0
- package/dist/service/s3/bucket/versioning/sim-s3-object-version.d.ts +19 -1
- package/dist/service/s3/bucket/versioning/sim-s3-object-version.js +20 -0
- package/dist/service/s3/cfn/bucket/encryption/sim-cfn-s3-bucket-encryption.d.ts +21 -0
- package/dist/service/s3/cfn/bucket/encryption/sim-cfn-s3-bucket-encryption.js +44 -0
- package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-configuration.js +6 -0
- package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-fields.d.ts +5 -4
- package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-fields.js +12 -5
- package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-filter.d.ts +21 -0
- package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-filter.js +30 -0
- package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-configurator.js +1 -0
- package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-declared-configurations.d.ts +14 -1
- package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-declared-configurations.js +41 -16
- package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-property-names.d.ts +3 -5
- package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-property-names.js +7 -10
- package/dist/service/s3/command/authorize/sim-s3-authorize-action.d.ts +6 -1
- package/dist/service/s3/command/authorize/sim-s3-authorize-action.js +5 -0
- package/dist/service/s3/command/copy-object/copy-object-builder.d.ts +10 -1
- package/dist/service/s3/command/copy-object/copy-object-builder.js +17 -1
- package/dist/service/s3/command/copy-object/copy-object.command.d.ts +11 -1
- package/dist/service/s3/command/copy-object/copy-object.handler.js +2 -1
- package/dist/service/s3/command/create-multipart-upload/create-multipart-upload.command.d.ts +5 -1
- package/dist/service/s3/command/create-multipart-upload/create-multipart-upload.handler.js +7 -0
- package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.command.d.ts +19 -0
- package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.command.js +1 -0
- package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.handler.d.ts +30 -0
- package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.handler.js +38 -0
- package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.command.d.ts +23 -0
- package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.command.js +1 -0
- package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.handler.d.ts +22 -0
- package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.handler.js +42 -0
- package/dist/service/s3/command/encryption/sim-s3-encryption-authorizer.d.ts +29 -0
- package/dist/service/s3/command/encryption/sim-s3-encryption-authorizer.js +49 -0
- package/dist/service/s3/command/encryption/sim-s3-encryption-commands.d.ts +22 -0
- package/dist/service/s3/command/encryption/sim-s3-encryption-commands.js +30 -0
- package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.command.d.ts +24 -0
- package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.command.js +1 -0
- package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.handler.d.ts +31 -0
- package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.handler.js +39 -0
- package/dist/service/s3/command/get-object/get-object-authorizer.d.ts +11 -8
- package/dist/service/s3/command/get-object/get-object-authorizer.js +26 -34
- package/dist/service/s3/command/get-object/get-object-loader.d.ts +7 -3
- package/dist/service/s3/command/get-object/get-object-loader.js +9 -4
- package/dist/service/s3/command/get-object/get-object.command.d.ts +2 -1
- package/dist/service/s3/command/get-object/get-object.handler.d.ts +4 -0
- package/dist/service/s3/command/get-object/get-object.handler.js +13 -7
- package/dist/service/s3/command/get-object-tagging/get-object-tagging.command.d.ts +29 -0
- package/dist/service/s3/command/get-object-tagging/get-object-tagging.command.js +1 -0
- package/dist/service/s3/command/get-object-tagging/get-object-tagging.handler.d.ts +21 -0
- package/dist/service/s3/command/get-object-tagging/get-object-tagging.handler.js +33 -0
- package/dist/service/s3/command/head-object/head-object-loader.js +2 -0
- package/dist/service/s3/command/head-object/head-object.command.d.ts +2 -1
- package/dist/service/s3/command/lifecycle/sim-s3-lifecycle-rules-validation.js +18 -0
- package/dist/service/s3/command/list-multipart-uploads/list-multipart-uploads.handler.js +1 -2
- package/dist/service/s3/command/list-object-versions/list-object-versions-summaries.js +1 -2
- package/dist/service/s3/command/list-objects/list-objects-page-builder.d.ts +5 -0
- package/dist/service/s3/command/list-objects/list-objects-page-builder.js +11 -6
- package/dist/service/s3/command/list-objects/list-objects.command.d.ts +5 -1
- package/dist/service/s3/command/list-objects/list-objects.handler.js +5 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.d.ts +6 -0
- package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.js +11 -5
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.d.ts +5 -1
- package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.js +5 -0
- package/dist/service/s3/command/list-parts/list-parts.handler.js +3 -3
- package/dist/service/s3/command/multipart/sim-s3-multipart-access.js +1 -1
- package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.command.d.ts +21 -0
- package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.command.js +1 -0
- package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.handler.d.ts +31 -0
- package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.handler.js +41 -0
- package/dist/service/s3/command/put-object/put-object-builder.d.ts +5 -1
- package/dist/service/s3/command/put-object/put-object-builder.js +10 -1
- package/dist/service/s3/command/put-object/put-object.command.d.ts +5 -1
- package/dist/service/s3/command/put-object/put-object.handler.js +2 -1
- package/dist/service/s3/command/put-object-tagging/put-object-tagging.command.d.ts +37 -0
- package/dist/service/s3/command/put-object-tagging/put-object-tagging.command.js +1 -0
- package/dist/service/s3/command/put-object-tagging/put-object-tagging.handler.d.ts +22 -0
- package/dist/service/s3/command/put-object-tagging/put-object-tagging.handler.js +46 -0
- package/dist/service/s3/command/sim-s3-command.types.d.ts +6 -0
- package/dist/service/s3/command/tagging/sim-s3-object-tagging-access.d.ts +61 -0
- package/dist/service/s3/command/tagging/sim-s3-object-tagging-access.js +49 -0
- package/dist/service/s3/command/tagging/sim-s3-object-tagging-authorizer.d.ts +30 -0
- package/dist/service/s3/command/tagging/sim-s3-object-tagging-authorizer.js +27 -0
- package/dist/service/s3/command/tagging/sim-s3-object-tagging-commands.d.ts +26 -0
- package/dist/service/s3/command/tagging/sim-s3-object-tagging-commands.js +34 -0
- package/dist/service/s3/error/sim-s3-upload.error.d.ts +41 -0
- package/dist/service/s3/error/sim-s3-upload.error.js +47 -0
- package/dist/service/s3/error/sim-s3.error.d.ts +22 -34
- package/dist/service/s3/error/sim-s3.error.js +26 -40
- package/dist/service/s3/mount/sim-s3-mount.type.d.ts +10 -0
- package/dist/service/s3/notification/event/sim-s3-event-records.d.ts +3 -2
- package/dist/service/s3/notification/event/sim-s3-event-records.js +5 -3
- package/dist/service/s3/notification/event/sim-s3-object-event-builder.d.ts +33 -8
- package/dist/service/s3/notification/event/sim-s3-object-event-builder.js +23 -9
- package/dist/service/s3/notification/sim-s3-object-notifier.d.ts +5 -1
- package/dist/service/s3/notification/sim-s3-object-notifier.js +6 -0
- package/dist/service/s3/object/s3-key-encoding.d.ts +12 -0
- package/dist/service/s3/object/s3-key-encoding.js +14 -0
- package/dist/service/s3/object/s3-listing-encoding.d.ts +42 -0
- package/dist/service/s3/object/s3-listing-encoding.js +75 -0
- package/dist/service/s3/object/s3-object-response-headers.d.ts +40 -0
- package/dist/service/s3/object/s3-object-response-headers.js +49 -2
- package/dist/service/s3/object/s3-object-storage-report.d.ts +19 -0
- package/dist/service/s3/object/s3-object-storage-report.js +18 -0
- package/dist/service/s3/object/s3-object-summary.d.ts +2 -10
- package/dist/service/s3/object/s3-object-summary.js +1 -10
- package/dist/service/s3/object/s3-object-tags.d.ts +61 -0
- package/dist/service/s3/object/s3-object-tags.js +77 -0
- package/dist/service/s3/object/s3-object.d.ts +49 -0
- package/dist/service/s3/object/s3-object.js +52 -1
- package/dist/service/s3/object/s3-server-side-encryption.d.ts +30 -0
- package/dist/service/s3/object/s3-server-side-encryption.js +42 -0
- package/dist/service/s3/object/s3-storage-class.d.ts +45 -0
- package/dist/service/s3/object/s3-storage-class.js +67 -0
- package/dist/service/s3/object/s3-write-metadata.d.ts +17 -3
- package/dist/service/s3/object/s3-write-metadata.js +43 -0
- package/dist/service/s3/object/s3-write-storage.d.ts +27 -0
- package/dist/service/s3/object/s3-write-storage.js +21 -0
- package/dist/service/s3/object/s3-write-tagging.d.ts +24 -0
- package/dist/service/s3/object/s3-write-tagging.js +19 -0
- package/dist/service/s3/sdk/sim-s3-sdk-bucket-routes.js +12 -0
- package/dist/service/s3/sdk/sim-s3-sdk-command-router.js +2 -0
- package/dist/service/s3/sdk/sim-s3-sdk-object-tagging-routes.d.ts +9 -0
- package/dist/service/s3/sdk/sim-s3-sdk-object-tagging-routes.js +23 -0
- package/dist/service/s3/serve/api/sim-s3-api-bucket-routes.js +22 -0
- package/dist/service/s3/serve/api/sim-s3-api-configuration-output.d.ts +4 -0
- package/dist/service/s3/serve/api/sim-s3-api-configuration-output.js +10 -0
- package/dist/service/s3/serve/api/sim-s3-api-encryption-read.d.ts +7 -0
- package/dist/service/s3/serve/api/sim-s3-api-encryption-read.js +30 -0
- package/dist/service/s3/serve/api/sim-s3-api-head-output.d.ts +4 -2
- package/dist/service/s3/serve/api/sim-s3-api-head-output.js +8 -2
- package/dist/service/s3/serve/api/sim-s3-api-input.d.ts +0 -6
- package/dist/service/s3/serve/api/sim-s3-api-input.js +2 -13
- package/dist/service/s3/serve/api/sim-s3-api-listing.d.ts +5 -0
- package/dist/service/s3/serve/api/sim-s3-api-listing.js +5 -0
- package/dist/service/s3/serve/api/sim-s3-api-object-input.d.ts +16 -0
- package/dist/service/s3/serve/api/sim-s3-api-object-input.js +34 -7
- package/dist/service/s3/serve/api/sim-s3-api-object-output.d.ts +18 -1
- package/dist/service/s3/serve/api/sim-s3-api-object-output.js +21 -2
- package/dist/service/s3/serve/api/sim-s3-api-object-routes.js +22 -1
- package/dist/service/s3/serve/api/sim-s3-api-output.d.ts +5 -1
- package/dist/service/s3/serve/api/sim-s3-api-output.js +16 -5
- package/dist/service/s3/serve/api/sim-s3-api-request.d.ts +6 -5
- package/dist/service/s3/serve/api/sim-s3-api-request.js +55 -11
- package/dist/service/s3/serve/api/sim-s3-api-routes.js +2 -2
- package/dist/service/s3/serve/api/sim-s3-api-tagging-read.d.ts +9 -0
- package/dist/service/s3/serve/api/sim-s3-api-tagging-read.js +14 -0
- package/dist/service/s3/serve/api/sim-s3-api.d.ts +7 -1
- package/dist/service/s3/serve/api/sim-s3-api.js +7 -1
- package/dist/service/s3/serve/sim-s3-rest-controller.d.ts +1 -5
- package/dist/service/s3/serve/sim-s3-rest-controller.js +3 -17
- package/dist/service/s3/serve/sim-s3-rest-object-reader.d.ts +3 -0
- package/dist/service/s3/serve/sim-s3-rest-object-reader.js +8 -1
- package/dist/service/s3/serve/sim-s3-rest-upload.d.ts +20 -0
- package/dist/service/s3/serve/sim-s3-rest-upload.js +30 -0
- package/dist/service/s3/serve/website/sim-s3-website-object-loader.js +1 -0
- package/dist/service/s3/serve/website/sim-s3-website-object.d.ts +2 -0
- package/dist/service/s3/serve/website/sim-s3-website-object.js +3 -0
- package/dist/service/s3/sim-s3-commands.d.ts +4 -0
- package/dist/service/s3/sim-s3-commands.js +6 -0
- package/dist/service/s3/sim-s3-operations.d.ts +11 -4
- package/dist/service/s3/sim-s3-operations.js +17 -4
- package/dist/service/s3/sim-s3-tagging-operations.d.ts +21 -0
- package/dist/service/s3/sim-s3-tagging-operations.js +25 -0
- package/dist/service/s3/sim-s3.d.ts +12 -0
- package/dist/service/s3/sim-s3.js +13 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-deleting-storage.d.ts +34 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-deleting-storage.js +34 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-deletion.d.ts +9 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-deletion.js +24 -0
- package/dist/service/s3/storage/filesystem/s3-filesystem-storage.d.ts +5 -4
- package/dist/service/s3/storage/filesystem/s3-filesystem-storage.js +5 -3
- package/dist/service/s3/upload/sim-s3-completed-upload.js +5 -1
- package/dist/service/s3/upload/sim-s3-multipart-upload.d.ts +18 -0
- package/dist/service/s3/upload/sim-s3-multipart-upload.js +8 -0
- package/dist/service/s3/upload/sim-s3-multipart-uploads.d.ts +6 -0
- package/dist/service/s3/upload/sim-s3-multipart-uploads.js +5 -0
- package/dist/util/background/background-clock-waits.d.ts +52 -0
- package/dist/util/background/background-clock-waits.js +76 -0
- package/dist/util/background/background-jitter.js +1 -0
- package/dist/util/background/background-pending-tasks.d.ts +55 -0
- package/dist/util/background/background-pending-tasks.js +117 -0
- package/dist/util/background/background-settled-tasks.d.ts +4 -1
- package/dist/util/background/background-settled-tasks.js +4 -1
- package/dist/util/background/background.d.ts +43 -0
- package/dist/util/background/background.js +27 -19
- package/dist/util/background/non-deterministic-background.d.ts +12 -0
- package/dist/util/background/non-deterministic-background.js +24 -20
- package/dist/util/clock/sim-clock-control.js +23 -2
- package/docs/services/apigateway/README.md +3 -1
- package/docs/services/athena/README.md +126 -3
- package/docs/services/cloudformation/README.md +775 -65
- package/docs/services/cognito/README.md +5 -0
- package/docs/services/dynamodb/README.md +86 -11
- package/docs/services/lambda/README.md +603 -39
- package/docs/services/s3/README.md +688 -57
- package/package.json +8 -2
|
@@ -132,6 +132,66 @@ console.log(describeOutput.Stacks?.[0]?.StackStatus);
|
|
|
132
132
|
continues asynchronously, similar to real CloudFormation. Use `waitForStackDeployComplete(...)` when
|
|
133
133
|
you need final stack state.
|
|
134
134
|
|
|
135
|
+
## Stack IDs
|
|
136
|
+
|
|
137
|
+
A stack is given a stack ID when it is created, in the ARN shape CloudFormation gives one:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
arn:aws:cloudformation:<region>:<account>:stack/<name>/<uuid>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
The account and region are the ones the stack was created in. The UUID on the end is generated for
|
|
144
|
+
each stack. Deploying the same name a second time produces a stack with an ID of its own.
|
|
145
|
+
|
|
146
|
+
`CreateStackCommand` and `UpdateStackCommand` answer with the ID, `DescribeStacksCommand` reports it
|
|
147
|
+
as `StackId`, and a template reading `AWS::StackId` resolves to it. `AWS::StackName` still resolves
|
|
148
|
+
to the name. A `CREATE` change set makes the ID along with the stack it puts into review, and the
|
|
149
|
+
change set commands report it as `StackId` too.
|
|
150
|
+
|
|
151
|
+
`DescribeStacksCommand` accepts either a stack name or a stack ID in `StackName`, as CloudFormation
|
|
152
|
+
does. A stack ID goes on working once the stack has been deleted (its name does not).
|
|
153
|
+
|
|
154
|
+
```typescript sim-cloudformation-stack-id
|
|
155
|
+
/**
|
|
156
|
+
* Describing a deleted simulated CloudFormation Stack by its Stack ID.
|
|
157
|
+
*/
|
|
158
|
+
|
|
159
|
+
import {
|
|
160
|
+
CreateStackCommand,
|
|
161
|
+
DeleteStackCommand,
|
|
162
|
+
DescribeStacksCommand,
|
|
163
|
+
} from "@aws-sdk/client-cloudformation";
|
|
164
|
+
|
|
165
|
+
import { SimAws } from "@kensio/yulin";
|
|
166
|
+
|
|
167
|
+
const simAws = new SimAws();
|
|
168
|
+
const simCfn = simAws.cloudFormation();
|
|
169
|
+
|
|
170
|
+
const created = await simCfn.createStack(
|
|
171
|
+
new CreateStackCommand({
|
|
172
|
+
StackName: "identified-stack",
|
|
173
|
+
TemplateBody: JSON.stringify({ Resources: {} }),
|
|
174
|
+
}),
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
// arn:aws:cloudformation:<region>:<account>:stack/identified-stack/<uuid>
|
|
178
|
+
console.log(created.StackId);
|
|
179
|
+
|
|
180
|
+
await simCfn.waitForStackDeployComplete("identified-stack");
|
|
181
|
+
|
|
182
|
+
await simCfn.deleteStack(
|
|
183
|
+
new DeleteStackCommand({ StackName: "identified-stack" }),
|
|
184
|
+
);
|
|
185
|
+
await simCfn.waitForStackDeleteComplete("identified-stack");
|
|
186
|
+
|
|
187
|
+
const described = await simCfn.describeStacks(
|
|
188
|
+
new DescribeStacksCommand({ StackName: created.StackId }),
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
// DELETE_COMPLETE
|
|
192
|
+
console.log(described.Stacks?.[0]?.StackStatus);
|
|
193
|
+
```
|
|
194
|
+
|
|
135
195
|
## Stack deployment is asynchronous
|
|
136
196
|
|
|
137
197
|
A stack may be visible before all resources have finished creating.
|
|
@@ -302,6 +362,78 @@ A template that changes nothing at all is refused with a `ValidationError` readi
|
|
|
302
362
|
`No updates are to be performed.`, the same answer CloudFormation gives. So is an update asked for
|
|
303
363
|
while another is still running.
|
|
304
364
|
|
|
365
|
+
### Updating without the whole template
|
|
366
|
+
|
|
367
|
+
`UsePreviousTemplate: true` updates the stack from the template it already holds. That is how a
|
|
368
|
+
parameter value is changed on its own, when the caller has no copy of the template body to hand.
|
|
369
|
+
Sending a `TemplateBody` alongside it is refused with a `ValidationError`, the way CloudFormation
|
|
370
|
+
refuses it.
|
|
371
|
+
|
|
372
|
+
A parameter carrying `UsePreviousValue: true` takes the value the stack was deployed with. Sending a
|
|
373
|
+
`ParameterValue` for that same parameter is refused the same way. A parameter the stack was deployed
|
|
374
|
+
without takes its template `Default` again.
|
|
375
|
+
|
|
376
|
+
```typescript sim-cloudformation-update-previous-template
|
|
377
|
+
/**
|
|
378
|
+
* Changing one parameter value without resending the template.
|
|
379
|
+
*/
|
|
380
|
+
|
|
381
|
+
import {
|
|
382
|
+
CreateStackCommand,
|
|
383
|
+
UpdateStackCommand,
|
|
384
|
+
} from "@aws-sdk/client-cloudformation";
|
|
385
|
+
|
|
386
|
+
import { SimAws } from "@kensio/yulin";
|
|
387
|
+
|
|
388
|
+
const simAws = new SimAws();
|
|
389
|
+
const simCfn = simAws.cloudFormation();
|
|
390
|
+
|
|
391
|
+
await simCfn.createStack(
|
|
392
|
+
new CreateStackCommand({
|
|
393
|
+
StackName: "reports",
|
|
394
|
+
TemplateBody: JSON.stringify({
|
|
395
|
+
Parameters: {
|
|
396
|
+
Environment: { Type: "String" },
|
|
397
|
+
Version: { Type: "String" },
|
|
398
|
+
},
|
|
399
|
+
Resources: {
|
|
400
|
+
ReportsBucket: {
|
|
401
|
+
Type: "AWS::S3::Bucket",
|
|
402
|
+
Properties: {
|
|
403
|
+
// eslint-disable-next-line no-template-curly-in-string
|
|
404
|
+
BucketName: { "Fn::Sub": "reports-${Environment}-${Version}" },
|
|
405
|
+
},
|
|
406
|
+
},
|
|
407
|
+
},
|
|
408
|
+
}),
|
|
409
|
+
Parameters: [
|
|
410
|
+
{ ParameterKey: "Environment", ParameterValue: "staging" },
|
|
411
|
+
{ ParameterKey: "Version", ParameterValue: "one" },
|
|
412
|
+
],
|
|
413
|
+
}),
|
|
414
|
+
);
|
|
415
|
+
await simCfn.waitForStackDeployComplete("reports");
|
|
416
|
+
|
|
417
|
+
// Only the version moves. The template and the environment stay where the
|
|
418
|
+
// deployment put them.
|
|
419
|
+
await simCfn.updateStack(
|
|
420
|
+
new UpdateStackCommand({
|
|
421
|
+
StackName: "reports",
|
|
422
|
+
UsePreviousTemplate: true,
|
|
423
|
+
Parameters: [
|
|
424
|
+
{ ParameterKey: "Environment", UsePreviousValue: true },
|
|
425
|
+
{ ParameterKey: "Version", ParameterValue: "two" },
|
|
426
|
+
],
|
|
427
|
+
}),
|
|
428
|
+
);
|
|
429
|
+
await simCfn.waitForStackUpdateComplete("reports");
|
|
430
|
+
|
|
431
|
+
console.log(simAws.s3().getSimBucketByName("reports-staging-two"));
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
An update from the held template with the deployed values changes nothing, and is refused with
|
|
435
|
+
`No updates are to be performed.` like any other.
|
|
436
|
+
|
|
305
437
|
### Changed resources are replaced
|
|
306
438
|
|
|
307
439
|
A resource whose template entry changed is deleted and created again from the new template. Real
|
|
@@ -309,20 +441,297 @@ CloudFormation updates most properties in place and keeps what the resource hold
|
|
|
309
441
|
divergence worth knowing about. A bucket that gains a property loses its objects here, where in AWS
|
|
310
442
|
it would keep them. In-place update is the obvious next step, still to be built.
|
|
311
443
|
|
|
312
|
-
|
|
444
|
+
Three things follow from replacement:
|
|
313
445
|
|
|
314
446
|
- A resource naming a replaced resource is replaced too, all the way up the dependency chain, and
|
|
315
447
|
nothing is left pointing at a resource that has gone. Real CloudFormation hands the dependent the
|
|
316
448
|
new physical name and leaves it standing.
|
|
317
|
-
-
|
|
318
|
-
|
|
319
|
-
|
|
449
|
+
- A resource declared with `UpdateReplacePolicy: Retain` is kept, and the replacement is created
|
|
450
|
+
beside it. See [`UpdateReplacePolicy`](#updatereplacepolicy) below.
|
|
451
|
+
- A resource a failed update had already replaced comes back empty when the stack is rolled back.
|
|
452
|
+
The deployed one was deleted to make room for the replacement, and there is nothing left to put
|
|
453
|
+
back. See [rolling back a failed update](#rolling-back-a-failed-update) below.
|
|
454
|
+
|
|
455
|
+
### Rolling back a failed update
|
|
456
|
+
|
|
457
|
+
A failed update is rolled back onto the template the stack was deployed from. The stack moves to
|
|
458
|
+
`UPDATE_ROLLBACK_IN_PROGRESS`, the previous template is applied over whatever the update left
|
|
459
|
+
behind, and the stack settles in `UPDATE_ROLLBACK_COMPLETE`. `DescribeStacksCommand` reports each of
|
|
460
|
+
those statuses as the stack reaches it, with the reason the update stopped as `StackStatusReason`.
|
|
461
|
+
`waitForStackUpdateComplete(...)` waits for the rollback and then rethrows the update's error.
|
|
462
|
+
|
|
463
|
+
```typescript sim-cloudformation-update-rollback
|
|
464
|
+
/**
|
|
465
|
+
* Rolling a failed stack update back to the deployed template.
|
|
466
|
+
*/
|
|
467
|
+
|
|
468
|
+
import {
|
|
469
|
+
CreateStackCommand,
|
|
470
|
+
DescribeStacksCommand,
|
|
471
|
+
UpdateStackCommand,
|
|
472
|
+
} from "@aws-sdk/client-cloudformation";
|
|
320
473
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
474
|
+
import { SimAws } from "@kensio/yulin";
|
|
475
|
+
|
|
476
|
+
const simAws = new SimAws();
|
|
477
|
+
const simCfn = simAws.cloudFormation();
|
|
478
|
+
|
|
479
|
+
await simCfn.createStack(
|
|
480
|
+
new CreateStackCommand({
|
|
481
|
+
StackName: "reports",
|
|
482
|
+
TemplateBody: JSON.stringify({
|
|
483
|
+
Resources: {
|
|
484
|
+
ReportsBucket: {
|
|
485
|
+
Type: "AWS::S3::Bucket",
|
|
486
|
+
Properties: { BucketName: "reports-2025" },
|
|
487
|
+
},
|
|
488
|
+
},
|
|
489
|
+
}),
|
|
490
|
+
}),
|
|
491
|
+
);
|
|
492
|
+
await simCfn.waitForStackDeployComplete("reports");
|
|
493
|
+
|
|
494
|
+
// This update renames the bucket and asks for one S3 will not create.
|
|
495
|
+
await simCfn.updateStack(
|
|
496
|
+
new UpdateStackCommand({
|
|
497
|
+
StackName: "reports",
|
|
498
|
+
TemplateBody: JSON.stringify({
|
|
499
|
+
Resources: {
|
|
500
|
+
ReportsBucket: {
|
|
501
|
+
Type: "AWS::S3::Bucket",
|
|
502
|
+
Properties: { BucketName: "reports-2026" },
|
|
503
|
+
},
|
|
504
|
+
ArchiveBucket: {
|
|
505
|
+
Type: "AWS::S3::Bucket",
|
|
506
|
+
Properties: { BucketName: "Invalid_Bucket_Name" },
|
|
507
|
+
},
|
|
508
|
+
},
|
|
509
|
+
}),
|
|
510
|
+
}),
|
|
511
|
+
);
|
|
512
|
+
|
|
513
|
+
try {
|
|
514
|
+
await simCfn.waitForStackUpdateComplete("reports");
|
|
515
|
+
} catch (error) {
|
|
516
|
+
console.error("Stack update failed", error);
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
const described = await simCfn.describeStacks(
|
|
520
|
+
new DescribeStacksCommand({ StackName: "reports" }),
|
|
521
|
+
);
|
|
522
|
+
|
|
523
|
+
console.log(described.Stacks?.[0]?.StackStatus);
|
|
524
|
+
// "UPDATE_ROLLBACK_COMPLETE"
|
|
525
|
+
|
|
526
|
+
// The bucket the deployed template describes is back in simulated S3.
|
|
527
|
+
console.log(simAws.s3().getSimBucketByName("reports-2025"));
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
The difference the rollback applies is worked out from the resources the stack holds when the update
|
|
531
|
+
stops. A failure part way through is reconciled from where it got to, and an update that failed
|
|
532
|
+
before it touched a resource has nothing to undo.
|
|
533
|
+
|
|
534
|
+
A rollback that cannot finish leaves the stack in `UPDATE_ROLLBACK_FAILED`, with its own failure as
|
|
535
|
+
the reason. `UpdateReplacePolicy: Retain` on a replaced resource is one way to reach that. The kept
|
|
536
|
+
resource still holds the name, and the rollback asks for that name again when it recreates the
|
|
537
|
+
resource the deployed template describes.
|
|
538
|
+
|
|
539
|
+
Dealing with the cause and sending `UpdateStackCommand` again applies the change to the rolled-back
|
|
540
|
+
stack.
|
|
541
|
+
|
|
542
|
+
### `UpdateReplacePolicy`
|
|
543
|
+
|
|
544
|
+
A resource declared with `UpdateReplacePolicy: Retain` is left in simulated AWS when an update
|
|
545
|
+
replaces it. The stack stops tracking it, the replacement takes over its logical ID, and the kept
|
|
546
|
+
resource is reported on the stack the way a retained resource is after a teardown.
|
|
547
|
+
|
|
548
|
+
```typescript sim-cloudformation-update-replace-policy
|
|
549
|
+
/**
|
|
550
|
+
* Keeping a Resource an update replaces.
|
|
551
|
+
*/
|
|
552
|
+
|
|
553
|
+
import {
|
|
554
|
+
CreateStackCommand,
|
|
555
|
+
UpdateStackCommand,
|
|
556
|
+
} from "@aws-sdk/client-cloudformation";
|
|
557
|
+
|
|
558
|
+
import { SimAws } from "@kensio/yulin";
|
|
559
|
+
|
|
560
|
+
const simAws = new SimAws();
|
|
561
|
+
const simCfn = simAws.cloudFormation();
|
|
562
|
+
|
|
563
|
+
function reportsTemplate(bucketName: string): string {
|
|
564
|
+
return JSON.stringify({
|
|
565
|
+
Resources: {
|
|
566
|
+
ReportsBucket: {
|
|
567
|
+
Type: "AWS::S3::Bucket",
|
|
568
|
+
UpdateReplacePolicy: "Retain",
|
|
569
|
+
Properties: { BucketName: bucketName },
|
|
570
|
+
},
|
|
571
|
+
},
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
await simCfn.createStack(
|
|
576
|
+
new CreateStackCommand({
|
|
577
|
+
StackName: "reports",
|
|
578
|
+
TemplateBody: reportsTemplate("reports-2025"),
|
|
579
|
+
}),
|
|
580
|
+
);
|
|
581
|
+
await simCfn.waitForStackDeployComplete("reports");
|
|
582
|
+
|
|
583
|
+
// Renaming the bucket replaces it.
|
|
584
|
+
await simCfn.updateStack(
|
|
585
|
+
new UpdateStackCommand({
|
|
586
|
+
StackName: "reports",
|
|
587
|
+
TemplateBody: reportsTemplate("reports-2026"),
|
|
588
|
+
}),
|
|
589
|
+
);
|
|
590
|
+
await simCfn.waitForStackUpdateComplete("reports");
|
|
591
|
+
|
|
592
|
+
// The bucket the update replaced is still in simulated S3.
|
|
593
|
+
console.log(simAws.s3().getSimBucketByName("reports-2025"));
|
|
594
|
+
|
|
595
|
+
// And so is the one created in its place.
|
|
596
|
+
console.log(simAws.s3().getSimBucketByName("reports-2026"));
|
|
597
|
+
|
|
598
|
+
// The stack reports what it kept.
|
|
599
|
+
const stack = simCfn.getStackByName("reports");
|
|
600
|
+
console.log(stack?.retainedResources.map((resource) => resource.logicalId));
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
The attribute is read from the template being applied, which is where CloudFormation reads it. An
|
|
604
|
+
update that adds `UpdateReplacePolicy: Retain` keeps the resource it replaces, and one that drops
|
|
605
|
+
the attribute deletes it.
|
|
606
|
+
|
|
607
|
+
`DeletionPolicy` has no say in this. CloudFormation reads `DeletionPolicy` for a resource an update
|
|
608
|
+
drops from the template, and `UpdateReplacePolicy` for one it replaces. A bucket marked only with
|
|
609
|
+
`DeletionPolicy: Retain` still goes when its replacement is created. `Snapshot` is treated as
|
|
610
|
+
`Delete`, because no simulated service takes snapshots.
|
|
611
|
+
|
|
612
|
+
The kept resource holds the name it was created with. Real CloudFormation gives the replacement a
|
|
613
|
+
fresh random name, while simulated CloudFormation generates the same name for the same stack name
|
|
614
|
+
and logical ID every time (see
|
|
615
|
+
[names CloudFormation generates](#names-cloudformation-generates)). A replacement whose name the
|
|
616
|
+
template leaves to CloudFormation therefore asks for a name the kept resource still holds, and fails
|
|
617
|
+
to create. Name the replacement in the template, as the example above does, to have both.
|
|
618
|
+
|
|
619
|
+
## Deploying through a change set
|
|
620
|
+
|
|
621
|
+
A change set says what a template would do to a stack before anything happens to it. `cdk deploy`
|
|
622
|
+
goes through one by default, and so does any deployment script that wants to see what an update will
|
|
623
|
+
touch. Simulated CloudFormation serves `CreateChangeSetCommand`, `DescribeChangeSetCommand`,
|
|
624
|
+
`ExecuteChangeSetCommand`, `DeleteChangeSetCommand` and `ListChangeSetsCommand`.
|
|
625
|
+
|
|
626
|
+
```typescript sim-cloudformation-change-set
|
|
627
|
+
/**
|
|
628
|
+
* Deploying a simulated CloudFormation Stack through a change set.
|
|
629
|
+
*/
|
|
630
|
+
|
|
631
|
+
import {
|
|
632
|
+
CreateChangeSetCommand,
|
|
633
|
+
DescribeChangeSetCommand,
|
|
634
|
+
ExecuteChangeSetCommand,
|
|
635
|
+
} from "@aws-sdk/client-cloudformation";
|
|
636
|
+
|
|
637
|
+
import { SimAws } from "@kensio/yulin";
|
|
638
|
+
|
|
639
|
+
const simAws = new SimAws();
|
|
640
|
+
const simCfn = simAws.cloudFormation();
|
|
641
|
+
|
|
642
|
+
const templateBody = JSON.stringify({
|
|
643
|
+
Resources: {
|
|
644
|
+
ReportsBucket: {
|
|
645
|
+
Type: "AWS::S3::Bucket",
|
|
646
|
+
Properties: { BucketName: "change-set-reports" },
|
|
647
|
+
},
|
|
648
|
+
},
|
|
649
|
+
});
|
|
650
|
+
|
|
651
|
+
// A CREATE change set brings the Stack into being in REVIEW_IN_PROGRESS,
|
|
652
|
+
// holding no created Resources.
|
|
653
|
+
await simCfn.createChangeSet(
|
|
654
|
+
new CreateChangeSetCommand({
|
|
655
|
+
StackName: "reports-stack",
|
|
656
|
+
ChangeSetName: "reports-create",
|
|
657
|
+
ChangeSetType: "CREATE",
|
|
658
|
+
TemplateBody: templateBody,
|
|
659
|
+
}),
|
|
660
|
+
);
|
|
661
|
+
|
|
662
|
+
// Describing it says what executing it would do. Nothing is deployed yet.
|
|
663
|
+
const described = await simCfn.describeChangeSet(
|
|
664
|
+
new DescribeChangeSetCommand({
|
|
665
|
+
StackName: "reports-stack",
|
|
666
|
+
ChangeSetName: "reports-create",
|
|
667
|
+
}),
|
|
668
|
+
);
|
|
669
|
+
|
|
670
|
+
// [{ Action: "Add", LogicalResourceId: "ReportsBucket" }]
|
|
671
|
+
console.log(
|
|
672
|
+
described.Changes?.map((change) => ({
|
|
673
|
+
Action: change.ResourceChange.Action,
|
|
674
|
+
LogicalResourceId: change.ResourceChange.LogicalResourceId,
|
|
675
|
+
})),
|
|
676
|
+
);
|
|
677
|
+
|
|
678
|
+
// Executing it deploys the template.
|
|
679
|
+
await simCfn.executeChangeSet(
|
|
680
|
+
new ExecuteChangeSetCommand({
|
|
681
|
+
StackName: "reports-stack",
|
|
682
|
+
ChangeSetName: "reports-create",
|
|
683
|
+
}),
|
|
684
|
+
);
|
|
685
|
+
await simCfn.waitForStackDeployComplete("reports-stack");
|
|
686
|
+
|
|
687
|
+
console.log(simAws.s3().getSimBucketByName("change-set-reports"));
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
`ChangeSetType: CREATE` creates the stack in `REVIEW_IN_PROGRESS` and creates none of its resources.
|
|
691
|
+
`DescribeStacksCommand` reports the stack from that point on, and executing the change set is what
|
|
692
|
+
deploys it. The default, `ChangeSetType: UPDATE`, works out the change against a stack that is
|
|
693
|
+
already deployed and leaves it exactly as it is until the change set is executed.
|
|
694
|
+
|
|
695
|
+
`CreateChangeSetCommand` returns the change set ARN as `Id`. Every command naming a change set takes
|
|
696
|
+
either that ARN on its own or the change set name together with `StackName`, the way CloudFormation
|
|
697
|
+
takes them.
|
|
698
|
+
|
|
699
|
+
### What a change set reports
|
|
700
|
+
|
|
701
|
+
`DescribeChangeSetCommand` answers with one `Changes` entry per resource, each carrying a
|
|
702
|
+
`ResourceChange` with its `Action`, `LogicalResourceId`, `ResourceType` and `Replacement`. A resource
|
|
703
|
+
only the new template has is an `Add`, one only the stack has is a `Remove`, and one both have whose
|
|
704
|
+
template entry changed is a `Modify`.
|
|
705
|
+
|
|
706
|
+
Every `Modify` carries `Replacement: "True"`. Simulated CloudFormation replaces a changed resource
|
|
707
|
+
rather than updating it in place, and it replaces everything naming a replaced resource as well, so a
|
|
708
|
+
change set reports each of those as a modification too. See
|
|
709
|
+
[changed resources are replaced](#changed-resources-are-replaced) for what that costs.
|
|
710
|
+
|
|
711
|
+
A change set describing a template the stack already holds is `FAILED`, carrying the reason
|
|
712
|
+
CloudFormation gives, and refuses to execute. That is the same no-op rule an update follows, so a
|
|
713
|
+
template that only moves an output still has something to execute.
|
|
714
|
+
|
|
715
|
+
### Executing a change set
|
|
716
|
+
|
|
717
|
+
`executeChangeSet(...)` returns once the stack operation has started, as `createStack(...)` and
|
|
718
|
+
`updateStack(...)` do. Follow it with `waitForStackDeployComplete(...)` for a `CREATE` change set or
|
|
719
|
+
`waitForStackUpdateComplete(...)` for an `UPDATE` one.
|
|
720
|
+
|
|
721
|
+
The change set reports its own execution through `ExecutionStatus`. It reads `AVAILABLE` before,
|
|
722
|
+
`EXECUTE_IN_PROGRESS` while the stack operation runs, and `EXECUTE_COMPLETE` or `EXECUTE_FAILED`
|
|
723
|
+
after. Every other executable change set against the same stack becomes `OBSOLETE`, because each was
|
|
724
|
+
worked out against a stack the execution has moved on.
|
|
725
|
+
|
|
726
|
+
A change set whose stack has moved on since it was created is refused as `OBSOLETE`, which is what
|
|
727
|
+
CloudFormation calls a change set whose stack was already updated. An update sent directly, and
|
|
728
|
+
another change set executed first, both leave it there. Executing it would apply a difference nobody
|
|
729
|
+
has seen, because what it reports was worked out against the template the stack held then.
|
|
730
|
+
|
|
731
|
+
`DeleteChangeSetCommand` takes a change set away without executing it, and a change set name that is
|
|
732
|
+
not there is a success rather than an error. Every other command naming one that is not there is
|
|
733
|
+
refused with a `ChangeSetNotFoundException`. `ListChangeSetsCommand` reports the ones a stack still
|
|
734
|
+
holds, in the order they were created.
|
|
326
735
|
|
|
327
736
|
## Deleting a stack
|
|
328
737
|
|
|
@@ -385,7 +794,8 @@ Deletion runs in the background, as deployment does. `deleteStack(...)` returns
|
|
|
385
794
|
moved to `DELETE_IN_PROGRESS`, and `waitForStackDeleteComplete(...)` waits for the resources to go.
|
|
386
795
|
`DescribeStacksCommand` reports `DELETE_IN_PROGRESS` in between, and then refuses the stack name with
|
|
387
796
|
a `ValidationError` once the deletion has finished. That is how CloudFormation answers a name it no
|
|
388
|
-
longer holds.
|
|
797
|
+
longer holds. The stack itself is still there under its
|
|
798
|
+
[stack ID](#stack-ids), reporting `DELETE_COMPLETE` and the Outputs it finished with.
|
|
389
799
|
|
|
390
800
|
Deleting a stack name that was never deployed succeeds, as it does in CloudFormation.
|
|
391
801
|
|
|
@@ -413,6 +823,77 @@ Retained resources are readable from the stack:
|
|
|
413
823
|
console.log(stack.retainedResources.map((resource) => resource.logicalId));
|
|
414
824
|
```
|
|
415
825
|
|
|
826
|
+
### `RetainResources`
|
|
827
|
+
|
|
828
|
+
`DeleteStackCommand` takes `RetainResources`, naming resources to leave in simulated AWS. Each one
|
|
829
|
+
is kept whatever its own `DeletionPolicy` says, and the stack deletes around it and reaches
|
|
830
|
+
`DELETE_COMPLETE`.
|
|
831
|
+
|
|
832
|
+
```typescript sim-cloudformation-retain-resources
|
|
833
|
+
/**
|
|
834
|
+
* Keeping named Resources when a Stack is deleted.
|
|
835
|
+
*/
|
|
836
|
+
|
|
837
|
+
import {
|
|
838
|
+
CreateStackCommand,
|
|
839
|
+
DeleteStackCommand,
|
|
840
|
+
} from "@aws-sdk/client-cloudformation";
|
|
841
|
+
import { PutObjectCommand } from "@aws-sdk/client-s3";
|
|
842
|
+
|
|
843
|
+
import { SimAws } from "@kensio/yulin";
|
|
844
|
+
|
|
845
|
+
const simAws = new SimAws();
|
|
846
|
+
const simCfn = simAws.cloudFormation();
|
|
847
|
+
|
|
848
|
+
await simCfn.createStack(
|
|
849
|
+
new CreateStackCommand({
|
|
850
|
+
StackName: "reports-stack",
|
|
851
|
+
TemplateBody: JSON.stringify({
|
|
852
|
+
Resources: {
|
|
853
|
+
ReportsBucket: {
|
|
854
|
+
Type: "AWS::S3::Bucket",
|
|
855
|
+
Properties: { BucketName: "reports" },
|
|
856
|
+
},
|
|
857
|
+
ArchiveBucket: {
|
|
858
|
+
Type: "AWS::S3::Bucket",
|
|
859
|
+
Properties: { BucketName: "archive" },
|
|
860
|
+
},
|
|
861
|
+
},
|
|
862
|
+
}),
|
|
863
|
+
}),
|
|
864
|
+
);
|
|
865
|
+
await simCfn.waitForStackDeployComplete("reports-stack");
|
|
866
|
+
|
|
867
|
+
await simAws.s3().putObject(
|
|
868
|
+
new PutObjectCommand({
|
|
869
|
+
Bucket: "reports",
|
|
870
|
+
Key: "january.csv",
|
|
871
|
+
Body: "reported",
|
|
872
|
+
}),
|
|
873
|
+
);
|
|
874
|
+
|
|
875
|
+
await simCfn.deleteStack(
|
|
876
|
+
new DeleteStackCommand({
|
|
877
|
+
StackName: "reports-stack",
|
|
878
|
+
RetainResources: ["ReportsBucket"],
|
|
879
|
+
}),
|
|
880
|
+
);
|
|
881
|
+
await simCfn.waitForStackDeleteComplete("reports-stack");
|
|
882
|
+
|
|
883
|
+
// The named bucket is still in simulated S3, with the object it held.
|
|
884
|
+
console.log(simAws.s3().getSimBucketByName("reports"));
|
|
885
|
+
|
|
886
|
+
// The bucket the call did not name has gone.
|
|
887
|
+
console.log(simAws.s3().getSimBucketByName("archive"));
|
|
888
|
+
```
|
|
889
|
+
|
|
890
|
+
Keeping a bucket that holds objects is one reason to reach for this. S3 refuses to delete such a
|
|
891
|
+
bucket, which fails the whole teardown, and naming it here steps over it.
|
|
892
|
+
|
|
893
|
+
A name the stack has no resource for is refused with a `ValidationError`, as CloudFormation refuses
|
|
894
|
+
one. A CDK construct ID resolves here as well as a logical ID, the same way `stack.getResource(...)`
|
|
895
|
+
takes either.
|
|
896
|
+
|
|
416
897
|
## Parameters
|
|
417
898
|
|
|
418
899
|
Template parameters can be supplied when creating a stack.
|
|
@@ -771,6 +1252,23 @@ The value a lookup returns can be any type. A list value is returned as a list.
|
|
|
771
1252
|
used in resource properties and in `Outputs`. A map name or key missing from `Mappings` fails the
|
|
772
1253
|
deployment with an error naming the path that could not be found.
|
|
773
1254
|
|
|
1255
|
+
A fourth argument of `{ "DefaultValue": ... }` gives the lookup an answer for that case.
|
|
1256
|
+
|
|
1257
|
+
```json
|
|
1258
|
+
{
|
|
1259
|
+
"Fn::FindInMap": [
|
|
1260
|
+
"EnvironmentMap",
|
|
1261
|
+
{ "Ref": "Environment" },
|
|
1262
|
+
"BucketName",
|
|
1263
|
+
{ "DefaultValue": "fallback-site-bucket" }
|
|
1264
|
+
]
|
|
1265
|
+
}
|
|
1266
|
+
```
|
|
1267
|
+
|
|
1268
|
+
The default answers a map name, a top-level key or a second-level key the `Mappings` section does
|
|
1269
|
+
not carry. It is a template value like any other, so it can itself be a `Ref` or a nested
|
|
1270
|
+
expression. A lookup that finds its value in the map ignores the default.
|
|
1271
|
+
|
|
774
1272
|
### `Fn::Split` and `Fn::Select`
|
|
775
1273
|
|
|
776
1274
|
`Fn::Split` cuts a string into a list on a delimiter. `Fn::Select` reads one value out of a list by
|
|
@@ -1002,10 +1500,10 @@ console.log(stack.getResource("Backups") !== undefined);
|
|
|
1002
1500
|
|
|
1003
1501
|
### Writing a condition
|
|
1004
1502
|
|
|
1005
|
-
A condition is built from `Fn::Equals`, `Fn::And`, `Fn::Or` and `Fn::
|
|
1006
|
-
take a list of two to ten conditions, and `Fn::Not` takes a list of exactly one. A
|
|
1007
|
-
name another condition with `{ "Condition": "OtherCondition" }`, in any order, so a
|
|
1008
|
-
name one written below it in the section.
|
|
1503
|
+
A condition is built from `Fn::Equals`, `Fn::And`, `Fn::Or`, `Fn::Not` and `Fn::If`. `Fn::And` and
|
|
1504
|
+
`Fn::Or` take a list of two to ten conditions, and `Fn::Not` takes a list of exactly one. A
|
|
1505
|
+
condition can name another condition with `{ "Condition": "OtherCondition" }`, in any order, so a
|
|
1506
|
+
condition may name one written below it in the section.
|
|
1009
1507
|
|
|
1010
1508
|
```json
|
|
1011
1509
|
{
|
|
@@ -1020,9 +1518,27 @@ name one written below it in the section.
|
|
|
1020
1518
|
`Fn::Equals` compares its two values as strings, as CloudFormation does. A JSON number in the
|
|
1021
1519
|
template matches the string a parameter carries.
|
|
1022
1520
|
|
|
1521
|
+
An `Fn::If` inside the section takes a condition name and two conditions, and evaluates whichever
|
|
1522
|
+
one the named condition selects. The condition it names can be written anywhere in the section.
|
|
1523
|
+
|
|
1524
|
+
```json
|
|
1525
|
+
{
|
|
1526
|
+
"IsProd": { "Fn::Equals": [{ "Ref": "EnvName" }, "prod"] },
|
|
1527
|
+
"IsBackedUp": {
|
|
1528
|
+
"Fn::If": [
|
|
1529
|
+
"IsProd",
|
|
1530
|
+
{ "Fn::Equals": [{ "Ref": "BackupPlan" }, "nightly"] },
|
|
1531
|
+
{ "Fn::Equals": ["never", "nightly"] }
|
|
1532
|
+
]
|
|
1533
|
+
}
|
|
1534
|
+
}
|
|
1535
|
+
```
|
|
1536
|
+
|
|
1023
1537
|
The whole section is evaluated once per deployment, before any resource is created. A condition can
|
|
1024
1538
|
read parameters and pseudo parameters and nothing else. A comparison that would need a created
|
|
1025
|
-
resource, such as an `Fn::GetAtt`, fails the deployment rather than reading as false.
|
|
1539
|
+
resource, such as an `Fn::GetAtt`, fails the deployment rather than reading as false. A condition
|
|
1540
|
+
that closes a cycle through `{ "Condition": ... }` or `Fn::If` fails the deployment naming the route
|
|
1541
|
+
it took back to itself.
|
|
1026
1542
|
|
|
1027
1543
|
### `Fn::If`
|
|
1028
1544
|
|
|
@@ -1046,6 +1562,15 @@ fails.
|
|
|
1046
1562
|
|
|
1047
1563
|
A `Condition` attribute naming a condition the template leaves undefined fails the same way.
|
|
1048
1564
|
|
|
1565
|
+
### The output `Condition` attribute
|
|
1566
|
+
|
|
1567
|
+
An output carrying a `Condition` attribute whose condition is false is left out of the stack. It is
|
|
1568
|
+
absent from `stack.outputs` and from `DescribeStacks`, and the export name it carries is never
|
|
1569
|
+
published, so another stack's `Fn::ImportValue` for that name finds nothing.
|
|
1570
|
+
|
|
1571
|
+
An output whose condition is true resolves and exports as any other output does. One naming a
|
|
1572
|
+
condition the template leaves undefined fails the deployment.
|
|
1573
|
+
|
|
1049
1574
|
## Resource dependencies
|
|
1050
1575
|
|
|
1051
1576
|
Resources can depend on each other explicitly with `DependsOn`.
|
|
@@ -1732,10 +2257,9 @@ await simAws.cloudFormation().updateTemplateFile({ templatePath });
|
|
|
1732
2257
|
The sibling assets manifest is read again with the template. A resource the update replaces reads the
|
|
1733
2258
|
assets that synthesis staged, not the ones the stack was deployed with.
|
|
1734
2259
|
|
|
1735
|
-
A file written without being changed is refused with `No updates are to be performed
|
|
1736
|
-
update
|
|
1737
|
-
|
|
1738
|
-
created some of the resources the change asked for.
|
|
2260
|
+
A file written without being changed is refused with `No updates are to be performed.`. A failed
|
|
2261
|
+
update is rolled back onto the template the stack was deployed from, and settles in
|
|
2262
|
+
`UPDATE_ROLLBACK_COMPLETE`. See [rolling back a failed update](#rolling-back-a-failed-update).
|
|
1739
2263
|
|
|
1740
2264
|
## Watching a template file
|
|
1741
2265
|
|
|
@@ -1783,9 +2307,10 @@ browser arriving on the new resources finds whatever the callback left ready for
|
|
|
1783
2307
|
|
|
1784
2308
|
`onFailed` is given the update the changed template failed to survive. It reports the failure and
|
|
1785
2309
|
nothing else.
|
|
1786
|
-
The stack is
|
|
1787
|
-
|
|
1788
|
-
deploys leaves a working environment where a restart on it would
|
|
2310
|
+
The stack is rolled back onto the template it was deployed from, as it is after an update through the
|
|
2311
|
+
command. A resource the update had already replaced comes back empty. What a failure keeps is the
|
|
2312
|
+
process. A template that no longer deploys leaves a working environment where a restart on it would
|
|
2313
|
+
leave none.
|
|
1789
2314
|
|
|
1790
2315
|
A burst of writes is one update. Saving a file is several filesystem events, so changes are held
|
|
1791
2316
|
until they stop arriving. `settleMs` is how long that wait is, and it defaults to the 250ms
|
|
@@ -1867,6 +2392,11 @@ around it are read the same way:
|
|
|
1867
2392
|
the deployment turns it off, as the construct is. Pruning only considers what the filters and the
|
|
1868
2393
|
key prefix select, and leaves alone any Object the deployment would never have copied.
|
|
1869
2394
|
|
|
2395
|
+
A Bucket with an event notification configuration hears the deployment. Every file the deployment
|
|
2396
|
+
writes raises `s3:ObjectCreated:Put`, and every Object a pruning deployment removes raises
|
|
2397
|
+
`s3:ObjectRemoved:Delete`, the two the real provider function's sync raises. See
|
|
2398
|
+
[Event notifications](https://yulinsim.dev/services/s3/#event-notifications).
|
|
2399
|
+
|
|
1870
2400
|
Several deployments can share one Bucket. That is the usual arrangement when the headers differ by
|
|
1871
2401
|
file type, since a `BucketDeployment` sets them for all of its files at once. A second deployment is
|
|
1872
2402
|
how the rest of the site gets different ones. Give the second one `prune: false`, or filters that miss
|
|
@@ -2266,9 +2796,9 @@ its own `Role` runs as that role, and gets no expanded one.
|
|
|
2266
2796
|
### Function events
|
|
2267
2797
|
|
|
2268
2798
|
`Events` on a SAM function expand into whatever puts the function behind them. `Api`, `HttpApi`,
|
|
2269
|
-
`SQS`, `DynamoDB`, `SNS`, `S3`, `Schedule`, `ScheduleV2` and `EventBridgeRule` are the
|
|
2270
|
-
covers. An event of any other type is left where it is, and the function deploys with
|
|
2271
|
-
front of it.
|
|
2799
|
+
`SQS`, `DynamoDB`, `SNS`, `S3`, `Cognito`, `Schedule`, `ScheduleV2` and `EventBridgeRule` are the
|
|
2800
|
+
types this covers. An event of any other type is left where it is, and the function deploys with
|
|
2801
|
+
nothing in front of it.
|
|
2272
2802
|
|
|
2273
2803
|
An `HttpApi` event becomes an `AWS::ApiGatewayV2::Integration`, an `AWS::ApiGatewayV2::Route` and the
|
|
2274
2804
|
`AWS::Lambda::Permission` the API invokes the function under. `Path` and `Method` become the route
|
|
@@ -2340,7 +2870,8 @@ console.log(await response.text());
|
|
|
2340
2870
|
await srv.close();
|
|
2341
2871
|
```
|
|
2342
2872
|
|
|
2343
|
-
`Auth` on the event
|
|
2873
|
+
`Auth` on the event names one of the API's authorizers. A route the event and the API both leave
|
|
2874
|
+
open is reached by every request matching it.
|
|
2344
2875
|
|
|
2345
2876
|
An `Api` event is the REST half of the same idea. It becomes an `AWS::ApiGateway::Resource` for each
|
|
2346
2877
|
segment of `Path`, an `AWS::ApiGateway::Method` on the last of them carrying a proxy `Integration`
|
|
@@ -2507,8 +3038,7 @@ time window gets `OFF`.
|
|
|
2507
3038
|
once, and a failed one is recorded by the rule or the schedule that made it.
|
|
2508
3039
|
|
|
2509
3040
|
A `FunctionUrlConfig` on the function expands into an `AWS::Lambda::Url` named after it, `RatesUrl`
|
|
2510
|
-
for a function called `Rates`. `AuthType` and `
|
|
2511
|
-
simulated Function URL answers no preflight request).
|
|
3041
|
+
for a function called `Rates`. `AuthType`, `InvokeMode` and `Cors` carry over.
|
|
2512
3042
|
|
|
2513
3043
|
### Queue, stream, topic and bucket events
|
|
2514
3044
|
|
|
@@ -2639,8 +3169,9 @@ reaches an API the template declared, and how an `AWS::ApiGatewayV2::Route` reso
|
|
|
2639
3169
|
does. An API naming a `DefinitionUri` is recorded as unsupported, because nothing here reads a
|
|
2640
3170
|
document off disk or out of S3.
|
|
2641
3171
|
|
|
2642
|
-
|
|
2643
|
-
|
|
3172
|
+
An `Auth` block becomes the authorizer resources it declares, covered under
|
|
3173
|
+
[API authorizers](#api-authorizers) below. A `Domain` is deployed by SAM as a custom domain name
|
|
3174
|
+
resource, and an API declaring one is deployed without it.
|
|
2644
3175
|
|
|
2645
3176
|
```typescript sim-cloudformation-sam-table-api
|
|
2646
3177
|
/**
|
|
@@ -2711,9 +3242,9 @@ created without, because reading the document is outside this. An API declaring
|
|
|
2711
3242
|
root resource and an empty tree under it. An API naming a `DefinitionUri` is recorded as
|
|
2712
3243
|
unsupported, because this reads no document off disk or out of S3.
|
|
2713
3244
|
|
|
2714
|
-
The API is deployed without `
|
|
3245
|
+
The API is deployed without `Cors`, `Domain`, `GatewayResponses`, `MethodSettings` and
|
|
2715
3246
|
`BinaryMediaTypes`. SAM writes each of them into the document it generates, and none is expanded
|
|
2716
|
-
here.
|
|
3247
|
+
here. `Auth` is expanded, and has [a section of its own](#api-authorizers) below.
|
|
2717
3248
|
|
|
2718
3249
|
```typescript sim-cloudformation-sam-rest-api
|
|
2719
3250
|
/**
|
|
@@ -2758,6 +3289,162 @@ something the stack holds, answers `Ref` for and tears down. The APIs, stages an
|
|
|
2758
3289
|
the same either way, and the logical IDs of the path resources have no counterpart in what SAM
|
|
2759
3290
|
produces.
|
|
2760
3291
|
|
|
3292
|
+
### API authorizers
|
|
3293
|
+
|
|
3294
|
+
`Auth` on an `AWS::Serverless::Api` or an `AWS::Serverless::HttpApi` expands into the authorizers it
|
|
3295
|
+
declares. A REST API gets one `AWS::ApiGateway::Authorizer` per entry in `Authorizers`, and an HTTP
|
|
3296
|
+
API gets one `AWS::ApiGatewayV2::Authorizer`. Each carries the logical ID of the API with the
|
|
3297
|
+
authorizer's name and `Authorizer` after it (`OrdersPoolAuthAuthorizer` for an authorizer called
|
|
3298
|
+
`PoolAuth` on an API called `Orders`). A template can `Ref` that name, and the stack tears the
|
|
3299
|
+
authorizer down with everything else.
|
|
3300
|
+
|
|
3301
|
+
On a REST API, an authorizer naming a `UserPoolArn` verifies Cognito tokens, and one naming a
|
|
3302
|
+
`FunctionArn` asks a function of the template. `FunctionPayloadType` picks between the `TOKEN`
|
|
3303
|
+
authorizer that is handed one header and the `REQUEST` authorizer that is handed the whole request.
|
|
3304
|
+
SAM defaults to `TOKEN`. `Identity` names the parts of the request the authorizer reads (`Header`,
|
|
3305
|
+
`Headers`, `QueryStrings`, `StageVariables` and `Context`), and `ReauthorizeEvery` becomes the
|
|
3306
|
+
authorizer's result TTL.
|
|
3307
|
+
|
|
3308
|
+
On an HTTP API, an authorizer naming a `JwtConfiguration` verifies tokens against the issuer it
|
|
3309
|
+
names, and one naming a `FunctionArn` asks a function. The issuer and audience are read under either
|
|
3310
|
+
spelling (SAM writes them in lower case and CloudFormation capitalises them).
|
|
3311
|
+
`AuthorizerPayloadFormatVersion` defaults to `2.0`. `EnableIamAuthorizer` puts `AWS_IAM` among the
|
|
3312
|
+
names a route can take, and a REST API carries that name already.
|
|
3313
|
+
|
|
3314
|
+
`DefaultAuthorizer` names the authorizer every method and route takes. An `Api` or `HttpApi` event
|
|
3315
|
+
picks another one with `Auth.Authorizer`, and opens its own method with `Auth.Authorizer: NONE`.
|
|
3316
|
+
`Auth.AuthorizationScopes` on the event replaces the scopes the authorizer asks for. The implicit
|
|
3317
|
+
API a function's events create reads its `Auth` from `Globals.Api` or `Globals.HttpApi`.
|
|
3318
|
+
|
|
3319
|
+
An `Auth` property outside that set fails the transform, naming the property. `ApiKeyRequired`,
|
|
3320
|
+
`UsagePlan`, `ResourcePolicy`, `InvokeRole`, `AddDefaultAuthorizerToCorsPreflight` and
|
|
3321
|
+
`Identity.ValidationExpression` are all refused that way. Dropping one of them would deploy an API
|
|
3322
|
+
that authorizes less than the template asked for, and the failure says which property it was.
|
|
3323
|
+
|
|
3324
|
+
```typescript sim-cloudformation-sam-api-auth
|
|
3325
|
+
/**
|
|
3326
|
+
* A SAM HTTP API closed by the Cognito user pool its Auth block names.
|
|
3327
|
+
*/
|
|
3328
|
+
|
|
3329
|
+
import { SimAws } from "@kensio/yulin";
|
|
3330
|
+
import { serveSimAws } from "@kensio/yulin/serve";
|
|
3331
|
+
|
|
3332
|
+
const simAws = new SimAws();
|
|
3333
|
+
|
|
3334
|
+
const stack = await simAws.cloudFormation().deployTemplate({
|
|
3335
|
+
stackName: "orders-api-stack",
|
|
3336
|
+
template: {
|
|
3337
|
+
Transform: "AWS::Serverless-2016-10-31",
|
|
3338
|
+
Resources: {
|
|
3339
|
+
Users: {
|
|
3340
|
+
Type: "AWS::Cognito::UserPool",
|
|
3341
|
+
Properties: { UserPoolName: "orders-users" },
|
|
3342
|
+
},
|
|
3343
|
+
WebClient: {
|
|
3344
|
+
Type: "AWS::Cognito::UserPoolClient",
|
|
3345
|
+
Properties: {
|
|
3346
|
+
UserPoolId: { Ref: "Users" },
|
|
3347
|
+
ClientName: "web",
|
|
3348
|
+
ExplicitAuthFlows: ["ALLOW_ADMIN_USER_PASSWORD_AUTH"],
|
|
3349
|
+
},
|
|
3350
|
+
},
|
|
3351
|
+
Orders: {
|
|
3352
|
+
Type: "AWS::Serverless::HttpApi",
|
|
3353
|
+
Properties: {
|
|
3354
|
+
Auth: {
|
|
3355
|
+
DefaultAuthorizer: "PoolAuth",
|
|
3356
|
+
Authorizers: {
|
|
3357
|
+
PoolAuth: {
|
|
3358
|
+
JwtConfiguration: {
|
|
3359
|
+
issuer: { "Fn::GetAtt": ["Users", "ProviderURL"] },
|
|
3360
|
+
audience: [{ Ref: "WebClient" }],
|
|
3361
|
+
},
|
|
3362
|
+
},
|
|
3363
|
+
},
|
|
3364
|
+
},
|
|
3365
|
+
},
|
|
3366
|
+
},
|
|
3367
|
+
Handler: {
|
|
3368
|
+
Type: "AWS::Serverless::Function",
|
|
3369
|
+
Properties: {
|
|
3370
|
+
Handler: "index.handler",
|
|
3371
|
+
Runtime: "nodejs22.x",
|
|
3372
|
+
Events: {
|
|
3373
|
+
Get: {
|
|
3374
|
+
Type: "HttpApi",
|
|
3375
|
+
Properties: {
|
|
3376
|
+
ApiId: { Ref: "Orders" },
|
|
3377
|
+
Path: "/orders",
|
|
3378
|
+
Method: "GET",
|
|
3379
|
+
},
|
|
3380
|
+
},
|
|
3381
|
+
},
|
|
3382
|
+
},
|
|
3383
|
+
},
|
|
3384
|
+
},
|
|
3385
|
+
Outputs: {
|
|
3386
|
+
ApiEndpoint: { Value: { "Fn::GetAtt": ["Orders", "ApiEndpoint"] } },
|
|
3387
|
+
PoolId: { Value: { Ref: "Users" } },
|
|
3388
|
+
ClientId: { Value: { Ref: "WebClient" } },
|
|
3389
|
+
},
|
|
3390
|
+
},
|
|
3391
|
+
bindings: [
|
|
3392
|
+
{
|
|
3393
|
+
logicalId: "Handler",
|
|
3394
|
+
handler: (): { statusCode: number; body: string } => ({
|
|
3395
|
+
statusCode: 200,
|
|
3396
|
+
body: "orders",
|
|
3397
|
+
}),
|
|
3398
|
+
},
|
|
3399
|
+
],
|
|
3400
|
+
});
|
|
3401
|
+
|
|
3402
|
+
await stack.waitForDeployComplete();
|
|
3403
|
+
|
|
3404
|
+
const cognito = simAws.cognitoIdentityProvider();
|
|
3405
|
+
const userPoolId = stack.output("PoolId");
|
|
3406
|
+
const clientId = stack.output("ClientId");
|
|
3407
|
+
|
|
3408
|
+
await cognito.adminCreateUser({
|
|
3409
|
+
input: { UserPoolId: userPoolId, Username: "ada" },
|
|
3410
|
+
});
|
|
3411
|
+
await cognito.adminSetUserPassword({
|
|
3412
|
+
input: {
|
|
3413
|
+
UserPoolId: userPoolId,
|
|
3414
|
+
Username: "ada",
|
|
3415
|
+
Password: "Correct-horse-1",
|
|
3416
|
+
Permanent: true,
|
|
3417
|
+
},
|
|
3418
|
+
});
|
|
3419
|
+
const signedIn = await cognito.adminInitiateAuth({
|
|
3420
|
+
input: {
|
|
3421
|
+
UserPoolId: userPoolId,
|
|
3422
|
+
ClientId: clientId,
|
|
3423
|
+
AuthFlow: "ADMIN_USER_PASSWORD_AUTH",
|
|
3424
|
+
AuthParameters: { USERNAME: "ada", PASSWORD: "Correct-horse-1" },
|
|
3425
|
+
},
|
|
3426
|
+
});
|
|
3427
|
+
|
|
3428
|
+
const srv = await serveSimAws({ simAws });
|
|
3429
|
+
const url = srv.localUrl(`${stack.output("ApiEndpoint")}/orders`);
|
|
3430
|
+
|
|
3431
|
+
const refused = await fetch(url);
|
|
3432
|
+
|
|
3433
|
+
console.log(refused.status);
|
|
3434
|
+
// 401
|
|
3435
|
+
|
|
3436
|
+
const admitted = await fetch(url, {
|
|
3437
|
+
headers: {
|
|
3438
|
+
authorization: `Bearer ${signedIn.AuthenticationResult?.AccessToken}`,
|
|
3439
|
+
},
|
|
3440
|
+
});
|
|
3441
|
+
|
|
3442
|
+
console.log(admitted.status);
|
|
3443
|
+
// 200
|
|
3444
|
+
|
|
3445
|
+
await srv.close();
|
|
3446
|
+
```
|
|
3447
|
+
|
|
2761
3448
|
## Serving deployed resources on localhost
|
|
2762
3449
|
|
|
2763
3450
|
CloudFormation itself is not served as an HTTP API. Instead, you deploy infrastructure through Sim
|
|
@@ -3489,8 +4176,18 @@ Sim CloudFormation currently supports:
|
|
|
3489
4176
|
|
|
3490
4177
|
- `CreateStackCommand`, `DescribeStacksCommand`, `UpdateStackCommand` and `DeleteStackCommand`,
|
|
3491
4178
|
taking a `TemplateBody` written as JSON or as YAML with short-form intrinsic tags
|
|
4179
|
+
- `UsePreviousTemplate` on `UpdateStackCommand`, and `UsePreviousValue` on one of its parameters,
|
|
4180
|
+
for an update that changes a parameter value on its own
|
|
4181
|
+
- Rollback of a failed update onto the template the stack was deployed from, through
|
|
4182
|
+
`UPDATE_ROLLBACK_IN_PROGRESS` to `UPDATE_ROLLBACK_COMPLETE` or `UPDATE_ROLLBACK_FAILED`
|
|
4183
|
+
- `CreateChangeSetCommand`, `DescribeChangeSetCommand`, `ExecuteChangeSetCommand`,
|
|
4184
|
+
`DeleteChangeSetCommand` and `ListChangeSetsCommand`, for both `CREATE` and `UPDATE` change sets
|
|
3492
4185
|
- Waiting for simulated stack deployment, update and deletion completion
|
|
3493
|
-
-
|
|
4186
|
+
- Stack IDs in the CloudFormation ARN shape, accepted by `DescribeStacksCommand` in place of a stack
|
|
4187
|
+
name, and still describing a stack once it has been deleted
|
|
4188
|
+
- The resource `DeletionPolicy` attribute, for `Retain` and `RetainExceptOnCreate`, and
|
|
4189
|
+
`UpdateReplacePolicy`, for `Retain`
|
|
4190
|
+
- `RetainResources` on `DeleteStackCommand`, naming resources a teardown leaves in simulated AWS
|
|
3494
4191
|
- `deployTemplate(...)` for parsed template objects, optionally naming the synthesized template file
|
|
3495
4192
|
a template edited in memory came from
|
|
3496
4193
|
- `deployTemplateFile(...)` for template files, written as JSON or as YAML with short-form
|
|
@@ -3500,8 +4197,9 @@ Sim CloudFormation currently supports:
|
|
|
3500
4197
|
- Template `Parameters` with supplied values and defaults
|
|
3501
4198
|
- Template `Outputs`, resolved after resource creation and read from `stack.outputs`
|
|
3502
4199
|
- Template `Mappings`, read with `Fn::FindInMap`
|
|
3503
|
-
- Template `Conditions`, built from `Fn::Equals`, `Fn::And`, `Fn::Or` and `Fn::
|
|
3504
|
-
- The
|
|
4200
|
+
- Template `Conditions`, built from `Fn::Equals`, `Fn::And`, `Fn::Or`, `Fn::Not` and `Fn::If`
|
|
4201
|
+
- The `Condition` attribute on a resource, which decides whether the resource is created, and on an
|
|
4202
|
+
output, which decides whether the output and its export are published
|
|
3505
4203
|
- The `Ref`, `Fn::GetAtt`, `Fn::Join`, `Fn::Sub`, `Fn::FindInMap`, `Fn::If`, `Fn::Split` and
|
|
3506
4204
|
`Fn::Select` intrinsic functions
|
|
3507
4205
|
- Explicit resource dependencies with `DependsOn`
|
|
@@ -3514,6 +4212,10 @@ Sim CloudFormation currently supports:
|
|
|
3514
4212
|
- The `HttpApi` event of a SAM function, expanded into the API, integration, route, stage and invoke
|
|
3515
4213
|
permission that serve it, and the `Api` event, expanded into the API, path resources, method,
|
|
3516
4214
|
deployment, stage and invoke permission that serve it
|
|
4215
|
+
- `Auth` on a SAM API, expanded into the Cognito, JWT and Lambda authorizers it declares, with
|
|
4216
|
+
`DefaultAuthorizer` and the `Auth` an event states deciding which one guards each method or route
|
|
4217
|
+
- The `Cognito` event of a SAM function, expanded into the pool's `LambdaConfig` entry and the
|
|
4218
|
+
permission the pool invokes the function under
|
|
3517
4219
|
- `FunctionUrlConfig` on a SAM function, expanded into a Function URL
|
|
3518
4220
|
- The `Schedule`, `ScheduleV2` and `EventBridgeRule` events of a SAM function, expanded into the
|
|
3519
4221
|
EventBridge rule or Scheduler schedule that fires the function, and the permission or execution
|
|
@@ -3589,48 +4291,56 @@ Each service's own docs describe what its resource types support.
|
|
|
3589
4291
|
changed resource is still replaced and loses what it holds, the same as any other update.
|
|
3590
4292
|
- Yulin never synthesizes a CDK app. It watches the synthesized output template. A change to the app
|
|
3591
4293
|
itself reaches the stack once something has run `cdk synth` over it.
|
|
3592
|
-
- A
|
|
3593
|
-
|
|
3594
|
-
|
|
3595
|
-
|
|
3596
|
-
|
|
3597
|
-
|
|
3598
|
-
|
|
3599
|
-
|
|
3600
|
-
|
|
4294
|
+
- A change set reports every `Modify` as `Replacement: True`, because a changed resource is replaced
|
|
4295
|
+
rather than updated in place. `ChangeSetType: IMPORT` is refused, and so is a `CREATE` change set
|
|
4296
|
+
naming a stack that is already there, where CloudFormation allows a second one against a stack
|
|
4297
|
+
still in review. Drift detection is outside the simulation.
|
|
4298
|
+
- A rolled-back update recreates a resource it had already replaced, and the resource comes back
|
|
4299
|
+
empty. Real CloudFormation puts most properties back on the resource it updated in place, and what
|
|
4300
|
+
the resource holds survives. See
|
|
4301
|
+
[rolling back a failed update](#rolling-back-a-failed-update).
|
|
4302
|
+
- `UpdateStackCommand` reads `StackName`, `TemplateBody`, `UsePreviousTemplate` and `Parameters`,
|
|
4303
|
+
including `UsePreviousValue` on a parameter. `DisableRollback` and `RollbackConfiguration` are not
|
|
4304
|
+
read, so a failed update is always rolled back.
|
|
4305
|
+
- An update asked for while another is still running, or while one is being rolled back, is refused,
|
|
4306
|
+
as CloudFormation refuses it. There is no queue behind it.
|
|
4307
|
+
- A stack left in `UPDATE_ROLLBACK_FAILED` can be updated again, reconciled from the resources it is
|
|
4308
|
+
holding. Real CloudFormation refuses until `ContinueUpdateRollback` has finished the rollback, and
|
|
4309
|
+
that command is outside the simulation.
|
|
3601
4310
|
- A stack deletion deletes only the resource types the simulator can delete. A resource type it
|
|
3602
4311
|
creates but cannot delete is recorded in `stack.skippedResourceDeletions` and stepped over, the
|
|
3603
4312
|
same way an unsupported resource type is on create, and the stack still deletes with that resource
|
|
3604
4313
|
left behind.
|
|
3605
|
-
- `DeletionPolicy` is read for `Retain` and `RetainExceptOnCreate` only
|
|
3606
|
-
`Delete
|
|
3607
|
-
|
|
3608
|
-
|
|
3609
|
-
|
|
3610
|
-
|
|
3611
|
-
|
|
3612
|
-
-
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
4314
|
+
- `DeletionPolicy` is read for `Retain` and `RetainExceptOnCreate` only, and `UpdateReplacePolicy`
|
|
4315
|
+
for `Retain` only. `Snapshot` is treated as `Delete` in both, because no simulated service takes
|
|
4316
|
+
snapshots.
|
|
4317
|
+
- A resource kept by `UpdateReplacePolicy: Retain` holds the name it was created with, and a
|
|
4318
|
+
replacement whose name the template leaves to CloudFormation asks for that same name and fails to
|
|
4319
|
+
create. Real CloudFormation gives the replacement a fresh random name. See
|
|
4320
|
+
[`UpdateReplacePolicy`](#updatereplacepolicy).
|
|
4321
|
+
- `DeleteStackCommand` reads `StackName` and `RetainResources`. `DeletionMode`, `RoleARN` and
|
|
4322
|
+
`ClientRequestToken` are not read, and a stack left in `DELETE_FAILED` cannot be forced through
|
|
4323
|
+
the way `FORCE_DELETE_STACK` forces it in AWS.
|
|
4324
|
+
- A deleted stack stays describable by its stack ID for as long as the simulation lives. Real
|
|
4325
|
+
CloudFormation drops it after 90 days. `DescribeStacks` with no `StackName` lists the live stacks
|
|
4326
|
+
in both, and `ListStacks` is unsupported, so there is no way to find a deleted stack whose ID you
|
|
4327
|
+
have lost.
|
|
3616
4328
|
- `Fn::FindInMap` arguments are resolved from literals, `Parameters` and pseudo parameters. An
|
|
3617
4329
|
argument that depends on a created resource, such as a `Ref` to a resource logical ID, fails the
|
|
3618
4330
|
resource with a "could not find map" error. Real CloudFormation allows only `Ref` and a nested
|
|
3619
4331
|
`Fn::FindInMap` inside `Fn::FindInMap`. The templates affected here are ones real CloudFormation
|
|
3620
4332
|
would reject as well. The simulator just rejects them later rather than up front.
|
|
3621
|
-
- `Fn::If` is
|
|
3622
|
-
|
|
4333
|
+
- `Fn::If` is a condition function inside the `Conditions` section, and is not a value an
|
|
4334
|
+
`Fn::Equals` can compare. Real CloudFormation allows only `Ref` and `Fn::FindInMap` there.
|
|
3623
4335
|
- `Fn::Split` and `Fn::Select` accept any argument that resolves to the type they need. Real
|
|
3624
4336
|
CloudFormation allows only a named set of functions inside each of them. A template the simulator
|
|
3625
4337
|
resolves may still be one CloudFormation rejects.
|
|
3626
|
-
- The `Condition` attribute is read on resources but not on outputs. An output carrying one is
|
|
3627
|
-
resolved and present in `stack.outputs` whichever way its condition falls, where real
|
|
3628
|
-
CloudFormation would leave it out.
|
|
3629
4338
|
- The SAM transform is expanded for `AWS::Serverless::Function`, `AWS::Serverless::SimpleTable`,
|
|
3630
4339
|
`AWS::Serverless::HttpApi` and `AWS::Serverless::Api`. Every other `AWS::Serverless::*` resource
|
|
3631
|
-
type is recorded as unsupported. `Api`, `HttpApi`, `SQS`, `DynamoDB`, `SNS`, `S3`, `
|
|
3632
|
-
`ScheduleV2` and `EventBridgeRule` are the event types expanded, and an event of
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
4340
|
+
type is recorded as unsupported. `Api`, `HttpApi`, `SQS`, `DynamoDB`, `SNS`, `S3`, `Cognito`,
|
|
4341
|
+
`Schedule`, `ScheduleV2` and `EventBridgeRule` are the event types expanded, and an event of
|
|
4342
|
+
another type is left where it is. Under `Auth`, `ApiKeyRequired`, `UsagePlan`, `ResourcePolicy`,
|
|
4343
|
+
`InvokeRole` and `AddDefaultAuthorizerToCorsPreflight` fail the transform by name.
|
|
4344
|
+
`AutoPublishAlias` and `DeploymentPreference` are left out, because the simulator has one version
|
|
4345
|
+
of a function and nothing to shift traffic between.
|
|
3636
4346
|
- Many advanced CloudFormation features are outside the simulation.
|