@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
|
@@ -286,6 +286,70 @@ console.log(logged.events?.map((event) => event.message));
|
|
|
286
286
|
await simAws.backgroundTasksComplete();
|
|
287
287
|
```
|
|
288
288
|
|
|
289
|
+
#### Keeping handler output out of the test console
|
|
290
|
+
|
|
291
|
+
A handler that logs on every invocation makes that tee expensive. Powertools' `Metrics` writes an
|
|
292
|
+
EMF document for every metric it counts, and a suite invoking a function a few hundred times buries
|
|
293
|
+
its own output under them. `captureOnly()` stops the forwarding for every function of one simulated
|
|
294
|
+
Lambda:
|
|
295
|
+
|
|
296
|
+
```typescript sim-lambda-capture-only-output
|
|
297
|
+
/**
|
|
298
|
+
* Recording what a handler prints without printing it again.
|
|
299
|
+
*/
|
|
300
|
+
|
|
301
|
+
import { FilterLogEventsCommand } from "@aws-sdk/client-cloudwatch-logs";
|
|
302
|
+
import { CreateFunctionCommand, InvokeCommand } from "@aws-sdk/client-lambda";
|
|
303
|
+
|
|
304
|
+
import { SimAws } from "@kensio/yulin";
|
|
305
|
+
import { makeLambdaZipFileInput } from "@kensio/yulin/lambda";
|
|
306
|
+
|
|
307
|
+
const simAws = new SimAws();
|
|
308
|
+
|
|
309
|
+
await simAws.lambda().createFunction(
|
|
310
|
+
new CreateFunctionCommand({
|
|
311
|
+
FunctionName: "user",
|
|
312
|
+
Role: "arn:aws:iam::111111111111:role/UserRole",
|
|
313
|
+
Code: {
|
|
314
|
+
ZipFile: makeLambdaZipFileInput(() => {
|
|
315
|
+
// What AWS Lambda Powertools' Metrics writes for every metric it
|
|
316
|
+
// counts, once per request.
|
|
317
|
+
process.stdout.write(
|
|
318
|
+
`${JSON.stringify({ service: "user", UserRequest: 1 })}\n`,
|
|
319
|
+
);
|
|
320
|
+
|
|
321
|
+
return { statusCode: 200 };
|
|
322
|
+
}),
|
|
323
|
+
},
|
|
324
|
+
}),
|
|
325
|
+
);
|
|
326
|
+
|
|
327
|
+
// The test run's own console stays clean from here on.
|
|
328
|
+
simAws.lambda().output().captureOnly();
|
|
329
|
+
|
|
330
|
+
await simAws.lambda().invoke(new InvokeCommand({ FunctionName: "user" }));
|
|
331
|
+
|
|
332
|
+
// The log group holds the line, as it did before.
|
|
333
|
+
const found = await simAws
|
|
334
|
+
.logs()
|
|
335
|
+
.filterLogEvents(
|
|
336
|
+
new FilterLogEventsCommand({ logGroupName: "/aws/lambda/user" }),
|
|
337
|
+
);
|
|
338
|
+
|
|
339
|
+
console.log(found.events?.[0]?.message);
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
The log group holds every line either way. Nothing is lost by it, and `teeToHost()` puts the
|
|
343
|
+
forwarding back.
|
|
344
|
+
|
|
345
|
+
The settings belong to one Account and Region, as the functions do. A suite invoking through
|
|
346
|
+
`simAws.region("eu-west-1")` sets them on that scope. They are read as each line is written. A
|
|
347
|
+
change reaches a function that has already cold started.
|
|
348
|
+
|
|
349
|
+
A function with no simulated CloudWatch Logs behind it goes on printing whatever the settings say.
|
|
350
|
+
That is a function on a standalone `SimLambda`, built outside a `SimAws` instance, and it has no log
|
|
351
|
+
group for its output to be read back out of.
|
|
352
|
+
|
|
289
353
|
### When a handler throws
|
|
290
354
|
|
|
291
355
|
An invocation that ends in an error nothing caught leaves an `ERROR Invoke Error` line in the
|
|
@@ -687,7 +751,13 @@ AWS JSON protocol. Those are the ones that can be read back without the operatio
|
|
|
687
751
|
ACM, CloudWatch Logs, Cognito Identity Provider, DynamoDB, DynamoDB Streams, ECS, EventBridge, KMS,
|
|
688
752
|
Rekognition, Secrets Manager, SQS and SSM.
|
|
689
753
|
|
|
690
|
-
|
|
754
|
+
S3 states its operation in the method and the path. A bundled S3 client reaches the endpoint that
|
|
755
|
+
already serves S3 to a client given `--endpoint-url`, in either of the two addressing styles an SDK
|
|
756
|
+
sends. A function can read and write Objects with an `S3Client` its archive inlines. The execution
|
|
757
|
+
Role authorizes each request, and a read it holds no `s3:GetObject` for comes back to the SDK as
|
|
758
|
+
`AccessDenied`.
|
|
759
|
+
|
|
760
|
+
A bundled call to any other simulated service, such as SNS, SES or Lambda itself, fails with an
|
|
691
761
|
error naming the service. Leaving the SDK out of that archive puts it back
|
|
692
762
|
on the module interception path above, which every simulated service is reachable through.
|
|
693
763
|
|
|
@@ -946,6 +1016,19 @@ results go. An invocation that fails its last attempt is sent to the `OnFailure`
|
|
|
946
1016
|
one whose handler returns is sent to `OnSuccess`. A destination ARN can name a simulated SQS queue,
|
|
947
1017
|
SNS topic, EventBridge event bus or Lambda function.
|
|
948
1018
|
|
|
1019
|
+
The source function's execution role must allow the operation that writes to the destination:
|
|
1020
|
+
|
|
1021
|
+
| Destination | Required action |
|
|
1022
|
+
| --------------------- | ----------------------- |
|
|
1023
|
+
| SQS queue | `sqs:SendMessage` |
|
|
1024
|
+
| SNS topic | `sns:Publish` |
|
|
1025
|
+
| EventBridge event bus | `events:PutEvents` |
|
|
1026
|
+
| Lambda function | `lambda:InvokeFunction` |
|
|
1027
|
+
|
|
1028
|
+
Simulated Lambda calls the destination service with that role as its caller. A denied delivery
|
|
1029
|
+
rejects the background task without changing the destination. A Lambda destination is invoked
|
|
1030
|
+
asynchronously, so the delivery succeeds once the target invocation has been accepted.
|
|
1031
|
+
|
|
949
1032
|
```typescript sim-lambda-async-destinations
|
|
950
1033
|
/**
|
|
951
1034
|
* Asynchronous invocation retries and an OnFailure destination.
|
|
@@ -956,6 +1039,7 @@ import {
|
|
|
956
1039
|
InvokeCommand,
|
|
957
1040
|
PutFunctionEventInvokeConfigCommand,
|
|
958
1041
|
} from "@aws-sdk/client-lambda";
|
|
1042
|
+
import { CreateRoleCommand, PutRolePolicyCommand } from "@aws-sdk/client-iam";
|
|
959
1043
|
import { CreateQueueCommand, ReceiveMessageCommand } from "@aws-sdk/client-sqs";
|
|
960
1044
|
|
|
961
1045
|
import { SimAws } from "@kensio/yulin";
|
|
@@ -964,19 +1048,51 @@ import {
|
|
|
964
1048
|
type SimLambdaDestinationRecord,
|
|
965
1049
|
} from "@kensio/yulin/lambda";
|
|
966
1050
|
|
|
967
|
-
const simAws = new SimAws();
|
|
1051
|
+
const simAws = new SimAws({ defaultAccountId: "111111111111" });
|
|
1052
|
+
const iam = simAws.iam();
|
|
968
1053
|
const lambda = simAws.lambda();
|
|
969
1054
|
const sqs = simAws.sqs();
|
|
1055
|
+
const queueArn = `arn:aws:sqs:${simAws.defaultRegionName}:${simAws.defaultAccountId}:order-failures`;
|
|
970
1056
|
|
|
971
1057
|
const created = await sqs.createQueue(
|
|
972
1058
|
new CreateQueueCommand({ QueueName: "order-failures" }),
|
|
973
1059
|
);
|
|
974
1060
|
|
|
1061
|
+
const role = await iam.createRole(
|
|
1062
|
+
new CreateRoleCommand({
|
|
1063
|
+
RoleName: "OrdersRole",
|
|
1064
|
+
AssumeRolePolicyDocument: JSON.stringify({
|
|
1065
|
+
Version: "2012-10-17",
|
|
1066
|
+
Statement: {
|
|
1067
|
+
Effect: "Allow",
|
|
1068
|
+
Principal: { Service: "lambda.amazonaws.com" },
|
|
1069
|
+
Action: "sts:AssumeRole",
|
|
1070
|
+
},
|
|
1071
|
+
}),
|
|
1072
|
+
}),
|
|
1073
|
+
);
|
|
1074
|
+
const roleArn = role.Role.Arn;
|
|
1075
|
+
|
|
1076
|
+
await iam.putRolePolicy(
|
|
1077
|
+
new PutRolePolicyCommand({
|
|
1078
|
+
RoleName: "OrdersRole",
|
|
1079
|
+
PolicyName: "SendFailedOrders",
|
|
1080
|
+
PolicyDocument: JSON.stringify({
|
|
1081
|
+
Version: "2012-10-17",
|
|
1082
|
+
Statement: {
|
|
1083
|
+
Effect: "Allow",
|
|
1084
|
+
Action: "sqs:SendMessage",
|
|
1085
|
+
Resource: queueArn,
|
|
1086
|
+
},
|
|
1087
|
+
}),
|
|
1088
|
+
}),
|
|
1089
|
+
);
|
|
1090
|
+
|
|
975
1091
|
const attempts: string[] = [];
|
|
976
1092
|
await lambda.createFunction(
|
|
977
1093
|
new CreateFunctionCommand({
|
|
978
1094
|
FunctionName: "orders",
|
|
979
|
-
Role:
|
|
1095
|
+
Role: roleArn,
|
|
980
1096
|
Code: {
|
|
981
1097
|
ZipFile: makeLambdaZipFileInput((event: { id: number }) => {
|
|
982
1098
|
attempts.push(`tried order ${event.id}`);
|
|
@@ -992,7 +1108,7 @@ await lambda.putFunctionEventInvokeConfig(
|
|
|
992
1108
|
MaximumRetryAttempts: 1,
|
|
993
1109
|
DestinationConfig: {
|
|
994
1110
|
OnFailure: {
|
|
995
|
-
Destination:
|
|
1111
|
+
Destination: queueArn,
|
|
996
1112
|
},
|
|
997
1113
|
},
|
|
998
1114
|
}),
|
|
@@ -1041,33 +1157,67 @@ a config of its own, and an invocation of a qualifier with no config of its own
|
|
|
1041
1157
|
`DeadLetterConfig` is the older way to keep a failed asynchronous invocation, and simulated Lambda
|
|
1042
1158
|
takes it on `CreateFunction` and `UpdateFunctionConfiguration`. Its `TargetArn` names a simulated
|
|
1043
1159
|
SQS queue or SNS topic, which receives the event as it was invoked rather than the destination
|
|
1044
|
-
record around it.
|
|
1160
|
+
record around it. The execution role needs `sqs:SendMessage` for a queue or `sns:Publish` for a
|
|
1161
|
+
topic. A denied delivery rejects the background task and leaves the target unchanged.
|
|
1045
1162
|
|
|
1046
1163
|
```typescript sim-lambda-dead-letter-queue
|
|
1047
1164
|
/**
|
|
1048
1165
|
* A simulated Lambda function with a dead-letter queue.
|
|
1049
1166
|
*/
|
|
1050
1167
|
|
|
1168
|
+
import { CreateRoleCommand, PutRolePolicyCommand } from "@aws-sdk/client-iam";
|
|
1051
1169
|
import { CreateFunctionCommand, InvokeCommand } from "@aws-sdk/client-lambda";
|
|
1052
1170
|
import { CreateQueueCommand, ReceiveMessageCommand } from "@aws-sdk/client-sqs";
|
|
1053
1171
|
|
|
1054
1172
|
import { SimAws } from "@kensio/yulin";
|
|
1055
1173
|
import { makeLambdaZipFileInput } from "@kensio/yulin/lambda";
|
|
1056
1174
|
|
|
1057
|
-
const simAws = new SimAws();
|
|
1175
|
+
const simAws = new SimAws({ defaultAccountId: "111111111111" });
|
|
1176
|
+
const iam = simAws.iam();
|
|
1058
1177
|
const lambda = simAws.lambda();
|
|
1059
1178
|
const sqs = simAws.sqs();
|
|
1179
|
+
const queueArn = `arn:aws:sqs:${simAws.defaultRegionName}:${simAws.defaultAccountId}:orders-dlq`;
|
|
1060
1180
|
|
|
1061
1181
|
const created = await sqs.createQueue(
|
|
1062
1182
|
new CreateQueueCommand({ QueueName: "orders-dlq" }),
|
|
1063
1183
|
);
|
|
1064
1184
|
|
|
1185
|
+
const role = await iam.createRole(
|
|
1186
|
+
new CreateRoleCommand({
|
|
1187
|
+
RoleName: "OrdersRole",
|
|
1188
|
+
AssumeRolePolicyDocument: JSON.stringify({
|
|
1189
|
+
Version: "2012-10-17",
|
|
1190
|
+
Statement: {
|
|
1191
|
+
Effect: "Allow",
|
|
1192
|
+
Principal: { Service: "lambda.amazonaws.com" },
|
|
1193
|
+
Action: "sts:AssumeRole",
|
|
1194
|
+
},
|
|
1195
|
+
}),
|
|
1196
|
+
}),
|
|
1197
|
+
);
|
|
1198
|
+
const roleArn = role.Role.Arn;
|
|
1199
|
+
|
|
1200
|
+
await iam.putRolePolicy(
|
|
1201
|
+
new PutRolePolicyCommand({
|
|
1202
|
+
RoleName: "OrdersRole",
|
|
1203
|
+
PolicyName: "SendFailedOrders",
|
|
1204
|
+
PolicyDocument: JSON.stringify({
|
|
1205
|
+
Version: "2012-10-17",
|
|
1206
|
+
Statement: {
|
|
1207
|
+
Effect: "Allow",
|
|
1208
|
+
Action: "sqs:SendMessage",
|
|
1209
|
+
Resource: queueArn,
|
|
1210
|
+
},
|
|
1211
|
+
}),
|
|
1212
|
+
}),
|
|
1213
|
+
);
|
|
1214
|
+
|
|
1065
1215
|
await lambda.createFunction(
|
|
1066
1216
|
new CreateFunctionCommand({
|
|
1067
1217
|
FunctionName: "orders",
|
|
1068
|
-
Role:
|
|
1218
|
+
Role: roleArn,
|
|
1069
1219
|
DeadLetterConfig: {
|
|
1070
|
-
TargetArn:
|
|
1220
|
+
TargetArn: queueArn,
|
|
1071
1221
|
},
|
|
1072
1222
|
Code: {
|
|
1073
1223
|
ZipFile: makeLambdaZipFileInput(() => {
|
|
@@ -1755,15 +1905,152 @@ Advancing the simulation's clock is what hands the batch over again:
|
|
|
1755
1905
|
await simAws.clock().advanceBy({ seconds: 30 });
|
|
1756
1906
|
```
|
|
1757
1907
|
|
|
1758
|
-
|
|
1759
|
-
Then it is discarded and the mapping carries on with the
|
|
1760
|
-
error handling has run out.
|
|
1908
|
+
A mapping that asks for no limit of its own delivers the batch again five times, after 1, 2, 4, 8
|
|
1909
|
+
and 16 seconds, so six deliveries in all. Then it is discarded and the mapping carries on with the
|
|
1910
|
+
stream, as AWS does once a stream mapping's error handling has run out.
|
|
1911
|
+
|
|
1912
|
+
The delays are a simulator constraint. AWS documents no delay between attempts. A delay of zero here
|
|
1913
|
+
would fall due at the instant the clock already reads, and a handler that always throws would leave
|
|
1914
|
+
`advanceBy` with work falling due forever. The growing delay is also what lets a test walk through
|
|
1915
|
+
the attempts by advancing the clock.
|
|
1916
|
+
|
|
1917
|
+
The five attempts are a cap on a mapping that named neither of the limits below. AWS retries until
|
|
1918
|
+
the records age out of the stream, a day later, and waiting out a simulated day is the same hang
|
|
1919
|
+
with more steps.
|
|
1920
|
+
|
|
1921
|
+
### Limiting the retries and the record age
|
|
1922
|
+
|
|
1923
|
+
`MaximumRetryAttempts` and `MaximumRecordAgeInSeconds` govern the same failed-batch lifecycle, and a
|
|
1924
|
+
stream mapping keeps both. `MaximumRetryAttempts: 0` makes one delivery and no retries, and a
|
|
1925
|
+
positive value allows that many retries after the first delivery. `MaximumRecordAgeInSeconds`
|
|
1926
|
+
discards a record once the next attempt would fall past that age. Lambda's `-1` means no limit
|
|
1927
|
+
(that is what a mapping naming neither reports back).
|
|
1928
|
+
|
|
1929
|
+
```typescript sim-lambda-stream-retry-limits
|
|
1930
|
+
/**
|
|
1931
|
+
* Giving up on a stream batch once its retries have run out.
|
|
1932
|
+
*/
|
|
1933
|
+
|
|
1934
|
+
import { CreateTableCommand, PutItemCommand } from "@aws-sdk/client-dynamodb";
|
|
1935
|
+
import { CreateRoleCommand, PutRolePolicyCommand } from "@aws-sdk/client-iam";
|
|
1936
|
+
import {
|
|
1937
|
+
CreateEventSourceMappingCommand,
|
|
1938
|
+
CreateFunctionCommand,
|
|
1939
|
+
} from "@aws-sdk/client-lambda";
|
|
1940
|
+
|
|
1941
|
+
import { SimAws } from "@kensio/yulin";
|
|
1942
|
+
import {
|
|
1943
|
+
makeLambdaZipFileInput,
|
|
1944
|
+
type SimLambdaDynamoDbStreamEvent,
|
|
1945
|
+
} from "@kensio/yulin/lambda";
|
|
1946
|
+
|
|
1947
|
+
const simAws = new SimAws();
|
|
1948
|
+
|
|
1949
|
+
const { TableDescription } = await simAws.dynamoDb().createTable(
|
|
1950
|
+
new CreateTableCommand({
|
|
1951
|
+
TableName: "orders",
|
|
1952
|
+
KeySchema: [{ AttributeName: "orderId", KeyType: "HASH" }],
|
|
1953
|
+
AttributeDefinitions: [{ AttributeName: "orderId", AttributeType: "S" }],
|
|
1954
|
+
BillingMode: "PAY_PER_REQUEST",
|
|
1955
|
+
StreamSpecification: {
|
|
1956
|
+
StreamEnabled: true,
|
|
1957
|
+
StreamViewType: "NEW_AND_OLD_IMAGES",
|
|
1958
|
+
},
|
|
1959
|
+
}),
|
|
1960
|
+
);
|
|
1961
|
+
|
|
1962
|
+
const streamArn = TableDescription?.LatestStreamArn;
|
|
1761
1963
|
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1964
|
+
const role = await simAws.iam().createRole(
|
|
1965
|
+
new CreateRoleCommand({
|
|
1966
|
+
RoleName: "OrderProjectorRole",
|
|
1967
|
+
AssumeRolePolicyDocument: JSON.stringify({
|
|
1968
|
+
Version: "2012-10-17",
|
|
1969
|
+
Statement: {
|
|
1970
|
+
Effect: "Allow",
|
|
1971
|
+
Principal: { Service: "lambda.amazonaws.com" },
|
|
1972
|
+
Action: "sts:AssumeRole",
|
|
1973
|
+
},
|
|
1974
|
+
}),
|
|
1975
|
+
}),
|
|
1976
|
+
);
|
|
1977
|
+
|
|
1978
|
+
await simAws.iam().putRolePolicy(
|
|
1979
|
+
new PutRolePolicyCommand({
|
|
1980
|
+
RoleName: "OrderProjectorRole",
|
|
1981
|
+
PolicyName: "ReadOrdersStream",
|
|
1982
|
+
PolicyDocument: JSON.stringify({
|
|
1983
|
+
Version: "2012-10-17",
|
|
1984
|
+
Statement: [
|
|
1985
|
+
{
|
|
1986
|
+
Effect: "Allow",
|
|
1987
|
+
Action: [
|
|
1988
|
+
"dynamodb:DescribeStream",
|
|
1989
|
+
"dynamodb:GetRecords",
|
|
1990
|
+
"dynamodb:GetShardIterator",
|
|
1991
|
+
],
|
|
1992
|
+
Resource: streamArn,
|
|
1993
|
+
},
|
|
1994
|
+
{ Effect: "Allow", Action: "dynamodb:ListStreams", Resource: "*" },
|
|
1995
|
+
],
|
|
1996
|
+
}),
|
|
1997
|
+
}),
|
|
1998
|
+
);
|
|
1999
|
+
|
|
2000
|
+
// The handler never gets through the batch, so the retries are what decide
|
|
2001
|
+
// how many times it is given one.
|
|
2002
|
+
const deliveries: SimLambdaDynamoDbStreamEvent[] = [];
|
|
2003
|
+
|
|
2004
|
+
await simAws.lambda().createFunction(
|
|
2005
|
+
new CreateFunctionCommand({
|
|
2006
|
+
FunctionName: "order-projector",
|
|
2007
|
+
Role: role.Role.Arn,
|
|
2008
|
+
Code: {
|
|
2009
|
+
ZipFile: makeLambdaZipFileInput(
|
|
2010
|
+
(event: SimLambdaDynamoDbStreamEvent): undefined => {
|
|
2011
|
+
deliveries.push(event);
|
|
2012
|
+
|
|
2013
|
+
throw new Error("Projector could not handle the batch");
|
|
2014
|
+
},
|
|
2015
|
+
),
|
|
2016
|
+
},
|
|
2017
|
+
}),
|
|
2018
|
+
);
|
|
2019
|
+
|
|
2020
|
+
await simAws.lambda().createEventSourceMapping(
|
|
2021
|
+
new CreateEventSourceMappingCommand({
|
|
2022
|
+
EventSourceArn: streamArn,
|
|
2023
|
+
FunctionName: "order-projector",
|
|
2024
|
+
StartingPosition: "TRIM_HORIZON",
|
|
2025
|
+
MaximumRetryAttempts: 2,
|
|
2026
|
+
MaximumRecordAgeInSeconds: 120,
|
|
2027
|
+
}),
|
|
2028
|
+
);
|
|
2029
|
+
|
|
2030
|
+
await simAws.dynamoDb().putItem(
|
|
2031
|
+
new PutItemCommand({
|
|
2032
|
+
TableName: "orders",
|
|
2033
|
+
Item: { orderId: { S: "order-1" }, total: { N: "42" } },
|
|
2034
|
+
}),
|
|
2035
|
+
);
|
|
2036
|
+
|
|
2037
|
+
await simAws.backgroundTasksComplete();
|
|
2038
|
+
|
|
2039
|
+
// The two retries fall due 1 and 2 seconds after the deliveries they follow.
|
|
2040
|
+
await simAws.clock().advanceBy({ seconds: 30 });
|
|
2041
|
+
|
|
2042
|
+
console.log(deliveries.length); // 3
|
|
2043
|
+
```
|
|
2044
|
+
|
|
2045
|
+
Records age out of the front of a batch, since a batch is in stream order. A batch whose oldest
|
|
2046
|
+
records are past the age goes over again from the first record that is still young enough, and the
|
|
2047
|
+
shard keeps moving. A batch that has had its retries, or whose records have all aged out, is
|
|
2048
|
+
discarded, and the mapping reads on from behind it.
|
|
2049
|
+
|
|
2050
|
+
`GetEventSourceMapping` and `ListEventSourceMappings` report both values, and
|
|
2051
|
+
`AWS::Lambda::EventSourceMapping` takes both in a template. A value outside Lambda's range (`-1` to
|
|
2052
|
+
10,000 retries, `-1` to 604,800 seconds) is a `ValidationException`. A queue mapping takes neither,
|
|
2053
|
+
because a message the handler never takes is left to the queue's own redrive policy.
|
|
1767
2054
|
|
|
1768
2055
|
### Reporting individual record failures
|
|
1769
2056
|
|
|
@@ -1797,7 +2084,7 @@ why a stream consumer has to be idempotent.
|
|
|
1797
2084
|
|
|
1798
2085
|
So a report naming only the last record of a batch delivers that record again. A report naming the
|
|
1799
2086
|
first record delivers the whole batch again. The redelivery is a retry like any other. It waits out
|
|
1800
|
-
the same backoff, counts against the same
|
|
2087
|
+
the same backoff, counts against the same retries, and what is left is discarded when they run
|
|
1801
2088
|
out.
|
|
1802
2089
|
|
|
1803
2090
|
A report naming a sequence number that was not in the batch delivers the whole batch again, as real
|
|
@@ -2167,6 +2454,8 @@ AWS managed policy and CDK's own grant give a stream consumer. A role missing on
|
|
|
2167
2454
|
handler names a record by its `sequenceNumber`, and the mapping goes back to the lowest one the
|
|
2168
2455
|
report names, so that record and everything after it on that shard is delivered again. A failing
|
|
2169
2456
|
batch blocks its own shard and no other.
|
|
2457
|
+
[`MaximumRetryAttempts` and `MaximumRecordAgeInSeconds`](#limiting-the-retries-and-the-record-age)
|
|
2458
|
+
work the same way here, and each shard counts its own attempts.
|
|
2170
2459
|
|
|
2171
2460
|
A mapping naming an enhanced fan-out consumer ARN is refused, since consumers are unsimulated.
|
|
2172
2461
|
`AWS::Lambda::EventSourceMapping` deploys a Kinesis mapping the same way it deploys a DynamoDB one.
|
|
@@ -2364,11 +2653,115 @@ the route key, the stage and the path parameters are the endpoint's rather than
|
|
|
2364
2653
|
### Managing a Function URL
|
|
2365
2654
|
|
|
2366
2655
|
`GetFunctionUrlConfigCommand` reads the configuration back, `UpdateFunctionUrlConfigCommand`
|
|
2367
|
-
changes the `AuthType` or `
|
|
2656
|
+
changes the `AuthType`, `InvokeMode` or `Cors` while keeping the same endpoint, and
|
|
2368
2657
|
`DeleteFunctionUrlConfigCommand` removes it, after which the hostname stops resolving and returns
|
|
2369
2658
|
`404`. `ListFunctionUrlConfigsCommand` lists what a function has, which is one configuration or
|
|
2370
2659
|
none, since a function has at most one Function URL.
|
|
2371
2660
|
|
|
2661
|
+
A `Cors` block on an update replaces the whole block the URL was created with. An update that leaves
|
|
2662
|
+
`Cors` out keeps the block already in place.
|
|
2663
|
+
|
|
2664
|
+
### Cross-origin resource sharing
|
|
2665
|
+
|
|
2666
|
+
A Function URL created with a `Cors` block sends the CORS headers that block describes on every
|
|
2667
|
+
response it serves, and answers a browser preflight from the block alone.
|
|
2668
|
+
|
|
2669
|
+
```typescript sim-lambda-function-url-cors
|
|
2670
|
+
/**
|
|
2671
|
+
* Serving a simulated Lambda Function URL configured for CORS.
|
|
2672
|
+
*/
|
|
2673
|
+
|
|
2674
|
+
import {
|
|
2675
|
+
CreateFunctionCommand,
|
|
2676
|
+
CreateFunctionUrlConfigCommand,
|
|
2677
|
+
} from "@aws-sdk/client-lambda";
|
|
2678
|
+
|
|
2679
|
+
import { SimAws } from "@kensio/yulin";
|
|
2680
|
+
import { makeLambdaZipFileInput } from "@kensio/yulin/lambda";
|
|
2681
|
+
import { serveSimAws } from "@kensio/yulin/serve";
|
|
2682
|
+
|
|
2683
|
+
const simAws = new SimAws();
|
|
2684
|
+
const lambda = simAws.lambda();
|
|
2685
|
+
|
|
2686
|
+
await lambda.createFunction(
|
|
2687
|
+
new CreateFunctionCommand({
|
|
2688
|
+
FunctionName: "rates",
|
|
2689
|
+
Role: "arn:aws:iam::111111111111:role/RatesRole",
|
|
2690
|
+
Code: {
|
|
2691
|
+
ZipFile: makeLambdaZipFileInput(() => ({
|
|
2692
|
+
statusCode: 200,
|
|
2693
|
+
headers: { "content-type": "application/json" },
|
|
2694
|
+
body: JSON.stringify({ gbp: 1.27 }),
|
|
2695
|
+
})),
|
|
2696
|
+
},
|
|
2697
|
+
}),
|
|
2698
|
+
);
|
|
2699
|
+
|
|
2700
|
+
const urlConfig = await lambda.createFunctionUrlConfig(
|
|
2701
|
+
new CreateFunctionUrlConfigCommand({
|
|
2702
|
+
FunctionName: "rates",
|
|
2703
|
+
AuthType: "NONE",
|
|
2704
|
+
Cors: {
|
|
2705
|
+
AllowOrigins: ["https://shop.example.com"],
|
|
2706
|
+
AllowMethods: ["GET", "POST"],
|
|
2707
|
+
AllowHeaders: ["content-type"],
|
|
2708
|
+
ExposeHeaders: ["x-request-id"],
|
|
2709
|
+
AllowCredentials: true,
|
|
2710
|
+
MaxAge: 600,
|
|
2711
|
+
},
|
|
2712
|
+
}),
|
|
2713
|
+
);
|
|
2714
|
+
|
|
2715
|
+
const srv = await serveSimAws({ simAws });
|
|
2716
|
+
const endpoint = srv.localUrl(urlConfig.FunctionUrl);
|
|
2717
|
+
|
|
2718
|
+
try {
|
|
2719
|
+
const preflight = await fetch(endpoint, {
|
|
2720
|
+
method: "OPTIONS",
|
|
2721
|
+
headers: {
|
|
2722
|
+
origin: "https://shop.example.com",
|
|
2723
|
+
"access-control-request-method": "GET",
|
|
2724
|
+
},
|
|
2725
|
+
});
|
|
2726
|
+
|
|
2727
|
+
// 200 https://shop.example.com GET,POST
|
|
2728
|
+
console.log(
|
|
2729
|
+
preflight.status,
|
|
2730
|
+
preflight.headers.get("access-control-allow-origin"),
|
|
2731
|
+
preflight.headers.get("access-control-allow-methods"),
|
|
2732
|
+
);
|
|
2733
|
+
|
|
2734
|
+
const response = await fetch(endpoint, {
|
|
2735
|
+
headers: { origin: "https://shop.example.com" },
|
|
2736
|
+
});
|
|
2737
|
+
|
|
2738
|
+
// {"gbp":1.27} x-request-id
|
|
2739
|
+
console.log(
|
|
2740
|
+
await response.text(),
|
|
2741
|
+
response.headers.get("access-control-expose-headers"),
|
|
2742
|
+
);
|
|
2743
|
+
} finally {
|
|
2744
|
+
await srv.close();
|
|
2745
|
+
}
|
|
2746
|
+
```
|
|
2747
|
+
|
|
2748
|
+
`AllowOrigins` decides what goes in `Access-Control-Allow-Origin`. A list holding `*` allows every
|
|
2749
|
+
Origin. Any other list is matched against the `Origin` header the request carried, and a request
|
|
2750
|
+
from an Origin the list does not name gets no `Access-Control-Allow-Origin` header. `AllowMethods`,
|
|
2751
|
+
`AllowHeaders` and `ExposeHeaders` each go out as one comma-separated header, and an empty list
|
|
2752
|
+
leaves its header off. `AllowCredentials` sends `Access-Control-Allow-Credentials: true` when it is
|
|
2753
|
+
set. `MaxAge` sets `Access-Control-Max-Age` in seconds.
|
|
2754
|
+
|
|
2755
|
+
A preflight is an `OPTIONS` request carrying both `Origin` and `Access-Control-Request-Method`.
|
|
2756
|
+
Lambda answers it from the configuration and the function never runs. Every other method reaches the
|
|
2757
|
+
handler, and the configured headers are added to the response it returned. A handler that sends CORS
|
|
2758
|
+
headers of its own leaves the response carrying both values, which is what real Lambda serves.
|
|
2759
|
+
Browsers report the duplicate as an error, so keep CORS on the Function URL and leave it out of the
|
|
2760
|
+
handler.
|
|
2761
|
+
|
|
2762
|
+
An `AWS_IAM` Function URL authorizes a preflight the way it authorizes any other request. A browser
|
|
2763
|
+
cannot sign the preflight it sends, and an unsigned request to that URL is answered with `403`.
|
|
2764
|
+
|
|
2372
2765
|
### IAM-authenticated Function URLs
|
|
2373
2766
|
|
|
2374
2767
|
A URL created with `AuthType: "AWS_IAM"` invokes the function only for a caller allowed
|
|
@@ -2748,6 +3141,129 @@ otherwise. A time read at module scope is therefore read too early, exactly as i
|
|
|
2748
3141
|
variables. See [simulated time](https://yulinsim.dev/time/) for the whole picture, including where real
|
|
2749
3142
|
AWS puts the time on the event.
|
|
2750
3143
|
|
|
3144
|
+
## Timers and the invocation deadline
|
|
3145
|
+
|
|
3146
|
+
A handler's `setTimeout`, `clearTimeout`, `setInterval` and `clearInterval` measure their delays on
|
|
3147
|
+
the simulation's clock. A handler that sleeps wakes when a test advances time past its delay, and a
|
|
3148
|
+
frozen clock holds it asleep for as long as the test wants. The timers belong to one invocation. Two
|
|
3149
|
+
simulations running at once each keep their own, and code outside an invocation keeps the host
|
|
3150
|
+
timers it already had.
|
|
3151
|
+
|
|
3152
|
+
A sleeping handler is released by the clock. A test asks for the invocation and moves time before
|
|
3153
|
+
waiting on the answer.
|
|
3154
|
+
|
|
3155
|
+
```typescript sim-lambda-handler-timers
|
|
3156
|
+
/**
|
|
3157
|
+
* A simulated Lambda handler sleeping on the simulation's clock.
|
|
3158
|
+
*/
|
|
3159
|
+
|
|
3160
|
+
import { CreateFunctionCommand, InvokeCommand } from "@aws-sdk/client-lambda";
|
|
3161
|
+
|
|
3162
|
+
import { SimAws } from "@kensio/yulin";
|
|
3163
|
+
import { makeLambdaZipFileInput } from "@kensio/yulin/lambda";
|
|
3164
|
+
|
|
3165
|
+
const simAws = new SimAws();
|
|
3166
|
+
const lambda = simAws.lambda();
|
|
3167
|
+
|
|
3168
|
+
await lambda.createFunction(
|
|
3169
|
+
new CreateFunctionCommand({
|
|
3170
|
+
FunctionName: "batcher",
|
|
3171
|
+
Role: "arn:aws:iam::111111111111:role/BatcherRole",
|
|
3172
|
+
Timeout: 60,
|
|
3173
|
+
Code: {
|
|
3174
|
+
ZipFile: makeLambdaZipFileInput(async () => {
|
|
3175
|
+
await new Promise((resolve) => {
|
|
3176
|
+
setTimeout(resolve, 30_000);
|
|
3177
|
+
});
|
|
3178
|
+
|
|
3179
|
+
return "batched";
|
|
3180
|
+
}),
|
|
3181
|
+
},
|
|
3182
|
+
}),
|
|
3183
|
+
);
|
|
3184
|
+
|
|
3185
|
+
// Asked for and left running, because the handler is waiting on the clock.
|
|
3186
|
+
const invocation = lambda.invoke(
|
|
3187
|
+
new InvokeCommand({ FunctionName: "batcher" }),
|
|
3188
|
+
);
|
|
3189
|
+
|
|
3190
|
+
await simAws.clock().advanceBy({ seconds: 30 });
|
|
3191
|
+
|
|
3192
|
+
const output = await invocation;
|
|
3193
|
+
if (output.Payload === undefined) throw new Error("No invoke Payload");
|
|
3194
|
+
console.log(Buffer.from(output.Payload).toString());
|
|
3195
|
+
```
|
|
3196
|
+
|
|
3197
|
+
An interval runs once for each period an advance covers. Advancing eleven seconds past a two second
|
|
3198
|
+
interval runs it five times. A delay of zero, or none at all, is due at the instant it was asked
|
|
3199
|
+
for, and a handler yielding with `setTimeout(resolve, 0)` gets going again without the clock moving.
|
|
3200
|
+
|
|
3201
|
+
The function's `Timeout` is a deadline on the same clock. Where it arrives before the handler
|
|
3202
|
+
answers, the invocation ends in the error the real runtime reports.
|
|
3203
|
+
|
|
3204
|
+
```typescript sim-lambda-invocation-timeout
|
|
3205
|
+
/**
|
|
3206
|
+
* A simulated Lambda invocation running out of the time its Timeout allows.
|
|
3207
|
+
*/
|
|
3208
|
+
|
|
3209
|
+
import { CreateFunctionCommand, InvokeCommand } from "@aws-sdk/client-lambda";
|
|
3210
|
+
|
|
3211
|
+
import { SimAws } from "@kensio/yulin";
|
|
3212
|
+
import { makeLambdaZipFileInput } from "@kensio/yulin/lambda";
|
|
3213
|
+
|
|
3214
|
+
const simAws = new SimAws();
|
|
3215
|
+
const lambda = simAws.lambda();
|
|
3216
|
+
|
|
3217
|
+
await lambda.createFunction(
|
|
3218
|
+
new CreateFunctionCommand({
|
|
3219
|
+
FunctionName: "slowcoach",
|
|
3220
|
+
Role: "arn:aws:iam::111111111111:role/SlowcoachRole",
|
|
3221
|
+
Timeout: 3,
|
|
3222
|
+
Code: {
|
|
3223
|
+
ZipFile: makeLambdaZipFileInput(async () => {
|
|
3224
|
+
await new Promise((resolve) => {
|
|
3225
|
+
setTimeout(resolve, 60_000);
|
|
3226
|
+
});
|
|
3227
|
+
|
|
3228
|
+
return "too late";
|
|
3229
|
+
}),
|
|
3230
|
+
},
|
|
3231
|
+
}),
|
|
3232
|
+
);
|
|
3233
|
+
|
|
3234
|
+
const invocation = lambda.invoke(
|
|
3235
|
+
new InvokeCommand({ FunctionName: "slowcoach" }),
|
|
3236
|
+
);
|
|
3237
|
+
|
|
3238
|
+
await simAws.clock().advanceBy({ seconds: 10 });
|
|
3239
|
+
|
|
3240
|
+
const output = await invocation;
|
|
3241
|
+
if (output.Payload === undefined) throw new Error("No invoke Payload");
|
|
3242
|
+
|
|
3243
|
+
// Unhandled
|
|
3244
|
+
console.log(output.FunctionError);
|
|
3245
|
+
|
|
3246
|
+
const failure = JSON.parse(Buffer.from(output.Payload).toString()) as {
|
|
3247
|
+
errorType: string;
|
|
3248
|
+
errorMessage: string;
|
|
3249
|
+
};
|
|
3250
|
+
|
|
3251
|
+
// Sandbox.Timedout
|
|
3252
|
+
console.log(failure.errorType);
|
|
3253
|
+
// <deadline instant> <request id> Task timed out after 3.00 seconds
|
|
3254
|
+
console.log(failure.errorMessage);
|
|
3255
|
+
```
|
|
3256
|
+
|
|
3257
|
+
The log group gets the `ERROR Invoke Error` line the runtime writes, and `AWS/Lambda` counts an
|
|
3258
|
+
`Errors` datapoint beside the `Invocations`. A handler that answers after its deadline reaches
|
|
3259
|
+
nobody, and the timers it left running are given up with the rest of the invocation.
|
|
3260
|
+
|
|
3261
|
+
For an `Event` invocation a timeout is a failed attempt. It goes to the same
|
|
3262
|
+
[retries and destinations](#asynchronous-retries-and-destinations) an attempt that threw goes to.
|
|
3263
|
+
|
|
3264
|
+
A frozen clock never reaches the deadline. A handler under one runs for as long as the host process
|
|
3265
|
+
lets it, and `context.getRemainingTimeInMillis()` reports the same budget throughout.
|
|
3266
|
+
|
|
2751
3267
|
## What an invocation counts in CloudWatch
|
|
2752
3268
|
|
|
2753
3269
|
Every invocation publishes `Invocations` and a `Duration` into `AWS/Lambda`, dimensioned by
|
|
@@ -3226,11 +3742,45 @@ const stack = await simAws.cloudFormation().deployTemplate({
|
|
|
3226
3742
|
Type: "AWS::SQS::Queue",
|
|
3227
3743
|
Properties: { QueueName: "orders-dlq" },
|
|
3228
3744
|
},
|
|
3745
|
+
OrdersRole: {
|
|
3746
|
+
Type: "AWS::IAM::Role",
|
|
3747
|
+
Properties: {
|
|
3748
|
+
RoleName: "OrdersRole",
|
|
3749
|
+
AssumeRolePolicyDocument: {
|
|
3750
|
+
Version: "2012-10-17",
|
|
3751
|
+
Statement: [
|
|
3752
|
+
{
|
|
3753
|
+
Effect: "Allow",
|
|
3754
|
+
Principal: { Service: "lambda.amazonaws.com" },
|
|
3755
|
+
Action: "sts:AssumeRole",
|
|
3756
|
+
},
|
|
3757
|
+
],
|
|
3758
|
+
},
|
|
3759
|
+
Policies: [
|
|
3760
|
+
{
|
|
3761
|
+
PolicyName: "SendFailedOrders",
|
|
3762
|
+
PolicyDocument: {
|
|
3763
|
+
Version: "2012-10-17",
|
|
3764
|
+
Statement: [
|
|
3765
|
+
{
|
|
3766
|
+
Effect: "Allow",
|
|
3767
|
+
Action: "sqs:SendMessage",
|
|
3768
|
+
Resource: [
|
|
3769
|
+
{ "Fn::GetAtt": ["OrderFailures", "Arn"] },
|
|
3770
|
+
{ "Fn::GetAtt": ["OrderDeadLetters", "Arn"] },
|
|
3771
|
+
],
|
|
3772
|
+
},
|
|
3773
|
+
],
|
|
3774
|
+
},
|
|
3775
|
+
},
|
|
3776
|
+
],
|
|
3777
|
+
},
|
|
3778
|
+
},
|
|
3229
3779
|
OrdersFunction: {
|
|
3230
3780
|
Type: "AWS::Lambda::Function",
|
|
3231
3781
|
Properties: {
|
|
3232
3782
|
FunctionName: "orders",
|
|
3233
|
-
Role: "
|
|
3783
|
+
Role: { "Fn::GetAtt": ["OrdersRole", "Arn"] },
|
|
3234
3784
|
Handler: "index.handler",
|
|
3235
3785
|
Runtime: "nodejs22.x",
|
|
3236
3786
|
Code: {
|
|
@@ -3529,9 +4079,12 @@ Sim Lambda currently supports:
|
|
|
3529
4079
|
- `ListFunctionsCommand`, reporting every function in the Account and Region, and their published
|
|
3530
4080
|
versions with `FunctionVersion: "ALL"`
|
|
3531
4081
|
- `InvokeCommand`, with the `RequestResponse`, `Event` and `DryRun` invocation types
|
|
4082
|
+
- Handler timers on the simulation's clock, and the function's `Timeout` as a deadline on the same
|
|
4083
|
+
clock, reported as real Lambda reports a timeout
|
|
3532
4084
|
- Asynchronous invocation retries on the simulated clock, and `OnSuccess`/`OnFailure` destinations
|
|
3533
4085
|
written with `PutFunctionEventInvokeConfigCommand`, delivering the AWS destination record to a
|
|
3534
|
-
simulated SQS queue, SNS topic, EventBridge event bus or Lambda function
|
|
4086
|
+
simulated SQS queue, SNS topic, EventBridge event bus or Lambda function after authorizing the
|
|
4087
|
+
target operation against the source function's execution role
|
|
3535
4088
|
- `GetFunctionEventInvokeConfigCommand`, `UpdateFunctionEventInvokeConfigCommand`,
|
|
3536
4089
|
`DeleteFunctionEventInvokeConfigCommand` and `ListFunctionEventInvokeConfigsCommand`, each taking
|
|
3537
4090
|
a `Qualifier` for a version's or an alias's own config
|
|
@@ -3539,6 +4092,8 @@ Sim Lambda currently supports:
|
|
|
3539
4092
|
event to a simulated SQS queue or SNS topic
|
|
3540
4093
|
- Function URLs, created with `CreateFunctionUrlConfigCommand` and served over HTTP on localhost
|
|
3541
4094
|
with `serveSimAws`
|
|
4095
|
+
- `Cors` on a Function URL, adding the configured headers to every response and answering a browser
|
|
4096
|
+
preflight without invoking the function
|
|
3542
4097
|
- `iam:PassRole` authorization of the execution role named by `CreateFunctionCommand` and
|
|
3543
4098
|
`UpdateFunctionConfigurationCommand`, with `iam:PassedToService` supplied
|
|
3544
4099
|
- `AuthType: "AWS_IAM"` Function URLs, authorizing `lambda:InvokeFunctionUrl` against the caller
|
|
@@ -3554,6 +4109,8 @@ Sim Lambda currently supports:
|
|
|
3554
4109
|
DynamoDB stream and Kinesis events and honouring `BatchSize`
|
|
3555
4110
|
- `StartingPosition: "TRIM_HORIZON"` and `"LATEST"` on a stream mapping, and `"AT_TIMESTAMP"` on a
|
|
3556
4111
|
Kinesis one, with a failing batch blocking its shard until it is through or discarded
|
|
4112
|
+
- `MaximumRetryAttempts` and `MaximumRecordAgeInSeconds` on a stream mapping, ending the retries at
|
|
4113
|
+
a quota or at a record age
|
|
3557
4114
|
- Every shard of a Kinesis stream read by a processor of its own, as real Lambda reads one
|
|
3558
4115
|
- `FunctionResponseTypes: ["ReportBatchItemFailures"]` on a queue mapping, returning only the
|
|
3559
4116
|
message ids the handler reported, and on a stream mapping, rewinding to the lowest sequence number
|
|
@@ -3565,6 +4122,8 @@ Sim Lambda currently supports:
|
|
|
3565
4122
|
- A Node.js `vm` runtime for zip-packaged code, with warm module state across invocations, and
|
|
3566
4123
|
writable standard streams for handler output, including a bundled AWS Lambda Powertools logger's
|
|
3567
4124
|
own console
|
|
4125
|
+
- Handler output recorded into the function's log group and forwarded to the host console, with
|
|
4126
|
+
`simAws.lambda().output().captureOnly()` to drop the forwarding
|
|
3568
4127
|
- Per-function environment variables with `Environment.Variables`
|
|
3569
4128
|
- Runtime-provided `@aws-sdk/*` packages inside function code, routed into the owning simulated AWS
|
|
3570
4129
|
environment
|
|
@@ -3609,17 +4168,14 @@ Current documented limitations:
|
|
|
3609
4168
|
settings simulated Lambda models, leaving out `Layers`, `VpcConfig`, `TracingConfig`, `KMSKeyArn`,
|
|
3610
4169
|
`EphemeralStorage`, `SnapStart`, `LoggingConfig` and `RevisionId`. `ListFunctions` leaves out
|
|
3611
4170
|
`Marker`/`MaxItems` paging and `MasterRegion`.
|
|
3612
|
-
- A destination is delivered to without checking that the function's execution role may write to it.
|
|
3613
|
-
Real Lambda delivers under that role and drops the record where the role cannot, which would be
|
|
3614
|
-
silent, so simulated Lambda delivers instead. Nothing else about the destination has to be set up,
|
|
3615
|
-
since a destination needs no resource policy on real AWS either.
|
|
3616
4171
|
- SAM's `EventInvokeConfig` and `DeadLetterQueue` on `AWS::Serverless::Function` are left out. A
|
|
3617
4172
|
SAM application declaring either deploys a function with the default retries, no destinations and
|
|
3618
4173
|
no dead-letter target. The `AWS::Lambda::EventInvokeConfig` Resource and the `DeadLetterConfig`
|
|
3619
4174
|
property a CloudFormation or CDK template writes are both deployed. See
|
|
3620
4175
|
[retries and destinations in templates](#retries-and-destinations-in-templates).
|
|
3621
|
-
- Throttling
|
|
3622
|
-
`MaximumEventAgeInSeconds` a config carries is measured from when the invocation was
|
|
4176
|
+
- Throttling does not drive a retry. A retry follows a handler that threw or ran out of time, and
|
|
4177
|
+
the `MaximumEventAgeInSeconds` a config carries is measured from when the invocation was
|
|
4178
|
+
accepted.
|
|
3623
4179
|
- `DestinationConfig` on an event source mapping is left out. It is a different mechanism from the
|
|
3624
4180
|
asynchronous invocation destinations above.
|
|
3625
4181
|
- A settings change takes effect at once. Real Lambda reports `LastUpdateStatus: "InProgress"` while
|
|
@@ -3638,7 +4194,9 @@ Current documented limitations:
|
|
|
3638
4194
|
- `requestContext.authorizer.iam` reports `accessKey` as empty, and `callerId` and `userId` as the
|
|
3639
4195
|
caller ARN rather than the opaque unique id real AWS uses. `cognitoIdentity` and `principalOrgId`
|
|
3640
4196
|
are always null.
|
|
3641
|
-
-
|
|
4197
|
+
- A Function URL's `Cors` block is checked against the bounds the Lambda API documents for each
|
|
4198
|
+
member. Values inside those bounds are taken as they are. An `AllowOrigins` entry that is not a
|
|
4199
|
+
well-formed Origin is stored and matches no request.
|
|
3642
4200
|
- `InvokeMode: "RESPONSE_STREAM"` is accepted and reported, but responses are always served
|
|
3643
4201
|
buffered.
|
|
3644
4202
|
- A function has at most one Function URL, and qualified (version or alias) Function URLs are left
|
|
@@ -3691,9 +4249,15 @@ Current documented limitations:
|
|
|
3691
4249
|
- An unsigned request to a service API endpoint is served over HTTP when the simulation serves that
|
|
3692
4250
|
endpoint, which today means Cognito's regional endpoint and the S3 endpoints. Anywhere else it is
|
|
3693
4251
|
read as a Command and refused as one.
|
|
3694
|
-
-
|
|
3695
|
-
|
|
3696
|
-
|
|
4252
|
+
- A handler is interrupted at its deadline only where it yields. The deadline waits on the
|
|
4253
|
+
simulation's clock like any other work, and dispatching it needs the event loop, so a handler
|
|
4254
|
+
looping over the CPU without awaiting anything runs to the end of its loop.
|
|
4255
|
+
- The global `setTimeout`, `clearTimeout`, `setInterval` and `clearInterval` are the timers on the
|
|
4256
|
+
simulation's clock. `node:timers`, `node:timers/promises` and `util.promisify(setTimeout)` are
|
|
4257
|
+
imported directly rather than read from the globals, and they wait in real time.
|
|
4258
|
+
- Module-scope initialization time and execution environment recycling are left out. A cold start
|
|
4259
|
+
costs nothing against the deadline, and a function keeps one warm environment for as long as it
|
|
4260
|
+
exists.
|
|
3697
4261
|
- A time read at module scope, like an environment variable read there, is read before any
|
|
3698
4262
|
invocation and sees the host clock. See [The time inside a handler](#the-time-inside-a-handler).
|
|
3699
4263
|
- `Event` invocation retries and failure destinations are left out, and handler errors are dropped.
|
|
@@ -3703,15 +4267,15 @@ Current documented limitations:
|
|
|
3703
4267
|
it stands.
|
|
3704
4268
|
- SQS queues, DynamoDB streams and Kinesis streams are the only event sources. Kafka, DocumentDB and
|
|
3705
4269
|
Kinesis enhanced fan-out consumers are refused outright, and so are `FilterCriteria`,
|
|
3706
|
-
`ScalingConfig`, `DestinationConfig`, `
|
|
3707
|
-
`
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
report counts against the same
|
|
3714
|
-
|
|
4270
|
+
`ScalingConfig`, `DestinationConfig`, `BisectBatchOnFunctionError`, `ParallelizationFactor`,
|
|
4271
|
+
`TumblingWindowInSeconds` and the other mapping inputs this simulation has no behaviour for.
|
|
4272
|
+
- A failed stream batch waits 1, 2, 4, 8 and 16 seconds between attempts, where AWS documents no
|
|
4273
|
+
delay. That is deliberate. A delay of zero falls due at the instant the clock already reads, and a
|
|
4274
|
+
handler that always throws would leave `advanceBy` with work falling due forever. A mapping that
|
|
4275
|
+
names neither `MaximumRetryAttempts` nor `MaximumRecordAgeInSeconds` gets five retries and then
|
|
4276
|
+
discards the batch, where AWS goes on until the records age out a day later. A batch item failure
|
|
4277
|
+
report counts against the same retries, and never starts them again for the records it rewound
|
|
4278
|
+
to.
|
|
3715
4279
|
- A handler writing into the table whose stream invoked it is refused with
|
|
3716
4280
|
`SimLambdaStreamCascadeError` rather than being delivered its own writes forever. Real Lambda runs
|
|
3717
4281
|
that loop.
|