From 5e8865f80774f2170dd9cf0dfa63e1f31f4aa6c7 Mon Sep 17 00:00:00 2001 From: biffgaut <78155736+biffgaut@users.noreply.github.com> Date: Thu, 19 Sep 2024 19:33:31 -0400 Subject: [PATCH 1/7] chore(build): update lerna to latest version (#1207) * Update package.json to protect from align-version.sh * Update lerna version --- source/lerna.json | 5 ++--- source/package.json | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/source/lerna.json b/source/lerna.json index 44e1bb335..1355a32ef 100644 --- a/source/lerna.json +++ b/source/lerna.json @@ -1,9 +1,8 @@ { - "lerna": "3.15.0", + "lerna": "8.1.8", "npmClient": "yarn", - "useWorkspaces": true, "packages": [ - "./patterns/@aws-solutions-constructs/*" + "patterns/@aws-solutions-constructs/*" ], "rejectCycles": "true", "version": "2.70.0" diff --git a/source/package.json b/source/package.json index 6f94382da..ccfda2494 100644 --- a/source/package.json +++ b/source/package.json @@ -32,13 +32,13 @@ "constructs": "^10.0.0" }, "devDependencies": { - "lerna": "^3.22.1", + "lerna": "8.1.8", "constructs": "^10.0.0", "aws-cdk-lib": "0.0.0" }, "workspaces": { "packages": [ - "./patterns/@aws-solutions-constructs/*" + "patterns/@aws-solutions-constructs/*" ], "nohoist": [ "**/deepmerge", From 54119fc6b1328dfbc4efb8ad287098d72317526b Mon Sep 17 00:00:00 2001 From: biffgaut <78155736+biffgaut@users.noreply.github.com> Date: Wed, 25 Sep 2024 19:05:04 -0400 Subject: [PATCH 2/7] Change to SolEng ruleset (#1209) --- deployment/v2/bootstrap.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deployment/v2/bootstrap.sh b/deployment/v2/bootstrap.sh index 5597ba310..6a6a8dec4 100755 --- a/deployment/v2/bootstrap.sh +++ b/deployment/v2/bootstrap.sh @@ -22,7 +22,8 @@ npm install -g aws-cdk # Install cfn-guard and rules export RULE_BUCKET=solutions-build-assets -export RULE_FILE_NAME=aws-solutions-constructs.guard +# export RULE_FILE_NAME=aws-solutions-constructs.guard +export RULE_FILE_NAME=aws-solutions.guard mkdir -p ~/.guard mkdir -p ~/.guard/bin From b4b37cb9a0c2c7c66096104a7bd1727d94de9f2f Mon Sep 17 00:00:00 2001 From: biffgaut <78155736+biffgaut@users.noreply.github.com> Date: Thu, 26 Sep 2024 09:27:46 -0400 Subject: [PATCH 3/7] Update to latest version (#1210) --- deployment/v2/align-version.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/v2/align-version.js b/deployment/v2/align-version.js index 11409d34e..ae42df785 100755 --- a/deployment/v2/align-version.js +++ b/deployment/v2/align-version.js @@ -10,7 +10,7 @@ const nullVersionMarker = process.argv[2]; const targetSolutionsConstructsVersion = process.argv[3]; // these versions need to be sourced from a config file -const awsCdkLibVersion = '2.154.1'; +const awsCdkLibVersion = '2.160.0'; for (const file of process.argv.splice(4)) { const pkg = JSON.parse(fs.readFileSync(file).toString()); From 194f14314e9c7ef625d06b3c418175e725567f19 Mon Sep 17 00:00:00 2001 From: biffgaut <78155736+biffgaut@users.noreply.github.com> Date: Thu, 26 Sep 2024 16:32:33 -0400 Subject: [PATCH 4/7] Add id to construct ID (#1211) --- .../aws-openapigateway-lambda/lib/index.ts | 2 +- .../cfn-response.js | 0 .../consts.js | 0 .../framework.js | 3 + .../outbound.js | 0 .../util.js | 0 .../framework.js | 3 - .../cdk.out | 2 +- .../integ.json | 2 +- .../manifest.json | 32 +++- ...omAssetExistingLambdaFunctions.assets.json | 12 +- ...AssetExistingLambdaFunctions.template.json | 6 +- ...efaultTestDeployAssertF0801F72.assets.json | 2 +- .../tree.json | 174 +++++++++--------- .../cfn-response.js | 0 .../consts.js | 0 .../framework.js | 3 + .../outbound.js | 0 .../util.js | 0 .../framework.js | 3 - .../cdk.out | 2 +- .../integ.json | 2 +- .../manifest.json | 32 +++- ...apiFromAssetNewLambdaFunctions.assets.json | 12 +- ...iFromAssetNewLambdaFunctions.template.json | 6 +- ...efaultTestDeployAssert781D98B1.assets.json | 2 +- .../tree.json | 174 +++++++++--------- .../cfn-response.js | 0 .../consts.js | 0 .../framework.js | 3 + .../outbound.js | 0 .../util.js | 0 .../framework.js | 3 - .../cdk.out | 2 +- .../integ.json | 2 +- .../manifest.json | 32 +++- ...am-apiFromAssetWithCognitoAuth.assets.json | 12 +- ...-apiFromAssetWithCognitoAuth.template.json | 6 +- ...efaultTestDeployAssert6E95D513.assets.json | 2 +- .../tree.json | 174 +++++++++--------- .../cdk.out | 2 +- .../integ.json | 2 +- .../manifest.json | 32 +++- ...opilam-apiFromInlineDefinition.assets.json | 6 +- ...ilam-apiFromInlineDefinition.template.json | 4 +- ...efaultTestDeployAssertCF0E111E.assets.json | 2 +- .../tree.json | 108 +++++------ .../test/test.openapigateway-lambda.test.ts | 40 ++++ 48 files changed, 513 insertions(+), 393 deletions(-) rename source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/{asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b => asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e}/cfn-response.js (100%) rename source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/{asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b => asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e}/consts.js (100%) create mode 100644 source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/framework.js rename source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/{asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b => asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e}/outbound.js (100%) rename source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/{asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b => asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e}/util.js (100%) delete mode 100644 source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/framework.js rename source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/{asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b => asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e}/cfn-response.js (100%) rename source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/{asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b => asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e}/consts.js (100%) create mode 100644 source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/framework.js rename source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/{asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b => asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e}/outbound.js (100%) rename source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/{asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b => asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e}/util.js (100%) delete mode 100644 source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/framework.js rename source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/{asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b => asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e}/cfn-response.js (100%) rename source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/{asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b => asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e}/consts.js (100%) create mode 100644 source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/framework.js rename source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/{asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b => asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e}/outbound.js (100%) rename source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/{asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b => asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e}/util.js (100%) delete mode 100644 source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/framework.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/lib/index.ts b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/lib/index.ts index 4ee0e2224..8aa5bb8ff 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/lib/index.ts +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/lib/index.ts @@ -158,7 +158,7 @@ export class OpenApiGatewayToLambda extends Construct { // Redeploy the API any time one of the lambda functions changes this.apiGateway.latestDeployment?.addToLogicalId(apiLambdaFunction.lambdaFunction.functionArn); // Grant APIGW invocation rights for each lambda function - apiLambdaFunction.lambdaFunction.addPermission('PermitAPIGInvocation', { + apiLambdaFunction.lambdaFunction.addPermission(`${id}PermitAPIGInvocation`, { principal: new iam.ServicePrincipal('apigateway.amazonaws.com'), sourceArn: this.apiGateway.arnForExecuteApi('*') }); diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/cfn-response.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/cfn-response.js similarity index 100% rename from source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/cfn-response.js rename to source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/cfn-response.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/consts.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/consts.js similarity index 100% rename from source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/consts.js rename to source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/consts.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/framework.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/framework.js new file mode 100644 index 000000000..952048e6f --- /dev/null +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/framework.js @@ -0,0 +1,3 @@ +"use strict";const cfnResponse=require("./cfn-response"),consts=require("./consts"),outbound_1=require("./outbound"),util_1=require("./util");async function onEvent(cfnRequest){const sanitizedRequest={...cfnRequest,ResponseURL:"..."};(0,util_1.log)("onEventHandler",sanitizedRequest),cfnRequest.ResourceProperties=cfnRequest.ResourceProperties||{};const onEventResult=await invokeUserFunction(consts.USER_ON_EVENT_FUNCTION_ARN_ENV,sanitizedRequest,cfnRequest.ResponseURL);onEventResult?.NoEcho?(0,util_1.log)("redacted onEvent returned:",cfnResponse.redactDataFromPayload(onEventResult)):(0,util_1.log)("onEvent returned:",onEventResult);const resourceEvent=createResponseEvent(cfnRequest,onEventResult),sanitizedEvent={...resourceEvent,ResponseURL:"..."};if(onEventResult?.NoEcho?(0,util_1.log)("readacted event:",cfnResponse.redactDataFromPayload(sanitizedEvent)):(0,util_1.log)("event:",sanitizedEvent),!process.env[consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV])return cfnResponse.submitResponse("SUCCESS",resourceEvent,{noEcho:resourceEvent.NoEcho});const waiter={stateMachineArn:(0,util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),name:resourceEvent.RequestId,input:JSON.stringify(resourceEvent)};(0,util_1.log)("starting waiter",{stateMachineArn:(0,util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),name:resourceEvent.RequestId}),await(0,outbound_1.startExecution)(waiter)}async function isComplete(event){const sanitizedRequest={...event,ResponseURL:"..."};event?.NoEcho?(0,util_1.log)("redacted isComplete request",cfnResponse.redactDataFromPayload(sanitizedRequest)):(0,util_1.log)("isComplete",sanitizedRequest);const isCompleteResult=await invokeUserFunction(consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV,sanitizedRequest,event.ResponseURL);if(event?.NoEcho?(0,util_1.log)("redacted user isComplete returned:",cfnResponse.redactDataFromPayload(isCompleteResult)):(0,util_1.log)("user isComplete returned:",isCompleteResult),!isCompleteResult.IsComplete)throw isCompleteResult.Data&&Object.keys(isCompleteResult.Data).length>0?new Error('"Data" is not allowed if "IsComplete" is "False"'):new cfnResponse.Retry(JSON.stringify(event));const response={...event,...isCompleteResult,Data:{...event.Data,...isCompleteResult.Data}};await cfnResponse.submitResponse("SUCCESS",response,{noEcho:event.NoEcho})}async function onTimeout(timeoutEvent){(0,util_1.log)("timeoutHandler",timeoutEvent);const isCompleteRequest=JSON.parse(JSON.parse(timeoutEvent.Cause).errorMessage);await cfnResponse.submitResponse("FAILED",isCompleteRequest,{reason:"Operation timed out"})}async function invokeUserFunction(functionArnEnv,sanitizedPayload,responseUrl){const functionArn=(0,util_1.getEnv)(functionArnEnv);(0,util_1.log)(`executing user function ${functionArn} with payload`,sanitizedPayload);const resp=await(0,outbound_1.invokeFunction)({FunctionName:functionArn,Payload:JSON.stringify({...sanitizedPayload,ResponseURL:responseUrl})});(0,util_1.log)("user function response:",resp,typeof resp);const jsonPayload=(0,util_1.parseJsonPayload)(resp.Payload);if(resp.FunctionError){(0,util_1.log)("user function threw an error:",resp.FunctionError);const errorMessage=jsonPayload.errorMessage||"error",arn=functionArn.split(":"),functionName=arn[arn.length-1],message=[errorMessage,"",`Logs: /aws/lambda/${functionName}`,""].join(` +`),e=new Error(message);throw jsonPayload.trace&&(e.stack=[message,...jsonPayload.trace.slice(1)].join(` +`)),e}return jsonPayload}function createResponseEvent(cfnRequest,onEventResult){onEventResult=onEventResult||{};const physicalResourceId=onEventResult.PhysicalResourceId||defaultPhysicalResourceId(cfnRequest);if(cfnRequest.RequestType==="Delete"&&physicalResourceId!==cfnRequest.PhysicalResourceId)throw new Error(`DELETE: cannot change the physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}" during deletion`);return cfnRequest.RequestType==="Update"&&physicalResourceId!==cfnRequest.PhysicalResourceId&&(0,util_1.log)(`UPDATE: changing physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}"`),{...cfnRequest,...onEventResult,PhysicalResourceId:physicalResourceId}}function defaultPhysicalResourceId(req){switch(req.RequestType){case"Create":return req.RequestId;case"Update":case"Delete":return req.PhysicalResourceId;default:throw new Error(`Invalid "RequestType" in request "${JSON.stringify(req)}"`)}}module.exports={[consts.FRAMEWORK_ON_EVENT_HANDLER_NAME]:cfnResponse.safeHandler(onEvent),[consts.FRAMEWORK_IS_COMPLETE_HANDLER_NAME]:cfnResponse.safeHandler(isComplete),[consts.FRAMEWORK_ON_TIMEOUT_HANDLER_NAME]:onTimeout}; diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/outbound.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/outbound.js similarity index 100% rename from source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/outbound.js rename to source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/outbound.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/util.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/util.js similarity index 100% rename from source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/util.js rename to source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/util.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/framework.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/framework.js deleted file mode 100644 index 42ca4b146..000000000 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/framework.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict";const cfnResponse=require("./cfn-response"),consts=require("./consts"),outbound_1=require("./outbound"),util_1=require("./util");async function onEvent(cfnRequest){const sanitizedRequest={...cfnRequest,ResponseURL:"..."};(0,util_1.log)("onEventHandler",sanitizedRequest),cfnRequest.ResourceProperties=cfnRequest.ResourceProperties||{};const onEventResult=await invokeUserFunction(consts.USER_ON_EVENT_FUNCTION_ARN_ENV,sanitizedRequest,cfnRequest.ResponseURL);onEventResult?.NoEcho?(0,util_1.log)("redacted onEvent returned:",cfnResponse.redactDataFromPayload(onEventResult)):(0,util_1.log)("onEvent returned:",onEventResult);const resourceEvent=createResponseEvent(cfnRequest,onEventResult);if(onEventResult?.NoEcho?(0,util_1.log)("readacted event:",cfnResponse.redactDataFromPayload(resourceEvent)):(0,util_1.log)("event:",resourceEvent),!process.env[consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV])return cfnResponse.submitResponse("SUCCESS",resourceEvent,{noEcho:resourceEvent.NoEcho});const waiter={stateMachineArn:(0,util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),name:resourceEvent.RequestId,input:JSON.stringify(resourceEvent)};(0,util_1.log)("starting waiter",{stateMachineArn:(0,util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),name:resourceEvent.RequestId}),await(0,outbound_1.startExecution)(waiter)}async function isComplete(event){const sanitizedRequest={...event,ResponseURL:"..."};event?.NoEcho?(0,util_1.log)("redacted isComplete request",cfnResponse.redactDataFromPayload(sanitizedRequest)):(0,util_1.log)("isComplete",sanitizedRequest);const isCompleteResult=await invokeUserFunction(consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV,sanitizedRequest,event.ResponseURL);if(event?.NoEcho?(0,util_1.log)("redacted user isComplete returned:",cfnResponse.redactDataFromPayload(isCompleteResult)):(0,util_1.log)("user isComplete returned:",isCompleteResult),!isCompleteResult.IsComplete)throw isCompleteResult.Data&&Object.keys(isCompleteResult.Data).length>0?new Error('"Data" is not allowed if "IsComplete" is "False"'):new cfnResponse.Retry(JSON.stringify(event));const response={...event,...isCompleteResult,Data:{...event.Data,...isCompleteResult.Data}};await cfnResponse.submitResponse("SUCCESS",response,{noEcho:event.NoEcho})}async function onTimeout(timeoutEvent){(0,util_1.log)("timeoutHandler",timeoutEvent);const isCompleteRequest=JSON.parse(JSON.parse(timeoutEvent.Cause).errorMessage);await cfnResponse.submitResponse("FAILED",isCompleteRequest,{reason:"Operation timed out"})}async function invokeUserFunction(functionArnEnv,sanitizedPayload,responseUrl){const functionArn=(0,util_1.getEnv)(functionArnEnv);(0,util_1.log)(`executing user function ${functionArn} with payload`,sanitizedPayload);const resp=await(0,outbound_1.invokeFunction)({FunctionName:functionArn,Payload:JSON.stringify({...sanitizedPayload,ResponseURL:responseUrl})});(0,util_1.log)("user function response:",resp,typeof resp);const jsonPayload=(0,util_1.parseJsonPayload)(resp.Payload);if(resp.FunctionError){(0,util_1.log)("user function threw an error:",resp.FunctionError);const errorMessage=jsonPayload.errorMessage||"error",arn=functionArn.split(":"),functionName=arn[arn.length-1],message=[errorMessage,"",`Logs: /aws/lambda/${functionName}`,""].join(` -`),e=new Error(message);throw jsonPayload.trace&&(e.stack=[message,...jsonPayload.trace.slice(1)].join(` -`)),e}return jsonPayload}function createResponseEvent(cfnRequest,onEventResult){onEventResult=onEventResult||{};const physicalResourceId=onEventResult.PhysicalResourceId||defaultPhysicalResourceId(cfnRequest);if(cfnRequest.RequestType==="Delete"&&physicalResourceId!==cfnRequest.PhysicalResourceId)throw new Error(`DELETE: cannot change the physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}" during deletion`);return cfnRequest.RequestType==="Update"&&physicalResourceId!==cfnRequest.PhysicalResourceId&&(0,util_1.log)(`UPDATE: changing physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}"`),{...cfnRequest,...onEventResult,PhysicalResourceId:physicalResourceId}}function defaultPhysicalResourceId(req){switch(req.RequestType){case"Create":return req.RequestId;case"Update":case"Delete":return req.PhysicalResourceId;default:throw new Error(`Invalid "RequestType" in request "${JSON.stringify(req)}"`)}}module.exports={[consts.FRAMEWORK_ON_EVENT_HANDLER_NAME]:cfnResponse.safeHandler(onEvent),[consts.FRAMEWORK_IS_COMPLETE_HANDLER_NAME]:cfnResponse.safeHandler(isComplete),[consts.FRAMEWORK_ON_TIMEOUT_HANDLER_NAME]:onTimeout}; diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/cdk.out b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/cdk.out index 1f0068d32..c6e612584 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/cdk.out +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"36.0.0"} \ No newline at end of file +{"version":"38.0.1"} \ No newline at end of file diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/integ.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/integ.json index 26f625a79..db06ca214 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/integ.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "38.0.1", "testCases": { "opilam-apiFromAssetExistingLambdaFunctions/Integ/DefaultTest": { "stacks": [ diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/manifest.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/manifest.json index f470f577d..805ac4342 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/manifest.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "38.0.1", "artifacts": { "opilamapiFromAssetExistingLambdaFunctionsIntegDefaultTestDeployAssertF0801F72.assets": { "type": "cdk:asset-manifest", @@ -16,6 +16,7 @@ "templateFile": "opilamapiFromAssetExistingLambdaFunctionsIntegDefaultTestDeployAssertF0801F72.template.json", "terminationProtection": false, "validateOnSynth": false, + "notificationArns": [], "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", @@ -64,9 +65,10 @@ "templateFile": "opilam-apiFromAssetExistingLambdaFunctions.template.json", "terminationProtection": false, "validateOnSynth": false, + "notificationArns": [], "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/2bdc18dae70e061f5e53157f71d8fbde1d944a33f071b533f25022bc44680eba.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/df5244d59e9cb656a7d8d367445b78ea709c1e96ebc76b6f722390037f87be8d.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -100,10 +102,10 @@ "data": "LambdaFunctionBF21E41F" } ], - "/opilam-apiFromAssetExistingLambdaFunctions/LambdaFunction/PermitAPIGInvocation": [ + "/opilam-apiFromAssetExistingLambdaFunctions/LambdaFunction/OpenApiGatewayToLambdaPermitAPIGInvocation": [ { "type": "aws:cdk:logicalId", - "data": "LambdaFunctionPermitAPIGInvocation805898E4" + "data": "LambdaFunctionOpenApiGatewayToLambdaPermitAPIGInvocation9D043C93" } ], "/opilam-apiFromAssetExistingLambdaFunctions/PhotosLambdaTestFromAssetServiceRole/Resource": [ @@ -124,10 +126,10 @@ "data": "PhotosLambdaTestFromAssetB776E3C5" } ], - "/opilam-apiFromAssetExistingLambdaFunctions/PhotosLambdaTestFromAsset/PermitAPIGInvocation": [ + "/opilam-apiFromAssetExistingLambdaFunctions/PhotosLambdaTestFromAsset/OpenApiGatewayToLambdaPermitAPIGInvocation": [ { "type": "aws:cdk:logicalId", - "data": "PhotosLambdaTestFromAssetPermitAPIGInvocation323F8FF0" + "data": "PhotosLambdaTestFromAssetOpenApiGatewayToLambdaPermitAPIGInvocationA0D5D04E" } ], "/opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/LambdaFunctionServiceRole/Resource": [ @@ -243,6 +245,24 @@ "type": "aws:cdk:logicalId", "data": "CheckBootstrapVersion" } + ], + "LambdaFunctionPermitAPIGInvocation805898E4": [ + { + "type": "aws:cdk:logicalId", + "data": "LambdaFunctionPermitAPIGInvocation805898E4", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "PhotosLambdaTestFromAssetPermitAPIGInvocation323F8FF0": [ + { + "type": "aws:cdk:logicalId", + "data": "PhotosLambdaTestFromAssetPermitAPIGInvocation323F8FF0", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } ] }, "displayName": "opilam-apiFromAssetExistingLambdaFunctions" diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/opilam-apiFromAssetExistingLambdaFunctions.assets.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/opilam-apiFromAssetExistingLambdaFunctions.assets.json index ba33c6fe3..2958044bd 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/opilam-apiFromAssetExistingLambdaFunctions.assets.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/opilam-apiFromAssetExistingLambdaFunctions.assets.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "38.0.1", "files": { "c2b362b5f0d6d8f56ac2c011288aebd095499d839b130a932427f74232de2a32": { "source": { @@ -66,20 +66,20 @@ } } }, - "d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b": { + "4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e": { "source": { - "path": "asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b", + "path": "asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b.zip", + "objectKey": "4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "2bdc18dae70e061f5e53157f71d8fbde1d944a33f071b533f25022bc44680eba": { + "df5244d59e9cb656a7d8d367445b78ea709c1e96ebc76b6f722390037f87be8d": { "source": { "path": "opilam-apiFromAssetExistingLambdaFunctions.template.json", "packaging": "file" @@ -87,7 +87,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "2bdc18dae70e061f5e53157f71d8fbde1d944a33f071b533f25022bc44680eba.json", + "objectKey": "df5244d59e9cb656a7d8d367445b78ea709c1e96ebc76b6f722390037f87be8d.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/opilam-apiFromAssetExistingLambdaFunctions.template.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/opilam-apiFromAssetExistingLambdaFunctions.template.json index 8fc49860d..14be69995 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/opilam-apiFromAssetExistingLambdaFunctions.template.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/opilam-apiFromAssetExistingLambdaFunctions.template.json @@ -146,7 +146,7 @@ } } }, - "LambdaFunctionPermitAPIGInvocation805898E4": { + "LambdaFunctionOpenApiGatewayToLambdaPermitAPIGInvocation9D043C93": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", @@ -329,7 +329,7 @@ } } }, - "PhotosLambdaTestFromAssetPermitAPIGInvocation323F8FF0": { + "PhotosLambdaTestFromAssetOpenApiGatewayToLambdaPermitAPIGInvocationA0D5D04E": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", @@ -649,7 +649,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b.zip" + "S3Key": "4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e.zip" }, "Description": "AWS CDK resource provider framework - onEvent (opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/ApiTemplateWriterProvider)", "Environment": { diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/opilamapiFromAssetExistingLambdaFunctionsIntegDefaultTestDeployAssertF0801F72.assets.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/opilamapiFromAssetExistingLambdaFunctionsIntegDefaultTestDeployAssertF0801F72.assets.json index b8f6012fd..0119fddbf 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/opilamapiFromAssetExistingLambdaFunctionsIntegDefaultTestDeployAssertF0801F72.assets.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/opilamapiFromAssetExistingLambdaFunctionsIntegDefaultTestDeployAssertF0801F72.assets.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "38.0.1", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/tree.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/tree.json index 566453847..c2c490ff7 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/tree.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetExistingLambdaFunctions.js.snapshot/tree.json @@ -17,7 +17,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/ApiDefinitionAsset/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -25,13 +25,13 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/ApiDefinitionAsset/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaFunctionServiceRole": { @@ -43,7 +43,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/LambdaFunctionServiceRole/ImportLambdaFunctionServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -106,7 +106,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -142,19 +142,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaFunction": { @@ -170,7 +170,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/LambdaFunction/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -178,13 +178,13 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/LambdaFunction/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -219,12 +219,12 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.150.0" + "version": "2.160.0" } }, - "PermitAPIGInvocation": { - "id": "PermitAPIGInvocation", - "path": "opilam-apiFromAssetExistingLambdaFunctions/LambdaFunction/PermitAPIGInvocation", + "OpenApiGatewayToLambdaPermitAPIGInvocation": { + "id": "OpenApiGatewayToLambdaPermitAPIGInvocation", + "path": "opilam-apiFromAssetExistingLambdaFunctions/LambdaFunction/OpenApiGatewayToLambdaPermitAPIGInvocation", "attributes": { "aws:cdk:cloudformation:type": "AWS::Lambda::Permission", "aws:cdk:cloudformation:props": { @@ -264,13 +264,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnPermission", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.150.0" + "version": "2.160.0" } }, "PhotosLambdaTestFromAssetServiceRole": { @@ -282,7 +282,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/PhotosLambdaTestFromAssetServiceRole/ImportPhotosLambdaTestFromAssetServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -345,7 +345,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -381,19 +381,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "PhotosLambdaTestFromAsset": { @@ -409,7 +409,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/PhotosLambdaTestFromAsset/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -417,13 +417,13 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/PhotosLambdaTestFromAsset/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -459,12 +459,12 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.150.0" + "version": "2.160.0" } }, - "PermitAPIGInvocation": { - "id": "PermitAPIGInvocation", - "path": "opilam-apiFromAssetExistingLambdaFunctions/PhotosLambdaTestFromAsset/PermitAPIGInvocation", + "OpenApiGatewayToLambdaPermitAPIGInvocation": { + "id": "OpenApiGatewayToLambdaPermitAPIGInvocation", + "path": "opilam-apiFromAssetExistingLambdaFunctions/PhotosLambdaTestFromAsset/OpenApiGatewayToLambdaPermitAPIGInvocation", "attributes": { "aws:cdk:cloudformation:type": "AWS::Lambda::Permission", "aws:cdk:cloudformation:props": { @@ -504,13 +504,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnPermission", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.150.0" + "version": "2.160.0" } }, "OpenApiGatewayToLambda": { @@ -526,7 +526,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/ApiOutputAsset/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -534,13 +534,13 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/ApiOutputAsset/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaFunctionServiceRole": { @@ -552,7 +552,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/LambdaFunctionServiceRole/ImportLambdaFunctionServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -615,7 +615,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -651,19 +651,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaFunction": { @@ -679,7 +679,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/LambdaFunction/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -687,13 +687,13 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/LambdaFunction/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -730,13 +730,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiTemplateWriterPolicy": { @@ -804,13 +804,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiTemplateWriterProvider": { @@ -830,7 +830,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/ApiTemplateWriterProvider/framework-onEvent/ServiceRole/ImportServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -869,7 +869,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -923,19 +923,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "Code": { @@ -947,7 +947,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/ApiTemplateWriterProvider/framework-onEvent/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -955,13 +955,13 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/ApiTemplateWriterProvider/framework-onEvent/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -974,7 +974,7 @@ "s3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "s3Key": "d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b.zip" + "s3Key": "4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e.zip" }, "description": "AWS CDK resource provider framework - onEvent (opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/ApiTemplateWriterProvider)", "environment": { @@ -1008,19 +1008,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.custom_resources.Provider", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiTemplateWriterCustomResource": { @@ -1032,13 +1032,13 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/ApiTemplateWriterCustomResource/Default", "constructInfo": { "fqn": "aws-cdk-lib.CfnResource", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.CustomResource", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiAccessLogGroup": { @@ -1054,13 +1054,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_logs.CfnLogGroup", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_logs.LogGroup", - "version": "2.150.0" + "version": "2.160.0" } }, "SpecRestApi": { @@ -1109,7 +1109,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnRestApi", - "version": "2.150.0" + "version": "2.160.0" } }, "Default": { @@ -1117,7 +1117,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/SpecRestApi/Default", "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.ResourceBase", - "version": "2.150.0" + "version": "2.160.0" } }, "Deployment": { @@ -1138,13 +1138,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnDeployment", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.Deployment", - "version": "2.150.0" + "version": "2.160.0" } }, "DeploymentStage.prod": { @@ -1186,13 +1186,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnStage", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.Stage", - "version": "2.150.0" + "version": "2.160.0" } }, "Endpoint": { @@ -1200,7 +1200,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/SpecRestApi/Endpoint", "constructInfo": { "fqn": "aws-cdk-lib.CfnOutput", - "version": "2.150.0" + "version": "2.160.0" } }, "UsagePlan": { @@ -1228,19 +1228,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnUsagePlan", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.UsagePlan", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.SpecRestApi", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaRestApiCloudWatchRole": { @@ -1252,7 +1252,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/OpenApiGatewayToLambda/LambdaRestApiCloudWatchRole/ImportLambdaRestApiCloudWatchRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -1319,13 +1319,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaRestApiAccount": { @@ -1344,13 +1344,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnAccount", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "@aws-solutions-constructs/aws-openapigateway-lambda.OpenApiGatewayToLambda", - "version": "2.63.0" + "version": "2.70.0" } }, "LatestNodeRuntimeMap": { @@ -1358,7 +1358,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/LatestNodeRuntimeMap", "constructInfo": { "fqn": "aws-cdk-lib.CfnMapping", - "version": "2.150.0" + "version": "2.160.0" } }, "Integ": { @@ -1386,7 +1386,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/Integ/DefaultTest/DeployAssert/BootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnParameter", - "version": "2.150.0" + "version": "2.160.0" } }, "CheckBootstrapVersion": { @@ -1394,25 +1394,25 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnRule", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.Stack", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", - "version": "2.150.0-alpha.0" + "version": "2.160.0-alpha.0" } } }, "constructInfo": { "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", - "version": "2.150.0-alpha.0" + "version": "2.160.0-alpha.0" } }, "BootstrapVersion": { @@ -1420,7 +1420,7 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/BootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnParameter", - "version": "2.150.0" + "version": "2.160.0" } }, "CheckBootstrapVersion": { @@ -1428,13 +1428,13 @@ "path": "opilam-apiFromAssetExistingLambdaFunctions/CheckBootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnRule", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.Stack", - "version": "2.150.0" + "version": "2.160.0" } }, "Tree": { @@ -1448,7 +1448,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.App", - "version": "2.150.0" + "version": "2.160.0" } } } \ No newline at end of file diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/cfn-response.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/cfn-response.js similarity index 100% rename from source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/cfn-response.js rename to source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/cfn-response.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/consts.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/consts.js similarity index 100% rename from source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/consts.js rename to source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/consts.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/framework.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/framework.js new file mode 100644 index 000000000..952048e6f --- /dev/null +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/framework.js @@ -0,0 +1,3 @@ +"use strict";const cfnResponse=require("./cfn-response"),consts=require("./consts"),outbound_1=require("./outbound"),util_1=require("./util");async function onEvent(cfnRequest){const sanitizedRequest={...cfnRequest,ResponseURL:"..."};(0,util_1.log)("onEventHandler",sanitizedRequest),cfnRequest.ResourceProperties=cfnRequest.ResourceProperties||{};const onEventResult=await invokeUserFunction(consts.USER_ON_EVENT_FUNCTION_ARN_ENV,sanitizedRequest,cfnRequest.ResponseURL);onEventResult?.NoEcho?(0,util_1.log)("redacted onEvent returned:",cfnResponse.redactDataFromPayload(onEventResult)):(0,util_1.log)("onEvent returned:",onEventResult);const resourceEvent=createResponseEvent(cfnRequest,onEventResult),sanitizedEvent={...resourceEvent,ResponseURL:"..."};if(onEventResult?.NoEcho?(0,util_1.log)("readacted event:",cfnResponse.redactDataFromPayload(sanitizedEvent)):(0,util_1.log)("event:",sanitizedEvent),!process.env[consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV])return cfnResponse.submitResponse("SUCCESS",resourceEvent,{noEcho:resourceEvent.NoEcho});const waiter={stateMachineArn:(0,util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),name:resourceEvent.RequestId,input:JSON.stringify(resourceEvent)};(0,util_1.log)("starting waiter",{stateMachineArn:(0,util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),name:resourceEvent.RequestId}),await(0,outbound_1.startExecution)(waiter)}async function isComplete(event){const sanitizedRequest={...event,ResponseURL:"..."};event?.NoEcho?(0,util_1.log)("redacted isComplete request",cfnResponse.redactDataFromPayload(sanitizedRequest)):(0,util_1.log)("isComplete",sanitizedRequest);const isCompleteResult=await invokeUserFunction(consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV,sanitizedRequest,event.ResponseURL);if(event?.NoEcho?(0,util_1.log)("redacted user isComplete returned:",cfnResponse.redactDataFromPayload(isCompleteResult)):(0,util_1.log)("user isComplete returned:",isCompleteResult),!isCompleteResult.IsComplete)throw isCompleteResult.Data&&Object.keys(isCompleteResult.Data).length>0?new Error('"Data" is not allowed if "IsComplete" is "False"'):new cfnResponse.Retry(JSON.stringify(event));const response={...event,...isCompleteResult,Data:{...event.Data,...isCompleteResult.Data}};await cfnResponse.submitResponse("SUCCESS",response,{noEcho:event.NoEcho})}async function onTimeout(timeoutEvent){(0,util_1.log)("timeoutHandler",timeoutEvent);const isCompleteRequest=JSON.parse(JSON.parse(timeoutEvent.Cause).errorMessage);await cfnResponse.submitResponse("FAILED",isCompleteRequest,{reason:"Operation timed out"})}async function invokeUserFunction(functionArnEnv,sanitizedPayload,responseUrl){const functionArn=(0,util_1.getEnv)(functionArnEnv);(0,util_1.log)(`executing user function ${functionArn} with payload`,sanitizedPayload);const resp=await(0,outbound_1.invokeFunction)({FunctionName:functionArn,Payload:JSON.stringify({...sanitizedPayload,ResponseURL:responseUrl})});(0,util_1.log)("user function response:",resp,typeof resp);const jsonPayload=(0,util_1.parseJsonPayload)(resp.Payload);if(resp.FunctionError){(0,util_1.log)("user function threw an error:",resp.FunctionError);const errorMessage=jsonPayload.errorMessage||"error",arn=functionArn.split(":"),functionName=arn[arn.length-1],message=[errorMessage,"",`Logs: /aws/lambda/${functionName}`,""].join(` +`),e=new Error(message);throw jsonPayload.trace&&(e.stack=[message,...jsonPayload.trace.slice(1)].join(` +`)),e}return jsonPayload}function createResponseEvent(cfnRequest,onEventResult){onEventResult=onEventResult||{};const physicalResourceId=onEventResult.PhysicalResourceId||defaultPhysicalResourceId(cfnRequest);if(cfnRequest.RequestType==="Delete"&&physicalResourceId!==cfnRequest.PhysicalResourceId)throw new Error(`DELETE: cannot change the physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}" during deletion`);return cfnRequest.RequestType==="Update"&&physicalResourceId!==cfnRequest.PhysicalResourceId&&(0,util_1.log)(`UPDATE: changing physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}"`),{...cfnRequest,...onEventResult,PhysicalResourceId:physicalResourceId}}function defaultPhysicalResourceId(req){switch(req.RequestType){case"Create":return req.RequestId;case"Update":case"Delete":return req.PhysicalResourceId;default:throw new Error(`Invalid "RequestType" in request "${JSON.stringify(req)}"`)}}module.exports={[consts.FRAMEWORK_ON_EVENT_HANDLER_NAME]:cfnResponse.safeHandler(onEvent),[consts.FRAMEWORK_IS_COMPLETE_HANDLER_NAME]:cfnResponse.safeHandler(isComplete),[consts.FRAMEWORK_ON_TIMEOUT_HANDLER_NAME]:onTimeout}; diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/outbound.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/outbound.js similarity index 100% rename from source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/outbound.js rename to source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/outbound.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/util.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/util.js similarity index 100% rename from source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/util.js rename to source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/util.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/framework.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/framework.js deleted file mode 100644 index 42ca4b146..000000000 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/framework.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict";const cfnResponse=require("./cfn-response"),consts=require("./consts"),outbound_1=require("./outbound"),util_1=require("./util");async function onEvent(cfnRequest){const sanitizedRequest={...cfnRequest,ResponseURL:"..."};(0,util_1.log)("onEventHandler",sanitizedRequest),cfnRequest.ResourceProperties=cfnRequest.ResourceProperties||{};const onEventResult=await invokeUserFunction(consts.USER_ON_EVENT_FUNCTION_ARN_ENV,sanitizedRequest,cfnRequest.ResponseURL);onEventResult?.NoEcho?(0,util_1.log)("redacted onEvent returned:",cfnResponse.redactDataFromPayload(onEventResult)):(0,util_1.log)("onEvent returned:",onEventResult);const resourceEvent=createResponseEvent(cfnRequest,onEventResult);if(onEventResult?.NoEcho?(0,util_1.log)("readacted event:",cfnResponse.redactDataFromPayload(resourceEvent)):(0,util_1.log)("event:",resourceEvent),!process.env[consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV])return cfnResponse.submitResponse("SUCCESS",resourceEvent,{noEcho:resourceEvent.NoEcho});const waiter={stateMachineArn:(0,util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),name:resourceEvent.RequestId,input:JSON.stringify(resourceEvent)};(0,util_1.log)("starting waiter",{stateMachineArn:(0,util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),name:resourceEvent.RequestId}),await(0,outbound_1.startExecution)(waiter)}async function isComplete(event){const sanitizedRequest={...event,ResponseURL:"..."};event?.NoEcho?(0,util_1.log)("redacted isComplete request",cfnResponse.redactDataFromPayload(sanitizedRequest)):(0,util_1.log)("isComplete",sanitizedRequest);const isCompleteResult=await invokeUserFunction(consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV,sanitizedRequest,event.ResponseURL);if(event?.NoEcho?(0,util_1.log)("redacted user isComplete returned:",cfnResponse.redactDataFromPayload(isCompleteResult)):(0,util_1.log)("user isComplete returned:",isCompleteResult),!isCompleteResult.IsComplete)throw isCompleteResult.Data&&Object.keys(isCompleteResult.Data).length>0?new Error('"Data" is not allowed if "IsComplete" is "False"'):new cfnResponse.Retry(JSON.stringify(event));const response={...event,...isCompleteResult,Data:{...event.Data,...isCompleteResult.Data}};await cfnResponse.submitResponse("SUCCESS",response,{noEcho:event.NoEcho})}async function onTimeout(timeoutEvent){(0,util_1.log)("timeoutHandler",timeoutEvent);const isCompleteRequest=JSON.parse(JSON.parse(timeoutEvent.Cause).errorMessage);await cfnResponse.submitResponse("FAILED",isCompleteRequest,{reason:"Operation timed out"})}async function invokeUserFunction(functionArnEnv,sanitizedPayload,responseUrl){const functionArn=(0,util_1.getEnv)(functionArnEnv);(0,util_1.log)(`executing user function ${functionArn} with payload`,sanitizedPayload);const resp=await(0,outbound_1.invokeFunction)({FunctionName:functionArn,Payload:JSON.stringify({...sanitizedPayload,ResponseURL:responseUrl})});(0,util_1.log)("user function response:",resp,typeof resp);const jsonPayload=(0,util_1.parseJsonPayload)(resp.Payload);if(resp.FunctionError){(0,util_1.log)("user function threw an error:",resp.FunctionError);const errorMessage=jsonPayload.errorMessage||"error",arn=functionArn.split(":"),functionName=arn[arn.length-1],message=[errorMessage,"",`Logs: /aws/lambda/${functionName}`,""].join(` -`),e=new Error(message);throw jsonPayload.trace&&(e.stack=[message,...jsonPayload.trace.slice(1)].join(` -`)),e}return jsonPayload}function createResponseEvent(cfnRequest,onEventResult){onEventResult=onEventResult||{};const physicalResourceId=onEventResult.PhysicalResourceId||defaultPhysicalResourceId(cfnRequest);if(cfnRequest.RequestType==="Delete"&&physicalResourceId!==cfnRequest.PhysicalResourceId)throw new Error(`DELETE: cannot change the physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}" during deletion`);return cfnRequest.RequestType==="Update"&&physicalResourceId!==cfnRequest.PhysicalResourceId&&(0,util_1.log)(`UPDATE: changing physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}"`),{...cfnRequest,...onEventResult,PhysicalResourceId:physicalResourceId}}function defaultPhysicalResourceId(req){switch(req.RequestType){case"Create":return req.RequestId;case"Update":case"Delete":return req.PhysicalResourceId;default:throw new Error(`Invalid "RequestType" in request "${JSON.stringify(req)}"`)}}module.exports={[consts.FRAMEWORK_ON_EVENT_HANDLER_NAME]:cfnResponse.safeHandler(onEvent),[consts.FRAMEWORK_IS_COMPLETE_HANDLER_NAME]:cfnResponse.safeHandler(isComplete),[consts.FRAMEWORK_ON_TIMEOUT_HANDLER_NAME]:onTimeout}; diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/cdk.out b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/cdk.out index 1f0068d32..c6e612584 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/cdk.out +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"36.0.0"} \ No newline at end of file +{"version":"38.0.1"} \ No newline at end of file diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/integ.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/integ.json index 367f00910..bc64a64b3 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/integ.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "38.0.1", "testCases": { "opilam-apiFromAssetNewLambdaFunctions/Integ/DefaultTest": { "stacks": [ diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/manifest.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/manifest.json index c1c95f8ca..df4d62d3d 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/manifest.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "38.0.1", "artifacts": { "opilamapiFromAssetNewLambdaFunctionsIntegDefaultTestDeployAssert781D98B1.assets": { "type": "cdk:asset-manifest", @@ -16,6 +16,7 @@ "templateFile": "opilamapiFromAssetNewLambdaFunctionsIntegDefaultTestDeployAssert781D98B1.template.json", "terminationProtection": false, "validateOnSynth": false, + "notificationArns": [], "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", @@ -64,9 +65,10 @@ "templateFile": "opilam-apiFromAssetNewLambdaFunctions.template.json", "terminationProtection": false, "validateOnSynth": false, + "notificationArns": [], "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/f0b0c06be1cc4b538f2b0a53cec8774dd03b9390f8bacb5054fb41b455fc9ef3.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/1078a06460997393f4ab0948c3087da0656481e3e0f2940ad5f64a117c302127.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -100,10 +102,10 @@ "data": "OpenApiGatewayToLambdaMessagesHandlerApiFunction0E78C5307" } ], - "/opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/PermitAPIGInvocation": [ + "/opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/OpenApiGatewayToLambdaPermitAPIGInvocation": [ { "type": "aws:cdk:logicalId", - "data": "OpenApiGatewayToLambdaMessagesHandlerApiFunction0PermitAPIGInvocationB70BC520" + "data": "OpenApiGatewayToLambdaMessagesHandlerApiFunction0OpenApiGatewayToLambdaPermitAPIGInvocationC5ACBCDF" } ], "/opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/PhotosHandlerApiFunction1ServiceRole/Resource": [ @@ -124,10 +126,10 @@ "data": "OpenApiGatewayToLambdaPhotosHandlerApiFunction1C42C52E8" } ], - "/opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/PermitAPIGInvocation": [ + "/opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/OpenApiGatewayToLambdaPermitAPIGInvocation": [ { "type": "aws:cdk:logicalId", - "data": "OpenApiGatewayToLambdaPhotosHandlerApiFunction1PermitAPIGInvocationA20E40FB" + "data": "OpenApiGatewayToLambdaPhotosHandlerApiFunction1OpenApiGatewayToLambdaPermitAPIGInvocation5B0B1DC7" } ], "/opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/LambdaFunctionServiceRole/Resource": [ @@ -243,6 +245,24 @@ "type": "aws:cdk:logicalId", "data": "CheckBootstrapVersion" } + ], + "OpenApiGatewayToLambdaMessagesHandlerApiFunction0PermitAPIGInvocationB70BC520": [ + { + "type": "aws:cdk:logicalId", + "data": "OpenApiGatewayToLambdaMessagesHandlerApiFunction0PermitAPIGInvocationB70BC520", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "OpenApiGatewayToLambdaPhotosHandlerApiFunction1PermitAPIGInvocationA20E40FB": [ + { + "type": "aws:cdk:logicalId", + "data": "OpenApiGatewayToLambdaPhotosHandlerApiFunction1PermitAPIGInvocationA20E40FB", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } ] }, "displayName": "opilam-apiFromAssetNewLambdaFunctions" diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/opilam-apiFromAssetNewLambdaFunctions.assets.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/opilam-apiFromAssetNewLambdaFunctions.assets.json index a80cfb82e..0bbf0e67c 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/opilam-apiFromAssetNewLambdaFunctions.assets.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/opilam-apiFromAssetNewLambdaFunctions.assets.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "38.0.1", "files": { "c2b362b5f0d6d8f56ac2c011288aebd095499d839b130a932427f74232de2a32": { "source": { @@ -66,20 +66,20 @@ } } }, - "d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b": { + "4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e": { "source": { - "path": "asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b", + "path": "asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b.zip", + "objectKey": "4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "f0b0c06be1cc4b538f2b0a53cec8774dd03b9390f8bacb5054fb41b455fc9ef3": { + "1078a06460997393f4ab0948c3087da0656481e3e0f2940ad5f64a117c302127": { "source": { "path": "opilam-apiFromAssetNewLambdaFunctions.template.json", "packaging": "file" @@ -87,7 +87,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "f0b0c06be1cc4b538f2b0a53cec8774dd03b9390f8bacb5054fb41b455fc9ef3.json", + "objectKey": "1078a06460997393f4ab0948c3087da0656481e3e0f2940ad5f64a117c302127.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/opilam-apiFromAssetNewLambdaFunctions.template.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/opilam-apiFromAssetNewLambdaFunctions.template.json index 8f4f00198..f724f6d31 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/opilam-apiFromAssetNewLambdaFunctions.template.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/opilam-apiFromAssetNewLambdaFunctions.template.json @@ -146,7 +146,7 @@ } } }, - "OpenApiGatewayToLambdaMessagesHandlerApiFunction0PermitAPIGInvocationB70BC520": { + "OpenApiGatewayToLambdaMessagesHandlerApiFunction0OpenApiGatewayToLambdaPermitAPIGInvocationC5ACBCDF": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", @@ -328,7 +328,7 @@ } } }, - "OpenApiGatewayToLambdaPhotosHandlerApiFunction1PermitAPIGInvocationA20E40FB": { + "OpenApiGatewayToLambdaPhotosHandlerApiFunction1OpenApiGatewayToLambdaPermitAPIGInvocation5B0B1DC7": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", @@ -648,7 +648,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b.zip" + "S3Key": "4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e.zip" }, "Description": "AWS CDK resource provider framework - onEvent (opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/ApiTemplateWriterProvider)", "Environment": { diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/opilamapiFromAssetNewLambdaFunctionsIntegDefaultTestDeployAssert781D98B1.assets.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/opilamapiFromAssetNewLambdaFunctionsIntegDefaultTestDeployAssert781D98B1.assets.json index 362074285..833c3a761 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/opilamapiFromAssetNewLambdaFunctionsIntegDefaultTestDeployAssert781D98B1.assets.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/opilamapiFromAssetNewLambdaFunctionsIntegDefaultTestDeployAssert781D98B1.assets.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "38.0.1", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/tree.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/tree.json index 7da003a9e..dba1ce581 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/tree.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetNewLambdaFunctions.js.snapshot/tree.json @@ -17,7 +17,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/ApiDefinitionAsset/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -25,13 +25,13 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/ApiDefinitionAsset/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "OpenApiGatewayToLambda": { @@ -47,7 +47,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/MessagesHandlerApiFunction0ServiceRole/ImportMessagesHandlerApiFunction0ServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -110,7 +110,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -146,19 +146,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "MessagesHandlerApiFunction0": { @@ -174,7 +174,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -182,13 +182,13 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -223,12 +223,12 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.150.0" + "version": "2.160.0" } }, - "PermitAPIGInvocation": { - "id": "PermitAPIGInvocation", - "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/PermitAPIGInvocation", + "OpenApiGatewayToLambdaPermitAPIGInvocation": { + "id": "OpenApiGatewayToLambdaPermitAPIGInvocation", + "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/OpenApiGatewayToLambdaPermitAPIGInvocation", "attributes": { "aws:cdk:cloudformation:type": "AWS::Lambda::Permission", "aws:cdk:cloudformation:props": { @@ -268,13 +268,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnPermission", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.150.0" + "version": "2.160.0" } }, "PhotosHandlerApiFunction1ServiceRole": { @@ -286,7 +286,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/PhotosHandlerApiFunction1ServiceRole/ImportPhotosHandlerApiFunction1ServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -349,7 +349,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -385,19 +385,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "PhotosHandlerApiFunction1": { @@ -413,7 +413,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -421,13 +421,13 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -462,12 +462,12 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.150.0" + "version": "2.160.0" } }, - "PermitAPIGInvocation": { - "id": "PermitAPIGInvocation", - "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/PermitAPIGInvocation", + "OpenApiGatewayToLambdaPermitAPIGInvocation": { + "id": "OpenApiGatewayToLambdaPermitAPIGInvocation", + "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/OpenApiGatewayToLambdaPermitAPIGInvocation", "attributes": { "aws:cdk:cloudformation:type": "AWS::Lambda::Permission", "aws:cdk:cloudformation:props": { @@ -507,13 +507,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnPermission", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiOutputAsset": { @@ -525,7 +525,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/ApiOutputAsset/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -533,13 +533,13 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/ApiOutputAsset/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaFunctionServiceRole": { @@ -551,7 +551,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/LambdaFunctionServiceRole/ImportLambdaFunctionServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -614,7 +614,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -650,19 +650,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaFunction": { @@ -678,7 +678,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/LambdaFunction/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -686,13 +686,13 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/LambdaFunction/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -729,13 +729,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiTemplateWriterPolicy": { @@ -803,13 +803,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiTemplateWriterProvider": { @@ -829,7 +829,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/ApiTemplateWriterProvider/framework-onEvent/ServiceRole/ImportServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -868,7 +868,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -922,19 +922,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "Code": { @@ -946,7 +946,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/ApiTemplateWriterProvider/framework-onEvent/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -954,13 +954,13 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/ApiTemplateWriterProvider/framework-onEvent/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -973,7 +973,7 @@ "s3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "s3Key": "d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b.zip" + "s3Key": "4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e.zip" }, "description": "AWS CDK resource provider framework - onEvent (opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/ApiTemplateWriterProvider)", "environment": { @@ -1007,19 +1007,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.custom_resources.Provider", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiTemplateWriterCustomResource": { @@ -1031,13 +1031,13 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/ApiTemplateWriterCustomResource/Default", "constructInfo": { "fqn": "aws-cdk-lib.CfnResource", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.CustomResource", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiAccessLogGroup": { @@ -1053,13 +1053,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_logs.CfnLogGroup", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_logs.LogGroup", - "version": "2.150.0" + "version": "2.160.0" } }, "SpecRestApi": { @@ -1108,7 +1108,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnRestApi", - "version": "2.150.0" + "version": "2.160.0" } }, "Default": { @@ -1116,7 +1116,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/SpecRestApi/Default", "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.ResourceBase", - "version": "2.150.0" + "version": "2.160.0" } }, "Deployment": { @@ -1137,13 +1137,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnDeployment", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.Deployment", - "version": "2.150.0" + "version": "2.160.0" } }, "DeploymentStage.prod": { @@ -1185,13 +1185,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnStage", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.Stage", - "version": "2.150.0" + "version": "2.160.0" } }, "Endpoint": { @@ -1199,7 +1199,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/SpecRestApi/Endpoint", "constructInfo": { "fqn": "aws-cdk-lib.CfnOutput", - "version": "2.150.0" + "version": "2.160.0" } }, "UsagePlan": { @@ -1227,19 +1227,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnUsagePlan", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.UsagePlan", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.SpecRestApi", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaRestApiCloudWatchRole": { @@ -1251,7 +1251,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/OpenApiGatewayToLambda/LambdaRestApiCloudWatchRole/ImportLambdaRestApiCloudWatchRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -1318,13 +1318,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaRestApiAccount": { @@ -1343,13 +1343,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnAccount", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "@aws-solutions-constructs/aws-openapigateway-lambda.OpenApiGatewayToLambda", - "version": "2.63.0" + "version": "2.70.0" } }, "LatestNodeRuntimeMap": { @@ -1357,7 +1357,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/LatestNodeRuntimeMap", "constructInfo": { "fqn": "aws-cdk-lib.CfnMapping", - "version": "2.150.0" + "version": "2.160.0" } }, "Integ": { @@ -1385,7 +1385,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/Integ/DefaultTest/DeployAssert/BootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnParameter", - "version": "2.150.0" + "version": "2.160.0" } }, "CheckBootstrapVersion": { @@ -1393,25 +1393,25 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnRule", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.Stack", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", - "version": "2.150.0-alpha.0" + "version": "2.160.0-alpha.0" } } }, "constructInfo": { "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", - "version": "2.150.0-alpha.0" + "version": "2.160.0-alpha.0" } }, "BootstrapVersion": { @@ -1419,7 +1419,7 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/BootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnParameter", - "version": "2.150.0" + "version": "2.160.0" } }, "CheckBootstrapVersion": { @@ -1427,13 +1427,13 @@ "path": "opilam-apiFromAssetNewLambdaFunctions/CheckBootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnRule", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.Stack", - "version": "2.150.0" + "version": "2.160.0" } }, "Tree": { @@ -1447,7 +1447,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.App", - "version": "2.150.0" + "version": "2.160.0" } } } \ No newline at end of file diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/cfn-response.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/cfn-response.js similarity index 100% rename from source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/cfn-response.js rename to source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/cfn-response.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/consts.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/consts.js similarity index 100% rename from source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/consts.js rename to source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/consts.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/framework.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/framework.js new file mode 100644 index 000000000..952048e6f --- /dev/null +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/framework.js @@ -0,0 +1,3 @@ +"use strict";const cfnResponse=require("./cfn-response"),consts=require("./consts"),outbound_1=require("./outbound"),util_1=require("./util");async function onEvent(cfnRequest){const sanitizedRequest={...cfnRequest,ResponseURL:"..."};(0,util_1.log)("onEventHandler",sanitizedRequest),cfnRequest.ResourceProperties=cfnRequest.ResourceProperties||{};const onEventResult=await invokeUserFunction(consts.USER_ON_EVENT_FUNCTION_ARN_ENV,sanitizedRequest,cfnRequest.ResponseURL);onEventResult?.NoEcho?(0,util_1.log)("redacted onEvent returned:",cfnResponse.redactDataFromPayload(onEventResult)):(0,util_1.log)("onEvent returned:",onEventResult);const resourceEvent=createResponseEvent(cfnRequest,onEventResult),sanitizedEvent={...resourceEvent,ResponseURL:"..."};if(onEventResult?.NoEcho?(0,util_1.log)("readacted event:",cfnResponse.redactDataFromPayload(sanitizedEvent)):(0,util_1.log)("event:",sanitizedEvent),!process.env[consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV])return cfnResponse.submitResponse("SUCCESS",resourceEvent,{noEcho:resourceEvent.NoEcho});const waiter={stateMachineArn:(0,util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),name:resourceEvent.RequestId,input:JSON.stringify(resourceEvent)};(0,util_1.log)("starting waiter",{stateMachineArn:(0,util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),name:resourceEvent.RequestId}),await(0,outbound_1.startExecution)(waiter)}async function isComplete(event){const sanitizedRequest={...event,ResponseURL:"..."};event?.NoEcho?(0,util_1.log)("redacted isComplete request",cfnResponse.redactDataFromPayload(sanitizedRequest)):(0,util_1.log)("isComplete",sanitizedRequest);const isCompleteResult=await invokeUserFunction(consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV,sanitizedRequest,event.ResponseURL);if(event?.NoEcho?(0,util_1.log)("redacted user isComplete returned:",cfnResponse.redactDataFromPayload(isCompleteResult)):(0,util_1.log)("user isComplete returned:",isCompleteResult),!isCompleteResult.IsComplete)throw isCompleteResult.Data&&Object.keys(isCompleteResult.Data).length>0?new Error('"Data" is not allowed if "IsComplete" is "False"'):new cfnResponse.Retry(JSON.stringify(event));const response={...event,...isCompleteResult,Data:{...event.Data,...isCompleteResult.Data}};await cfnResponse.submitResponse("SUCCESS",response,{noEcho:event.NoEcho})}async function onTimeout(timeoutEvent){(0,util_1.log)("timeoutHandler",timeoutEvent);const isCompleteRequest=JSON.parse(JSON.parse(timeoutEvent.Cause).errorMessage);await cfnResponse.submitResponse("FAILED",isCompleteRequest,{reason:"Operation timed out"})}async function invokeUserFunction(functionArnEnv,sanitizedPayload,responseUrl){const functionArn=(0,util_1.getEnv)(functionArnEnv);(0,util_1.log)(`executing user function ${functionArn} with payload`,sanitizedPayload);const resp=await(0,outbound_1.invokeFunction)({FunctionName:functionArn,Payload:JSON.stringify({...sanitizedPayload,ResponseURL:responseUrl})});(0,util_1.log)("user function response:",resp,typeof resp);const jsonPayload=(0,util_1.parseJsonPayload)(resp.Payload);if(resp.FunctionError){(0,util_1.log)("user function threw an error:",resp.FunctionError);const errorMessage=jsonPayload.errorMessage||"error",arn=functionArn.split(":"),functionName=arn[arn.length-1],message=[errorMessage,"",`Logs: /aws/lambda/${functionName}`,""].join(` +`),e=new Error(message);throw jsonPayload.trace&&(e.stack=[message,...jsonPayload.trace.slice(1)].join(` +`)),e}return jsonPayload}function createResponseEvent(cfnRequest,onEventResult){onEventResult=onEventResult||{};const physicalResourceId=onEventResult.PhysicalResourceId||defaultPhysicalResourceId(cfnRequest);if(cfnRequest.RequestType==="Delete"&&physicalResourceId!==cfnRequest.PhysicalResourceId)throw new Error(`DELETE: cannot change the physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}" during deletion`);return cfnRequest.RequestType==="Update"&&physicalResourceId!==cfnRequest.PhysicalResourceId&&(0,util_1.log)(`UPDATE: changing physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}"`),{...cfnRequest,...onEventResult,PhysicalResourceId:physicalResourceId}}function defaultPhysicalResourceId(req){switch(req.RequestType){case"Create":return req.RequestId;case"Update":case"Delete":return req.PhysicalResourceId;default:throw new Error(`Invalid "RequestType" in request "${JSON.stringify(req)}"`)}}module.exports={[consts.FRAMEWORK_ON_EVENT_HANDLER_NAME]:cfnResponse.safeHandler(onEvent),[consts.FRAMEWORK_IS_COMPLETE_HANDLER_NAME]:cfnResponse.safeHandler(isComplete),[consts.FRAMEWORK_ON_TIMEOUT_HANDLER_NAME]:onTimeout}; diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/outbound.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/outbound.js similarity index 100% rename from source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/outbound.js rename to source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/outbound.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/util.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/util.js similarity index 100% rename from source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/util.js rename to source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e/util.js diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/framework.js b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/framework.js deleted file mode 100644 index 42ca4b146..000000000 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b/framework.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict";const cfnResponse=require("./cfn-response"),consts=require("./consts"),outbound_1=require("./outbound"),util_1=require("./util");async function onEvent(cfnRequest){const sanitizedRequest={...cfnRequest,ResponseURL:"..."};(0,util_1.log)("onEventHandler",sanitizedRequest),cfnRequest.ResourceProperties=cfnRequest.ResourceProperties||{};const onEventResult=await invokeUserFunction(consts.USER_ON_EVENT_FUNCTION_ARN_ENV,sanitizedRequest,cfnRequest.ResponseURL);onEventResult?.NoEcho?(0,util_1.log)("redacted onEvent returned:",cfnResponse.redactDataFromPayload(onEventResult)):(0,util_1.log)("onEvent returned:",onEventResult);const resourceEvent=createResponseEvent(cfnRequest,onEventResult);if(onEventResult?.NoEcho?(0,util_1.log)("readacted event:",cfnResponse.redactDataFromPayload(resourceEvent)):(0,util_1.log)("event:",resourceEvent),!process.env[consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV])return cfnResponse.submitResponse("SUCCESS",resourceEvent,{noEcho:resourceEvent.NoEcho});const waiter={stateMachineArn:(0,util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),name:resourceEvent.RequestId,input:JSON.stringify(resourceEvent)};(0,util_1.log)("starting waiter",{stateMachineArn:(0,util_1.getEnv)(consts.WAITER_STATE_MACHINE_ARN_ENV),name:resourceEvent.RequestId}),await(0,outbound_1.startExecution)(waiter)}async function isComplete(event){const sanitizedRequest={...event,ResponseURL:"..."};event?.NoEcho?(0,util_1.log)("redacted isComplete request",cfnResponse.redactDataFromPayload(sanitizedRequest)):(0,util_1.log)("isComplete",sanitizedRequest);const isCompleteResult=await invokeUserFunction(consts.USER_IS_COMPLETE_FUNCTION_ARN_ENV,sanitizedRequest,event.ResponseURL);if(event?.NoEcho?(0,util_1.log)("redacted user isComplete returned:",cfnResponse.redactDataFromPayload(isCompleteResult)):(0,util_1.log)("user isComplete returned:",isCompleteResult),!isCompleteResult.IsComplete)throw isCompleteResult.Data&&Object.keys(isCompleteResult.Data).length>0?new Error('"Data" is not allowed if "IsComplete" is "False"'):new cfnResponse.Retry(JSON.stringify(event));const response={...event,...isCompleteResult,Data:{...event.Data,...isCompleteResult.Data}};await cfnResponse.submitResponse("SUCCESS",response,{noEcho:event.NoEcho})}async function onTimeout(timeoutEvent){(0,util_1.log)("timeoutHandler",timeoutEvent);const isCompleteRequest=JSON.parse(JSON.parse(timeoutEvent.Cause).errorMessage);await cfnResponse.submitResponse("FAILED",isCompleteRequest,{reason:"Operation timed out"})}async function invokeUserFunction(functionArnEnv,sanitizedPayload,responseUrl){const functionArn=(0,util_1.getEnv)(functionArnEnv);(0,util_1.log)(`executing user function ${functionArn} with payload`,sanitizedPayload);const resp=await(0,outbound_1.invokeFunction)({FunctionName:functionArn,Payload:JSON.stringify({...sanitizedPayload,ResponseURL:responseUrl})});(0,util_1.log)("user function response:",resp,typeof resp);const jsonPayload=(0,util_1.parseJsonPayload)(resp.Payload);if(resp.FunctionError){(0,util_1.log)("user function threw an error:",resp.FunctionError);const errorMessage=jsonPayload.errorMessage||"error",arn=functionArn.split(":"),functionName=arn[arn.length-1],message=[errorMessage,"",`Logs: /aws/lambda/${functionName}`,""].join(` -`),e=new Error(message);throw jsonPayload.trace&&(e.stack=[message,...jsonPayload.trace.slice(1)].join(` -`)),e}return jsonPayload}function createResponseEvent(cfnRequest,onEventResult){onEventResult=onEventResult||{};const physicalResourceId=onEventResult.PhysicalResourceId||defaultPhysicalResourceId(cfnRequest);if(cfnRequest.RequestType==="Delete"&&physicalResourceId!==cfnRequest.PhysicalResourceId)throw new Error(`DELETE: cannot change the physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}" during deletion`);return cfnRequest.RequestType==="Update"&&physicalResourceId!==cfnRequest.PhysicalResourceId&&(0,util_1.log)(`UPDATE: changing physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${onEventResult.PhysicalResourceId}"`),{...cfnRequest,...onEventResult,PhysicalResourceId:physicalResourceId}}function defaultPhysicalResourceId(req){switch(req.RequestType){case"Create":return req.RequestId;case"Update":case"Delete":return req.PhysicalResourceId;default:throw new Error(`Invalid "RequestType" in request "${JSON.stringify(req)}"`)}}module.exports={[consts.FRAMEWORK_ON_EVENT_HANDLER_NAME]:cfnResponse.safeHandler(onEvent),[consts.FRAMEWORK_IS_COMPLETE_HANDLER_NAME]:cfnResponse.safeHandler(isComplete),[consts.FRAMEWORK_ON_TIMEOUT_HANDLER_NAME]:onTimeout}; diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/cdk.out b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/cdk.out index 1f0068d32..c6e612584 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/cdk.out +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"36.0.0"} \ No newline at end of file +{"version":"38.0.1"} \ No newline at end of file diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/integ.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/integ.json index 8d8749a64..f14d54b84 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/integ.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "38.0.1", "testCases": { "opilam-apiFromAssetWithCognitoAuth/Integ/DefaultTest": { "stacks": [ diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/manifest.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/manifest.json index 5c549d17a..4a8a62a48 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/manifest.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "38.0.1", "artifacts": { "opilamapiFromAssetWithCognitoAuthIntegDefaultTestDeployAssert6E95D513.assets": { "type": "cdk:asset-manifest", @@ -16,6 +16,7 @@ "templateFile": "opilamapiFromAssetWithCognitoAuthIntegDefaultTestDeployAssert6E95D513.template.json", "terminationProtection": false, "validateOnSynth": false, + "notificationArns": [], "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", @@ -64,9 +65,10 @@ "templateFile": "opilam-apiFromAssetWithCognitoAuth.template.json", "terminationProtection": false, "validateOnSynth": false, + "notificationArns": [], "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/78de035d8ee3297eab0e6faf9c8b0bab73d67f3f45ec8d462d6a60cc989f7cc4.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/7db2f002d05cde6467b5e54b472bbef083325ec596560e1b312b2635fb947c6d.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -100,10 +102,10 @@ "data": "OpenApiGatewayToLambdaMessagesHandlerApiFunction0E78C5307" } ], - "/opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/PermitAPIGInvocation": [ + "/opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/OpenApiGatewayToLambdaPermitAPIGInvocation": [ { "type": "aws:cdk:logicalId", - "data": "OpenApiGatewayToLambdaMessagesHandlerApiFunction0PermitAPIGInvocationB70BC520" + "data": "OpenApiGatewayToLambdaMessagesHandlerApiFunction0OpenApiGatewayToLambdaPermitAPIGInvocationC5ACBCDF" } ], "/opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/PhotosHandlerApiFunction1ServiceRole/Resource": [ @@ -124,10 +126,10 @@ "data": "OpenApiGatewayToLambdaPhotosHandlerApiFunction1C42C52E8" } ], - "/opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/PermitAPIGInvocation": [ + "/opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/OpenApiGatewayToLambdaPermitAPIGInvocation": [ { "type": "aws:cdk:logicalId", - "data": "OpenApiGatewayToLambdaPhotosHandlerApiFunction1PermitAPIGInvocationA20E40FB" + "data": "OpenApiGatewayToLambdaPhotosHandlerApiFunction1OpenApiGatewayToLambdaPermitAPIGInvocation5B0B1DC7" } ], "/opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/LambdaFunctionServiceRole/Resource": [ @@ -243,6 +245,24 @@ "type": "aws:cdk:logicalId", "data": "CheckBootstrapVersion" } + ], + "OpenApiGatewayToLambdaMessagesHandlerApiFunction0PermitAPIGInvocationB70BC520": [ + { + "type": "aws:cdk:logicalId", + "data": "OpenApiGatewayToLambdaMessagesHandlerApiFunction0PermitAPIGInvocationB70BC520", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "OpenApiGatewayToLambdaPhotosHandlerApiFunction1PermitAPIGInvocationA20E40FB": [ + { + "type": "aws:cdk:logicalId", + "data": "OpenApiGatewayToLambdaPhotosHandlerApiFunction1PermitAPIGInvocationA20E40FB", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } ] }, "displayName": "opilam-apiFromAssetWithCognitoAuth" diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/opilam-apiFromAssetWithCognitoAuth.assets.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/opilam-apiFromAssetWithCognitoAuth.assets.json index 04cc2d838..34d1f7bbc 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/opilam-apiFromAssetWithCognitoAuth.assets.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/opilam-apiFromAssetWithCognitoAuth.assets.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "38.0.1", "files": { "8c48f41891550d16b8b5de60b76d4f7a2b045576775bc16e9b461062c830b50d": { "source": { @@ -66,20 +66,20 @@ } } }, - "d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b": { + "4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e": { "source": { - "path": "asset.d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b", + "path": "asset.4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e", "packaging": "zip" }, "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b.zip", + "objectKey": "4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e.zip", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "78de035d8ee3297eab0e6faf9c8b0bab73d67f3f45ec8d462d6a60cc989f7cc4": { + "7db2f002d05cde6467b5e54b472bbef083325ec596560e1b312b2635fb947c6d": { "source": { "path": "opilam-apiFromAssetWithCognitoAuth.template.json", "packaging": "file" @@ -87,7 +87,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "78de035d8ee3297eab0e6faf9c8b0bab73d67f3f45ec8d462d6a60cc989f7cc4.json", + "objectKey": "7db2f002d05cde6467b5e54b472bbef083325ec596560e1b312b2635fb947c6d.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/opilam-apiFromAssetWithCognitoAuth.template.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/opilam-apiFromAssetWithCognitoAuth.template.json index 0c9696315..95a4cbe7a 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/opilam-apiFromAssetWithCognitoAuth.template.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/opilam-apiFromAssetWithCognitoAuth.template.json @@ -146,7 +146,7 @@ } } }, - "OpenApiGatewayToLambdaMessagesHandlerApiFunction0PermitAPIGInvocationB70BC520": { + "OpenApiGatewayToLambdaMessagesHandlerApiFunction0OpenApiGatewayToLambdaPermitAPIGInvocationC5ACBCDF": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", @@ -328,7 +328,7 @@ } } }, - "OpenApiGatewayToLambdaPhotosHandlerApiFunction1PermitAPIGInvocationA20E40FB": { + "OpenApiGatewayToLambdaPhotosHandlerApiFunction1OpenApiGatewayToLambdaPermitAPIGInvocation5B0B1DC7": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", @@ -648,7 +648,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b.zip" + "S3Key": "4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e.zip" }, "Description": "AWS CDK resource provider framework - onEvent (opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/ApiTemplateWriterProvider)", "Environment": { diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/opilamapiFromAssetWithCognitoAuthIntegDefaultTestDeployAssert6E95D513.assets.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/opilamapiFromAssetWithCognitoAuthIntegDefaultTestDeployAssert6E95D513.assets.json index aee347610..34ca7669e 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/opilamapiFromAssetWithCognitoAuthIntegDefaultTestDeployAssert6E95D513.assets.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/opilamapiFromAssetWithCognitoAuthIntegDefaultTestDeployAssert6E95D513.assets.json @@ -1,5 +1,5 @@ { - "version": "36.0.0", + "version": "38.0.1", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/tree.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/tree.json index b26810d43..cb7436266 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/tree.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromAssetWithCognitoAuth.js.snapshot/tree.json @@ -17,7 +17,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/ApiDefinitionAsset/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -25,13 +25,13 @@ "path": "opilam-apiFromAssetWithCognitoAuth/ApiDefinitionAsset/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "OpenApiGatewayToLambda": { @@ -47,7 +47,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/MessagesHandlerApiFunction0ServiceRole/ImportMessagesHandlerApiFunction0ServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -110,7 +110,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -146,19 +146,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "MessagesHandlerApiFunction0": { @@ -174,7 +174,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -182,13 +182,13 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -223,12 +223,12 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.150.0" + "version": "2.160.0" } }, - "PermitAPIGInvocation": { - "id": "PermitAPIGInvocation", - "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/PermitAPIGInvocation", + "OpenApiGatewayToLambdaPermitAPIGInvocation": { + "id": "OpenApiGatewayToLambdaPermitAPIGInvocation", + "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/OpenApiGatewayToLambdaPermitAPIGInvocation", "attributes": { "aws:cdk:cloudformation:type": "AWS::Lambda::Permission", "aws:cdk:cloudformation:props": { @@ -268,13 +268,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnPermission", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.150.0" + "version": "2.160.0" } }, "PhotosHandlerApiFunction1ServiceRole": { @@ -286,7 +286,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/PhotosHandlerApiFunction1ServiceRole/ImportPhotosHandlerApiFunction1ServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -349,7 +349,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -385,19 +385,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "PhotosHandlerApiFunction1": { @@ -413,7 +413,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -421,13 +421,13 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -462,12 +462,12 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.150.0" + "version": "2.160.0" } }, - "PermitAPIGInvocation": { - "id": "PermitAPIGInvocation", - "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/PermitAPIGInvocation", + "OpenApiGatewayToLambdaPermitAPIGInvocation": { + "id": "OpenApiGatewayToLambdaPermitAPIGInvocation", + "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/OpenApiGatewayToLambdaPermitAPIGInvocation", "attributes": { "aws:cdk:cloudformation:type": "AWS::Lambda::Permission", "aws:cdk:cloudformation:props": { @@ -507,13 +507,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnPermission", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiOutputAsset": { @@ -525,7 +525,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/ApiOutputAsset/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -533,13 +533,13 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/ApiOutputAsset/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaFunctionServiceRole": { @@ -551,7 +551,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/LambdaFunctionServiceRole/ImportLambdaFunctionServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -614,7 +614,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -650,19 +650,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaFunction": { @@ -678,7 +678,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/LambdaFunction/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -686,13 +686,13 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/LambdaFunction/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -729,13 +729,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiTemplateWriterPolicy": { @@ -803,13 +803,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiTemplateWriterProvider": { @@ -829,7 +829,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/ApiTemplateWriterProvider/framework-onEvent/ServiceRole/ImportServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -868,7 +868,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -922,19 +922,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "Code": { @@ -946,7 +946,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/ApiTemplateWriterProvider/framework-onEvent/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.150.0" + "version": "2.160.0" } }, "AssetBucket": { @@ -954,13 +954,13 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/ApiTemplateWriterProvider/framework-onEvent/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -973,7 +973,7 @@ "s3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "s3Key": "d9861ea7a45affd23e47a614acb2fddc6e45c20a891284c958187dafbf9ee36b.zip" + "s3Key": "4dc48ffba382f93077a1e6824599bbd4ceb6f91eb3d9442eca3b85bdb1a20b1e.zip" }, "description": "AWS CDK resource provider framework - onEvent (opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/ApiTemplateWriterProvider)", "environment": { @@ -1007,19 +1007,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.custom_resources.Provider", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiTemplateWriterCustomResource": { @@ -1031,13 +1031,13 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/ApiTemplateWriterCustomResource/Default", "constructInfo": { "fqn": "aws-cdk-lib.CfnResource", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.CustomResource", - "version": "2.150.0" + "version": "2.160.0" } }, "ApiAccessLogGroup": { @@ -1053,13 +1053,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_logs.CfnLogGroup", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_logs.LogGroup", - "version": "2.150.0" + "version": "2.160.0" } }, "SpecRestApi": { @@ -1108,7 +1108,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnRestApi", - "version": "2.150.0" + "version": "2.160.0" } }, "Default": { @@ -1116,7 +1116,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/SpecRestApi/Default", "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.ResourceBase", - "version": "2.150.0" + "version": "2.160.0" } }, "Deployment": { @@ -1137,13 +1137,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnDeployment", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.Deployment", - "version": "2.150.0" + "version": "2.160.0" } }, "DeploymentStage.prod": { @@ -1185,13 +1185,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnStage", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.Stage", - "version": "2.150.0" + "version": "2.160.0" } }, "Endpoint": { @@ -1199,7 +1199,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/SpecRestApi/Endpoint", "constructInfo": { "fqn": "aws-cdk-lib.CfnOutput", - "version": "2.150.0" + "version": "2.160.0" } }, "UsagePlan": { @@ -1227,19 +1227,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnUsagePlan", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.UsagePlan", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.SpecRestApi", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaRestApiCloudWatchRole": { @@ -1251,7 +1251,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/OpenApiGatewayToLambda/LambdaRestApiCloudWatchRole/ImportLambdaRestApiCloudWatchRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.150.0" + "version": "2.160.0" } }, "Resource": { @@ -1318,13 +1318,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.150.0" + "version": "2.160.0" } }, "LambdaRestApiAccount": { @@ -1343,13 +1343,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnAccount", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "@aws-solutions-constructs/aws-openapigateway-lambda.OpenApiGatewayToLambda", - "version": "2.63.0" + "version": "2.70.0" } }, "LatestNodeRuntimeMap": { @@ -1357,7 +1357,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/LatestNodeRuntimeMap", "constructInfo": { "fqn": "aws-cdk-lib.CfnMapping", - "version": "2.150.0" + "version": "2.160.0" } }, "Integ": { @@ -1385,7 +1385,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/Integ/DefaultTest/DeployAssert/BootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnParameter", - "version": "2.150.0" + "version": "2.160.0" } }, "CheckBootstrapVersion": { @@ -1393,25 +1393,25 @@ "path": "opilam-apiFromAssetWithCognitoAuth/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnRule", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.Stack", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", - "version": "2.150.0-alpha.0" + "version": "2.160.0-alpha.0" } } }, "constructInfo": { "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", - "version": "2.150.0-alpha.0" + "version": "2.160.0-alpha.0" } }, "BootstrapVersion": { @@ -1419,7 +1419,7 @@ "path": "opilam-apiFromAssetWithCognitoAuth/BootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnParameter", - "version": "2.150.0" + "version": "2.160.0" } }, "CheckBootstrapVersion": { @@ -1427,13 +1427,13 @@ "path": "opilam-apiFromAssetWithCognitoAuth/CheckBootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnRule", - "version": "2.150.0" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.Stack", - "version": "2.150.0" + "version": "2.160.0" } }, "Tree": { @@ -1447,7 +1447,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.App", - "version": "2.150.0" + "version": "2.160.0" } } } \ No newline at end of file diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/cdk.out b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/cdk.out index e033e8360..c6e612584 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/cdk.out +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"36.0.20"} \ No newline at end of file +{"version":"38.0.1"} \ No newline at end of file diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/integ.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/integ.json index 1817a76af..98af3fb95 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/integ.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "36.0.20", + "version": "38.0.1", "testCases": { "opilam-apiFromInlineDefinition/Integ/DefaultTest": { "stacks": [ diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/manifest.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/manifest.json index 79ac87f56..e5c794312 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/manifest.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "36.0.5", + "version": "38.0.1", "artifacts": { "opilamapiFromInlineDefinitionIntegDefaultTestDeployAssertCF0E111E.assets": { "type": "cdk:asset-manifest", @@ -16,6 +16,7 @@ "templateFile": "opilamapiFromInlineDefinitionIntegDefaultTestDeployAssertCF0E111E.template.json", "terminationProtection": false, "validateOnSynth": false, + "notificationArns": [], "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", @@ -64,9 +65,10 @@ "templateFile": "opilam-apiFromInlineDefinition.template.json", "terminationProtection": false, "validateOnSynth": false, + "notificationArns": [], "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/97d284396586d88e440dcc04bdaa6eda5c6fea4dd2ba30fc55c76f9af72c20b8.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/880b32e5861284ef598b70d50c80e9160c9d4de49a7897118a74e4994a1600cb.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -100,10 +102,10 @@ "data": "OpenApiGatewayToLambdaMessagesHandlerApiFunction0E78C5307" } ], - "/opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/PermitAPIGInvocation": [ + "/opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/OpenApiGatewayToLambdaPermitAPIGInvocation": [ { "type": "aws:cdk:logicalId", - "data": "OpenApiGatewayToLambdaMessagesHandlerApiFunction0PermitAPIGInvocationB70BC520" + "data": "OpenApiGatewayToLambdaMessagesHandlerApiFunction0OpenApiGatewayToLambdaPermitAPIGInvocationC5ACBCDF" } ], "/opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/PhotosHandlerApiFunction1ServiceRole/Resource": [ @@ -124,10 +126,10 @@ "data": "OpenApiGatewayToLambdaPhotosHandlerApiFunction1C42C52E8" } ], - "/opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/PermitAPIGInvocation": [ + "/opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/OpenApiGatewayToLambdaPermitAPIGInvocation": [ { "type": "aws:cdk:logicalId", - "data": "OpenApiGatewayToLambdaPhotosHandlerApiFunction1PermitAPIGInvocationA20E40FB" + "data": "OpenApiGatewayToLambdaPhotosHandlerApiFunction1OpenApiGatewayToLambdaPermitAPIGInvocation5B0B1DC7" } ], "/opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/ApiAccessLogGroup/Resource": [ @@ -189,6 +191,24 @@ "type": "aws:cdk:logicalId", "data": "CheckBootstrapVersion" } + ], + "OpenApiGatewayToLambdaMessagesHandlerApiFunction0PermitAPIGInvocationB70BC520": [ + { + "type": "aws:cdk:logicalId", + "data": "OpenApiGatewayToLambdaMessagesHandlerApiFunction0PermitAPIGInvocationB70BC520", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } + ], + "OpenApiGatewayToLambdaPhotosHandlerApiFunction1PermitAPIGInvocationA20E40FB": [ + { + "type": "aws:cdk:logicalId", + "data": "OpenApiGatewayToLambdaPhotosHandlerApiFunction1PermitAPIGInvocationA20E40FB", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } ] }, "displayName": "opilam-apiFromInlineDefinition" diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/opilam-apiFromInlineDefinition.assets.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/opilam-apiFromInlineDefinition.assets.json index 960504173..bd73b27c6 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/opilam-apiFromInlineDefinition.assets.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/opilam-apiFromInlineDefinition.assets.json @@ -1,5 +1,5 @@ { - "version": "36.0.20", + "version": "38.0.1", "files": { "8ce85d10dcd7b8e6d43ffd909827afc76802ad40fcd7908886ff825cbe8e15df": { "source": { @@ -27,7 +27,7 @@ } } }, - "97d284396586d88e440dcc04bdaa6eda5c6fea4dd2ba30fc55c76f9af72c20b8": { + "880b32e5861284ef598b70d50c80e9160c9d4de49a7897118a74e4994a1600cb": { "source": { "path": "opilam-apiFromInlineDefinition.template.json", "packaging": "file" @@ -35,7 +35,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "97d284396586d88e440dcc04bdaa6eda5c6fea4dd2ba30fc55c76f9af72c20b8.json", + "objectKey": "880b32e5861284ef598b70d50c80e9160c9d4de49a7897118a74e4994a1600cb.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/opilam-apiFromInlineDefinition.template.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/opilam-apiFromInlineDefinition.template.json index b8c350d41..17a49efbb 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/opilam-apiFromInlineDefinition.template.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/opilam-apiFromInlineDefinition.template.json @@ -146,7 +146,7 @@ } } }, - "OpenApiGatewayToLambdaMessagesHandlerApiFunction0PermitAPIGInvocationB70BC520": { + "OpenApiGatewayToLambdaMessagesHandlerApiFunction0OpenApiGatewayToLambdaPermitAPIGInvocationC5ACBCDF": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", @@ -328,7 +328,7 @@ } } }, - "OpenApiGatewayToLambdaPhotosHandlerApiFunction1PermitAPIGInvocationA20E40FB": { + "OpenApiGatewayToLambdaPhotosHandlerApiFunction1OpenApiGatewayToLambdaPermitAPIGInvocation5B0B1DC7": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/opilamapiFromInlineDefinitionIntegDefaultTestDeployAssertCF0E111E.assets.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/opilamapiFromInlineDefinitionIntegDefaultTestDeployAssertCF0E111E.assets.json index 5bb33cbe0..957b0326c 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/opilamapiFromInlineDefinitionIntegDefaultTestDeployAssertCF0E111E.assets.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/opilamapiFromInlineDefinitionIntegDefaultTestDeployAssertCF0E111E.assets.json @@ -1,5 +1,5 @@ { - "version": "36.0.20", + "version": "38.0.1", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/tree.json b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/tree.json index b8405f835..338b0ab6e 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/tree.json +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/integ.opilam-apiFromInlineDefinition.js.snapshot/tree.json @@ -21,7 +21,7 @@ "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/MessagesHandlerApiFunction0ServiceRole/ImportMessagesHandlerApiFunction0ServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.154.1" + "version": "2.160.0" } }, "Resource": { @@ -84,7 +84,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.154.1" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -120,19 +120,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.154.1" + "version": "2.160.0" } }, "MessagesHandlerApiFunction0": { @@ -148,7 +148,7 @@ "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.154.1" + "version": "2.160.0" } }, "AssetBucket": { @@ -156,13 +156,13 @@ "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.154.1" + "version": "2.160.0" } }, "Resource": { @@ -197,12 +197,12 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.154.1" + "version": "2.160.0" } }, - "PermitAPIGInvocation": { - "id": "PermitAPIGInvocation", - "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/PermitAPIGInvocation", + "OpenApiGatewayToLambdaPermitAPIGInvocation": { + "id": "OpenApiGatewayToLambdaPermitAPIGInvocation", + "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/MessagesHandlerApiFunction0/OpenApiGatewayToLambdaPermitAPIGInvocation", "attributes": { "aws:cdk:cloudformation:type": "AWS::Lambda::Permission", "aws:cdk:cloudformation:props": { @@ -242,13 +242,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnPermission", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.154.1" + "version": "2.160.0" } }, "PhotosHandlerApiFunction1ServiceRole": { @@ -260,7 +260,7 @@ "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/PhotosHandlerApiFunction1ServiceRole/ImportPhotosHandlerApiFunction1ServiceRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.154.1" + "version": "2.160.0" } }, "Resource": { @@ -323,7 +323,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.154.1" + "version": "2.160.0" } }, "DefaultPolicy": { @@ -359,19 +359,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.154.1" + "version": "2.160.0" } }, "PhotosHandlerApiFunction1": { @@ -387,7 +387,7 @@ "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/Code/Stage", "constructInfo": { "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.154.1" + "version": "2.160.0" } }, "AssetBucket": { @@ -395,13 +395,13 @@ "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/Code/AssetBucket", "constructInfo": { "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.154.1" + "version": "2.160.0" } }, "Resource": { @@ -436,12 +436,12 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", - "version": "2.154.1" + "version": "2.160.0" } }, - "PermitAPIGInvocation": { - "id": "PermitAPIGInvocation", - "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/PermitAPIGInvocation", + "OpenApiGatewayToLambdaPermitAPIGInvocation": { + "id": "OpenApiGatewayToLambdaPermitAPIGInvocation", + "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/PhotosHandlerApiFunction1/OpenApiGatewayToLambdaPermitAPIGInvocation", "attributes": { "aws:cdk:cloudformation:type": "AWS::Lambda::Permission", "aws:cdk:cloudformation:props": { @@ -481,13 +481,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.CfnPermission", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_lambda.Function", - "version": "2.154.1" + "version": "2.160.0" } }, "ApiAccessLogGroup": { @@ -503,13 +503,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_logs.CfnLogGroup", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_logs.LogGroup", - "version": "2.154.1" + "version": "2.160.0" } }, "SpecRestApi": { @@ -692,7 +692,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnRestApi", - "version": "2.154.1" + "version": "2.160.0" } }, "Default": { @@ -700,7 +700,7 @@ "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/SpecRestApi/Default", "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.ResourceBase", - "version": "2.154.1" + "version": "2.160.0" } }, "Deployment": { @@ -721,13 +721,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnDeployment", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.Deployment", - "version": "2.154.1" + "version": "2.160.0" } }, "DeploymentStage.prod": { @@ -769,13 +769,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnStage", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.Stage", - "version": "2.154.1" + "version": "2.160.0" } }, "Endpoint": { @@ -783,7 +783,7 @@ "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/SpecRestApi/Endpoint", "constructInfo": { "fqn": "aws-cdk-lib.CfnOutput", - "version": "2.154.1" + "version": "2.160.0" } }, "UsagePlan": { @@ -811,19 +811,19 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnUsagePlan", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.UsagePlan", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.SpecRestApi", - "version": "2.154.1" + "version": "2.160.0" } }, "LambdaRestApiCloudWatchRole": { @@ -835,7 +835,7 @@ "path": "opilam-apiFromInlineDefinition/OpenApiGatewayToLambda/LambdaRestApiCloudWatchRole/ImportLambdaRestApiCloudWatchRole", "constructInfo": { "fqn": "aws-cdk-lib.Resource", - "version": "2.154.1" + "version": "2.160.0" } }, "Resource": { @@ -902,13 +902,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.154.1" + "version": "2.160.0" } }, "LambdaRestApiAccount": { @@ -927,13 +927,13 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.aws_apigateway.CfnAccount", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "@aws-solutions-constructs/aws-openapigateway-lambda.OpenApiGatewayToLambda", - "version": "2.67.1" + "version": "2.70.0" } }, "Integ": { @@ -961,7 +961,7 @@ "path": "opilam-apiFromInlineDefinition/Integ/DefaultTest/DeployAssert/BootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnParameter", - "version": "2.154.1" + "version": "2.160.0" } }, "CheckBootstrapVersion": { @@ -969,25 +969,25 @@ "path": "opilam-apiFromInlineDefinition/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnRule", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.Stack", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", - "version": "2.154.1-alpha.0" + "version": "2.160.0-alpha.0" } } }, "constructInfo": { "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", - "version": "2.154.1-alpha.0" + "version": "2.160.0-alpha.0" } }, "BootstrapVersion": { @@ -995,7 +995,7 @@ "path": "opilam-apiFromInlineDefinition/BootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnParameter", - "version": "2.154.1" + "version": "2.160.0" } }, "CheckBootstrapVersion": { @@ -1003,13 +1003,13 @@ "path": "opilam-apiFromInlineDefinition/CheckBootstrapVersion", "constructInfo": { "fqn": "aws-cdk-lib.CfnRule", - "version": "2.154.1" + "version": "2.160.0" } } }, "constructInfo": { "fqn": "aws-cdk-lib.Stack", - "version": "2.154.1" + "version": "2.160.0" } }, "Tree": { @@ -1023,7 +1023,7 @@ }, "constructInfo": { "fqn": "aws-cdk-lib.App", - "version": "2.154.1" + "version": "2.160.0" } } } \ No newline at end of file diff --git a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/test.openapigateway-lambda.test.ts b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/test.openapigateway-lambda.test.ts index 5ec0592bb..05442521c 100644 --- a/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/test.openapigateway-lambda.test.ts +++ b/source/patterns/@aws-solutions-constructs/aws-openapigateway-lambda/test/test.openapigateway-lambda.test.ts @@ -708,3 +708,43 @@ test('ObtainApiDefinition uses custom properties', () => { } }); }); + +test('Shared lambda function works', () => { + const stack = new Stack(); + + const apiDefinitionAsset = new Asset(stack, 'OpenApiAsset', { + path: path.join(__dirname, 'openapi/apiDefinition.yaml') + }); + + const construct = new OpenApiGatewayToLambda(stack, 'test-apigateway-lambda', { + apiDefinitionAsset, + apiIntegrations: [ + { + id: 'MessagesHandler', + lambdaFunctionProps: { + runtime: defaults.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME, + handler: 'index.handler', + code: lambda.Code.fromAsset(`${__dirname}/messages-lambda`), + } + } + ] + }); + + const constructTwo = new OpenApiGatewayToLambda(stack, 'two-apigateway-lambda', { + apiDefinitionAsset, + apiIntegrations: [ + { + id: 'MessagesHandler', + existingLambdaObj: construct.apiLambdaFunctions[0].lambdaFunction + } + ] + }); + + expect(construct.apiGateway).toBeDefined(); + expect(construct.apiGatewayCloudWatchRole).toBeDefined(); + expect(construct.apiGatewayLogGroup).toBeDefined(); + expect(construct.apiLambdaFunctions.length).toEqual(1); + expect(construct.apiLambdaFunctions[0].id).toEqual('MessagesHandler'); + expect(construct.apiLambdaFunctions[0].lambdaFunction).toBeDefined(); + expect(construct.apiLambdaFunctions[0].lambdaFunction.functionArn).toEqual(constructTwo.apiLambdaFunctions[0].lambdaFunction.functionArn); +}); From 6a4b211e8f6c4ab5c6103f95bf6a108c4e51d622 Mon Sep 17 00:00:00 2001 From: biffgaut <78155736+biffgaut@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:07:15 -0400 Subject: [PATCH 5/7] chore(use-cases): update to aws sdk v3 (#1208) * Remove extra references * Upgrade to AWS SDK v3 * Shouldn't have saved this * Fix async issue * Fix additional errors * Remove extra newlines * Remove glue example * Update to v3 send command style --- .../aws-custom-glue-etl/.eslintignore | 8 - .../use_cases/aws-custom-glue-etl/.gitignore | 9 - .../use_cases/aws-custom-glue-etl/.npmignore | 6 - .../use_cases/aws-custom-glue-etl/README.md | 66 - .../aws-custom-glue-etl/architecture.png | Bin 41566 -> 0 bytes .../bin/aws-custom-glue-etl.ts | 21 - source/use_cases/aws-custom-glue-etl/cdk.json | 9 - .../aws-custom-glue-etl/etl/transform.py | 109 -- .../lib/aws-custom-glue-etl-stack.ts | 86 -- .../use_cases/aws-custom-glue-etl/metrics.png | Bin 336793 -> 0 bytes .../aws-custom-glue-etl/package.json | 52 - source/use_cases/aws-custom-glue-etl/run.png | Bin 208428 -> 0 bytes .../stream-producer/___init__.py | 0 .../stream-producer/generate_data.py | 122 -- .../stream-producer/requirements.txt | 2 - .../aws-custom-glue-etl.test.js.snap | 40 - .../test/aws-custom-glue-etl.test.ts | 27 - .../IntegTestGlueJob.assets.json | 32 - .../IntegTestGlueJob.template.json | 822 ------------ ...efaultTestDeployAssert49434261.assets.json | 19 - ...aultTestDeployAssert49434261.template.json | 36 - ...48d86a112fab19fd3c8079859ed1569aad0eeeb.py | 109 -- .../test/integ.gluejob.js.snapshot/integ.json | 12 - .../integ.gluejob.js.snapshot/manifest.json | 215 ---- .../test/integ.gluejob.js.snapshot/tree.json | 1138 ----------------- .../aws-custom-glue-etl/test/integ.gluejob.ts | 24 - .../aws-custom-glue-etl/tsconfig.json | 32 - .../kitchen-staff/complete-order/index.js | 9 +- .../kitchen-staff/get-open-orders/index.js | 9 +- .../lib/lambda/layer/db-access.js | 10 +- .../lambda/manager/archive-orders/index.js | 34 +- .../lambda/manager/calculate-tips/index.js | 28 +- .../lambda/manager/check-late-orders/index.js | 43 +- .../lambda/manager/close-out-service/index.js | 8 +- .../lib/lambda/manager/create-report/index.js | 8 +- .../lib/lambda/manager/get-report/index.js | 11 +- .../service-staff/create-order/index.js | 16 +- .../service-staff/create-order/package.json | 8 +- .../service-staff/process-payment/index.js | 9 +- 39 files changed, 107 insertions(+), 3082 deletions(-) delete mode 100644 source/use_cases/aws-custom-glue-etl/.eslintignore delete mode 100644 source/use_cases/aws-custom-glue-etl/.gitignore delete mode 100644 source/use_cases/aws-custom-glue-etl/.npmignore delete mode 100644 source/use_cases/aws-custom-glue-etl/README.md delete mode 100644 source/use_cases/aws-custom-glue-etl/architecture.png delete mode 100644 source/use_cases/aws-custom-glue-etl/bin/aws-custom-glue-etl.ts delete mode 100644 source/use_cases/aws-custom-glue-etl/cdk.json delete mode 100644 source/use_cases/aws-custom-glue-etl/etl/transform.py delete mode 100644 source/use_cases/aws-custom-glue-etl/lib/aws-custom-glue-etl-stack.ts delete mode 100644 source/use_cases/aws-custom-glue-etl/metrics.png delete mode 100644 source/use_cases/aws-custom-glue-etl/package.json delete mode 100644 source/use_cases/aws-custom-glue-etl/run.png delete mode 100644 source/use_cases/aws-custom-glue-etl/stream-producer/___init__.py delete mode 100644 source/use_cases/aws-custom-glue-etl/stream-producer/generate_data.py delete mode 100644 source/use_cases/aws-custom-glue-etl/stream-producer/requirements.txt delete mode 100644 source/use_cases/aws-custom-glue-etl/test/__snapshots__/aws-custom-glue-etl.test.js.snap delete mode 100644 source/use_cases/aws-custom-glue-etl/test/aws-custom-glue-etl.test.ts delete mode 100644 source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJob.assets.json delete mode 100644 source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJob.template.json delete mode 100644 source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJobIntegDefaultTestDeployAssert49434261.assets.json delete mode 100644 source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJobIntegDefaultTestDeployAssert49434261.template.json delete mode 100644 source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/asset.84f8d5b3b3970239322b59ef748d86a112fab19fd3c8079859ed1569aad0eeeb.py delete mode 100644 source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/integ.json delete mode 100644 source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/manifest.json delete mode 100644 source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/tree.json delete mode 100644 source/use_cases/aws-custom-glue-etl/test/integ.gluejob.ts delete mode 100644 source/use_cases/aws-custom-glue-etl/tsconfig.json diff --git a/source/use_cases/aws-custom-glue-etl/.eslintignore b/source/use_cases/aws-custom-glue-etl/.eslintignore deleted file mode 100644 index ca2d1cdc8..000000000 --- a/source/use_cases/aws-custom-glue-etl/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -lib/*.js -test/*.js -bin/*.js -*.d.ts -coverage -test/integ.*.js.snapshot/ -test/cdk-integ.out.integ.*.snapshot -cdk.out/**/*.js \ No newline at end of file diff --git a/source/use_cases/aws-custom-glue-etl/.gitignore b/source/use_cases/aws-custom-glue-etl/.gitignore deleted file mode 100644 index a71c7ac98..000000000 --- a/source/use_cases/aws-custom-glue-etl/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -*.js -!jest.config.js -*.d.ts -node_modules - -# CDK asset staging directory -.cdk.staging -cdk.out -coverage diff --git a/source/use_cases/aws-custom-glue-etl/.npmignore b/source/use_cases/aws-custom-glue-etl/.npmignore deleted file mode 100644 index c1d6d45dc..000000000 --- a/source/use_cases/aws-custom-glue-etl/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -*.ts -!*.d.ts - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/source/use_cases/aws-custom-glue-etl/README.md b/source/use_cases/aws-custom-glue-etl/README.md deleted file mode 100644 index 9ba0ab73f..000000000 --- a/source/use_cases/aws-custom-glue-etl/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# AWS Glue Custom ETL Job - -This use case implements an example using the Kinesis Data Streams Glue Job construct. - -This use case is designed to be built and deployed into your account from your local environment using the AWS CDK Toolkit (or CLI). For information on the toolkit and how to install and configure it, please see the [guide](https://docs.aws.amazon.com/cdk/latest/guide/cli.html). - -## Architecture - -The application architecture uses a custom ETL job defined in AWS Glue that takes in data from Amazon Kinesis Data Streams to -process and store it in the target datastore as defined by the ETL script (for this example an S3 bucket location). - -![Architecture Diagram](architecture.png) - -## Deployment steps - -Below are the steps to deploy the use case: - -``` -# Set the proper version numbers in the package.json file -../../../deployment/v2/align-version.sh - -# Install dependencies -npm install - -# Build the use case -npm run build - -# Deploy the use case -cdk deploy -``` - -Post deployment, this example will publish the name of the Kinesis Data Stream in the CloudFormation output. Use that name to produce sample data into this data stream using the generator code in the `stream-producer` folder. - -``` -# Change into `stream-producer` directory. -cd stream-producer - -# Install the projects base dependencies. -pip install -r requirements.txt -``` - -In the `generate_data.py` file, please update the AWS credential portion of the code and then run the following command from the CLI -``` -python3 generate_data.py --region --streamname -``` - -This will generate data into the Kinesis Data Stream. For this example the AWS Glue Job has to be manually triggered and stopped (either from the CLI or -the AWS management console). This is to make sure that you control the time for which you want to run the job and its corresponding cost. - -Command Line Interface -``` -aws glue start-job-run --job-name -``` - -AWS Management Console -1. Go on AWS Glue -2. Click `Jobs` under ETL on the left-side panel -3. Click on the name of the created job -4. Click `Run` on the upper-right corner to start the Glue Job -![Run GlueJob](run.png) - -Once triggered, the ETL transform in AWS Glue writes the data into an S3 bucket (the ARN is published in CloudFormation stack resources) and publishes logs in Amazon CloudWatch. You can also view the job metrics like below in AWS Glue Studio. - -![Glue CloudWatch Metrics](metrics.png) - -© Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. diff --git a/source/use_cases/aws-custom-glue-etl/architecture.png b/source/use_cases/aws-custom-glue-etl/architecture.png deleted file mode 100644 index bd7f5154d367f665e09f05103f9af3b70d1429d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41566 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

eEW-8z#M02V z>IwpDi+l(u;XuST76WiIV!P)Pba%qeZn*;?gxh#muJ`~PTmAp3?0jR|ETbs?V1|P_ zMdA`LR!}fzf3lcrYShTcDqAu_=vEwYbE}wzj2I?~YY40rDRWV12{SPqCN30MMmyR>&?&k`{N3Vb6Z^6K()WFz=Y7sS_ndn?(7_KY8ZN7x zI*`Ymxw#h>>r)qPNQRTnKZWc$mejPz=1Jw zv#EVlkZh60ZAS>EdYAVXjR(l~*MDOqr@v=oVmlh>Y_zLR9g$dx6x{rNGi<3M*x8h8 zGDJiG{ON6xk7o`&k(!#ojB}POZl?nRT55?fta&Y2ks(A#fkp}4Pgg=Rk@oG|^!8(l zJUi*qal1qJ5AW@@Bs+DKWDBKSFeA#j;NZ;6K;{(jn>L%R;P?I&J#DSw6u}!{9ld^6 zkCP+fqjP7@_|7)QC(Z_^rxREtKtpCm0~6J+pTr4-^)L0Cn}Wd-vIjX(uEhb-<}c8` zqL`!8<^M~PZj|M)qwhP}&XGDxci!5qfHuHLJbM?SpuM?yt&%`$>R3!uiV(^-Iwu}d z60i&Iu4#Zps(ui?$kPEDsT(H-+N}B8J14R>Y|ucQO$uhfny2Mn>+e0lnLsaUX==$&NoN-mkV= z#kyqPD;#U(7Wdc|PqC}3>)4m9SLQd@wmy^fbnCI2?$Zl;Q-~(Iz``|ays(3`vnhmA zasuny5z2mloAwnKdgQ87wv&N?2^Pt3@Yzls0Gm%8%6hQdXukGomvKd|7-nD=frXJ9Shej!&RDSh>6Q#~`uiI26*xZf%S+Bnv#VoN&8 zH}N(7IR9r$MtCGJdII=00_5DD!CilVKCG^x_P%DA{w2+hK>KjpA^>q z>rb-eM@jcp_?hBhW0_7rp9?(`@9D4P7Gj;C<1ylS=Sqg0_tBPKV^eYGb?kLY@kOlp zB)(dQ>76-z# zV2#F<+SajMfv?gQL!;T_w{8)b>%Aw&EcDZRDw%%=W62#%*J`_aKP_ANpJGlMzD zDIToW%l^57QH(!jWj{d5G`7!^7wL{ARqy=IL-cWjR&+F+uCIK&oaxx{=DO(h;PZ;l N_N|3^=L{uv{{R^Diw^(* diff --git a/source/use_cases/aws-custom-glue-etl/bin/aws-custom-glue-etl.ts b/source/use_cases/aws-custom-glue-etl/bin/aws-custom-glue-etl.ts deleted file mode 100644 index affde5651..000000000 --- a/source/use_cases/aws-custom-glue-etl/bin/aws-custom-glue-etl.ts +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env node - -/** - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES - * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions - * and limitations under the License. - */ - -import { App } from 'aws-cdk-lib'; -import 'source-map-support/register'; -import { AwsCustomGlueEtlStack } from '../lib/aws-custom-glue-etl-stack'; - -const app = new App(); -new AwsCustomGlueEtlStack(app, 'AwsCustomGlueEtlStack'); diff --git a/source/use_cases/aws-custom-glue-etl/cdk.json b/source/use_cases/aws-custom-glue-etl/cdk.json deleted file mode 100644 index b1d49c724..000000000 --- a/source/use_cases/aws-custom-glue-etl/cdk.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "app": "npx ts-node --prefer-ts-exts bin/aws-custom-glue-etl.ts", - "context": { - "aws-cdk:enableDiffNoFail": "true", - "@aws-cdk/core:stackRelativeExports": "true", - "@aws-cdk/aws-ecr-assets:dockerIgnoreSupport": true, - "@aws-cdk/aws-secretsmanager:parseOwnedSecretName": true - } -} diff --git a/source/use_cases/aws-custom-glue-etl/etl/transform.py b/source/use_cases/aws-custom-glue-etl/etl/transform.py deleted file mode 100644 index 345581dd9..000000000 --- a/source/use_cases/aws-custom-glue-etl/etl/transform.py +++ /dev/null @@ -1,109 +0,0 @@ -""" - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES - * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions - * and limitations under the License. -""" - -import base64 -import datetime -import sys - -import boto3 -from awsglue import DynamicFrame -from awsglue.context import GlueContext -from awsglue.job import Job -from awsglue.transforms import * -from awsglue.utils import getResolvedOptions -from pyspark.context import SparkContext -from pyspark.sql import DataFrame, Row -from pyspark.sql.functions import * -from pyspark.sql.types import * - -args = getResolvedOptions(sys.argv, ["JOB_NAME", "output_path", "database_name", "table_name"]) - -sc = SparkContext() -glueContext = GlueContext(sc) -spark = glueContext.spark_session -job = Job(glueContext) -job.init(args["JOB_NAME"], args) - -# S3 sink locations -output_path = args["output_path"] -databasename = args["database_name"] -tablename = args["table_name"] - -s3_target = output_path + "ventilator_metrics" -checkpoint_location = output_path + "cp/" -temp_path = output_path + "temp/" - - -def processBatch(data_frame, batchId): - now = datetime.datetime.now() - year = now.year - month = now.month - day = now.day - hour = now.hour - minute = now.minute - if data_frame.count() > 0: - dynamic_frame = DynamicFrame.fromDF(data_frame, glueContext, "from_data_frame") - apply_mapping = ApplyMapping.apply( - frame=dynamic_frame, - mappings=[ - ("ventilatorid", "long", "ventilatorid", "long"), - ("eventtime", "string", "eventtime", "timestamp"), - ("serialnumber", "string", "serialnumber", "string"), - ("pressurecontrol", "long", "pressurecontrol", "long"), - ("o2stats", "long", "o2stats", "long"), - ("minutevolume", "long", "minutevolume", "long"), - ("manufacturer", "string", "manufacturer", "string"), - ], - transformation_ctx="apply_mapping", - ) - - dynamic_frame.printSchema() - - # Write to S3 Sink - s3path = ( - s3_target - + "/ingest_year=" - + "{:0>4}".format(str(year)) - + "/ingest_month=" - + "{:0>2}".format(str(month)) - + "/ingest_day=" - + "{:0>2}".format(str(day)) - + "/ingest_hour=" - + "{:0>2}".format(str(hour)) - + "/" - ) - s3sink = glueContext.write_dynamic_frame.from_options( - frame=apply_mapping, - connection_type="s3", - connection_options={"path": s3path}, - format="parquet", - transformation_ctx="s3sink", - ) - - -# Read from Kinesis Data Stream -sourceData = glueContext.create_data_frame.from_catalog( - database=databasename, - table_name=tablename, - transformation_ctx="datasource0", - additional_options={"startingPosition": "TRIM_HORIZON", "inferSchema": "true"}, -) - -sourceData.printSchema() - -glueContext.forEachBatch( - frame=sourceData, - batch_function=processBatch, - options={"windowSize": "100 seconds", "checkpointLocation": checkpoint_location}, -) -job.commit() diff --git a/source/use_cases/aws-custom-glue-etl/lib/aws-custom-glue-etl-stack.ts b/source/use_cases/aws-custom-glue-etl/lib/aws-custom-glue-etl-stack.ts deleted file mode 100644 index 56ec2d68d..000000000 --- a/source/use_cases/aws-custom-glue-etl/lib/aws-custom-glue-etl-stack.ts +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES - * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions - * and limitations under the License. - */ - -// Imports -import * as glue from 'aws-cdk-lib/aws-glue'; -import * as s3assets from 'aws-cdk-lib/aws-s3-assets'; -import { Construct } from 'constructs'; -import { CfnOutput, Stack, StackProps } from 'aws-cdk-lib'; -import { KinesisstreamsToGluejob } from '@aws-solutions-constructs/aws-kinesisstreams-gluejob'; - -export class AwsCustomGlueEtlStack extends Stack { - constructor(scope: Construct, id: string, props?: StackProps) { - super(scope, id, props); - - const fieldSchema: glue.CfnTable.ColumnProperty [] = [{ - "name": "ventilatorid", - "type": "int", - "comment": "" - }, - { - "name": "eventtime", - "type": "string", - "comment": "" - }, - { - "name": "serialnumber", - "type": "string", - "comment": "" - }, - { - "name": "pressurecontrol", - "type": "int", - "comment": "" - }, - { - "name": "o2stats", - "type": "int", - "comment": "" - }, - { - "name": "minutevolume", - "type": "int", - "comment": "" - }, - { - "name": "manufacturer", - "type": "string", - "comment": "" - }]; - - const customEtlJob = new KinesisstreamsToGluejob(this, 'CustomETL', { - glueJobProps: { - command: { - name: 'gluestreaming', - pythonVersion: '3' - } - }, - fieldSchema: fieldSchema, - etlCodeAsset: new s3assets.Asset(this, 'ScriptLocation', { - path: `${__dirname}/../etl/transform.py` - }) - }); - - new CfnOutput(this, 'KinesisStreamName', { - value: customEtlJob.kinesisStream.streamName - }); - - new CfnOutput(this, 'GlueJob', { - value: customEtlJob.glueJob.ref - }); - - new CfnOutput(this, 'JobRole', { - value: customEtlJob.glueJobRole.roleArn - }); - } -} diff --git a/source/use_cases/aws-custom-glue-etl/metrics.png b/source/use_cases/aws-custom-glue-etl/metrics.png deleted file mode 100644 index 1718c810783e4514efe2309b71125f75140587d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336793 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 z 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�N;L7)C-CuSpS|9S%*muG;r86QGTUp_y(K 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⪻OBryEEedsE2g^Qa`GJ0IKRA)xvH&7i!_3e0;e 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Ð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 S#vgA2f2VbgPLycd-}x7{O0up1 diff --git a/source/use_cases/aws-custom-glue-etl/stream-producer/___init__.py b/source/use_cases/aws-custom-glue-etl/stream-producer/___init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/source/use_cases/aws-custom-glue-etl/stream-producer/generate_data.py b/source/use_cases/aws-custom-glue-etl/stream-producer/generate_data.py deleted file mode 100644 index 809573875..000000000 --- a/source/use_cases/aws-custom-glue-etl/stream-producer/generate_data.py +++ /dev/null @@ -1,122 +0,0 @@ -""" - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES - * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions - * and limitations under the License. - * -""" - -import argparse -import datetime as dt -import io -import json -import os -import random -import sys - -import boto3 -from faker import * - - -# Create a client with aws service and region -def create_client(service, region): - return boto3.client(service, region_name=region) - - -class RecordGenerator(object): - """ - A class used to generate ventilator data used as input for Glue Streaming ETL. - """ - - def __init__(self): - self.ventilatorid = 0 - self.eventtime = None - self.serialnumber = "" - self.pressurecontrol = 0 - self.o2stats = 0 - self.minutevolume = 0 - self.manufacturer = None - - def get_ventilator_record(self, fake): - """ - Generates fake ventilator metrics - """ - record = { - "ventilatorid": fake.pyint(min_value=1, max_value=50), - "eventtime": fake.date_time_between(start_date="-10m", end_date="now").isoformat(), - "serialnumber": fake.uuid4(), - "pressurecontrol": fake.pyint(min_value=3, max_value=40), - "o2stats": fake.pyint(min_value=90, max_value=100), - "minutevolume": fake.pyint(min_value=2, max_value=10), - "manufacturer": random.choice(["3M", "GE", "Vyaire", "Getinge"]), - } - data = json.dumps(record) - return {"Data": bytes(data, "utf-8"), "PartitionKey": "partition_key"} - - def get_ventilator_records(self, rate, fake): - return [self.get_ventilator_record(fake) for _ in range(rate)] - - def dumps_lines(objs): - for obj in objs: - yield json.dumps(obj, separators=(",", ":")) + "\n" - - -# main function -def main(): - - parser = argparse.ArgumentParser(description="Faker based streaming data generator") - - parser.add_argument( - "--streamname", action="store", dest="stream_name", help="Provide Kinesis Data Stream name to stream data" - ) - parser.add_argument("--region", action="store", dest="region", default="us-east-1") - - args = parser.parse_args() - - # print (args) - # Make sure to set credentials here or use profile_name. Also make sure that the user role for which credentials - # are set has write permissions to the Kinesis Data Streams - # session = boto3.Session( - # aws_access_key_id="FAKE_ID_UPDATE_ACCESS_KEY_ID", - # aws_secret_access_key="FAKE_KEY_UPDATE_ACCESS_KEY", - # aws_session_token="FAKE_TOKEN_UPDATE_SESSION_TOKEN", - # ) - - # OR - - session = boto3.Session(profile_name="default") - - try: - # Initialize Faker library - fake = Faker() - - # Kinesis settings - kinesis_client = session.client("kinesis", args.region) - - # Rate at which records are generated - rate = 500 - generator = RecordGenerator() - - # Generates ventilator data - while True: - fake_ventilator_records = generator.get_ventilator_records(rate, fake) - print(fake_ventilator_records) - kinesis_client.put_records(StreamName=args.stream_name, Records=fake_ventilator_records) - # fakeIO = StringIO() - # fakeIO.write(str(''.join(dumps_lines(fake_ventilator_records)))) - # fakeIO.close() - - except: - print("Error:", sys.exc_info()[0]) - raise - - -if __name__ == "__main__": - # run main - main() diff --git a/source/use_cases/aws-custom-glue-etl/stream-producer/requirements.txt b/source/use_cases/aws-custom-glue-etl/stream-producer/requirements.txt deleted file mode 100644 index 856a458e5..000000000 --- a/source/use_cases/aws-custom-glue-etl/stream-producer/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -faker==5.0.1 -boto3 \ No newline at end of file diff --git a/source/use_cases/aws-custom-glue-etl/test/__snapshots__/aws-custom-glue-etl.test.js.snap b/source/use_cases/aws-custom-glue-etl/test/__snapshots__/aws-custom-glue-etl.test.js.snap deleted file mode 100644 index 2f4bee777..000000000 --- a/source/use_cases/aws-custom-glue-etl/test/__snapshots__/aws-custom-glue-etl.test.js.snap +++ /dev/null @@ -1,40 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`should match snapshot 1`] = ` -Object { - "Parameters": Object { - "BootstrapVersion": Object { - "Default": "/cdk-bootstrap/hnb659fds/version", - "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]", - "Type": "AWS::SSM::Parameter::Value", - }, - }, - "Rules": Object { - "CheckBootstrapVersion": Object { - "Assertions": Array [ - Object { - "Assert": Object { - "Fn::Not": Array [ - Object { - "Fn::Contains": Array [ - Array [ - "1", - "2", - "3", - "4", - "5", - ], - Object { - "Ref": "BootstrapVersion", - }, - ], - }, - ], - }, - "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.", - }, - ], - }, - }, -} -`; diff --git a/source/use_cases/aws-custom-glue-etl/test/aws-custom-glue-etl.test.ts b/source/use_cases/aws-custom-glue-etl/test/aws-custom-glue-etl.test.ts deleted file mode 100644 index b28197c60..000000000 --- a/source/use_cases/aws-custom-glue-etl/test/aws-custom-glue-etl.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES - * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions - * and limitations under the License. - */ - -import { App, Stack } from 'aws-cdk-lib'; -import { AwsCustomGlueEtlStack } from '../lib/aws-custom-glue-etl-stack'; -import { Template } from 'aws-cdk-lib/assertions'; - -test('should match snapshot', () => { - const app = new App(); - const stack = new Stack(app); - - new AwsCustomGlueEtlStack(stack, 'testStack'); - const template = Template.fromStack(stack); - - expect(template).toMatchSnapshot(); -}); - diff --git a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJob.assets.json b/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJob.assets.json deleted file mode 100644 index 320662272..000000000 --- a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJob.assets.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "version": "36.0.0", - "files": { - "84f8d5b3b3970239322b59ef748d86a112fab19fd3c8079859ed1569aad0eeeb": { - "source": { - "path": "asset.84f8d5b3b3970239322b59ef748d86a112fab19fd3c8079859ed1569aad0eeeb.py", - "packaging": "file" - }, - "destinations": { - "current_account-current_region": { - "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "84f8d5b3b3970239322b59ef748d86a112fab19fd3c8079859ed1569aad0eeeb.py", - "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" - } - } - }, - "f06dec671e2247660b421f7c66dcf0191b573e715d33b978c720e69361586132": { - "source": { - "path": "IntegTestGlueJob.template.json", - "packaging": "file" - }, - "destinations": { - "current_account-current_region": { - "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "f06dec671e2247660b421f7c66dcf0191b573e715d33b978c720e69361586132.json", - "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" - } - } - } - }, - "dockerImages": {} -} \ No newline at end of file diff --git a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJob.template.json b/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJob.template.json deleted file mode 100644 index 2e06e6bd7..000000000 --- a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJob.template.json +++ /dev/null @@ -1,822 +0,0 @@ -{ - "Description": "Integration Test for sample application that uses aws-kineisstream-glue-job construct", - "Resources": { - "CustomETLKinesisStreamB4F1869F": { - "Type": "AWS::Kinesis::Stream", - "Properties": { - "RetentionPeriodHours": 24, - "ShardCount": 1, - "StreamEncryption": { - "EncryptionType": "KMS", - "KeyId": "alias/aws/kinesis" - } - } - }, - "CustomETLGlueSecurityConfigDFE12B1C": { - "Type": "AWS::Glue::SecurityConfiguration", - "Properties": { - "EncryptionConfiguration": { - "JobBookmarksEncryption": { - "JobBookmarksEncryptionMode": "CSE-KMS", - "KmsKeyArn": { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":kms:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":alias/aws/glue" - ] - ] - } - }, - "S3Encryptions": [ - { - "S3EncryptionMode": "SSE-S3" - } - ] - }, - "Name": { - "Fn::Join": [ - "", - [ - "ETLJobSecurityConfig", - { - "Ref": "AWS::StackId" - } - ] - ] - } - } - }, - "CustomETLLogPolicyA74138E8": { - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyDocument": { - "Statement": [ - { - "Action": [ - "logs:CreateLogGroup", - "logs:CreateLogStream", - "logs:PutLogEvents" - ], - "Effect": "Allow", - "Resource": { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":logs:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":log-group:/aws-glue/*" - ] - ] - } - } - ], - "Version": "2012-10-17" - }, - "PolicyName": "CustomETLLogPolicyA74138E8", - "Roles": [ - { - "Ref": "CustomETLJobRole53A1671F" - } - ] - } - }, - "CustomETLJobRole53A1671F": { - "Type": "AWS::IAM::Role", - "Properties": { - "AssumeRolePolicyDocument": { - "Statement": [ - { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": { - "Service": "glue.amazonaws.com" - } - } - ], - "Version": "2012-10-17" - }, - "Description": "Service role that Glue custom ETL jobs will assume for execution" - } - }, - "CustomETLJobRoleDefaultPolicy564ADEA9": { - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyDocument": { - "Statement": [ - { - "Action": [ - "s3:Abort*", - "s3:DeleteObject*", - "s3:GetBucket*", - "s3:GetObject*", - "s3:List*", - "s3:PutObject", - "s3:PutObjectLegalHold", - "s3:PutObjectRetention", - "s3:PutObjectTagging", - "s3:PutObjectVersionTagging" - ], - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "CustomETLS3Bucket3EE58725", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "CustomETLS3Bucket3EE58725", - "Arn" - ] - }, - "/*" - ] - ] - } - ] - }, - { - "Action": [ - "s3:GetBucket*", - "s3:GetObject*", - "s3:List*" - ], - "Effect": "Allow", - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":s3:::", - { - "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" - }, - "/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":s3:::", - { - "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" - } - ] - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "PolicyName": "CustomETLJobRoleDefaultPolicy564ADEA9", - "Roles": [ - { - "Ref": "CustomETLJobRole53A1671F" - } - ] - } - }, - "CustomETLS3LoggingBucketBBDD45CB": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "PublicAccessBlockConfiguration": { - "BlockPublicAcls": true, - "BlockPublicPolicy": true, - "IgnorePublicAcls": true, - "RestrictPublicBuckets": true - }, - "VersioningConfiguration": { - "Status": "Enabled" - } - }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain", - "Metadata": { - "cfn_nag": { - "rules_to_suppress": [ - { - "id": "W35", - "reason": "This S3 bucket is used as the access logging bucket for another bucket" - } - ] - } - } - }, - "CustomETLS3LoggingBucketPolicy15C78253": { - "Type": "AWS::S3::BucketPolicy", - "Properties": { - "Bucket": { - "Ref": "CustomETLS3LoggingBucketBBDD45CB" - }, - "PolicyDocument": { - "Statement": [ - { - "Action": "s3:*", - "Condition": { - "Bool": { - "aws:SecureTransport": "false" - } - }, - "Effect": "Deny", - "Principal": { - "AWS": "*" - }, - "Resource": [ - { - "Fn::GetAtt": [ - "CustomETLS3LoggingBucketBBDD45CB", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "CustomETLS3LoggingBucketBBDD45CB", - "Arn" - ] - }, - "/*" - ] - ] - } - ] - }, - { - "Action": "s3:PutObject", - "Condition": { - "ArnLike": { - "aws:SourceArn": { - "Fn::GetAtt": [ - "CustomETLS3Bucket3EE58725", - "Arn" - ] - } - }, - "StringEquals": { - "aws:SourceAccount": { - "Ref": "AWS::AccountId" - } - } - }, - "Effect": "Allow", - "Principal": { - "Service": "logging.s3.amazonaws.com" - }, - "Resource": { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "CustomETLS3LoggingBucketBBDD45CB", - "Arn" - ] - }, - "/*" - ] - ] - } - } - ], - "Version": "2012-10-17" - } - } - }, - "CustomETLS3Bucket3EE58725": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "LifecycleConfiguration": { - "Rules": [ - { - "NoncurrentVersionTransitions": [ - { - "StorageClass": "GLACIER", - "TransitionInDays": 90 - } - ], - "Status": "Enabled" - } - ] - }, - "LoggingConfiguration": { - "DestinationBucketName": { - "Ref": "CustomETLS3LoggingBucketBBDD45CB" - } - }, - "PublicAccessBlockConfiguration": { - "BlockPublicAcls": true, - "BlockPublicPolicy": true, - "IgnorePublicAcls": true, - "RestrictPublicBuckets": true - }, - "VersioningConfiguration": { - "Status": "Enabled" - } - }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain" - }, - "CustomETLS3BucketPolicy20FB337A": { - "Type": "AWS::S3::BucketPolicy", - "Properties": { - "Bucket": { - "Ref": "CustomETLS3Bucket3EE58725" - }, - "PolicyDocument": { - "Statement": [ - { - "Action": "s3:*", - "Condition": { - "Bool": { - "aws:SecureTransport": "false" - } - }, - "Effect": "Deny", - "Principal": { - "AWS": "*" - }, - "Resource": [ - { - "Fn::GetAtt": [ - "CustomETLS3Bucket3EE58725", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "CustomETLS3Bucket3EE58725", - "Arn" - ] - }, - "/*" - ] - ] - } - ] - } - ], - "Version": "2012-10-17" - } - } - }, - "CustomETLKinesisETLJob04F57BEF": { - "Type": "AWS::Glue::Job", - "Properties": { - "Command": { - "Name": "gluestreaming", - "PythonVersion": "3", - "ScriptLocation": { - "Fn::Sub": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/84f8d5b3b3970239322b59ef748d86a112fab19fd3c8079859ed1569aad0eeeb.py" - } - }, - "DefaultArguments": { - "--enable-metrics": true, - "--enable-continuous-cloudwatch-log": true, - "--database_name": { - "Ref": "GlueDatabase" - }, - "--table_name": { - "Ref": "GlueTable" - }, - "--output_path": { - "Fn::Join": [ - "", - [ - "s3a://", - { - "Ref": "CustomETLS3Bucket3EE58725" - }, - "/output/" - ] - ] - } - }, - "GlueVersion": "2.0", - "NumberOfWorkers": 2, - "Role": { - "Fn::GetAtt": [ - "CustomETLJobRole53A1671F", - "Arn" - ] - }, - "SecurityConfiguration": { - "Fn::Join": [ - "", - [ - "ETLJobSecurityConfig", - { - "Ref": "AWS::StackId" - } - ] - ] - }, - "WorkerType": "G.1X" - } - }, - "CustomETLKinesisStreamGetRecordsIteratorAgeAlarmCD7F4E34": { - "Type": "AWS::CloudWatch::Alarm", - "Properties": { - "AlarmDescription": "Consumer Record Processing Falling Behind, there is risk for data loss due to record expiration.", - "ComparisonOperator": "GreaterThanOrEqualToThreshold", - "EvaluationPeriods": 1, - "MetricName": "GetRecords.IteratorAgeMilliseconds", - "Namespace": "AWS/Kinesis", - "Period": 300, - "Statistic": "Maximum", - "Threshold": 43200000 - } - }, - "CustomETLKinesisStreamReadProvisionedThroughputExceededAlarm6AB32664": { - "Type": "AWS::CloudWatch::Alarm", - "Properties": { - "AlarmDescription": "Consumer Application is Reading at a Slower Rate Than Expected.", - "ComparisonOperator": "GreaterThanThreshold", - "EvaluationPeriods": 1, - "MetricName": "ReadProvisionedThroughputExceeded", - "Namespace": "AWS/Kinesis", - "Period": 300, - "Statistic": "Average", - "Threshold": 0 - } - }, - "GlueDatabase": { - "Type": "AWS::Glue::Database", - "Properties": { - "CatalogId": { - "Ref": "AWS::AccountId" - }, - "DatabaseInput": { - "Description": "An AWS Glue database generated by AWS Solutions Construct" - } - } - }, - "GlueTable": { - "Type": "AWS::Glue::Table", - "Properties": { - "CatalogId": { - "Ref": "AWS::AccountId" - }, - "DatabaseName": { - "Ref": "GlueDatabase" - }, - "TableInput": { - "Parameters": { - "classification": "json" - }, - "StorageDescriptor": { - "Columns": [ - { - "Comment": "", - "Name": "ventilatorid", - "Type": "int" - }, - { - "Comment": "", - "Name": "eventtime", - "Type": "string" - }, - { - "Comment": "", - "Name": "serialnumber", - "Type": "string" - }, - { - "Comment": "", - "Name": "pressurecontrol", - "Type": "int" - }, - { - "Comment": "", - "Name": "o2stats", - "Type": "int" - }, - { - "Comment": "", - "Name": "minutevolume", - "Type": "int" - }, - { - "Comment": "", - "Name": "manufacturer", - "Type": "string" - } - ], - "Compressed": false, - "InputFormat": "org.apache.hadoop.mapred.TextInputFormat", - "Location": { - "Ref": "CustomETLKinesisStreamB4F1869F" - }, - "NumberOfBuckets": -1, - "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", - "Parameters": { - "endpointUrl": { - "Fn::Join": [ - "", - [ - "https://kinesis.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com" - ] - ] - }, - "streamName": { - "Ref": "CustomETLKinesisStreamB4F1869F" - }, - "typeOfData": "kinesis" - }, - "SerdeInfo": { - "Parameters": { - "paths": "ventilatorid,eventtime,serialnumber,pressurecontrol,o2stats,minutevolume,manufacturer" - }, - "SerializationLibrary": "org.openx.data.jsonserde.JsonSerDe" - } - }, - "TableType": "EXTERNAL_TABLE" - } - } - }, - "CustomETLGlueJobPolicy0AE5B5CB": { - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyDocument": { - "Statement": [ - { - "Action": "glue:GetJob", - "Effect": "Allow", - "Resource": { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":glue:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":job/", - { - "Ref": "CustomETLKinesisETLJob04F57BEF" - } - ] - ] - } - }, - { - "Action": "glue:GetSecurityConfiguration", - "Effect": "Allow", - "Resource": "*" - }, - { - "Action": "glue:GetTable", - "Effect": "Allow", - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":glue:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":catalog" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":glue:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":database/", - { - "Ref": "GlueDatabase" - } - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":glue:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":table/", - { - "Ref": "GlueDatabase" - }, - "/", - { - "Ref": "GlueTable" - } - ] - ] - } - ] - }, - { - "Action": "cloudwatch:PutMetricData", - "Condition": { - "StringEquals": { - "cloudwatch:namespace": "Glue" - }, - "Bool": { - "aws:SecureTransport": "true" - } - }, - "Effect": "Allow", - "Resource": "*" - }, - { - "Action": [ - "kinesis:DescribeStream", - "kinesis:DescribeStreamSummary", - "kinesis:GetRecords", - "kinesis:GetShardIterator", - "kinesis:ListShards", - "kinesis:SubscribeToShard" - ], - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "CustomETLKinesisStreamB4F1869F", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "PolicyName": "CustomETLGlueJobPolicy0AE5B5CB", - "Roles": [ - { - "Ref": "CustomETLJobRole53A1671F" - } - ] - }, - "Metadata": { - "cfn_nag": { - "rules_to_suppress": [ - { - "id": "W12", - "reason": "Glue Security Configuration does not have an ARN, and the policy only allows reading the configuration. CloudWatch metrics also do not have an ARN but adding a namespace condition to the policy to allow it to publish metrics only for AWS Glue" - } - ] - } - } - } - }, - "Outputs": { - "KinesisStreamName": { - "Value": { - "Ref": "CustomETLKinesisStreamB4F1869F" - } - }, - "GlueJob": { - "Value": { - "Ref": "CustomETLKinesisETLJob04F57BEF" - } - }, - "JobRole": { - "Value": { - "Fn::GetAtt": [ - "CustomETLJobRole53A1671F", - "Arn" - ] - } - } - }, - "Parameters": { - "BootstrapVersion": { - "Type": "AWS::SSM::Parameter::Value", - "Default": "/cdk-bootstrap/hnb659fds/version", - "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" - } - }, - "Rules": { - "CheckBootstrapVersion": { - "Assertions": [ - { - "Assert": { - "Fn::Not": [ - { - "Fn::Contains": [ - [ - "1", - "2", - "3", - "4", - "5" - ], - { - "Ref": "BootstrapVersion" - } - ] - } - ] - }, - "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." - } - ] - } - } -} \ No newline at end of file diff --git a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJobIntegDefaultTestDeployAssert49434261.assets.json b/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJobIntegDefaultTestDeployAssert49434261.assets.json deleted file mode 100644 index 4aa39c04c..000000000 --- a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJobIntegDefaultTestDeployAssert49434261.assets.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": "36.0.0", - "files": { - "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { - "source": { - "path": "IntegTestGlueJobIntegDefaultTestDeployAssert49434261.template.json", - "packaging": "file" - }, - "destinations": { - "current_account-current_region": { - "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", - "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" - } - } - } - }, - "dockerImages": {} -} \ No newline at end of file diff --git a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJobIntegDefaultTestDeployAssert49434261.template.json b/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJobIntegDefaultTestDeployAssert49434261.template.json deleted file mode 100644 index ad9d0fb73..000000000 --- a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/IntegTestGlueJobIntegDefaultTestDeployAssert49434261.template.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "Parameters": { - "BootstrapVersion": { - "Type": "AWS::SSM::Parameter::Value", - "Default": "/cdk-bootstrap/hnb659fds/version", - "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" - } - }, - "Rules": { - "CheckBootstrapVersion": { - "Assertions": [ - { - "Assert": { - "Fn::Not": [ - { - "Fn::Contains": [ - [ - "1", - "2", - "3", - "4", - "5" - ], - { - "Ref": "BootstrapVersion" - } - ] - } - ] - }, - "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." - } - ] - } - } -} \ No newline at end of file diff --git a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/asset.84f8d5b3b3970239322b59ef748d86a112fab19fd3c8079859ed1569aad0eeeb.py b/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/asset.84f8d5b3b3970239322b59ef748d86a112fab19fd3c8079859ed1569aad0eeeb.py deleted file mode 100644 index 345581dd9..000000000 --- a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/asset.84f8d5b3b3970239322b59ef748d86a112fab19fd3c8079859ed1569aad0eeeb.py +++ /dev/null @@ -1,109 +0,0 @@ -""" - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES - * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions - * and limitations under the License. -""" - -import base64 -import datetime -import sys - -import boto3 -from awsglue import DynamicFrame -from awsglue.context import GlueContext -from awsglue.job import Job -from awsglue.transforms import * -from awsglue.utils import getResolvedOptions -from pyspark.context import SparkContext -from pyspark.sql import DataFrame, Row -from pyspark.sql.functions import * -from pyspark.sql.types import * - -args = getResolvedOptions(sys.argv, ["JOB_NAME", "output_path", "database_name", "table_name"]) - -sc = SparkContext() -glueContext = GlueContext(sc) -spark = glueContext.spark_session -job = Job(glueContext) -job.init(args["JOB_NAME"], args) - -# S3 sink locations -output_path = args["output_path"] -databasename = args["database_name"] -tablename = args["table_name"] - -s3_target = output_path + "ventilator_metrics" -checkpoint_location = output_path + "cp/" -temp_path = output_path + "temp/" - - -def processBatch(data_frame, batchId): - now = datetime.datetime.now() - year = now.year - month = now.month - day = now.day - hour = now.hour - minute = now.minute - if data_frame.count() > 0: - dynamic_frame = DynamicFrame.fromDF(data_frame, glueContext, "from_data_frame") - apply_mapping = ApplyMapping.apply( - frame=dynamic_frame, - mappings=[ - ("ventilatorid", "long", "ventilatorid", "long"), - ("eventtime", "string", "eventtime", "timestamp"), - ("serialnumber", "string", "serialnumber", "string"), - ("pressurecontrol", "long", "pressurecontrol", "long"), - ("o2stats", "long", "o2stats", "long"), - ("minutevolume", "long", "minutevolume", "long"), - ("manufacturer", "string", "manufacturer", "string"), - ], - transformation_ctx="apply_mapping", - ) - - dynamic_frame.printSchema() - - # Write to S3 Sink - s3path = ( - s3_target - + "/ingest_year=" - + "{:0>4}".format(str(year)) - + "/ingest_month=" - + "{:0>2}".format(str(month)) - + "/ingest_day=" - + "{:0>2}".format(str(day)) - + "/ingest_hour=" - + "{:0>2}".format(str(hour)) - + "/" - ) - s3sink = glueContext.write_dynamic_frame.from_options( - frame=apply_mapping, - connection_type="s3", - connection_options={"path": s3path}, - format="parquet", - transformation_ctx="s3sink", - ) - - -# Read from Kinesis Data Stream -sourceData = glueContext.create_data_frame.from_catalog( - database=databasename, - table_name=tablename, - transformation_ctx="datasource0", - additional_options={"startingPosition": "TRIM_HORIZON", "inferSchema": "true"}, -) - -sourceData.printSchema() - -glueContext.forEachBatch( - frame=sourceData, - batch_function=processBatch, - options={"windowSize": "100 seconds", "checkpointLocation": checkpoint_location}, -) -job.commit() diff --git a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/integ.json b/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/integ.json deleted file mode 100644 index ddeb9882c..000000000 --- a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/integ.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "version": "36.0.0", - "testCases": { - "IntegTestGlueJob/Integ/DefaultTest": { - "stacks": [ - "IntegTestGlueJob" - ], - "assertionStack": "IntegTestGlueJob/Integ/DefaultTest/DeployAssert", - "assertionStackName": "IntegTestGlueJobIntegDefaultTestDeployAssert49434261" - } - } -} \ No newline at end of file diff --git a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/manifest.json b/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/manifest.json deleted file mode 100644 index f9927d6d9..000000000 --- a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/manifest.json +++ /dev/null @@ -1,215 +0,0 @@ -{ - "version": "36.0.0", - "artifacts": { - "IntegTestGlueJobIntegDefaultTestDeployAssert49434261.assets": { - "type": "cdk:asset-manifest", - "properties": { - "file": "IntegTestGlueJobIntegDefaultTestDeployAssert49434261.assets.json", - "requiresBootstrapStackVersion": 6, - "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" - } - }, - "IntegTestGlueJobIntegDefaultTestDeployAssert49434261": { - "type": "aws:cloudformation:stack", - "environment": "aws://unknown-account/unknown-region", - "properties": { - "templateFile": "IntegTestGlueJobIntegDefaultTestDeployAssert49434261.template.json", - "terminationProtection": false, - "validateOnSynth": false, - "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", - "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", - "requiresBootstrapStackVersion": 6, - "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", - "additionalDependencies": [ - "IntegTestGlueJobIntegDefaultTestDeployAssert49434261.assets" - ], - "lookupRole": { - "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", - "requiresBootstrapStackVersion": 8, - "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" - } - }, - "dependencies": [ - "IntegTestGlueJobIntegDefaultTestDeployAssert49434261.assets" - ], - "metadata": { - "/IntegTestGlueJob/Integ/DefaultTest/DeployAssert/BootstrapVersion": [ - { - "type": "aws:cdk:logicalId", - "data": "BootstrapVersion" - } - ], - "/IntegTestGlueJob/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion": [ - { - "type": "aws:cdk:logicalId", - "data": "CheckBootstrapVersion" - } - ] - }, - "displayName": "IntegTestGlueJob/Integ/DefaultTest/DeployAssert" - }, - "IntegTestGlueJob.assets": { - "type": "cdk:asset-manifest", - "properties": { - "file": "IntegTestGlueJob.assets.json", - "requiresBootstrapStackVersion": 6, - "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" - } - }, - "IntegTestGlueJob": { - "type": "aws:cloudformation:stack", - "environment": "aws://unknown-account/unknown-region", - "properties": { - "templateFile": "IntegTestGlueJob.template.json", - "terminationProtection": false, - "validateOnSynth": false, - "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", - "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/f06dec671e2247660b421f7c66dcf0191b573e715d33b978c720e69361586132.json", - "requiresBootstrapStackVersion": 6, - "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", - "additionalDependencies": [ - "IntegTestGlueJob.assets" - ], - "lookupRole": { - "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", - "requiresBootstrapStackVersion": 8, - "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" - } - }, - "dependencies": [ - "IntegTestGlueJob.assets" - ], - "metadata": { - "/IntegTestGlueJob/CustomETL/KinesisStream/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLKinesisStreamB4F1869F" - } - ], - "/IntegTestGlueJob/CustomETL/GlueSecurityConfig": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLGlueSecurityConfigDFE12B1C" - } - ], - "/IntegTestGlueJob/CustomETL/LogPolicy/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLLogPolicyA74138E8" - } - ], - "/IntegTestGlueJob/CustomETL/JobRole/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLJobRole53A1671F" - } - ], - "/IntegTestGlueJob/CustomETL/JobRole/DefaultPolicy/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLJobRoleDefaultPolicy564ADEA9" - } - ], - "/IntegTestGlueJob/CustomETL/S3LoggingBucket/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLS3LoggingBucketBBDD45CB" - } - ], - "/IntegTestGlueJob/CustomETL/S3LoggingBucket/Policy/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLS3LoggingBucketPolicy15C78253" - } - ], - "/IntegTestGlueJob/CustomETL/S3Bucket/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLS3Bucket3EE58725" - } - ], - "/IntegTestGlueJob/CustomETL/S3Bucket/Policy/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLS3BucketPolicy20FB337A" - } - ], - "/IntegTestGlueJob/CustomETL/KinesisETLJob": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLKinesisETLJob04F57BEF" - } - ], - "/IntegTestGlueJob/CustomETL/KinesisStreamGetRecordsIteratorAgeAlarm/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLKinesisStreamGetRecordsIteratorAgeAlarmCD7F4E34" - } - ], - "/IntegTestGlueJob/CustomETL/KinesisStreamReadProvisionedThroughputExceededAlarm/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLKinesisStreamReadProvisionedThroughputExceededAlarm6AB32664" - } - ], - "/IntegTestGlueJob/GlueDatabase": [ - { - "type": "aws:cdk:logicalId", - "data": "GlueDatabase" - } - ], - "/IntegTestGlueJob/GlueTable": [ - { - "type": "aws:cdk:logicalId", - "data": "GlueTable" - } - ], - "/IntegTestGlueJob/CustomETLGlueJobPolicy/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "CustomETLGlueJobPolicy0AE5B5CB" - } - ], - "/IntegTestGlueJob/KinesisStreamName": [ - { - "type": "aws:cdk:logicalId", - "data": "KinesisStreamName" - } - ], - "/IntegTestGlueJob/GlueJob": [ - { - "type": "aws:cdk:logicalId", - "data": "GlueJob" - } - ], - "/IntegTestGlueJob/JobRole": [ - { - "type": "aws:cdk:logicalId", - "data": "JobRole" - } - ], - "/IntegTestGlueJob/BootstrapVersion": [ - { - "type": "aws:cdk:logicalId", - "data": "BootstrapVersion" - } - ], - "/IntegTestGlueJob/CheckBootstrapVersion": [ - { - "type": "aws:cdk:logicalId", - "data": "CheckBootstrapVersion" - } - ] - }, - "displayName": "IntegTestGlueJob" - }, - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - } - } -} \ No newline at end of file diff --git a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/tree.json b/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/tree.json deleted file mode 100644 index 5cbbac4fe..000000000 --- a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.js.snapshot/tree.json +++ /dev/null @@ -1,1138 +0,0 @@ -{ - "version": "tree-0.1", - "tree": { - "id": "App", - "path": "", - "children": { - "IntegTestGlueJob": { - "id": "IntegTestGlueJob", - "path": "IntegTestGlueJob", - "children": { - "ScriptLocation": { - "id": "ScriptLocation", - "path": "IntegTestGlueJob/ScriptLocation", - "children": { - "Stage": { - "id": "Stage", - "path": "IntegTestGlueJob/ScriptLocation/Stage", - "constructInfo": { - "fqn": "aws-cdk-lib.AssetStaging", - "version": "2.118.0" - } - }, - "AssetBucket": { - "id": "AssetBucket", - "path": "IntegTestGlueJob/ScriptLocation/AssetBucket", - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.BucketBase", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3_assets.Asset", - "version": "2.118.0" - } - }, - "CustomETL": { - "id": "CustomETL", - "path": "IntegTestGlueJob/CustomETL", - "children": { - "KinesisStream": { - "id": "KinesisStream", - "path": "IntegTestGlueJob/CustomETL/KinesisStream", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegTestGlueJob/CustomETL/KinesisStream/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Kinesis::Stream", - "aws:cdk:cloudformation:props": { - "retentionPeriodHours": 24, - "shardCount": 1, - "streamEncryption": { - "encryptionType": "KMS", - "keyId": "alias/aws/kinesis" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_kinesis.CfnStream", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_kinesis.Stream", - "version": "2.118.0" - } - }, - "GlueSecurityConfig": { - "id": "GlueSecurityConfig", - "path": "IntegTestGlueJob/CustomETL/GlueSecurityConfig", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Glue::SecurityConfiguration", - "aws:cdk:cloudformation:props": { - "encryptionConfiguration": { - "jobBookmarksEncryption": { - "jobBookmarksEncryptionMode": "CSE-KMS", - "kmsKeyArn": { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":kms:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":alias/aws/glue" - ] - ] - } - }, - "s3Encryptions": [ - { - "s3EncryptionMode": "SSE-S3" - } - ] - }, - "name": { - "Fn::Join": [ - "", - [ - "ETLJobSecurityConfig", - { - "Ref": "AWS::StackId" - } - ] - ] - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_glue.CfnSecurityConfiguration", - "version": "2.118.0" - } - }, - "LogPolicy": { - "id": "LogPolicy", - "path": "IntegTestGlueJob/CustomETL/LogPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegTestGlueJob/CustomETL/LogPolicy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": [ - "logs:CreateLogGroup", - "logs:CreateLogStream", - "logs:PutLogEvents" - ], - "Effect": "Allow", - "Resource": { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":logs:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":log-group:/aws-glue/*" - ] - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "CustomETLLogPolicyA74138E8", - "roles": [ - { - "Ref": "CustomETLJobRole53A1671F" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.118.0" - } - }, - "JobRole": { - "id": "JobRole", - "path": "IntegTestGlueJob/CustomETL/JobRole", - "children": { - "ImportJobRole": { - "id": "ImportJobRole", - "path": "IntegTestGlueJob/CustomETL/JobRole/ImportJobRole", - "constructInfo": { - "fqn": "aws-cdk-lib.Resource", - "version": "2.118.0" - } - }, - "Resource": { - "id": "Resource", - "path": "IntegTestGlueJob/CustomETL/JobRole/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Role", - "aws:cdk:cloudformation:props": { - "assumeRolePolicyDocument": { - "Statement": [ - { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": { - "Service": "glue.amazonaws.com" - } - } - ], - "Version": "2012-10-17" - }, - "description": "Service role that Glue custom ETL jobs will assume for execution" - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnRole", - "version": "2.118.0" - } - }, - "DefaultPolicy": { - "id": "DefaultPolicy", - "path": "IntegTestGlueJob/CustomETL/JobRole/DefaultPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegTestGlueJob/CustomETL/JobRole/DefaultPolicy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": [ - "s3:Abort*", - "s3:DeleteObject*", - "s3:GetBucket*", - "s3:GetObject*", - "s3:List*", - "s3:PutObject", - "s3:PutObjectLegalHold", - "s3:PutObjectRetention", - "s3:PutObjectTagging", - "s3:PutObjectVersionTagging" - ], - "Effect": "Allow", - "Resource": [ - { - "Fn::GetAtt": [ - "CustomETLS3Bucket3EE58725", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "CustomETLS3Bucket3EE58725", - "Arn" - ] - }, - "/*" - ] - ] - } - ] - }, - { - "Action": [ - "s3:GetBucket*", - "s3:GetObject*", - "s3:List*" - ], - "Effect": "Allow", - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":s3:::", - { - "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" - }, - "/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":s3:::", - { - "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" - } - ] - ] - } - ] - } - ], - "Version": "2012-10-17" - }, - "policyName": "CustomETLJobRoleDefaultPolicy564ADEA9", - "roles": [ - { - "Ref": "CustomETLJobRole53A1671F" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Role", - "version": "2.118.0" - } - }, - "S3LoggingBucket": { - "id": "S3LoggingBucket", - "path": "IntegTestGlueJob/CustomETL/S3LoggingBucket", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegTestGlueJob/CustomETL/S3LoggingBucket/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::S3::Bucket", - "aws:cdk:cloudformation:props": { - "bucketEncryption": { - "serverSideEncryptionConfiguration": [ - { - "serverSideEncryptionByDefault": { - "sseAlgorithm": "AES256" - } - } - ] - }, - "publicAccessBlockConfiguration": { - "blockPublicAcls": true, - "blockPublicPolicy": true, - "ignorePublicAcls": true, - "restrictPublicBuckets": true - }, - "versioningConfiguration": { - "status": "Enabled" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.CfnBucket", - "version": "2.118.0" - } - }, - "Policy": { - "id": "Policy", - "path": "IntegTestGlueJob/CustomETL/S3LoggingBucket/Policy", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegTestGlueJob/CustomETL/S3LoggingBucket/Policy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::S3::BucketPolicy", - "aws:cdk:cloudformation:props": { - "bucket": { - "Ref": "CustomETLS3LoggingBucketBBDD45CB" - }, - "policyDocument": { - "Statement": [ - { - "Action": "s3:*", - "Condition": { - "Bool": { - "aws:SecureTransport": "false" - } - }, - "Effect": "Deny", - "Principal": { - "AWS": "*" - }, - "Resource": [ - { - "Fn::GetAtt": [ - "CustomETLS3LoggingBucketBBDD45CB", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "CustomETLS3LoggingBucketBBDD45CB", - "Arn" - ] - }, - "/*" - ] - ] - } - ] - }, - { - "Action": "s3:PutObject", - "Condition": { - "ArnLike": { - "aws:SourceArn": { - "Fn::GetAtt": [ - "CustomETLS3Bucket3EE58725", - "Arn" - ] - } - }, - "StringEquals": { - "aws:SourceAccount": { - "Ref": "AWS::AccountId" - } - } - }, - "Effect": "Allow", - "Principal": { - "Service": "logging.s3.amazonaws.com" - }, - "Resource": { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "CustomETLS3LoggingBucketBBDD45CB", - "Arn" - ] - }, - "/*" - ] - ] - } - } - ], - "Version": "2012-10-17" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.CfnBucketPolicy", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.BucketPolicy", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.Bucket", - "version": "2.118.0" - } - }, - "S3Bucket": { - "id": "S3Bucket", - "path": "IntegTestGlueJob/CustomETL/S3Bucket", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegTestGlueJob/CustomETL/S3Bucket/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::S3::Bucket", - "aws:cdk:cloudformation:props": { - "bucketEncryption": { - "serverSideEncryptionConfiguration": [ - { - "serverSideEncryptionByDefault": { - "sseAlgorithm": "AES256" - } - } - ] - }, - "lifecycleConfiguration": { - "rules": [ - { - "noncurrentVersionTransitions": [ - { - "storageClass": "GLACIER", - "transitionInDays": 90 - } - ], - "status": "Enabled" - } - ] - }, - "loggingConfiguration": { - "destinationBucketName": { - "Ref": "CustomETLS3LoggingBucketBBDD45CB" - } - }, - "publicAccessBlockConfiguration": { - "blockPublicAcls": true, - "blockPublicPolicy": true, - "ignorePublicAcls": true, - "restrictPublicBuckets": true - }, - "versioningConfiguration": { - "status": "Enabled" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.CfnBucket", - "version": "2.118.0" - } - }, - "Policy": { - "id": "Policy", - "path": "IntegTestGlueJob/CustomETL/S3Bucket/Policy", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegTestGlueJob/CustomETL/S3Bucket/Policy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::S3::BucketPolicy", - "aws:cdk:cloudformation:props": { - "bucket": { - "Ref": "CustomETLS3Bucket3EE58725" - }, - "policyDocument": { - "Statement": [ - { - "Action": "s3:*", - "Condition": { - "Bool": { - "aws:SecureTransport": "false" - } - }, - "Effect": "Deny", - "Principal": { - "AWS": "*" - }, - "Resource": [ - { - "Fn::GetAtt": [ - "CustomETLS3Bucket3EE58725", - "Arn" - ] - }, - { - "Fn::Join": [ - "", - [ - { - "Fn::GetAtt": [ - "CustomETLS3Bucket3EE58725", - "Arn" - ] - }, - "/*" - ] - ] - } - ] - } - ], - "Version": "2012-10-17" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.CfnBucketPolicy", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.BucketPolicy", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_s3.Bucket", - "version": "2.118.0" - } - }, - "KinesisETLJob": { - "id": "KinesisETLJob", - "path": "IntegTestGlueJob/CustomETL/KinesisETLJob", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Glue::Job", - "aws:cdk:cloudformation:props": { - "command": { - "name": "gluestreaming", - "pythonVersion": "3", - "scriptLocation": { - "Fn::Sub": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/84f8d5b3b3970239322b59ef748d86a112fab19fd3c8079859ed1569aad0eeeb.py" - } - }, - "defaultArguments": { - "--enable-metrics": true, - "--enable-continuous-cloudwatch-log": true, - "--database_name": { - "Ref": "GlueDatabase" - }, - "--table_name": { - "Ref": "GlueTable" - }, - "--output_path": { - "Fn::Join": [ - "", - [ - "s3a://", - { - "Ref": "CustomETLS3Bucket3EE58725" - }, - "/output/" - ] - ] - } - }, - "glueVersion": "2.0", - "numberOfWorkers": 2, - "role": { - "Fn::GetAtt": [ - "CustomETLJobRole53A1671F", - "Arn" - ] - }, - "securityConfiguration": { - "Fn::Join": [ - "", - [ - "ETLJobSecurityConfig", - { - "Ref": "AWS::StackId" - } - ] - ] - }, - "workerType": "G.1X" - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_glue.CfnJob", - "version": "2.118.0" - } - }, - "KinesisStreamGetRecordsIteratorAgeAlarm": { - "id": "KinesisStreamGetRecordsIteratorAgeAlarm", - "path": "IntegTestGlueJob/CustomETL/KinesisStreamGetRecordsIteratorAgeAlarm", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegTestGlueJob/CustomETL/KinesisStreamGetRecordsIteratorAgeAlarm/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::CloudWatch::Alarm", - "aws:cdk:cloudformation:props": { - "alarmDescription": "Consumer Record Processing Falling Behind, there is risk for data loss due to record expiration.", - "comparisonOperator": "GreaterThanOrEqualToThreshold", - "evaluationPeriods": 1, - "metricName": "GetRecords.IteratorAgeMilliseconds", - "namespace": "AWS/Kinesis", - "period": 300, - "statistic": "Maximum", - "threshold": 43200000 - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cloudwatch.CfnAlarm", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cloudwatch.Alarm", - "version": "2.118.0" - } - }, - "KinesisStreamReadProvisionedThroughputExceededAlarm": { - "id": "KinesisStreamReadProvisionedThroughputExceededAlarm", - "path": "IntegTestGlueJob/CustomETL/KinesisStreamReadProvisionedThroughputExceededAlarm", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegTestGlueJob/CustomETL/KinesisStreamReadProvisionedThroughputExceededAlarm/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::CloudWatch::Alarm", - "aws:cdk:cloudformation:props": { - "alarmDescription": "Consumer Application is Reading at a Slower Rate Than Expected.", - "comparisonOperator": "GreaterThanThreshold", - "evaluationPeriods": 1, - "metricName": "ReadProvisionedThroughputExceeded", - "namespace": "AWS/Kinesis", - "period": 300, - "statistic": "Average", - "threshold": 0 - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cloudwatch.CfnAlarm", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_cloudwatch.Alarm", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-solutions-constructs/aws-kinesisstreams-gluejob.KinesisstreamsToGluejob", - "version": "2.51.0" - } - }, - "GlueDatabase": { - "id": "GlueDatabase", - "path": "IntegTestGlueJob/GlueDatabase", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Glue::Database", - "aws:cdk:cloudformation:props": { - "catalogId": { - "Ref": "AWS::AccountId" - }, - "databaseInput": { - "description": "An AWS Glue database generated by AWS Solutions Construct" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_glue.CfnDatabase", - "version": "2.118.0" - } - }, - "GlueTable": { - "id": "GlueTable", - "path": "IntegTestGlueJob/GlueTable", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::Glue::Table", - "aws:cdk:cloudformation:props": { - "catalogId": { - "Ref": "AWS::AccountId" - }, - "databaseName": { - "Ref": "GlueDatabase" - }, - "tableInput": { - "storageDescriptor": { - "columns": [ - { - "name": "ventilatorid", - "type": "int", - "comment": "" - }, - { - "name": "eventtime", - "type": "string", - "comment": "" - }, - { - "name": "serialnumber", - "type": "string", - "comment": "" - }, - { - "name": "pressurecontrol", - "type": "int", - "comment": "" - }, - { - "name": "o2stats", - "type": "int", - "comment": "" - }, - { - "name": "minutevolume", - "type": "int", - "comment": "" - }, - { - "name": "manufacturer", - "type": "string", - "comment": "" - } - ], - "location": { - "Ref": "CustomETLKinesisStreamB4F1869F" - }, - "inputFormat": "org.apache.hadoop.mapred.TextInputFormat", - "outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", - "compressed": false, - "numberOfBuckets": -1, - "serdeInfo": { - "serializationLibrary": "org.openx.data.jsonserde.JsonSerDe", - "parameters": { - "paths": "ventilatorid,eventtime,serialnumber,pressurecontrol,o2stats,minutevolume,manufacturer" - } - }, - "parameters": { - "endpointUrl": { - "Fn::Join": [ - "", - [ - "https://kinesis.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com" - ] - ] - }, - "streamName": { - "Ref": "CustomETLKinesisStreamB4F1869F" - }, - "typeOfData": "kinesis" - } - }, - "tableType": "EXTERNAL_TABLE", - "parameters": { - "classification": "json" - } - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_glue.CfnTable", - "version": "2.118.0" - } - }, - "CustomETLGlueJobPolicy": { - "id": "CustomETLGlueJobPolicy", - "path": "IntegTestGlueJob/CustomETLGlueJobPolicy", - "children": { - "Resource": { - "id": "Resource", - "path": "IntegTestGlueJob/CustomETLGlueJobPolicy/Resource", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::IAM::Policy", - "aws:cdk:cloudformation:props": { - "policyDocument": { - "Statement": [ - { - "Action": "glue:GetJob", - "Effect": "Allow", - "Resource": { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":glue:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":job/", - { - "Ref": "CustomETLKinesisETLJob04F57BEF" - } - ] - ] - } - }, - { - "Action": "glue:GetSecurityConfiguration", - "Effect": "Allow", - "Resource": "*" - }, - { - "Action": "glue:GetTable", - "Effect": "Allow", - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":glue:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":catalog" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":glue:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":database/", - { - "Ref": "GlueDatabase" - } - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:", - { - "Ref": "AWS::Partition" - }, - ":glue:", - { - "Ref": "AWS::Region" - }, - ":", - { - "Ref": "AWS::AccountId" - }, - ":table/", - { - "Ref": "GlueDatabase" - }, - "/", - { - "Ref": "GlueTable" - } - ] - ] - } - ] - }, - { - "Action": "cloudwatch:PutMetricData", - "Condition": { - "StringEquals": { - "cloudwatch:namespace": "Glue" - }, - "Bool": { - "aws:SecureTransport": "true" - } - }, - "Effect": "Allow", - "Resource": "*" - }, - { - "Action": [ - "kinesis:DescribeStream", - "kinesis:DescribeStreamSummary", - "kinesis:GetRecords", - "kinesis:GetShardIterator", - "kinesis:ListShards", - "kinesis:SubscribeToShard" - ], - "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "CustomETLKinesisStreamB4F1869F", - "Arn" - ] - } - } - ], - "Version": "2012-10-17" - }, - "policyName": "CustomETLGlueJobPolicy0AE5B5CB", - "roles": [ - { - "Ref": "CustomETLJobRole53A1671F" - } - ] - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.CfnPolicy", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.aws_iam.Policy", - "version": "2.118.0" - } - }, - "KinesisStreamName": { - "id": "KinesisStreamName", - "path": "IntegTestGlueJob/KinesisStreamName", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "2.118.0" - } - }, - "GlueJob": { - "id": "GlueJob", - "path": "IntegTestGlueJob/GlueJob", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "2.118.0" - } - }, - "JobRole": { - "id": "JobRole", - "path": "IntegTestGlueJob/JobRole", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnOutput", - "version": "2.118.0" - } - }, - "Integ": { - "id": "Integ", - "path": "IntegTestGlueJob/Integ", - "children": { - "DefaultTest": { - "id": "DefaultTest", - "path": "IntegTestGlueJob/Integ/DefaultTest", - "children": { - "Default": { - "id": "Default", - "path": "IntegTestGlueJob/Integ/DefaultTest/Default", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.3.0" - } - }, - "DeployAssert": { - "id": "DeployAssert", - "path": "IntegTestGlueJob/Integ/DefaultTest/DeployAssert", - "children": { - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "IntegTestGlueJob/Integ/DefaultTest/DeployAssert/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "2.118.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "IntegTestGlueJob/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnRule", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.Stack", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", - "version": "2.118.0-alpha.0" - } - } - }, - "constructInfo": { - "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", - "version": "2.118.0-alpha.0" - } - }, - "BootstrapVersion": { - "id": "BootstrapVersion", - "path": "IntegTestGlueJob/BootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnParameter", - "version": "2.118.0" - } - }, - "CheckBootstrapVersion": { - "id": "CheckBootstrapVersion", - "path": "IntegTestGlueJob/CheckBootstrapVersion", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnRule", - "version": "2.118.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.Stack", - "version": "2.118.0" - } - }, - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.3.0" - } - } - }, - "constructInfo": { - "fqn": "aws-cdk-lib.App", - "version": "2.118.0" - } - } -} \ No newline at end of file diff --git a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.ts b/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.ts deleted file mode 100644 index 416d4bfed..000000000 --- a/source/use_cases/aws-custom-glue-etl/test/integ.gluejob.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES - * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions - * and limitations under the License. - */ - -import { App } from "aws-cdk-lib"; -import { AwsCustomGlueEtlStack } from "../lib/aws-custom-glue-etl-stack"; -import { IntegTest } from '@aws-cdk/integ-tests-alpha'; - -const app = new App(); -const stack = new AwsCustomGlueEtlStack(app, 'IntegTestGlueJob'); -stack.templateOptions.description = 'Integration Test for sample application that uses aws-kineisstream-glue-job construct'; - -new IntegTest(stack, 'Integ', { testCases: [ - stack -] }); diff --git a/source/use_cases/aws-custom-glue-etl/tsconfig.json b/source/use_cases/aws-custom-glue-etl/tsconfig.json deleted file mode 100644 index 15eacca70..000000000 --- a/source/use_cases/aws-custom-glue-etl/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "alwaysStrict": true, - "declaration": true, - "experimentalDecorators": true, - "inlineSourceMap": true, - "inlineSources": true, - "lib": [ - "es2018" - ], - "module": "CommonJS", - "noEmitOnError": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "resolveJsonModule": true, - "strict": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "stripInternal": true, - "target": "ES2018" - }, - "include": [ - "**/*.ts" - ], - "exclude": [ - "node_modules" - ] -} \ No newline at end of file diff --git a/source/use_cases/aws-restaurant-management-demo/lib/lambda/kitchen-staff/complete-order/index.js b/source/use_cases/aws-restaurant-management-demo/lib/lambda/kitchen-staff/complete-order/index.js index 1d77332f9..634b86bdf 100644 --- a/source/use_cases/aws-restaurant-management-demo/lib/lambda/kitchen-staff/complete-order/index.js +++ b/source/use_cases/aws-restaurant-management-demo/lib/lambda/kitchen-staff/complete-order/index.js @@ -12,8 +12,11 @@ */ // Imports -const aws = require('aws-sdk'); -const ddb = new aws.DynamoDB.DocumentClient({apiVersion: '2012-08-10'}); + +const { DynamoDBDocument, UpdateCommand } = require('@aws-sdk/lib-dynamodb'); +const { DynamoDB } = require('@aws-sdk/client-dynamodb'); + +const ddb = DynamoDBDocument.from(new DynamoDB({apiVersion: '2012-08-10'})); // Handler exports.handler = async (event) => { @@ -34,7 +37,7 @@ exports.handler = async (event) => { // Add the item to the database try { - const res = await ddb.update(params).promise(); + const res = await ddb.send(new UpdateCommand(params)); return { statusCode: 200, isBase64Encoded: false, diff --git a/source/use_cases/aws-restaurant-management-demo/lib/lambda/kitchen-staff/get-open-orders/index.js b/source/use_cases/aws-restaurant-management-demo/lib/lambda/kitchen-staff/get-open-orders/index.js index 9c6ed66b0..b81953a63 100644 --- a/source/use_cases/aws-restaurant-management-demo/lib/lambda/kitchen-staff/get-open-orders/index.js +++ b/source/use_cases/aws-restaurant-management-demo/lib/lambda/kitchen-staff/get-open-orders/index.js @@ -12,8 +12,11 @@ */ // Imports -const aws = require('aws-sdk'); -const ddb = new aws.DynamoDB.DocumentClient({apiVersion: '2012-08-10'}); + +const { DynamoDBDocument, QueryCommand } = require("@aws-sdk/lib-dynamodb"); +const { DynamoDB } = require("@aws-sdk/client-dynamodb"); + +const ddb = DynamoDBDocument.from(new DynamoDB({apiVersion: '2012-08-10'})); // Handler exports.handler = async (event) => { @@ -32,7 +35,7 @@ exports.handler = async (event) => { // Perform the query try { - const result = await ddb.query(params).promise(); + const result = await ddb.send(new QueryCommand(params)); // Extract the order JSON objects const orders = Array.from(result.Items); // Return the open orders diff --git a/source/use_cases/aws-restaurant-management-demo/lib/lambda/layer/db-access.js b/source/use_cases/aws-restaurant-management-demo/lib/lambda/layer/db-access.js index c491ead37..a7f6b11e6 100644 --- a/source/use_cases/aws-restaurant-management-demo/lib/lambda/layer/db-access.js +++ b/source/use_cases/aws-restaurant-management-demo/lib/lambda/layer/db-access.js @@ -12,8 +12,12 @@ */ // Imports -const aws = require('aws-sdk'); -const ddb = new aws.DynamoDB.DocumentClient({apiVersion: '2012-08-10'}); + + +const { DynamoDBDocument, ScanCommand } = require('@aws-sdk/lib-dynamodb'); +const { DynamoDB } = require('@aws-sdk/client-dynamodb'); + +const ddb = DynamoDBDocument.from(new DynamoDB({apiVersion: '2012-08-10'})); /** * Common function for scanning the database and getting all entries. Supports multiple functions within the system. @@ -32,7 +36,7 @@ exports.scanTable = async () => { // Perform the scan try { do { - items = await ddb.scan(params).promise(); + items = await ddb.send(new ScanCommand(params)); items.Items.forEach((item) => scanResults.push(item)); params.ExclusiveStartKey = items.LastEvaluatedKey; } while (typeof items.LastEvaluatedKey != "undefined"); diff --git a/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/archive-orders/index.js b/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/archive-orders/index.js index 7bf822977..be698fb8d 100644 --- a/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/archive-orders/index.js +++ b/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/archive-orders/index.js @@ -12,9 +12,13 @@ */ // Imports -const aws = require('aws-sdk'); -const s3 = new aws.S3(); -const ddb = new aws.DynamoDB.DocumentClient({apiVersion: '2012-08-10'}); + +const { DynamoDBDocument, DeleteCommand } = require('@aws-sdk/lib-dynamodb'); +const { DynamoDB } = require('@aws-sdk/client-dynamodb'); +const { S3, PutObjectCommand } = require('@aws-sdk/client-s3'); + +const s3 = new S3(); +const ddb = DynamoDBDocument.from(new DynamoDB({apiVersion: '2012-08-10'})); const db_access = require('/opt/db-access'); exports.handler = async (event) => { @@ -46,7 +50,7 @@ exports.handler = async (event) => { // Save the report try { - await s3.putObject(s3_params).promise(); + await s3.send(new PutObjectCommand(s3_params)); console.log(`Successfully saved the report to "${process.env.S3_BUCKET_NAME}"`); console.log(`Report filename: "${s3_params.Key}"`); } catch (err) { @@ -56,17 +60,12 @@ exports.handler = async (event) => { // --------------------------------------------------------------------------- // Clear-out the table // --------------------------------------------------------------------------- - deleteEntries(scanResults); + await deleteEntries(scanResults); }; -/** - * Method to delete an entry from the DynamoDB table using recursion. Takes an - * array of entries, pops the array and deletes the popped item before repeating - * until the array is reduced to 0 indices. - * @param {array} entries - an array of entries - */ -const deleteEntries = (entries) => { - if (entries.length > 0) { + +async function deleteEntries(entries) { + while (entries.length > 0) { const entry = entries.pop(); const params = { Key: { @@ -74,13 +73,8 @@ const deleteEntries = (entries) => { }, TableName: process.env.DDB_TABLE_NAME }; + console.log(`deleting: ${entry.id}`); // Delete the entry - ddb.delete(params, function(err, data) { - if (err) console.log(err); - else { - console.log(data); - deleteEntries(entries); - } - }); + await ddb.send(new DeleteCommand(params)); } } diff --git a/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/calculate-tips/index.js b/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/calculate-tips/index.js index a8feba623..be2ea4b09 100644 --- a/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/calculate-tips/index.js +++ b/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/calculate-tips/index.js @@ -12,8 +12,10 @@ */ // Imports -const aws = require('aws-sdk'); -const sns = new aws.SNS(); + +const { SNS, PublishCommand } = require('@aws-sdk/client-sns'); + +const sns = new SNS(); const db_access = require('/opt/db-access'); // Handler @@ -35,25 +37,21 @@ exports.handler = async (event) => { scanResults.forEach((r) => { if (r.tipAmount !== undefined) { if (!servers.includes(r.createdBy)) { - tips[r.createdBy] = Number(r.tipAmount) + tips[r.createdBy] = Number(r.tipAmount); + servers.push(r.createdBy); } else { - tips[r.createdBy] = Number(tips[r.createdBy]) + Number(r.tipAmount) + tips[r.createdBy] = Number(tips[r.createdBy]) + Number(r.tipAmount); } } }); - // Send a notification to each active server with tip information - Object.keys(tips).forEach((t) => { - // Message parameters + for (var i = 0; i { @@ -23,14 +27,15 @@ exports.handler = async (event) => { // that is still open is overdue const lateInterval = Number(process.env.LATE_ORDER_THRESHOLD) * 60000; const lateThreshold = Number(new Date().getTime()) - lateInterval; - + // Setup the parameters const params = { KeyConditionExpression: - "gsi1pk = :type and gsi1sk < :sortEnd", + "gsi1pk = :type and gsi1sk between :sortStart and :sortEnd", ExpressionAttributeValues: { ":type": "order", - ":sortEnd": `OPEN#${lateThreshold}` + ":sortEnd": `OPEN#${lateThreshold}`, + ":sortStart": "OPEN#0" }, TableName: process.env.DDB_TABLE_NAME, IndexName: 'gsi1pk-gsi1sk-index' @@ -38,30 +43,38 @@ exports.handler = async (event) => { // Hold the late orders in an array let lateOrders = []; - console.log(lateOrders); // Query all late orders from the table try { - const result = await ddb.query(params).promise(); + const result = await ddb.send(new QueryCommand(params)); // Extract the order JSON objects const orders = Array.from(result.Items); // Save the open orders to the array lateOrders = orders; } catch (error) { - console.error(error); + console.error(`Query error: ${error}`); } + console.log(`Late Orders:\n${JSON.stringify(lateOrders)}`); // Send a notification if there is one or more orders running late if (lateOrders.length > 0) { // Message parameters const sns_params = { - Message: 'One or more orders are running late!', + Message: `One or more orders are running late:\n${FormatLateOrders(lateOrders)}`, TopicArn: process.env.SNS_TOPIC_ARN }; - // Send the message - sns.publish(sns_params, function(err, data) { - if (err) console.log(err, err.stack); // an error occurred - else console.log(data); // successful response - }); + try { + await sns.send(new PublishCommand(sns_params)); + } catch (error) { + console.error(`SNS error: ${error}`); + } } }; + +function FormatLateOrders(lateOrders) { + let formattedOrders = ''; + lateOrders.forEach(order => { + formattedOrders += `${order.createdBy}: Table ${order.tableNumber}, order: ${order.items}\n`; + }); + return formattedOrders; +} \ No newline at end of file diff --git a/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/close-out-service/index.js b/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/close-out-service/index.js index c732758e2..d3b27e99a 100644 --- a/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/close-out-service/index.js +++ b/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/close-out-service/index.js @@ -12,8 +12,10 @@ */ // Imports -const aws = require('aws-sdk'); -const sfn = new aws.StepFunctions(); + +const { SFN, StartExecutionCommand } = require('@aws-sdk/client-sfn'); + +const sfn = new SFN(); // Handler exports.handler = async (event) => { @@ -25,7 +27,7 @@ exports.handler = async (event) => { // Start the process try { - const res = await sfn.startExecution(params).promise(); + const res = await sfn.send(new StartExecutionCommand(params)); console.log(res); return { statusCode: 200, diff --git a/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/create-report/index.js b/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/create-report/index.js index b14c3ec90..8813eb1b4 100644 --- a/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/create-report/index.js +++ b/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/create-report/index.js @@ -12,8 +12,10 @@ */ // Imports -const aws = require('aws-sdk'); -const s3 = new aws.S3(); + +const { S3, PutObjectCommand } = require('@aws-sdk/client-s3'); + +const s3 = new S3(); const db_access = require('/opt/db-access'); exports.handler = async (event) => { @@ -60,7 +62,7 @@ exports.handler = async (event) => { // Save the report try { - await s3.putObject(s3_params).promise(); + await s3.send(new PutObjectCommand(s3_params)); console.log(`Successfully saved the report to "${process.env.S3_BUCKET_NAME}"`); console.log(`Report filename: "${s3_params.Key}"`); } catch (err) { diff --git a/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/get-report/index.js b/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/get-report/index.js index 6345f4ba0..5ab93b1d5 100644 --- a/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/get-report/index.js +++ b/source/use_cases/aws-restaurant-management-demo/lib/lambda/manager/get-report/index.js @@ -12,8 +12,10 @@ */ // Imports -const aws = require('aws-sdk'); -const s3 = new aws.S3(); + +const { S3, GetObjectCommand } = require('@aws-sdk/client-s3'); + +const s3 = new S3(); exports.handler = async (event) => { @@ -30,9 +32,8 @@ exports.handler = async (event) => { // Get the report try { - const res = await s3.getObject(params).promise(); - const parsed = res.Body.toString('utf-8'); - console.log(parsed); + const res = await s3.send(new GetObjectCommand(params)); + const parsed = await res.Body.transformToString(); return { statusCode: 200, isBase64Encoded: false, diff --git a/source/use_cases/aws-restaurant-management-demo/lib/lambda/service-staff/create-order/index.js b/source/use_cases/aws-restaurant-management-demo/lib/lambda/service-staff/create-order/index.js index e0216b7bf..0d9c591fd 100644 --- a/source/use_cases/aws-restaurant-management-demo/lib/lambda/service-staff/create-order/index.js +++ b/source/use_cases/aws-restaurant-management-demo/lib/lambda/service-staff/create-order/index.js @@ -12,15 +12,19 @@ */ // Imports -const aws = require('aws-sdk'); -const ddb = new aws.DynamoDB.DocumentClient({apiVersion: '2012-08-10'}); + +const { DynamoDBDocument, PutCommand } = require('@aws-sdk/lib-dynamodb'); +const { DynamoDB } = require('@aws-sdk/client-dynamodb'); + +const ddb = DynamoDBDocument.from(new DynamoDB({apiVersion: '2012-08-10'})); const { v4: uuidv4 } = require('uuid'); // Handler exports.handler = async (event) => { - + // Setup the parameters const req = JSON.parse(event.body); + const orderTime = new Date().getTime(); const params = { TableName: process.env.DDB_TABLE_NAME, Item: { @@ -31,16 +35,16 @@ exports.handler = async (event) => { orderStatus: 'OPEN', orderTotal: req.orderTotal, tipAmount: req.tipAmount, - timeOpened: new Date().getTime(), + timeOpened: orderTime, timeClosed: undefined, gsi1pk: 'order', - gsi1sk: `OPEN#${req.timeOpened}`, + gsi1sk: `OPEN#${orderTime}`, } }; // Add the item to the database try { - const res = await ddb.put(params).promise(); + const res = await ddb.send(new PutCommand(params)); return { statusCode: 200, isBase64Encoded: false, diff --git a/source/use_cases/aws-restaurant-management-demo/lib/lambda/service-staff/create-order/package.json b/source/use_cases/aws-restaurant-management-demo/lib/lambda/service-staff/create-order/package.json index 38c9e933b..196518a13 100644 --- a/source/use_cases/aws-restaurant-management-demo/lib/lambda/service-staff/create-order/package.json +++ b/source/use_cases/aws-restaurant-management-demo/lib/lambda/service-staff/create-order/package.json @@ -8,16 +8,10 @@ "author": "", "license": "ISC", "dependencies": { - "@aws-cdk/integ-tests-alpha": "0.0.0-alpha.0", - "uuid": "^8.3.2", - "constructs": "^10.0.0" + "uuid": "^8.3.2" }, "peerDependencies": { - "constructs": "^10.0.0", - "aws-cdk-lib": "0.0.0" }, "devDependencies": { - "constructs": "^10.0.0", - "aws-cdk-lib": "^0.0.0" } } \ No newline at end of file diff --git a/source/use_cases/aws-restaurant-management-demo/lib/lambda/service-staff/process-payment/index.js b/source/use_cases/aws-restaurant-management-demo/lib/lambda/service-staff/process-payment/index.js index aba6939f9..10e58c691 100644 --- a/source/use_cases/aws-restaurant-management-demo/lib/lambda/service-staff/process-payment/index.js +++ b/source/use_cases/aws-restaurant-management-demo/lib/lambda/service-staff/process-payment/index.js @@ -12,8 +12,11 @@ */ // Imports -const aws = require('aws-sdk'); -const ddb = new aws.DynamoDB.DocumentClient({apiVersion: '2012-08-10'}); + +const { DynamoDBDocument, UpdateCommand } = require("@aws-sdk/lib-dynamodb"); +const { DynamoDB } = require("@aws-sdk/client-dynamodb"); + +const ddb = DynamoDBDocument.from(new DynamoDB({apiVersion: '2012-08-10'})); // Handler exports.handler = async (event) => { @@ -37,7 +40,7 @@ exports.handler = async (event) => { // Add the item to the database try { - const result = await ddb.update(params).promise(); + const result = await ddb.send(new UpdateCommand(params)); return { statusCode: 200, isBase64Encoded: false, From d17f6192331dc41c89582e2462f02ca09cb18df3 Mon Sep 17 00:00:00 2001 From: AWS Solutions Constructs Automation Date: Fri, 27 Sep 2024 01:11:19 +0000 Subject: [PATCH 6/7] chore(release): 2.71.0 --- CHANGELOG.md | 2 ++ source/lerna.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9f908ccf..2465f9acf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.71.0](https://github.com/awslabs/aws-solutions-constructs/compare/v2.70.0...v2.71.0) (2024-09-27) + ## [2.70.0](https://github.com/awslabs/aws-solutions-constructs/compare/v2.69.0...v2.70.0) (2024-09-18) Built on CDK v2.154.1 diff --git a/source/lerna.json b/source/lerna.json index 1355a32ef..3262810bd 100644 --- a/source/lerna.json +++ b/source/lerna.json @@ -5,5 +5,5 @@ "patterns/@aws-solutions-constructs/*" ], "rejectCycles": "true", - "version": "2.70.0" + "version": "2.71.0" } From 6c33bd7c39a7903f368a09790424b2d581a48372 Mon Sep 17 00:00:00 2001 From: biffgaut Date: Thu, 26 Sep 2024 21:19:56 -0400 Subject: [PATCH 7/7] chore(changelog): Updated CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2465f9acf..8e4d6652d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. See [standa ## [2.71.0](https://github.com/awslabs/aws-solutions-constructs/compare/v2.70.0...v2.71.0) (2024-09-27) +Build on CDK v2.160.0 + +### Bug Fixes +* **aws-openapigateway-lambda:** add id to permission resource id ([#1211](https://github.com/awslabs/aws-solutions-constructs/pull/1211)) + + ## [2.70.0](https://github.com/awslabs/aws-solutions-constructs/compare/v2.69.0...v2.70.0) (2024-09-18) Built on CDK v2.154.1