From b95095a957a610ba065613195c2822135616a68d Mon Sep 17 00:00:00 2001 From: Leandro Damascena Date: Mon, 4 Jan 2021 22:40:34 +0000 Subject: [PATCH 1/5] CSharp and Java versions for the-state-machine stack. Update TS and Python Stack to CDK 1.82.0. Documentation issues #154 --- the-state-machine/README.md | 2 + the-state-machine/csharp/.gitignore | 342 +++++ the-state-machine/csharp/README.md | 59 + the-state-machine/csharp/cdk.json | 11 + .../csharp/lambda_fns/orderPizza.js | 10 + .../csharp/lambda_fns/stateMachineLambda.js | 40 + .../csharp/src/TheStateMachine.sln | 34 + .../src/TheStateMachine/GlobalSuppressions.cs | 1 + .../csharp/src/TheStateMachine/Program.cs | 18 + .../TheStateMachine/TheStateMachine.csproj | 24 + .../TheStateMachine/TheStateMachineStack.cs | 108 ++ the-state-machine/java/.gitignore | 13 + the-state-machine/java/README.md | 28 + the-state-machine/java/cdk.json | 11 + .../java/lambda_fns/orderPizza.js | 10 + .../java/lambda_fns/stateMachineLambda.js | 40 + the-state-machine/java/pom.xml | 91 ++ .../com/cdkpatterns/TheStateMachineApp.java | 15 + .../com/cdkpatterns/TheStateMachineStack.java | 108 ++ .../com/cdkpatterns/TheStateMachineTest.java | 42 + the-state-machine/python/requirements.txt | 12 +- .../the_state_machine_stack.py | 26 +- .../typescript/lib/the-state-machine-stack.ts | 16 +- .../typescript/package-lock.json | 1267 +++++++++-------- the-state-machine/typescript/package.json | 16 +- 25 files changed, 1717 insertions(+), 627 deletions(-) create mode 100644 the-state-machine/csharp/.gitignore create mode 100644 the-state-machine/csharp/README.md create mode 100644 the-state-machine/csharp/cdk.json create mode 100644 the-state-machine/csharp/lambda_fns/orderPizza.js create mode 100644 the-state-machine/csharp/lambda_fns/stateMachineLambda.js create mode 100644 the-state-machine/csharp/src/TheStateMachine.sln create mode 100644 the-state-machine/csharp/src/TheStateMachine/GlobalSuppressions.cs create mode 100644 the-state-machine/csharp/src/TheStateMachine/Program.cs create mode 100644 the-state-machine/csharp/src/TheStateMachine/TheStateMachine.csproj create mode 100644 the-state-machine/csharp/src/TheStateMachine/TheStateMachineStack.cs create mode 100644 the-state-machine/java/.gitignore create mode 100644 the-state-machine/java/README.md create mode 100644 the-state-machine/java/cdk.json create mode 100644 the-state-machine/java/lambda_fns/orderPizza.js create mode 100644 the-state-machine/java/lambda_fns/stateMachineLambda.js create mode 100644 the-state-machine/java/pom.xml create mode 100644 the-state-machine/java/src/main/java/com/cdkpatterns/TheStateMachineApp.java create mode 100644 the-state-machine/java/src/main/java/com/cdkpatterns/TheStateMachineStack.java create mode 100644 the-state-machine/java/src/test/java/com/cdkpatterns/TheStateMachineTest.java diff --git a/the-state-machine/README.md b/the-state-machine/README.md index 8bdcd7df..ed53d00e 100644 --- a/the-state-machine/README.md +++ b/the-state-machine/README.md @@ -21,3 +21,5 @@ If you pass in pineapple or hawaiian you should see the step function flow fail * [TypeScript](typescript/) * [Python](python/) + * [CSharp](csharp/) + * [Java](java/) diff --git a/the-state-machine/csharp/.gitignore b/the-state-machine/csharp/.gitignore new file mode 100644 index 00000000..f555633e --- /dev/null +++ b/the-state-machine/csharp/.gitignore @@ -0,0 +1,342 @@ +# CDK asset staging directory +.cdk.staging +cdk.out + +# Created by https://www.gitignore.io/api/csharp + +### Csharp ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + + +# End of https://www.gitignore.io/api/csharp \ No newline at end of file diff --git a/the-state-machine/csharp/README.md b/the-state-machine/csharp/README.md new file mode 100644 index 00000000..eb3acafa --- /dev/null +++ b/the-state-machine/csharp/README.md @@ -0,0 +1,59 @@ +# The State Machine + +This is an example CDK stack to deploy The State Machine stack described by Jeremy Daly here - https://www.jeremydaly.com/serverless-microservice-patterns-for-aws/#statemachine + +You would use this pattern if you can do your processing asynchronously and you need to have different flows in your logic. + +![Architecture](../img/the-state-machine-arch.png) + +### Stepfunction Logic +![Architecture](../img/statemachine.png) + + +### Testing It Out + +After deployment you should have a proxy api gateway where any url hits a lambda which triggers a step function. You can pass in a queryparameter like '?flavour=pepperoni' or '?flavour=pineapple'. + +If you pass in pineapple or hawaiian you should see the step function flow fail when you check it via the console. + + +# Useful commands + +* `dotnet build src` compile this app +* `cdk deploy` deploy this stack to your default AWS account/region +* `cdk diff` compare deployed stack with current state +* `cdk synth` emits the synthesized CloudFormation template + +## Deploy with AWS Cloud9 + +* Create an **Ubuntu** AWS Cloud9 EC2 development environment +* Add the Microsoft repository + ``` + wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb + ``` + ``` + sudo dpkg -i packages-microsoft-prod.deb + ``` +* Install the .NET Core SDK + ``` + sudo apt-get update; \ + sudo apt-get install -y apt-transport-https && \ + sudo apt-get update && \ + sudo apt-get install -y dotnet-sdk-3.1 + ``` +* Clone the CDK Patterns repo + ``` + git clone https://github.com/cdk-patterns/serverless.git + ``` +* Change directory + ``` + cd serverless/the-scalable-webhook/csharp + ``` +* Build the project to see if .NET Core has been setup correctly (optional) + ``` + dotnet build src + ``` +* Deploy the stack + ``` + cdk deploy + ``` diff --git a/the-state-machine/csharp/cdk.json b/the-state-machine/csharp/cdk.json new file mode 100644 index 00000000..b5656549 --- /dev/null +++ b/the-state-machine/csharp/cdk.json @@ -0,0 +1,11 @@ +{ + "app": "dotnet run -p src/TheStateMachine/TheStateMachine.csproj", + "context": { + "@aws-cdk/core:enableStackNameDuplicates": "true", + "aws-cdk:enableDiffNoFail": "true", + "@aws-cdk/core:stackRelativeExports": "true", + "@aws-cdk/aws-ecr-assets:dockerIgnoreSupport": true, + "@aws-cdk/aws-secretsmanager:parseOwnedSecretName": true, + "@aws-cdk/aws-kms:defaultKeyPolicies": true + } +} diff --git a/the-state-machine/csharp/lambda_fns/orderPizza.js b/the-state-machine/csharp/lambda_fns/orderPizza.js new file mode 100644 index 00000000..7dcaae3d --- /dev/null +++ b/the-state-machine/csharp/lambda_fns/orderPizza.js @@ -0,0 +1,10 @@ +"use strict"; +exports.handler = async function (flavour) { + console.log("Requested Pizza :", JSON.stringify(flavour, undefined, 2)); + let containsPineapple = false; + if (flavour == 'pineapple' || flavour == 'hawaiian') { + containsPineapple = true; + } + return { 'containsPineapple': containsPineapple }; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJQaXp6YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9yZGVyUGl6emEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxXQUFVLE9BQVc7SUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV4RSxJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUU5QixJQUFHLE9BQU8sSUFBSSxXQUFXLElBQUksT0FBTyxJQUFHLFVBQVUsRUFBQztRQUM5QyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7S0FDNUI7SUFFRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUMsQ0FBQTtBQUNuRCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmhhbmRsZXIgPSBhc3luYyBmdW5jdGlvbihmbGF2b3VyOmFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJSZXF1ZXN0ZWQgUGl6emEgOlwiLCBKU09OLnN0cmluZ2lmeShmbGF2b3VyLCB1bmRlZmluZWQsIDIpKTtcclxuICAgIFxyXG4gICAgbGV0IGNvbnRhaW5zUGluZWFwcGxlID0gZmFsc2U7XHJcbiAgICBcclxuICAgIGlmKGZsYXZvdXIgPT0gJ3BpbmVhcHBsZScgfHwgZmxhdm91ciA9PSdoYXdhaWlhbicpe1xyXG4gICAgICAgIGNvbnRhaW5zUGluZWFwcGxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geydjb250YWluc1BpbmVhcHBsZSc6IGNvbnRhaW5zUGluZWFwcGxlfVxyXG59Il19 \ No newline at end of file diff --git a/the-state-machine/csharp/lambda_fns/stateMachineLambda.js b/the-state-machine/csharp/lambda_fns/stateMachineLambda.js new file mode 100644 index 00000000..dc7dfac3 --- /dev/null +++ b/the-state-machine/csharp/lambda_fns/stateMachineLambda.js @@ -0,0 +1,40 @@ +"use strict"; +const AWS = require('aws-sdk'); +const stepFunctions = new AWS.StepFunctions({ + region: 'us-east-1' +}); +module.exports.handler = (event, context, callback) => { + let pizzaType = 'pepperoni'; + if (null != event.queryStringParameters) { + if (typeof event.queryStringParameters.flavour != 'undefined') { + pizzaType = event.queryStringParameters.flavour; + } + } + const params = { + stateMachineArn: process.env.statemachine_arn, + input: JSON.stringify({ flavour: pizzaType }) + }; + stepFunctions.startExecution(params, (err, data) => { + if (err) { + console.log(err); + const response = { + statusCode: 500, + body: JSON.stringify({ + message: 'There was an error' + }) + }; + callback(null, response); + } + else { + console.log(data); + const response = { + statusCode: 200, + body: JSON.stringify({ + message: 'The Pizzeria is processing your order' + }) + }; + callback(null, response); + } + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVNYWNoaW5lTGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhdGVNYWNoaW5lTGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFL0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQzVDLE1BQU0sRUFBRSxXQUFXO0NBQ2xCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBUyxFQUFFLE9BQVcsRUFBRSxRQUFZLEVBQUUsRUFBRTtJQUM5RCxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUM7SUFFNUIsSUFBRyxJQUFJLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFDO1FBQ25DLElBQUcsT0FBTyxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxJQUFJLFdBQVcsRUFBRTtZQUMxRCxTQUFTLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztTQUNuRDtLQUNKO0lBRUQsTUFBTSxNQUFNLEdBQUc7UUFDWCxlQUFlLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0I7UUFDN0MsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUM7S0FDN0MsQ0FBQztJQUVGLGFBQWEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBTyxFQUFFLElBQVEsRUFBRSxFQUFFO1FBQ3ZELElBQUksR0FBRyxFQUFFO1lBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQixNQUFNLFFBQVEsR0FBRztnQkFDYixVQUFVLEVBQUUsR0FBRztnQkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDckIsT0FBTyxFQUFFLG9CQUFvQjtpQkFDNUIsQ0FBQzthQUNMLENBQUM7WUFDRixRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3hCO2FBQU07WUFDUCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sUUFBUSxHQUFHO2dCQUNiLFVBQVUsRUFBRSxHQUFHO2dCQUNmLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNyQixPQUFPLEVBQUUsdUNBQXVDO2lCQUMvQyxDQUFDO2FBQ0wsQ0FBQztZQUNGLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDeEI7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEFXUyA9IHJlcXVpcmUoJ2F3cy1zZGsnKTtcclxuXHJcbmNvbnN0IHN0ZXBGdW5jdGlvbnMgPSBuZXcgQVdTLlN0ZXBGdW5jdGlvbnMoe1xyXG5yZWdpb246ICd1cy1lYXN0LTEnXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMuaGFuZGxlciA9IChldmVudDphbnksIGNvbnRleHQ6YW55LCBjYWxsYmFjazphbnkpID0+IHtcclxuICAgIGxldCBwaXp6YVR5cGUgPSAncGVwcGVyb25pJztcclxuICAgIFxyXG4gICAgaWYobnVsbCAhPSBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMpe1xyXG4gICAgICAgIGlmKHR5cGVvZiBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMuZmxhdm91ciAhPSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBwaXp6YVR5cGUgPSBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMuZmxhdm91cjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICBzdGF0ZU1hY2hpbmVBcm46IHByb2Nlc3MuZW52LnN0YXRlbWFjaGluZV9hcm4sXHJcbiAgICAgICAgaW5wdXQ6IEpTT04uc3RyaW5naWZ5KHtmbGF2b3VyOnBpenphVHlwZX0pXHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICBzdGVwRnVuY3Rpb25zLnN0YXJ0RXhlY3V0aW9uKHBhcmFtcywgKGVycjphbnksIGRhdGE6YW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IDUwMCxcclxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgd2FzIGFuIGVycm9yJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcclxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlIFBpenplcmlhIGlzIHByb2Nlc3NpbmcgeW91ciBvcmRlcidcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTsiXX0= \ No newline at end of file diff --git a/the-state-machine/csharp/src/TheStateMachine.sln b/the-state-machine/csharp/src/TheStateMachine.sln new file mode 100644 index 00000000..b1aea04a --- /dev/null +++ b/the-state-machine/csharp/src/TheStateMachine.sln @@ -0,0 +1,34 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26124.0 +MinimumVisualStudioVersion = 15.0.26124.0 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheStateMachine", "TheStateMachine\TheStateMachine.csproj", "{1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}.Debug|x64.ActiveCfg = Debug|Any CPU + {1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}.Debug|x64.Build.0 = Debug|Any CPU + {1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}.Debug|x86.ActiveCfg = Debug|Any CPU + {1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}.Debug|x86.Build.0 = Debug|Any CPU + {1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}.Release|Any CPU.Build.0 = Release|Any CPU + {1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}.Release|x64.ActiveCfg = Release|Any CPU + {1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}.Release|x64.Build.0 = Release|Any CPU + {1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}.Release|x86.ActiveCfg = Release|Any CPU + {1E7C2FF2-7B2D-4AD8-BC69-91F0BB4EA161}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/the-state-machine/csharp/src/TheStateMachine/GlobalSuppressions.cs b/the-state-machine/csharp/src/TheStateMachine/GlobalSuppressions.cs new file mode 100644 index 00000000..26233fcb --- /dev/null +++ b/the-state-machine/csharp/src/TheStateMachine/GlobalSuppressions.cs @@ -0,0 +1 @@ +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Potential Code Quality Issues", "RECS0026:Possible unassigned object created by 'new'", Justification = "Constructs add themselves to the scope in which they are created")] diff --git a/the-state-machine/csharp/src/TheStateMachine/Program.cs b/the-state-machine/csharp/src/TheStateMachine/Program.cs new file mode 100644 index 00000000..5a7a8d3a --- /dev/null +++ b/the-state-machine/csharp/src/TheStateMachine/Program.cs @@ -0,0 +1,18 @@ +using Amazon.CDK; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace TheStateMachine +{ + sealed class Program + { + + public static void Main(string[] args) + { + var app = new App(); + new TheStateMachineStack(app, "TheStateMachineStack"); + app.Synth(); + } + } +} diff --git a/the-state-machine/csharp/src/TheStateMachine/TheStateMachine.csproj b/the-state-machine/csharp/src/TheStateMachine/TheStateMachine.csproj new file mode 100644 index 00000000..41af1592 --- /dev/null +++ b/the-state-machine/csharp/src/TheStateMachine/TheStateMachine.csproj @@ -0,0 +1,24 @@ + + + + Exe + netcoreapp3.1 + + Major + + + + + + + + + + + + + + + diff --git a/the-state-machine/csharp/src/TheStateMachine/TheStateMachineStack.cs b/the-state-machine/csharp/src/TheStateMachine/TheStateMachineStack.cs new file mode 100644 index 00000000..7cf24070 --- /dev/null +++ b/the-state-machine/csharp/src/TheStateMachine/TheStateMachineStack.cs @@ -0,0 +1,108 @@ +using Amazon.CDK; +using Lambda = Amazon.CDK.AWS.Lambda; +using SQS = Amazon.CDK.AWS.SQS; +using APIGateway = Amazon.CDK.AWS.APIGateway; +using StepFunction = Amazon.CDK.AWS.StepFunctions; +using StepFuncionTasks = Amazon.CDK.AWS.StepFunctions.Tasks; +using System.Collections.Generic; + +namespace TheStateMachine +{ + public class TheStateMachineStack : Stack + { + + readonly private Lambda.Function _pineppaleCheckHandler; + readonly private Lambda.Function _stateMachineHandler; + readonly private StepFuncionTasks.LambdaInvoke _orderPizzaTask; + readonly private StepFunction.Fail _jobFailed; + readonly private StepFunction.Pass _cookPizza; + readonly private StepFunction.Chain _chainDefinition; + readonly private StepFunction.StateMachine _stateMachine; + readonly private SQS.Queue _deadeLetterQueue; + + internal TheStateMachineStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) + { + + // Step Function Starts Here + + // The first thing we need to do is see if they are asking for pineapple on a pizza + _pineppaleCheckHandler = new Lambda.Function(this, "pineappleCheckLambdaHandler", new Lambda.FunctionProps + { + Runtime = Lambda.Runtime.NODEJS_12_X, + Code = Lambda.Code.FromAsset("lambda_fns"), + Handler = "orderPizza.handler" + }); + + /* + * Step functions are built up of steps, we need to define our first step + * This step was refactored due to Deprecated function + */ + _orderPizzaTask = new StepFuncionTasks.LambdaInvoke(this, "Order Pizza Job", new StepFuncionTasks.LambdaInvokeProps + { + LambdaFunction = _pineppaleCheckHandler, + InputPath = "$.flavour", + ResultPath = "$.pineappleAnalysis", + PayloadResponseOnly = true + }); + + // Pizza Order failure step defined + _jobFailed = new StepFunction.Fail(this, "Sorry, We Dont add Pineapple", new StepFunction.FailProps + { + Cause = "Failed To Make Pizza", + Error = "They asked for Pineapple" + }); + + // If they didnt ask for pineapple let's cook the pizza + _cookPizza = new StepFunction.Pass(this, "Lets make your pizza"); + + // If they ask for a pizza with pineapple, fail. Otherwise cook the pizza + _chainDefinition = StepFunction.Chain + .Start(_orderPizzaTask) + .Next(new StepFunction.Choice(this, "With Pineapple?") // Logical choice added to flow + .When(StepFunction.Condition.BooleanEquals("$.pineappleAnalysis.containsPineapple", true), _jobFailed) + .Otherwise(_cookPizza)); + + // Building the state machine + _stateMachine = new StepFunction.StateMachine(this, "StateMachine", new StepFunction.StateMachineProps + { + Definition = _chainDefinition, + Timeout = Duration.Minutes(5) + }); + + /** + * Dead Letter Queue Setup + * SQS creation + * https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html + */ + _deadeLetterQueue = new SQS.Queue(this, "stateMachineLambdaDLQ", new SQS.QueueProps + { + VisibilityTimeout = Duration.Seconds(300) + }); + + // defines an AWS Lambda resource to connect to our API Gateway + _stateMachineHandler = new Lambda.Function(this, "stateMachineLambdaHandler", new Lambda.FunctionProps + { + Runtime = Lambda.Runtime.NODEJS_12_X, + Code = Lambda.Code.FromAsset("lambda_fns"), + Handler = "stateMachineLambda.handler", + DeadLetterQueue = _deadeLetterQueue, + Environment = new Dictionary + { + { "statemachine_arn", _stateMachine.StateMachineArn } + } + }); + + // Grants to state machine execution + _stateMachine.GrantStartExecution(_stateMachineHandler); + + /* + * Simple API Gateway proxy integration + */ + // defines an API Gateway REST API resource backed by our "sqs_publish_lambda" function. + new APIGateway.LambdaRestApi(this, "Endpoint", new APIGateway.LambdaRestApiProps + { + Handler = _stateMachineHandler + }); + } + } +} diff --git a/the-state-machine/java/.gitignore b/the-state-machine/java/.gitignore new file mode 100644 index 00000000..1db21f16 --- /dev/null +++ b/the-state-machine/java/.gitignore @@ -0,0 +1,13 @@ +.classpath.txt +target +.classpath +.project +.idea +.settings +.vscode +*.iml + +# CDK asset staging directory +.cdk.staging +cdk.out + diff --git a/the-state-machine/java/README.md b/the-state-machine/java/README.md new file mode 100644 index 00000000..2785b2bc --- /dev/null +++ b/the-state-machine/java/README.md @@ -0,0 +1,28 @@ +# The State Machine + +This is an example CDK stack to deploy The State Machine stack described by Jeremy Daly here - https://www.jeremydaly.com/serverless-microservice-patterns-for-aws/#statemachine + +You would use this pattern if you can do your processing asynchronously and you need to have different flows in your logic. + +![Architecture](../img/the-state-machine-arch.png) + +### Stepfunction Logic +![Architecture](../img/statemachine.png) + + +### Testing It Out + +After deployment you should have a proxy api gateway where any url hits a lambda which triggers a step function. You can pass in a queryparameter like '?flavour=pepperoni' or '?flavour=pineapple'. + +If you pass in pineapple or hawaiian you should see the step function flow fail when you check it via the console. + + + +## Useful commands + + * `mvn package` compile and run tests + * `cdk ls` list all stacks in the app + * `cdk synth` emits the synthesized CloudFormation template + * `cdk deploy` deploy this stack to your default AWS account/region + * `cdk diff` compare deployed stack with current state + * `cdk docs` open CDK documentation \ No newline at end of file diff --git a/the-state-machine/java/cdk.json b/the-state-machine/java/cdk.json new file mode 100644 index 00000000..3b9f54cc --- /dev/null +++ b/the-state-machine/java/cdk.json @@ -0,0 +1,11 @@ +{ + "app": "mvn -e -q compile exec:java", + "context": { + "@aws-cdk/core:enableStackNameDuplicates": "true", + "aws-cdk:enableDiffNoFail": "true", + "@aws-cdk/core:stackRelativeExports": "true", + "@aws-cdk/aws-ecr-assets:dockerIgnoreSupport": true, + "@aws-cdk/aws-secretsmanager:parseOwnedSecretName": true, + "@aws-cdk/aws-kms:defaultKeyPolicies": true + } +} diff --git a/the-state-machine/java/lambda_fns/orderPizza.js b/the-state-machine/java/lambda_fns/orderPizza.js new file mode 100644 index 00000000..7dcaae3d --- /dev/null +++ b/the-state-machine/java/lambda_fns/orderPizza.js @@ -0,0 +1,10 @@ +"use strict"; +exports.handler = async function (flavour) { + console.log("Requested Pizza :", JSON.stringify(flavour, undefined, 2)); + let containsPineapple = false; + if (flavour == 'pineapple' || flavour == 'hawaiian') { + containsPineapple = true; + } + return { 'containsPineapple': containsPineapple }; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJQaXp6YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9yZGVyUGl6emEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxXQUFVLE9BQVc7SUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV4RSxJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUU5QixJQUFHLE9BQU8sSUFBSSxXQUFXLElBQUksT0FBTyxJQUFHLFVBQVUsRUFBQztRQUM5QyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7S0FDNUI7SUFFRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUMsQ0FBQTtBQUNuRCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmhhbmRsZXIgPSBhc3luYyBmdW5jdGlvbihmbGF2b3VyOmFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJSZXF1ZXN0ZWQgUGl6emEgOlwiLCBKU09OLnN0cmluZ2lmeShmbGF2b3VyLCB1bmRlZmluZWQsIDIpKTtcclxuICAgIFxyXG4gICAgbGV0IGNvbnRhaW5zUGluZWFwcGxlID0gZmFsc2U7XHJcbiAgICBcclxuICAgIGlmKGZsYXZvdXIgPT0gJ3BpbmVhcHBsZScgfHwgZmxhdm91ciA9PSdoYXdhaWlhbicpe1xyXG4gICAgICAgIGNvbnRhaW5zUGluZWFwcGxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geydjb250YWluc1BpbmVhcHBsZSc6IGNvbnRhaW5zUGluZWFwcGxlfVxyXG59Il19 \ No newline at end of file diff --git a/the-state-machine/java/lambda_fns/stateMachineLambda.js b/the-state-machine/java/lambda_fns/stateMachineLambda.js new file mode 100644 index 00000000..dc7dfac3 --- /dev/null +++ b/the-state-machine/java/lambda_fns/stateMachineLambda.js @@ -0,0 +1,40 @@ +"use strict"; +const AWS = require('aws-sdk'); +const stepFunctions = new AWS.StepFunctions({ + region: 'us-east-1' +}); +module.exports.handler = (event, context, callback) => { + let pizzaType = 'pepperoni'; + if (null != event.queryStringParameters) { + if (typeof event.queryStringParameters.flavour != 'undefined') { + pizzaType = event.queryStringParameters.flavour; + } + } + const params = { + stateMachineArn: process.env.statemachine_arn, + input: JSON.stringify({ flavour: pizzaType }) + }; + stepFunctions.startExecution(params, (err, data) => { + if (err) { + console.log(err); + const response = { + statusCode: 500, + body: JSON.stringify({ + message: 'There was an error' + }) + }; + callback(null, response); + } + else { + console.log(data); + const response = { + statusCode: 200, + body: JSON.stringify({ + message: 'The Pizzeria is processing your order' + }) + }; + callback(null, response); + } + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVNYWNoaW5lTGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhdGVNYWNoaW5lTGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFL0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQzVDLE1BQU0sRUFBRSxXQUFXO0NBQ2xCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBUyxFQUFFLE9BQVcsRUFBRSxRQUFZLEVBQUUsRUFBRTtJQUM5RCxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUM7SUFFNUIsSUFBRyxJQUFJLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFDO1FBQ25DLElBQUcsT0FBTyxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxJQUFJLFdBQVcsRUFBRTtZQUMxRCxTQUFTLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztTQUNuRDtLQUNKO0lBRUQsTUFBTSxNQUFNLEdBQUc7UUFDWCxlQUFlLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0I7UUFDN0MsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxPQUFPLEVBQUMsU0FBUyxFQUFDLENBQUM7S0FDN0MsQ0FBQztJQUVGLGFBQWEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBTyxFQUFFLElBQVEsRUFBRSxFQUFFO1FBQ3ZELElBQUksR0FBRyxFQUFFO1lBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQixNQUFNLFFBQVEsR0FBRztnQkFDYixVQUFVLEVBQUUsR0FBRztnQkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDckIsT0FBTyxFQUFFLG9CQUFvQjtpQkFDNUIsQ0FBQzthQUNMLENBQUM7WUFDRixRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3hCO2FBQU07WUFDUCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sUUFBUSxHQUFHO2dCQUNiLFVBQVUsRUFBRSxHQUFHO2dCQUNmLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNyQixPQUFPLEVBQUUsdUNBQXVDO2lCQUMvQyxDQUFDO2FBQ0wsQ0FBQztZQUNGLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDeEI7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEFXUyA9IHJlcXVpcmUoJ2F3cy1zZGsnKTtcclxuXHJcbmNvbnN0IHN0ZXBGdW5jdGlvbnMgPSBuZXcgQVdTLlN0ZXBGdW5jdGlvbnMoe1xyXG5yZWdpb246ICd1cy1lYXN0LTEnXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMuaGFuZGxlciA9IChldmVudDphbnksIGNvbnRleHQ6YW55LCBjYWxsYmFjazphbnkpID0+IHtcclxuICAgIGxldCBwaXp6YVR5cGUgPSAncGVwcGVyb25pJztcclxuICAgIFxyXG4gICAgaWYobnVsbCAhPSBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMpe1xyXG4gICAgICAgIGlmKHR5cGVvZiBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMuZmxhdm91ciAhPSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBwaXp6YVR5cGUgPSBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMuZmxhdm91cjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICBzdGF0ZU1hY2hpbmVBcm46IHByb2Nlc3MuZW52LnN0YXRlbWFjaGluZV9hcm4sXHJcbiAgICAgICAgaW5wdXQ6IEpTT04uc3RyaW5naWZ5KHtmbGF2b3VyOnBpenphVHlwZX0pXHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICBzdGVwRnVuY3Rpb25zLnN0YXJ0RXhlY3V0aW9uKHBhcmFtcywgKGVycjphbnksIGRhdGE6YW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IDUwMCxcclxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgd2FzIGFuIGVycm9yJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcclxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlIFBpenplcmlhIGlzIHByb2Nlc3NpbmcgeW91ciBvcmRlcidcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTsiXX0= \ No newline at end of file diff --git a/the-state-machine/java/pom.xml b/the-state-machine/java/pom.xml new file mode 100644 index 00000000..a67ff5da --- /dev/null +++ b/the-state-machine/java/pom.xml @@ -0,0 +1,91 @@ + + + 4.0.0 + + com.cdkpatterns + the-state-machine + 0.1 + + + UTF-8 + 1.82.0 + 5.7.0 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + + + + + org.codehaus.mojo + exec-maven-plugin + 3.0.0 + + com.cdkpatterns.TheStateMachineApp + + + + + + + + + software.amazon.awscdk + core + ${cdk.version} + + + software.amazon.awscdk + lambda + ${cdk.version} + + + software.amazon.awscdk + sqs + ${cdk.version} + + + software.amazon.awscdk + apigateway + ${cdk.version} + + + software.amazon.awscdk + stepfunctions + ${cdk.version} + + + software.amazon.awscdk + stepfunctions-tasks + ${cdk.version} + + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + org.assertj + assertj-core + 3.18.1 + test + + + diff --git a/the-state-machine/java/src/main/java/com/cdkpatterns/TheStateMachineApp.java b/the-state-machine/java/src/main/java/com/cdkpatterns/TheStateMachineApp.java new file mode 100644 index 00000000..25688292 --- /dev/null +++ b/the-state-machine/java/src/main/java/com/cdkpatterns/TheStateMachineApp.java @@ -0,0 +1,15 @@ +package com.cdkpatterns; + +import software.amazon.awscdk.core.App; + +import java.util.Arrays; + +public class TheStateMachineApp { + public static void main(final String[] args) { + App app = new App(); + + new TheStateMachineStack(app, "TheStateMachineStack"); + + app.synth(); + } +} diff --git a/the-state-machine/java/src/main/java/com/cdkpatterns/TheStateMachineStack.java b/the-state-machine/java/src/main/java/com/cdkpatterns/TheStateMachineStack.java new file mode 100644 index 00000000..27559b01 --- /dev/null +++ b/the-state-machine/java/src/main/java/com/cdkpatterns/TheStateMachineStack.java @@ -0,0 +1,108 @@ +package com.cdkpatterns; + +import java.util.Map; + +import software.amazon.awscdk.core.Construct; +import software.amazon.awscdk.core.Duration; +import software.amazon.awscdk.core.Stack; +import software.amazon.awscdk.core.StackProps; +import software.amazon.awscdk.services.lambda.Code; +import software.amazon.awscdk.services.lambda.Function; +import software.amazon.awscdk.services.lambda.Runtime; +import software.amazon.awscdk.services.stepfunctions.tasks.LambdaInvoke; +import software.amazon.awscdk.services.stepfunctions.Fail; +import software.amazon.awscdk.services.stepfunctions.Pass; +import software.amazon.awscdk.services.stepfunctions.Chain; +import software.amazon.awscdk.services.stepfunctions.Choice; +import software.amazon.awscdk.services.stepfunctions.Condition; +import software.amazon.awscdk.services.stepfunctions.StateMachine; +import software.amazon.awscdk.services.sqs.Queue; +import software.amazon.awscdk.services.apigateway.LambdaRestApi; + +public class TheStateMachineStack extends Stack { + public TheStateMachineStack(final Construct scope, final String id) { + this(scope, id, null); + } + + public TheStateMachineStack(final Construct scope, final String id, final StackProps props) { + super(scope, id, props); + + // Step Function Starts Here + + // The first thing we need to do is see if they are asking for pineapple on a pizza + Function pineappleCheckHandler = Function.Builder.create(this, "pineappleCheckLambdaHandler") + .runtime(Runtime.NODEJS_12_X) // execution environment + .code(Code.fromAsset("lambda_fns")) // code loaded from the "lambda_fns" directory + .handler("orderPizza.handler") // file is "orderPizza", function is "handler" + .build(); + + /* + * Step functions are built up of steps, we need to define our first step + * This step was refactored due to Deprecated function + */ + LambdaInvoke orderPizzaTask = LambdaInvoke.Builder.create(this, "Order Pizza Job") + .lambdaFunction(pineappleCheckHandler) + .inputPath("$.flavour") + .resultPath("$.pineappleAnalysis") + .payloadResponseOnly(true) + .build(); + + // Pizza Order failure step defined + Fail jobFailed = Fail.Builder.create(this, "Sorry, We Dont add Pineapple") + .cause("Failed To Make Pizza") + .error("They asked for Pineapple") + .build(); + + // If they didn't ask for pineapple let's cook the pizza + Pass cookPizza = Pass.Builder.create(this, "Lets make your pizza") + .build(); + + + // If they ask for a pizza with pineapple, fail. Otherwise cook the pizza + Chain chainDefinition = Chain + .start(orderPizzaTask) + .next(Choice.Builder.create(this, "With Pineapple?") // Logical choice added to flow + .build() + // Look at the "status" field + .when(Condition.booleanEquals("$.pineappleAnalysis.containsPineapple", true), jobFailed) // Fail for pineapple + .otherwise(cookPizza)); + + // Building the state machine + StateMachine stateMachine = StateMachine.Builder.create(this, "StateMachine") + .definition(chainDefinition) + .timeout(Duration.minutes(5)) + .build(); + + /* + * Dead Letter Queue Setup + * SQS creation + * https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html + */ + Queue deadLetterQueue = Queue.Builder.create(this, "stateMachineLambdaDLQ") + .visibilityTimeout(Duration.seconds(300)) + .build(); + + // defines an AWS Lambda resource to connect to our API Gateway + Function stateMachineHandler = Function.Builder.create(this, "stateMachineLambdaHandler") + .runtime(Runtime.NODEJS_12_X) // execution environment + .code(Code.fromAsset("lambda_fns")) // code loaded from the "lambda_fns" directory + .handler("stateMachineLambda.handler") // file is "stateMachineLambda", function is "handler + .deadLetterQueue(deadLetterQueue) + .environment(Map.of( + "statemachine_arn", stateMachine.getStateMachineArn() + )) + .build(); + + + // Grants to state machine execution + stateMachine.grantStartExecution(stateMachineHandler); + + /* + * Simple API Gateway proxy integration + */ + // defines an API Gateway REST API resource backed by our "sqs_publish_lambda" function. + LambdaRestApi.Builder.create(this, "Endpoint") + .handler(stateMachineHandler) + .build(); + } +} diff --git a/the-state-machine/java/src/test/java/com/cdkpatterns/TheStateMachineTest.java b/the-state-machine/java/src/test/java/com/cdkpatterns/TheStateMachineTest.java new file mode 100644 index 00000000..b6e558fe --- /dev/null +++ b/the-state-machine/java/src/test/java/com/cdkpatterns/TheStateMachineTest.java @@ -0,0 +1,42 @@ +package com.cdkpatterns; + +import software.amazon.awscdk.core.App; + +import com.cdkpatterns.TheStateMachineStack; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; + +import java.io.IOException; + +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; + +public class TheStateMachineTest { + private final static ObjectMapper JSON = + new ObjectMapper().configure(SerializationFeature.INDENT_OUTPUT, true); + + @Test + public void testStack() throws IOException { + App app = new App(); + TheStateMachineStack stack = new TheStateMachineStack(app, "test"); + + // synthesize the stack to a CloudFormation template and compare against + // a checked-in JSON file. + JsonNode actual = JSON.valueToTree(app.synth().getStackArtifact(stack.getArtifactId()).getTemplate()); + + // After Synth, performs some basic tests + + // AWS::StepFunctions::StateMachine exists test + assertThat(actual.toString()).contains("AWS::StepFunctions::StateMachine"); + + // AWS::Lambda::Function exists test + assertThat(actual.toString()).contains("AWS::Lambda::Function"); + + // AWS::SQS::Queue exists test + assertThat(actual.toString()).contains("AWS::SQS::Queue"); + + // AWS::ApiGateway::Method exists test + assertThat(actual.toString()).contains("AWS::ApiGateway::Method"); + } +} diff --git a/the-state-machine/python/requirements.txt b/the-state-machine/python/requirements.txt index 94b0b4ea..c085442f 100644 --- a/the-state-machine/python/requirements.txt +++ b/the-state-machine/python/requirements.txt @@ -1,7 +1,7 @@ -e . -aws-cdk.core==1.74.0 -aws-cdk.aws-lambda==1.74.0 -aws-cdk.aws-stepfunctions==1.74.0 -aws-cdk.aws-stepfunctions-tasks==1.74.0 -aws-cdk.aws-sqs==1.74.0 -aws-cdk.aws_apigateway==1.74.0 +aws-cdk.core==1.82.0 +aws-cdk.aws-lambda==1.82.0 +aws-cdk.aws-stepfunctions==1.82.0 +aws-cdk.aws-stepfunctions-tasks==1.82.0 +aws-cdk.aws-sqs==1.82.0 +aws-cdk.aws_apigateway==1.82.0 diff --git a/the-state-machine/python/the_state_machine/the_state_machine_stack.py b/the-state-machine/python/the_state_machine/the_state_machine_stack.py index 95d803f6..9469eb15 100644 --- a/the-state-machine/python/the_state_machine/the_state_machine_stack.py +++ b/the-state-machine/python/the_state_machine/the_state_machine_stack.py @@ -17,17 +17,19 @@ def __init__(self, scope: core.Construct, id: str, **kwargs) -> None: # The first thing we need to do is see if they are asking for pineapple on a pizza pineapple_check_lambda = _lambda.Function(self, "pineappleCheckLambdaHandler", - runtime=_lambda.Runtime.NODEJS_12_X, - handler="orderPizza.handler", - code=_lambda.Code.from_asset("lambda_fns"), + runtime=_lambda.Runtime.NODEJS_12_X, # execution environment + handler="orderPizza.handler", # file is "orderPizza", function is "handler" + code=_lambda.Code.from_asset("lambda_fns"), # code loaded from the "lambda_fns" directory ) # Step functions are built up of steps, we need to define our first step - order_pizza = step_fn.Task(self, 'Order Pizza Job', - task=step_fn_tasks.InvokeFunction(pineapple_check_lambda), - input_path='$.flavour', - result_path='$.pineappleAnalysis' - ) + # Refactored code because sfn.Task is Depecrated right now. Using StepFunctionsTaks.LambdaInvoke instead + # https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-stepfunctions.Task.html + order_pizza = step_fn_tasks.LambdaInvoke(self, 'Order Pizza Job', + lambda_function=pineapple_check_lambda, + input_path='$.flavour', + result_path='$.pineappleAnalysis', + payload_response_only=True) # Pizza Order failure step defined job_failed = step_fn.Fail(self, 'Sorry, We Dont add Pineapple', @@ -47,13 +49,14 @@ def __init__(self, scope: core.Construct, id: str, **kwargs) -> None: state_machine = step_fn.StateMachine(self, 'StateMachine', definition=definition, timeout=core.Duration.minutes(5)) # Dead Letter Queue Setup + # https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html dlq = sqs.Queue(self, 'stateMachineLambdaDLQ', visibility_timeout=core.Duration.seconds(300)) # defines an AWS Lambda resource to connect to our API Gateway state_machine_lambda = _lambda.Function(self, "stateMachineLambdaHandler", - runtime=_lambda.Runtime.NODEJS_12_X, - handler="stateMachineLambda.handler", - code=_lambda.Code.from_asset("lambda_fns"), + runtime=_lambda.Runtime.NODEJS_12_X, # execution environment + handler="stateMachineLambda.handler", # file is "stateMachineLambda", function is "handler + code=_lambda.Code.from_asset("lambda_fns"), # code loaded from the "lambda_fns" directory environment={ 'statemachine_arn': state_machine.state_machine_arn } @@ -61,6 +64,7 @@ def __init__(self, scope: core.Construct, id: str, **kwargs) -> None: state_machine.grant_start_execution(state_machine_lambda) + # Simple API Gateway proxy integration # defines an API Gateway REST API resource backed by our "sqs_publish_lambda" function. api_gw.LambdaRestApi(self, 'Endpoint', handler=state_machine_lambda diff --git a/the-state-machine/typescript/lib/the-state-machine-stack.ts b/the-state-machine/typescript/lib/the-state-machine-stack.ts index 2cfa616b..f6fdca97 100644 --- a/the-state-machine/typescript/lib/the-state-machine-stack.ts +++ b/the-state-machine/typescript/lib/the-state-machine-stack.ts @@ -16,16 +16,19 @@ export class TheStateMachineStack extends cdk.Stack { //The first thing we need to do is see if they are asking for pineapple on a pizza let pineappleCheckLambda = new lambda.Function(this, 'pineappleCheckLambdaHandler', { runtime: lambda.Runtime.NODEJS_12_X, // execution environment - code: lambda.Code.fromAsset('lambda-fns'), // code loaded from the "lambda" directory + code: lambda.Code.fromAsset('lambda-fns'), // code loaded from the "lambda-fns" directory handler: 'orderPizza.handler' // file is "orderPizza", function is "handler" }); // Step functions are built up of steps, we need to define our first step - const orderPizza = new sfn.Task(this, 'Order Pizza Job', { - task: new tasks.InvokeFunction(pineappleCheckLambda), + // Refactored code because sfn.Task is Depecrated right now. Using StepFunctionsTaks.LambdaInvoke instead + // https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-stepfunctions.Task.html + const orderPizza = new tasks.LambdaInvoke(this, "Order Pizza Job", { + lambdaFunction: pineappleCheckLambda, inputPath: '$.flavour', resultPath: '$.pineappleAnalysis', - }); + payloadResponseOnly: true + }) // Pizza Order failure step defined const jobFailed = new sfn.Fail(this, 'Sorry, We Dont add Pineapple', { @@ -52,6 +55,7 @@ export class TheStateMachineStack extends cdk.Stack { /** * Dead Letter Queue Setup * SQS creation + * https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html */ const dlq = new sqs.Queue(this, 'stateMachineLambdaDLQ', { visibilityTimeout: cdk.Duration.seconds(300) @@ -60,8 +64,8 @@ export class TheStateMachineStack extends cdk.Stack { // defines an AWS Lambda resource to connect to our API Gateway const stateMachineLambda = new lambda.Function(this, 'stateMachineLambdaHandler', { runtime: lambda.Runtime.NODEJS_12_X, // execution environment - code: lambda.Code.fromAsset('lambda-fns'), // code loaded from the "lambda" directory - handler: 'stateMachineLambda.handler', // file is "lambda", function is "handler + code: lambda.Code.fromAsset('lambda-fns'), // code loaded from the "lambda-fns" directory + handler: 'stateMachineLambda.handler', // file is "stateMachineLambda", function is "handler deadLetterQueue:dlq, environment: { statemachine_arn: stateMachine.stateMachineArn diff --git a/the-state-machine/typescript/package-lock.json b/the-state-machine/typescript/package-lock.json index a94cd9e9..8b3977f4 100644 --- a/the-state-machine/typescript/package-lock.json +++ b/the-state-machine/typescript/package-lock.json @@ -5,231 +5,237 @@ "requires": true, "dependencies": { "@aws-cdk/assert": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.74.0.tgz", - "integrity": "sha512-5M3M4lcSS2dGPgVANhv5GjqC6nNBy9bL1XECAJj3lg7q+6zJ00+0wq4bB0wyvm/mE+S0axkGZ4LVHF5QA2gCfQ==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.82.0.tgz", + "integrity": "sha512-hsVsIRfsPRGH9rnS82/CepZQgQHxD81hXu8HrqDF/qEPXCKlGtEDGKxZ78yKoYv9mX+A02YX2FmoeYJzkCsG2g==", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/cloudformation-diff": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", + "@aws-cdk/cloud-assembly-schema": "1.82.0", + "@aws-cdk/cloudformation-diff": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/assets": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.74.0.tgz", - "integrity": "sha512-ZXmiJ9Qf0odTJWQPEvN+41wI1MAOK0PS5E/CTTOc9qSZufHKxpF0UPNu+8G/cMUnmKoonih8eglUCR8mmVzGrQ==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.82.0.tgz", + "integrity": "sha512-+P3NgVOjkv/nC0aWY8bzNbclpDR7kyKRLtlnKpBTbAcWmbxl+QfOV/mlNWV4S1kjL9iK8NCECAlwJTxORGcIow==", "requires": { - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-apigateway": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigateway/-/aws-apigateway-1.74.0.tgz", - "integrity": "sha512-kSwZJ7eVo6qmOsfxN4LRIwmNpiOBxsEzswVcJnyeKPMfD2KRj/UGZp6hDeoj4Mf734RXiH4qLUlrtjrcSP1vTw==", - "requires": { - "@aws-cdk/assets": "1.74.0", - "@aws-cdk/aws-certificatemanager": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-logs": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/aws-s3-assets": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigateway/-/aws-apigateway-1.82.0.tgz", + "integrity": "sha512-FGIINpDaaGHCjoaopmI2tBbeSi36wA5ZFJofg5eOUPLRdTtEwY5GpsYwejkF06bjLbnvi6LcTXHfBkRB117IJg==", + "requires": { + "@aws-cdk/assets": "1.82.0", + "@aws-cdk/aws-certificatemanager": "1.82.0", + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/aws-logs": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/aws-s3-assets": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-apigatewayv2": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.74.0.tgz", - "integrity": "sha512-Z8GRXYZX6MHZeyKQpiiCUvtxIKh6y9UGRM9f6+xfjMa75WwjoM8cFm9h41720LwKcUXYj0TlKiqEyeL12UIAYA==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.82.0.tgz", + "integrity": "sha512-tnjvnwzumHzAzUhsbE4OL4dxNo332iedmZYCUJ/5jXOBeCXsvSZdwCGM2kp8vl74ng1wOvAC4DyNpd7xrl8PXw==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.82.0", + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-applicationautoscaling": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.74.0.tgz", - "integrity": "sha512-QqEm+jN2zQyficWAQWIIJTN+HwonBx5lS+Ccgx8vR+lXAPW9BORtsuEd0jKzMs2LVF+eiRQcwgD1WqH99HFPXw==", - "requires": { - "@aws-cdk/aws-autoscaling-common": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.82.0.tgz", + "integrity": "sha512-d6/BxyqjT18yujN8zioCb1wQpD1H9B+S6XnPo2AGXw4lzbhuOGjvo8JfpQwNAwvdMKlyO3YOlA2Qy2VI6Rrkog==", + "requires": { + "@aws-cdk/aws-autoscaling-common": "1.82.0", + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-autoscaling": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling/-/aws-autoscaling-1.74.0.tgz", - "integrity": "sha512-Ahxvf92EjdAfDUu4Zw/8vqJ6Px1yZReouELFFGmJVnraekUYXUs5rFHFtym8fRA/fn2Y9IlnOxk0/JG7S7Ws8w==", - "requires": { - "@aws-cdk/aws-autoscaling-common": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-elasticloadbalancing": "1.74.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-sns": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling/-/aws-autoscaling-1.82.0.tgz", + "integrity": "sha512-C5ygLWjQ8iEdDvD5dPVaQ+UVK1rgrRvNyTWnwy6hZt4pQliAu/ydRRzmhJWYzCihkP/4NPXUfJLyr+3ieeeK1Q==", + "requires": { + "@aws-cdk/aws-autoscaling-common": "1.82.0", + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-elasticloadbalancing": "1.82.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-sns": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-autoscaling-common": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.74.0.tgz", - "integrity": "sha512-UHqhMxGjGe00XaZfb7+OtAbY48vU2PdjYxIiRlFqrvJ7w6ws2dW7trKRHfpmbIF6M8h3Jtys1y69UuijaIHTlg==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.82.0.tgz", + "integrity": "sha512-meFpRmujLMFLq19uCwiBuIva1WfQrA5dTV3HmQK78iQDDSsoK9jQ6IWCQh7Fvs5NeRqr7Fscy97dTCn3chYwXQ==", "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-autoscaling-hooktargets": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-hooktargets/-/aws-autoscaling-hooktargets-1.74.0.tgz", - "integrity": "sha512-40qHwZYT+uFkwYK5eNpnAUSN4EZuqJiBK+Sq2RC/LW2RM5xXnZBN4nQrlKIACL0H2U7CiJKLeTcS1jsHENBCgA==", - "requires": { - "@aws-cdk/aws-autoscaling": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-sns": "1.74.0", - "@aws-cdk/aws-sns-subscriptions": "1.74.0", - "@aws-cdk/aws-sqs": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-hooktargets/-/aws-autoscaling-hooktargets-1.82.0.tgz", + "integrity": "sha512-jvBYyNN0wGz6M160WSbJ8c0OYrQ8GxvyOfT4P3GXKwZ9Ve94l4qbuVM94oMkXh8DC/hZUylYW49sVh1oFgSBXA==", + "requires": { + "@aws-cdk/aws-autoscaling": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/aws-sns": "1.82.0", + "@aws-cdk/aws-sns-subscriptions": "1.82.0", + "@aws-cdk/aws-sqs": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-batch": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-batch/-/aws-batch-1.74.0.tgz", - "integrity": "sha512-8IJMEHxmAw3Jsd0qtlCDPqc7cSZ4uUDoF3KTrjQwzxrsVOk79MVWTqlbyfdzgD8Qg6/09Zslp6FU2TsJU2FC7A==", - "requires": { - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-ecr": "1.74.0", - "@aws-cdk/aws-ecs": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-batch/-/aws-batch-1.82.0.tgz", + "integrity": "sha512-ZeorjGxS4JMfPcOPEhkQlIdU/WPAIiEwz2YGPr4vgzKL3N/hbgELP3mSwURNTNd5RpeHKBYvweNWwiR79/1MTg==", + "requires": { + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-ecr": "1.82.0", + "@aws-cdk/aws-ecs": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-secretsmanager": "1.82.0", + "@aws-cdk/aws-ssm": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-certificatemanager": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.74.0.tgz", - "integrity": "sha512-Ve1SYM6qpUysHLD5bzHiE4kXBeo7VAEQlUti0cjkkjkuPh+dKHti/TqYhA0tkfUIMjZylnvkogBzMYdIUBTNxg==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-route53": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.82.0.tgz", + "integrity": "sha512-bXw3mkJX72X5z4iDeH1AyoGKuRS0KwA6EBZL3Ef4D738BYspHKgdhg3MKrlY+gbwMuSw9bAONGEeoRQO+Taufw==", + "requires": { + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/aws-route53": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-cloudformation": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.74.0.tgz", - "integrity": "sha512-VOyuMhoxA9vk3zSUfzqSg1YjYYgc+qyB0bpaOJIW/iinXYXhA64z5YQnTxdwd/exlFgA59chOanA7aRrNM2YIg==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/aws-sns": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.82.0.tgz", + "integrity": "sha512-RnBcRyCJDn5zarWsSA8RChc0uxSBcZVOCyG9JkFPuYZ7gYEjywQuacxEzOQhyoae2gmCfMbBYvpBkIwqlOc5fA==", + "requires": { + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/aws-sns": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-cloudfront": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.74.0.tgz", - "integrity": "sha512-azbHgGs4nsbEn6m+7Yh2FQiFa44pdXzho0FLuvz9pcN+qqlFiDFcOrNUmqwKDSWMKLp1IguWwmTnlv4DjKxFWA==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.82.0.tgz", + "integrity": "sha512-PxDosxg1Q/vN3jWGgvrI1WTFfBmU+HmbGxzsBVtaVu4KMM6tukAgQWkjxtLc4klHREiAotwCVVo9U3npW/llVw==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.82.0", + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/aws-ssm": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-cloudwatch": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.74.0.tgz", - "integrity": "sha512-FqkU9JNM63JzdKVwmI07UJ2upDLrqByEs6kXMNOv0RxfvLIe73DNfBp8T+WxJ23G38sCLfeTsPIIG5K2XzOQGg==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.82.0.tgz", + "integrity": "sha512-nQrglW/Ns88FdywOe2y8wiW/aPeCwm+2Bzyv1WgHi66BrJ8PFhZS3H5HhaWYZKLo5G13I+snoz3AMQQLnoqoAg==", "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-codebuild": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codebuild/-/aws-codebuild-1.74.0.tgz", - "integrity": "sha512-w+ohCWUotho8zp3+MdKQZuhG63/rAnWrZZDf49uQN04XdafWpiPM4+/hqSsddd5FGr3koEo+hw03XY8Ef+iWeA==", - "requires": { - "@aws-cdk/assets": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-codecommit": "1.74.0", - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-ecr": "1.74.0", - "@aws-cdk/aws-ecr-assets": "1.74.0", - "@aws-cdk/aws-events": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/aws-s3-assets": "1.74.0", - "@aws-cdk/aws-secretsmanager": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/region-info": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codebuild/-/aws-codebuild-1.82.0.tgz", + "integrity": "sha512-WazJjQw19a/1e8uLoYCi0xn9RMiv/+jJms/eUlUwDm4+E7DIgXonIFeoN2bVg8ZZvyo1Ne32bitESTkLYmh2/w==", + "requires": { + "@aws-cdk/assets": "1.82.0", + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-codecommit": "1.82.0", + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-ecr": "1.82.0", + "@aws-cdk/aws-ecr-assets": "1.82.0", + "@aws-cdk/aws-events": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-logs": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/aws-s3-assets": "1.82.0", + "@aws-cdk/aws-secretsmanager": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/region-info": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-codecommit": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codecommit/-/aws-codecommit-1.74.0.tgz", - "integrity": "sha512-WtN+zbgFK8bLdQM7qADMiDZJfSHyFcdjChxOYEdjuJFXZ+hF4ooWq4c4Y58Kdx0gmdLN0L8apq0rgp/EawkZUw==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codecommit/-/aws-codecommit-1.82.0.tgz", + "integrity": "sha512-vgTrG546LvqPTdqxF+VT8LqU87W5ZJ6Yb3YqjjlLfnSXOP9vFiwJ80F65MkH6tiqq9YzJJHsuSHeVUAdnYPATg==", "requires": { - "@aws-cdk/aws-events": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-events": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-codeguruprofiler": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.74.0.tgz", - "integrity": "sha512-CF4NqFSPeFnqbVG23+BozGNVha2Pk7vXaLGCPZPlHmx2jwaxZHCdxK+VvtOtV3fVPr6CI97SsTq9TwiFciv+zg==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.82.0.tgz", + "integrity": "sha512-U5sf6Wf9BLMrT+N2vpIfEmAj4cgzHvJc4gIZTwVwVcE5KT9LCNavQp+4QwCwkb3n048F6nHdN1PJHi9HbIZdGA==", "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-cognito": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.74.0.tgz", - "integrity": "sha512-t8XZbWQd8gMgn6FfYlPBmb3HDBVFHZI3tEODgc4mu/qRZAn2GH+pka4l1kdsgfzsBekvBLsOQosp7xJ6XaABsA==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/custom-resources": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.82.0.tgz", + "integrity": "sha512-DGsVDllemMrsxl/53jBhLE6Xdlf9U86/9RkU7xNdLtgfWMh12ZChh+mDXXYeluehu7PXTeQCyToxmI2nGf726A==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/custom-resources": "1.82.0", "constructs": "^3.2.0", "punycode": "^2.1.1" }, @@ -241,61 +247,61 @@ } }, "@aws-cdk/aws-dynamodb": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.74.0.tgz", - "integrity": "sha512-YU38dFYLMyMe5u2GLy8sFCFTVxwDgWZ67HzFg41kSj8WpAsVQEE5Zxh1nf0+8Ai1J4MNeLeMCaXtuliHipoQSw==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/custom-resources": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.82.0.tgz", + "integrity": "sha512-Yt/TU91ek3C32+slx1XL7MZuj06EM6mBf2Rx1LYu2jlE64ZANeFxF1/osgQ6DNZIwXpsrPmszpCMgJ3eu7/W+g==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.82.0", + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/custom-resources": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-ec2": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.74.0.tgz", - "integrity": "sha512-TcJtdSFur8Pkhfz39nhPZH2LBiugBhSrDkAUfeEVVwDEa4kvNys7xkcwvvBouFhM6YhitjZ53j9d7d4CEBc73g==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-logs": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/aws-s3-assets": "1.74.0", - "@aws-cdk/aws-ssm": "1.74.0", - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "@aws-cdk/region-info": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.82.0.tgz", + "integrity": "sha512-rPi1wqGADKnrLfkeo1PJM9AbJpyCd5Iii+fcID8UBSVUokcJGuIGWRkAyz2mvw4jcehcaArcsp3uSYrvRPI7KA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-logs": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/aws-s3-assets": "1.82.0", + "@aws-cdk/aws-ssm": "1.82.0", + "@aws-cdk/cloud-assembly-schema": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", + "@aws-cdk/region-info": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-ecr": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.74.0.tgz", - "integrity": "sha512-8Dm+DLD+AbZCoh3U4l+u6GrlIVjDWwZhxYTWekp7sJE6zfp6uNnS9H+DZCWYY+cQ7haaUKWaLs1aos+hTADJkw==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.82.0.tgz", + "integrity": "sha512-NGO1DVSdVz5WVlC8r1QX/7kasGQFG5T2UUJTCjxH8qdkL99LGX4atzM21p+vlC1sWxurZ5R9A3v4EUYxd4aR0A==", "requires": { - "@aws-cdk/aws-events": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-events": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-ecr-assets": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.74.0.tgz", - "integrity": "sha512-6SbU5LU2GIcsQCbmKi8e8kHLmdmvenuR5eAH0rbzf9fjeyYa4S6MDWYt+hzG9cTKX4um9mXZyVz8rVJNqBe94Q==", - "requires": { - "@aws-cdk/assets": "1.74.0", - "@aws-cdk/aws-ecr": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.82.0.tgz", + "integrity": "sha512-5ADa/F5tWaKuNWs21JdDTEOSVvr6T/B/2MgH39LBlGDxQUsdWjJ+4th6RR6xfzN4vJsdGFi3nAiC7FOCH/pJGA==", + "requires": { + "@aws-cdk/assets": "1.82.0", + "@aws-cdk/aws-ecr": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", "constructs": "^3.2.0", "minimatch": "^3.0.4" }, @@ -326,349 +332,357 @@ } }, "@aws-cdk/aws-ecs": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecs/-/aws-ecs-1.74.0.tgz", - "integrity": "sha512-zGLMdZpKh+dHSv8ZBRqTns7W62BKl/fb14bxSzAODB12lsDoMtz/D3Buh6zOSPLfpu7gDBO+gQyyS5X11zOlDw==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.74.0", - "@aws-cdk/aws-autoscaling": "1.74.0", - "@aws-cdk/aws-autoscaling-hooktargets": "1.74.0", - "@aws-cdk/aws-certificatemanager": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-ecr": "1.74.0", - "@aws-cdk/aws-ecr-assets": "1.74.0", - "@aws-cdk/aws-elasticloadbalancing": "1.74.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-logs": "1.74.0", - "@aws-cdk/aws-route53": "1.74.0", - "@aws-cdk/aws-route53-targets": "1.74.0", - "@aws-cdk/aws-secretsmanager": "1.74.0", - "@aws-cdk/aws-servicediscovery": "1.74.0", - "@aws-cdk/aws-sns": "1.74.0", - "@aws-cdk/aws-sqs": "1.74.0", - "@aws-cdk/aws-ssm": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecs/-/aws-ecs-1.82.0.tgz", + "integrity": "sha512-zBg4lG/Z4WBrvSHTWKFMdFeJH+YFlBxPkRWoVt7LxBzO7rH1n9HeZNXjv57uSlcl/AsQwHmebWn80B1dBHoK+g==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.82.0", + "@aws-cdk/aws-autoscaling": "1.82.0", + "@aws-cdk/aws-autoscaling-hooktargets": "1.82.0", + "@aws-cdk/aws-certificatemanager": "1.82.0", + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-ecr": "1.82.0", + "@aws-cdk/aws-ecr-assets": "1.82.0", + "@aws-cdk/aws-elasticloadbalancing": "1.82.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/aws-logs": "1.82.0", + "@aws-cdk/aws-route53": "1.82.0", + "@aws-cdk/aws-route53-targets": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/aws-s3-assets": "1.82.0", + "@aws-cdk/aws-secretsmanager": "1.82.0", + "@aws-cdk/aws-servicediscovery": "1.82.0", + "@aws-cdk/aws-sns": "1.82.0", + "@aws-cdk/aws-sqs": "1.82.0", + "@aws-cdk/aws-ssm": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-efs": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.74.0.tgz", - "integrity": "sha512-ghzwm/e8qQlOM/PKgfscbVFny9qhQNrXZltxckhHdTEX3Wtx9RXpveWzEOGBoHBJHSv49gkvAwtvzTbxCss4QA==", - "requires": { - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.82.0.tgz", + "integrity": "sha512-oSHUN8ET59HIwwhTvcnYa++8uOybjDOuLzuBKfHCLpCOqzHq//6KpIfDSVoKnGDq/TuApUXHz4eCkQIYJugwOw==", + "requires": { + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/cloud-assembly-schema": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-elasticloadbalancing": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.74.0.tgz", - "integrity": "sha512-phgsFivhNfvGgXN4Rpt5NNWuxlGsd5sj1ZwqGYFKUYXrIbKQraKECek37YP90srKIbUVETfeC5CoEa4258pl0w==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.82.0.tgz", + "integrity": "sha512-nSt4iK8+chv/tUaZe16oggY0DWNsEpRuuU+SuSd7ibj0VE4cqKJ+/tYvse/ZdflXyUBHce8RwASLwCwLjNulmQ==", "requires": { - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-elasticloadbalancingv2": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.74.0.tgz", - "integrity": "sha512-+Zx6/7CqZcsubSwxFC6rTq+uyzzQjIOGOh8RN/q93EZ9+snSJM/mRdZ/1DyNIjfSFbwyYQ1usE9rbYi1XWDPVA==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "@aws-cdk/region-info": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.82.0.tgz", + "integrity": "sha512-pL8PDjDABgw6P2dfhrHIyp1UTxwSKmxrXcm8eOk5Ch9MbaTINQPNOHiAouVlkgWmnDgMvH2INGbFbwnNbgzu1w==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.82.0", + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/cloud-assembly-schema": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", + "@aws-cdk/region-info": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-events": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.74.0.tgz", - "integrity": "sha512-dmVswvSBd2jZzgPJCQell+u9bRYNg63p1e57bXmql6Rm1UJDPTbvESPXsdwwFW2WpJyXwHOOM+qe98r5CbcTUw==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.82.0.tgz", + "integrity": "sha512-hej4ysakldS7wtRlFyUNWgb2JsdJq76O0WXVZGX6DkNgkOACC8rBT/bcDPr9SkuT2fsX3/+Fz8/MXD4PbDaVQw==", "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-glue": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-glue/-/aws-glue-1.74.0.tgz", - "integrity": "sha512-F/AYk3E2EUZKZHLPo7x4AVfaXV/zZakUuihDFIsOBGrO6/mGysQRjdYXRdkSTBr6B2IRh4PYpI0ZecedhtPvEA==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-glue/-/aws-glue-1.82.0.tgz", + "integrity": "sha512-uujTFOeBtfqE+dzuTVjkBudo6UMyVp9p8nG0N4kUrERj9wZvYF8CA8KoWRjnsX+MF/b7+6F0WeiQCeWAc3jXsA==", + "requires": { + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-iam": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.74.0.tgz", - "integrity": "sha512-5Eq4e4/be2HMFZXc1sCeNjqgTyjlWgvIjbLh0Q4c01V05r7MbPdmfZRurbeEA6NohGf+zYFQrCzPnTaqvFPFHA==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.82.0.tgz", + "integrity": "sha512-b9waajQSYr4koXnCZVO/icbpoRS/d3CWVui6yoxPl6UsKy+V0WloCF3oXz1MIjQLHZNh5ysmy85WofYVrefVmg==", "requires": { - "@aws-cdk/core": "1.74.0", - "@aws-cdk/region-info": "1.74.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/region-info": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-kms": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.74.0.tgz", - "integrity": "sha512-4cTNqzNkml3RV6uobSwq7ZtPBjwNovOxv75vzGNNRw1GO6hxqDzoPRIsgfwNvVii8tv27eR0xTK0t6WlKqoVzg==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.82.0.tgz", + "integrity": "sha512-JiQ8b/TK693XVIvWdoU9RRxWywzPzxAY5uO7Jaao1D/55wkJXiAPCZUV3wboxBRhHKxQLmxlOlnpxNU0efK3qA==", "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-lambda": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.74.0.tgz", - "integrity": "sha512-Ju3/mhnli33xnO2qvJUs11djva12SHnmJPGtbx4Nz33z577/pCwLZYWa7noP8eUzAyBglfNlPG8JWH+fNHPbew==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-codeguruprofiler": "1.74.0", - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-efs": "1.74.0", - "@aws-cdk/aws-events": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-logs": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/aws-s3-assets": "1.74.0", - "@aws-cdk/aws-sqs": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.82.0.tgz", + "integrity": "sha512-HLHUA/rp2J09xxOta/h2C+SNO4ICS+w9tkVT9lmu62MGOI4JTKvmHZBDoTuno5kvamDv12tkXMBlPvaeYEi87Q==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.82.0", + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-codeguruprofiler": "1.82.0", + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-ecr": "1.82.0", + "@aws-cdk/aws-ecr-assets": "1.82.0", + "@aws-cdk/aws-efs": "1.82.0", + "@aws-cdk/aws-events": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-logs": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/aws-s3-assets": "1.82.0", + "@aws-cdk/aws-sqs": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-logs": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.74.0.tgz", - "integrity": "sha512-wMpjXdJBN3S0gYO3pMjjKxSTlIs0ZUH64k6BnOxDvnltWbBJomD0/qLKMVHShOddm9MMNdD8AaYpCqZsrplZHA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-s3-assets": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.82.0.tgz", + "integrity": "sha512-FM+6dUmrIx4gDcEfHJMUxZ0o1fnLEjJNC5d/1Tbmu1UFc8T0v22JMJoJZQa03CLqK6IOrJ77mWY3VW+lsewe0w==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-s3-assets": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-route53": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.74.0.tgz", - "integrity": "sha512-TYnAByXLc6B/uAG03bYLV0kPi1TU8G95kW6wNhfiqvPCSwfizbsg5rztbUoydJpBocbOs9qbtCM7v6gbDsB2bQ==", - "requires": { - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-logs": "1.74.0", - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.82.0.tgz", + "integrity": "sha512-Yu10jiwqnZNlYT6NhlI250wwkIWyMieDH7BAs00tpvFpT4AdjGH9Ac70uo6B6Rsvj3zkrIjzEJEmMX9SATdBYA==", + "requires": { + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-logs": "1.82.0", + "@aws-cdk/cloud-assembly-schema": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/custom-resources": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-route53-targets": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.74.0.tgz", - "integrity": "sha512-hJFQeDoft/d0Q/jTvrrRaOATr5L1edFQ/h8398Ozj3f7r1HIxSXdHcQc/7wLPbvLHMHxQklg3GcVIwnswhTsbQ==", - "requires": { - "@aws-cdk/aws-apigateway": "1.74.0", - "@aws-cdk/aws-apigatewayv2": "1.74.0", - "@aws-cdk/aws-cloudfront": "1.74.0", - "@aws-cdk/aws-cognito": "1.74.0", - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-elasticloadbalancing": "1.74.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-route53": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/region-info": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.82.0.tgz", + "integrity": "sha512-F0nbis3s1PFBulBqrg7/oQwr39AtVX23Lm1Iz619pEgiJ5tV6gRKM7GE4Q8H45C7fgY6HU4o0r+MaKjSZZXFfw==", + "requires": { + "@aws-cdk/aws-apigateway": "1.82.0", + "@aws-cdk/aws-apigatewayv2": "1.82.0", + "@aws-cdk/aws-cloudfront": "1.82.0", + "@aws-cdk/aws-cognito": "1.82.0", + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-elasticloadbalancing": "1.82.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-route53": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/region-info": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-s3": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.74.0.tgz", - "integrity": "sha512-xbRbI90hUvmVwGHHMr4dPWv0TXBxr/HeeaLzqLDHv36+TKA0wMR7ttRm3pbT3Kf/YjqSty788rom6lVqaAu81Q==", - "requires": { - "@aws-cdk/aws-events": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.82.0.tgz", + "integrity": "sha512-OHkpq2pUnbHCZxmctPWEUrm7bXnq0xCwSkGpcoKkORBhlcga4A9RCneA5eyBUU7Eoy3ECfwSbFaDVtQn1+J5Ew==", + "requires": { + "@aws-cdk/aws-events": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-s3-assets": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.74.0.tgz", - "integrity": "sha512-uewjgTOr5q60UbPKHo3qgYApXxFKUIgP6eUZi7v8mhfnZUDw9H9B4rRJ7rHRZ4gYj9ZtiWq1o3hpvWnoHsR+zg==", - "requires": { - "@aws-cdk/assets": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/core": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.82.0.tgz", + "integrity": "sha512-IPhGoDDIum36veMXjGh080nihIrlORSCYCFu8he1+sgze9oFfb7jPIAfIPzz7bW1sPc4NdKjJTFt0w0cq1ELPg==", + "requires": { + "@aws-cdk/assets": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-sam": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sam/-/aws-sam-1.74.0.tgz", - "integrity": "sha512-5OBgN8QyhJmcpby35bEDseWvL9+vJGiryAiU9nSMt/wISt5Rc4XM8SPK0XvZfxP6zT/MDpsptuS5tLuW++OkyQ==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sam/-/aws-sam-1.82.0.tgz", + "integrity": "sha512-j7haLlr2WjYp+ptO5iEcCIcrPzW1g4hiZ3m9CuGyEmc7Aj60Fok1V7a9/ymvblHwg1W6WutYqw+BGXMWJnQf2A==", "requires": { - "@aws-cdk/core": "1.74.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-secretsmanager": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.74.0.tgz", - "integrity": "sha512-FlUY6LFrIf04pcUyJ+7bn3B+UM+hzZUHFhjr+jQzFROECTs2/HBTGKMJssuTl7UBR+QizFXfNdZQ1vvj69aKvA==", - "requires": { - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-sam": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.82.0.tgz", + "integrity": "sha512-rU2IV+ZQ+sufJEvYjlEnMZRtYuQk7mdctrS1BZQldq62Gnnknc7EMuOmtDyYq27+ky/YdBS6eRc6m3nDHQeZmQ==", + "requires": { + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/aws-sam": "1.82.0", + "@aws-cdk/core": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-servicediscovery": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.74.0.tgz", - "integrity": "sha512-5pABov1sNs0bgOb4UZKT+5H+OR3+0/8oxefFCiGxcGG4Kxsq4d4XJbmwx1oDUjCJclxlzOTuuCyay5NnoZ+6fg==", - "requires": { - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.74.0", - "@aws-cdk/aws-route53": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.82.0.tgz", + "integrity": "sha512-jdiFICNWxRd/r5auvPFZCgjwwJx74tQMoX7Xg4VhasueAlHxwUKctBO0fN7eb3NBgXWH3ObHPhFnCr8YGUfpPA==", + "requires": { + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.82.0", + "@aws-cdk/aws-route53": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-sns": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.74.0.tgz", - "integrity": "sha512-O0HDGvl1WjCTU53auNJKCW5/6vpbVYlj0RwLgGaOOlTeKnfuq53kGvL/t3QdZQlJWxSvkbN61O+rZB7GacXV0g==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-events": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-sqs": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.82.0.tgz", + "integrity": "sha512-6dVj8SJidvrn64XVE1LjeLq1buOT3N7hyTS+OaF5u7CJlyAoHpNErHLQTjRbin2d5waPKjrKaypJdTciLzvmcA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-events": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-sqs": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-sns-subscriptions": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.74.0.tgz", - "integrity": "sha512-MOuArbCx1nxL5B40RMQzHNnU0SZWkaQfRDTURTQbX4e0OHyq5DnQrtXTu/XyI/MYPBU+ZnC/FXP+hynCatn+nw==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-sns": "1.74.0", - "@aws-cdk/aws-sqs": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.82.0.tgz", + "integrity": "sha512-sao3l/gIBdkSZl8XoA+fIDhKImSusDgY8tuLVgKVvf92UTrLkB79XUY9DStCe6xZ58RCPvPR68lxUtGAs1pHqg==", + "requires": { + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/aws-sns": "1.82.0", + "@aws-cdk/aws-sqs": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-sqs": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.74.0.tgz", - "integrity": "sha512-qlj7ZapoL9oneLu4wh7DfQDypCo6QFlyGzd3nlmn+C9UbCscBkpSJnmYSGi2m0TVCKbd3tP1EpfdU36LTahYBg==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.82.0.tgz", + "integrity": "sha512-Hk5V/mNdQwDvt9tUOBcURDJOkonDumK07pFM4st73+zl5nqfjzVDdBVJgvpPv0VOWHulP6LwL1O30MToXji1tw==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-ssm": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.74.0.tgz", - "integrity": "sha512-uok/D4ooEVXst0HZYQkcPIM5xlHAVjGjF44Gt68hbdZknBhMbfZP2EWqSZHhSW9HdVoNFTNkIxcI2AemCnt2Qg==", - "requires": { - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.82.0.tgz", + "integrity": "sha512-b4lXrQicCT9Jttp1C6jgfQTxPp+2Wqfx1hSbHKr1hg6Kv5k3RG4GJu4bIRV8iRYyKmm74SzAA1Uwh6P/RY8k1g==", + "requires": { + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/cloud-assembly-schema": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-stepfunctions": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions/-/aws-stepfunctions-1.74.0.tgz", - "integrity": "sha512-oCvPE3v0UEyoAGWR5ixzGaJXTTuZGq84h4MpYSQElHjYqrs2QfFMuM02bOHkTRlOa1FsV6aTFvjl9zpWZ+UeEQ==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-events": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-logs": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions/-/aws-stepfunctions-1.82.0.tgz", + "integrity": "sha512-Dok2C28+CpMq9Pj87MI2/s6pnhdvq5vccy7t70a86N1kVXeE3RMRgtC7LrHZZFuXVM2cYrrlshzJhFU1B9kIAA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-events": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-logs": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/aws-stepfunctions-tasks": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions-tasks/-/aws-stepfunctions-tasks-1.74.0.tgz", - "integrity": "sha512-MK8NdYLcNBx6fh/MYyq34xkYGlCdo4HV7ev6sYxJ3Q0Th46aeF8mwwufEb/vHea/OtN1Y/NQBsykp1TyX0bUqw==", - "requires": { - "@aws-cdk/assets": "1.74.0", - "@aws-cdk/aws-batch": "1.74.0", - "@aws-cdk/aws-cloudwatch": "1.74.0", - "@aws-cdk/aws-codebuild": "1.74.0", - "@aws-cdk/aws-dynamodb": "1.74.0", - "@aws-cdk/aws-ec2": "1.74.0", - "@aws-cdk/aws-ecr": "1.74.0", - "@aws-cdk/aws-ecr-assets": "1.74.0", - "@aws-cdk/aws-ecs": "1.74.0", - "@aws-cdk/aws-glue": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-kms": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-s3": "1.74.0", - "@aws-cdk/aws-sns": "1.74.0", - "@aws-cdk/aws-sqs": "1.74.0", - "@aws-cdk/aws-stepfunctions": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions-tasks/-/aws-stepfunctions-tasks-1.82.0.tgz", + "integrity": "sha512-4B7HftMo5EtJ9Yrh8OYC2gkIwfxWt9xVKLTtJVfngfXK1XPiejMuQU5SwOOf6OJ+/lN/TFzPzvbuG0i13o1bMA==", + "requires": { + "@aws-cdk/assets": "1.82.0", + "@aws-cdk/aws-batch": "1.82.0", + "@aws-cdk/aws-cloudwatch": "1.82.0", + "@aws-cdk/aws-codebuild": "1.82.0", + "@aws-cdk/aws-dynamodb": "1.82.0", + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-ecr": "1.82.0", + "@aws-cdk/aws-ecr-assets": "1.82.0", + "@aws-cdk/aws-ecs": "1.82.0", + "@aws-cdk/aws-glue": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-kms": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/aws-s3": "1.82.0", + "@aws-cdk/aws-sns": "1.82.0", + "@aws-cdk/aws-sqs": "1.82.0", + "@aws-cdk/aws-stepfunctions": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/cfnspec": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz", - "integrity": "sha512-9rdFgRUoV3lbAD6lnU+hGdkit8ILmUq+XCXzRdc9xWHUXIKxMmFK9frXTT+wGmjgdz/GpPyfSbFjzyqk4QE5+w==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.82.0.tgz", + "integrity": "sha512-AqkVcoZNKYGa0WMN78b9gF/72CLMYphhFTJc7o0Lg/XJx1GgC67t54mjoNz4xKCNlY2HBghkLwBjXT26PmvMUw==", "dev": true, "requires": { "md5": "^2.3.0" } }, "@aws-cdk/cloud-assembly-schema": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz", - "integrity": "sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.82.0.tgz", + "integrity": "sha512-eXf2CYLO6akkD6+2dsgGsECYZfQ2179QU5uDRH+9yWhaE0jQmca2o5m+HgaGE9AfvlIXiPeMYp1/6Ut22dh0jg==", "requires": { "jsonschema": "^1.4.0", "semver": "^7.3.2" @@ -685,27 +699,27 @@ } }, "@aws-cdk/cloudformation-diff": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz", - "integrity": "sha512-aYAg85fkpX39euUo5HjsGtqOpyD5fAz1+jZ/F/5erA8Y/+rB4ifCVJH0cLYHVdYwo8oc3poB6jW4tVMxNYxbrg==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.82.0.tgz", + "integrity": "sha512-vfLutDo3rV8Zq+FrGA2eK86Up3o/JAOJpRHOQXcglN0PLycovoSOzmvE+1QbdlgtI/5fcDawlhBdR0yshUKITQ==", "dev": true, "requires": { - "@aws-cdk/cfnspec": "1.74.0", + "@aws-cdk/cfnspec": "1.82.0", "colors": "^1.4.0", "diff": "^5.0.0", "fast-deep-equal": "^3.1.3", "string-width": "^4.2.0", - "table": "^6.0.3" + "table": "^6.0.4" } }, "@aws-cdk/core": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.74.0.tgz", - "integrity": "sha512-1iKRIRKyMQ8ZmPvkAAjSIGl4Fh7tLIE7D23ht25ayNGp0XVG1Hd858x2GmDzI/J1ZK6xsuTsEDGbi5/saR69ng==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.82.0.tgz", + "integrity": "sha512-0bGrY7JxiOWKYlL4SjT+3IPevjQdHqxF5yxF6002cRCRDJK+GYMFxu6bblJ0CxXCkXfJ9cDOPo/Btz4FXnQWQw==", "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "@aws-cdk/region-info": "1.74.0", + "@aws-cdk/cloud-assembly-schema": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", + "@aws-cdk/region-info": "1.82.0", "@balena/dockerignore": "^1.0.2", "constructs": "^3.2.0", "fs-extra": "^9.0.1", @@ -756,11 +770,17 @@ "bundled": true }, "jsonfile": { - "version": "6.0.1", + "version": "6.1.0", "bundled": true, "requires": { "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "bundled": true + } } }, "minimatch": { @@ -777,25 +797,26 @@ } }, "@aws-cdk/custom-resources": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.74.0.tgz", - "integrity": "sha512-KDXgyRCeCMIj42nQcd2RXc4GYQpd7SWtx2iw0G4Wvs/wG4i3nR1qdlvEJvAlNgsYeqM4pp3mIp3PgdX341HsCg==", - "requires": { - "@aws-cdk/aws-cloudformation": "1.74.0", - "@aws-cdk/aws-iam": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-logs": "1.74.0", - "@aws-cdk/aws-sns": "1.74.0", - "@aws-cdk/core": "1.74.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.82.0.tgz", + "integrity": "sha512-NsZqyBrPVQVLB69POwl96MebP4B0g26EDhSxwY8NlWE6a7J7VQXtCRiMbwEU5Kr9CmH1tuPrNmhG4pWILOMGvA==", + "requires": { + "@aws-cdk/aws-cloudformation": "1.82.0", + "@aws-cdk/aws-ec2": "1.82.0", + "@aws-cdk/aws-iam": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/aws-logs": "1.82.0", + "@aws-cdk/aws-sns": "1.82.0", + "@aws-cdk/core": "1.82.0", "constructs": "^3.2.0" } }, "@aws-cdk/cx-api": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz", - "integrity": "sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.82.0.tgz", + "integrity": "sha512-RcyLJu9WQLQWsMuAzZyBgF4YFz5SsZOg9UM0/LAHzz3bFeZlwekTcrbb9mJJv5Dharva6x47MU2fbmBTrmlakQ==", "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", + "@aws-cdk/cloud-assembly-schema": "1.82.0", "semver": "^7.3.2" }, "dependencies": { @@ -806,9 +827,9 @@ } }, "@aws-cdk/region-info": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.74.0.tgz", - "integrity": "sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA==" + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.82.0.tgz", + "integrity": "sha512-mIO2zJP3rUtuGPX/PlLVew3uU29rESswrykmZKuOXDgOvGsYKDAEPI00l0XVm2n9k1p3gVRH1dEysl/C+NSBiA==" }, "@babel/code-frame": { "version": "7.10.4", @@ -1732,20 +1753,20 @@ "dev": true }, "aws-cdk": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.74.0.tgz", - "integrity": "sha512-D4LKNlmvLHv+CWI/35Esaoij4v5VSqKyc+Gvnjhj1K3I4lG/AAxEy1CmRBhN/w1LJt70U9jnBpIsb6hGUlrV8A==", - "dev": true, - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/cloudformation-diff": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "@aws-cdk/region-info": "1.74.0", - "@aws-cdk/yaml-cfn": "1.74.0", - "archiver": "^5.0.2", - "aws-sdk": "^2.792.0", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.82.0.tgz", + "integrity": "sha512-OGcC8P9HUOkvejkW+AymYmt395WXpKnJR5ShPCgCz779QQRbd3obq5QREE6UykGTlJt3l+qPhaRuOPbLuDxtFg==", + "dev": true, + "requires": { + "@aws-cdk/cloud-assembly-schema": "1.82.0", + "@aws-cdk/cloudformation-diff": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", + "@aws-cdk/region-info": "1.82.0", + "@aws-cdk/yaml-cfn": "1.82.0", + "archiver": "^5.1.0", + "aws-sdk": "^2.804.0", "camelcase": "^6.2.0", - "cdk-assets": "1.74.0", + "cdk-assets": "1.82.0", "colors": "^1.4.0", "decamelize": "^4.0.0", "fs-extra": "^9.0.1", @@ -1756,25 +1777,25 @@ "proxy-agent": "^4.0.0", "semver": "^7.3.2", "source-map-support": "^0.5.19", - "table": "^6.0.3", + "table": "^6.0.4", "uuid": "^8.3.1", "wrap-ansi": "^7.0.0", - "yargs": "^16.1.1" + "yargs": "^16.2.0" }, "dependencies": { "@aws-cdk/cfnspec": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.74.0.tgz", - "integrity": "sha512-9rdFgRUoV3lbAD6lnU+hGdkit8ILmUq+XCXzRdc9xWHUXIKxMmFK9frXTT+wGmjgdz/GpPyfSbFjzyqk4QE5+w==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.82.0.tgz", + "integrity": "sha512-AqkVcoZNKYGa0WMN78b9gF/72CLMYphhFTJc7o0Lg/XJx1GgC67t54mjoNz4xKCNlY2HBghkLwBjXT26PmvMUw==", "dev": true, "requires": { "md5": "^2.3.0" } }, "@aws-cdk/cloud-assembly-schema": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.74.0.tgz", - "integrity": "sha512-TOfruzx7zIirRpfL9r5tGcOPdfXQatD3/kgXq4I1px12oH3jmuiEcNxGdvEYgVMPaZGMrx0rtqyT2sGDWBycKw==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.82.0.tgz", + "integrity": "sha512-eXf2CYLO6akkD6+2dsgGsECYZfQ2179QU5uDRH+9yWhaE0jQmca2o5m+HgaGE9AfvlIXiPeMYp1/6Ut22dh0jg==", "dev": true, "requires": { "jsonschema": "^1.4.0", @@ -1782,39 +1803,39 @@ } }, "@aws-cdk/cloudformation-diff": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.74.0.tgz", - "integrity": "sha512-aYAg85fkpX39euUo5HjsGtqOpyD5fAz1+jZ/F/5erA8Y/+rB4ifCVJH0cLYHVdYwo8oc3poB6jW4tVMxNYxbrg==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.82.0.tgz", + "integrity": "sha512-vfLutDo3rV8Zq+FrGA2eK86Up3o/JAOJpRHOQXcglN0PLycovoSOzmvE+1QbdlgtI/5fcDawlhBdR0yshUKITQ==", "dev": true, "requires": { - "@aws-cdk/cfnspec": "1.74.0", + "@aws-cdk/cfnspec": "1.82.0", "colors": "^1.4.0", "diff": "^5.0.0", "fast-deep-equal": "^3.1.3", "string-width": "^4.2.0", - "table": "^6.0.3" + "table": "^6.0.4" } }, "@aws-cdk/cx-api": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.74.0.tgz", - "integrity": "sha512-Xhq9col3syHmxC3Zl1igrWwvOzwJzwTKwpLLL8ENF8u2n8x4eneAN+OLrRlB/rhAQ+KUL6B8toUsd4pcJMkSOQ==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.82.0.tgz", + "integrity": "sha512-RcyLJu9WQLQWsMuAzZyBgF4YFz5SsZOg9UM0/LAHzz3bFeZlwekTcrbb9mJJv5Dharva6x47MU2fbmBTrmlakQ==", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", + "@aws-cdk/cloud-assembly-schema": "1.82.0", "semver": "^7.3.2" } }, "@aws-cdk/region-info": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.74.0.tgz", - "integrity": "sha512-xF0etW01PyUNxL9F4xiA2y/pEG9e+0EJpOL7O9gVZ0IxOkIW+J0MljR6O8nx4yCx6j2/dXTs6INZ/zVn0DsydA==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.82.0.tgz", + "integrity": "sha512-mIO2zJP3rUtuGPX/PlLVew3uU29rESswrykmZKuOXDgOvGsYKDAEPI00l0XVm2n9k1p3gVRH1dEysl/C+NSBiA==", "dev": true }, "@aws-cdk/yaml-cfn": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/yaml-cfn/-/yaml-cfn-1.74.0.tgz", - "integrity": "sha512-fJyS9apCC6lk3MHramd8Kjz4UwGWqM5gDRBci68Vs/nfXcpXY2ekHGjUMUfcel7VPobNKWszxWAMxXttAHa1zg==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/yaml-cfn/-/yaml-cfn-1.82.0.tgz", + "integrity": "sha512-koBLeIZyMhzTLWzQT5UFAK1qV3dWtZp/3L0inz+KkuFH4Jqme68bXId1GVqvanHcXmpLWGmWT5/b43l9H4jBlA==", "dev": true, "requires": { "yaml": "1.10.0" @@ -1826,25 +1847,19 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, "agent-base": { - "version": "6.0.1", - "resolved": "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.1.tgz#808007e4e5867decb0ab6ab2f928fbdb5a596db4", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "version": "6.0.2", + "resolved": "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { "debug": "4" } }, "ajv": { - "version": "6.12.5", - "resolved": "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da", - "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", + "version": "6.12.6", + "resolved": "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -1860,19 +1875,18 @@ "dev": true }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, "archiver": { - "version": "5.0.2", - "resolved": "https://registry.yarnpkg.com/archiver/-/archiver-5.0.2.tgz#b2c435823499b1f46eb07aa18e7bcb332f6ca3fc", - "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", + "version": "5.1.0", + "resolved": "https://registry.yarnpkg.com/archiver/-/archiver-5.1.0.tgz#05b0f6f7836f3e6356a0532763d2bb91017a7e37", + "integrity": "sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA==", "dev": true, "requires": { "archiver-utils": "^2.1.0", @@ -1881,7 +1895,7 @@ "readable-stream": "^3.6.0", "readdir-glob": "^1.0.0", "tar-stream": "^2.1.4", - "zip-stream": "^4.0.0" + "zip-stream": "^4.0.4" }, "dependencies": { "readable-stream": { @@ -1958,9 +1972,9 @@ "dev": true }, "aws-sdk": { - "version": "2.792.0", - "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.792.0.tgz#d124a6074244a4675e0416887734e8f6934bdd30", - "integrity": "sha512-h7oSlrCDtZkW5qNw/idKmMjjNJaaPlXFY+NbqtaTjejpCyVuIonUmFvm8GW16V58Avj/hujJfhpX9q0BMCg+VQ==", + "version": "2.804.0", + "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.804.0.tgz#ff7e6f91b86b4878ec69e3de895c10eb8203fc4b", + "integrity": "sha512-a02pZdjL06MunElAZPPEjpghOp/ZA+16f+t4imh1k9FCDpsNVQrT23HRq/PMvRADA5uZZRkYwX8r9o6oH/1RlA==", "dev": true, "requires": { "buffer": "4.9.2", @@ -1983,8 +1997,22 @@ "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" + }, + "dependencies": { + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + } } }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, "uuid": { "version": "3.3.2", "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131", @@ -2000,9 +2028,9 @@ "dev": true }, "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "version": "1.5.1", + "resolved": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, "bl": { @@ -2055,13 +2083,13 @@ } }, "buffer": { - "version": "5.6.0", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "5.7.1", + "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "buffer-crc32": { @@ -2089,17 +2117,17 @@ "dev": true }, "cdk-assets": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.74.0.tgz", - "integrity": "sha512-YF3nE1zAJU4dlWVnY30a4ALNzHhSTMMoAMv4bYkwXTLqzu+QB2v3MQdPpCLdGTGUYDaeRZy/Z/4R4MqM+/KPAA==", + "version": "1.82.0", + "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.82.0.tgz", + "integrity": "sha512-LEDAINk2rZTeSSiOtGTEnH68Z8392NKtPcgL3AdNrJg1ia0tZufABZqta50WHJz31qEKV0DAZ279tm9PRNG4mg==", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.74.0", - "@aws-cdk/cx-api": "1.74.0", - "archiver": "^5.0.2", - "aws-sdk": "^2.792.0", + "@aws-cdk/cloud-assembly-schema": "1.82.0", + "@aws-cdk/cx-api": "1.82.0", + "archiver": "^5.1.0", + "aws-sdk": "^2.804.0", "glob": "^7.1.6", - "yargs": "^16.1.1" + "yargs": "^16.2.0" } }, "charenc": { @@ -2118,9 +2146,9 @@ } }, "cliui": { - "version": "7.0.3", - "resolved": "https://registry.yarnpkg.com/cliui/-/cliui-7.0.3.tgz#ef180f26c8d9bff3927ee52428bfec2090427981", - "integrity": "sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw==", + "version": "7.0.4", + "resolved": "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", @@ -2150,13 +2178,13 @@ "dev": true }, "compress-commons": { - "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.0.1.tgz#c5fa908a791a0c71329fba211d73cd2a32005ea8", - "integrity": "sha512-xZm9o6iikekkI0GnXCmAl3LQGZj5TBDj0zLowsqi7tJtEa3FMGSEcHcqrSJIrOAk1UG/NBbDn/F1q+MG/p/EsA==", + "version": "4.0.2", + "resolved": "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.0.2.tgz#d6896be386e52f37610cef9e6fa5defc58c31bd7", + "integrity": "sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A==", "dev": true, "requires": { "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.0", + "crc32-stream": "^4.0.1", "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" }, @@ -2201,22 +2229,23 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", "dev": true, "requires": { - "buffer": "^5.1.0" + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" } }, "crc32-stream": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.0.tgz#05b7ca047d831e98c215538666f372b756d91893", - "integrity": "sha512-tyMw2IeUX6t9jhgXI6um0eKfWq4EIDpfv5m7GX4Jzp7eVelQ360xd8EPXJhp2mHwLQIkqlnMLjzqSZI3a+0wRw==", + "version": "4.0.1", + "resolved": "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.1.tgz#0f047d74041737f8a55e86837a1b826bd8ab0067", + "integrity": "sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw==", "dev": true, "requires": { - "crc": "^3.4.4", + "crc-32": "^1.2.0", "readable-stream": "^3.4.0" }, "dependencies": { @@ -2386,6 +2415,12 @@ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "dev": true + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525", @@ -2426,6 +2461,14 @@ "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^1.0.0" + }, + "dependencies": { + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + } } }, "fs.realpath": { @@ -2588,9 +2631,9 @@ } }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "version": "1.2.1", + "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, "inflight": { @@ -2657,13 +2700,13 @@ "dev": true }, "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "version": "6.1.0", + "resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" + "universalify": "^2.0.0" } }, "jsonschema": { @@ -2843,6 +2886,12 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "dev": true + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2", @@ -2929,9 +2978,9 @@ } }, "readdir-glob": { - "version": "1.1.0", - "resolved": "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.0.tgz#a3def6f7b61343e8a1274dbb872b9a2ad055d086", - "integrity": "sha512-KgT0oXPIDQRRRYFf+06AUaodICTep2Q5635BORLzTEzp7rEqcR14a47j3Vzm3ix7FeI1lp8mYyG7r8lTB06Pyg==", + "version": "1.1.1", + "resolved": "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", "dev": true, "requires": { "minimatch": "^3.0.4" @@ -2991,9 +3040,9 @@ "dev": true }, "socks": { - "version": "2.4.4", - "resolved": "https://registry.yarnpkg.com/socks/-/socks-2.4.4.tgz#f1a3382e7814ae28c97bb82a38bc1ac24b21cca2", - "integrity": "sha512-7LmHN4IHj1Vpd/k8D872VGCHJ6yIVyeFkfIBExRmGPYQ/kdUkpdg9eKh9oOzYYYKQhuxavayJHTnmBG+EzluUA==", + "version": "2.5.0", + "resolved": "https://registry.yarnpkg.com/socks/-/socks-2.5.0.tgz#3a7c286db114f67864a4bd8b4207a91d1db3d6db", + "integrity": "sha512-00OqQHp5SCbwm9ecOMJj9aQtMSjwi1uVuGQoxnpKCS50VKZcOZ8z11CTKypmR8sEy7nZimy/qXY7rYJYbRlXmA==", "dev": true, "requires": { "ip": "^1.1.5", @@ -3063,9 +3112,9 @@ } }, "table": { - "version": "6.0.3", - "resolved": "https://registry.yarnpkg.com/table/-/table-6.0.3.tgz#e5b8a834e37e27ad06de2e0fda42b55cfd8a0123", - "integrity": "sha512-8321ZMcf1B9HvVX/btKv8mMZahCjn2aYrDlpqHaBFCfnox64edeH9kEid0vTLTRR8gWR2A20aDgeuTTea4sVtw==", + "version": "6.0.4", + "resolved": "https://registry.yarnpkg.com/table/-/table-6.0.4.tgz#c523dd182177e926c723eb20e1b341238188aa0d", + "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -3122,9 +3171,9 @@ "dev": true }, "tslib": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", + "version": "2.0.3", + "resolved": "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", "dev": true }, "type-check": { @@ -3137,9 +3186,9 @@ } }, "universalify": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unpipe": { @@ -3265,9 +3314,9 @@ "dev": true }, "yargs": { - "version": "16.1.1", - "resolved": "https://registry.yarnpkg.com/yargs/-/yargs-16.1.1.tgz#5a4a095bd1ca806b0a50d0c03611d38034d219a1", - "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", + "version": "16.2.0", + "resolved": "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -3280,19 +3329,19 @@ } }, "yargs-parser": { - "version": "20.2.3", - "resolved": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.3.tgz#92419ba867b858c868acf8bae9bf74af0dd0ce26", - "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==", + "version": "20.2.4", + "resolved": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true }, "zip-stream": { - "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.0.2.tgz#3a20f1bd7729c2b59fd4efa04df5eb7a5a217d2e", - "integrity": "sha512-TGxB2g+1ur6MHkvM644DuZr8Uzyz0k0OYWtS3YlpfWBEmK4woaC2t3+pozEL3dBfIPmpgmClR5B2QRcMgGt22g==", + "version": "4.0.4", + "resolved": "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.0.4.tgz#3a8f100b73afaa7d1ae9338d910b321dec77ff3a", + "integrity": "sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw==", "dev": true, "requires": { "archiver-utils": "^2.1.0", - "compress-commons": "^4.0.0", + "compress-commons": "^4.0.2", "readable-stream": "^3.6.0" }, "dependencies": { @@ -3704,9 +3753,9 @@ "dev": true }, "constructs": { - "version": "3.2.38", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.2.38.tgz", - "integrity": "sha512-SNGmqvT9yFtkrIX+FjIg7GaFvzhffis46kYvknr3vVjuCXSSAtivPS28mxAOdv23Faq6FBU0+cX/XdZa2g/glw==" + "version": "3.2.92", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.2.92.tgz", + "integrity": "sha512-yvg9wc0U0648upYfN8p+lka3LBpmfFdTGSpGFLS0yWwwFNVIBk5jdmsuITH9tJWUVtbVJzsl+6XhmWb0q2USBQ==" }, "convert-source-map": { "version": "1.7.0", @@ -6123,6 +6172,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -6781,15 +6836,35 @@ "dev": true }, "table": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.4.tgz", - "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", "dev": true, "requires": { - "ajv": "^6.12.4", + "ajv": "^7.0.2", "lodash": "^4.17.20", "slice-ansi": "^4.0.0", "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz", + "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } } }, "terminal-link": { diff --git a/the-state-machine/typescript/package.json b/the-state-machine/typescript/package.json index b8697cd8..df1b43e4 100644 --- a/the-state-machine/typescript/package.json +++ b/the-state-machine/typescript/package.json @@ -12,22 +12,22 @@ "deploy": "cdk deploy '*' --require-approval 'never'" }, "devDependencies": { - "@aws-cdk/assert": "1.74.0", + "@aws-cdk/assert": "1.82.0", "@types/jest": "^26.0.15", "@types/node": "14.14.9", "jest": "^26.6.3", "ts-jest": "^26.4.4", - "aws-cdk": "1.74.0", + "aws-cdk": "1.82.0", "ts-node": "^9.0.0", "typescript": "~4.1.2" }, "dependencies": { - "@aws-cdk/aws-apigateway": "1.74.0", - "@aws-cdk/aws-lambda": "1.74.0", - "@aws-cdk/aws-sqs": "1.74.0", - "@aws-cdk/aws-stepfunctions": "1.74.0", - "@aws-cdk/aws-stepfunctions-tasks": "1.74.0", - "@aws-cdk/core": "1.74.0", + "@aws-cdk/aws-apigateway": "1.82.0", + "@aws-cdk/aws-lambda": "1.82.0", + "@aws-cdk/aws-sqs": "1.82.0", + "@aws-cdk/aws-stepfunctions": "1.82.0", + "@aws-cdk/aws-stepfunctions-tasks": "1.82.0", + "@aws-cdk/core": "1.82.0", "source-map-support": "^0.5.19" } } From c83c6169224a5a762af33f49908fe7da2387ca83 Mon Sep 17 00:00:00 2001 From: Leandro Damascena Date: Sat, 9 Jan 2021 17:18:23 +0000 Subject: [PATCH 2/5] Removing java unit tests #154 --- .../com/cdkpatterns/TheStateMachineTest.java | 42 ------------------- 1 file changed, 42 deletions(-) delete mode 100644 the-state-machine/java/src/test/java/com/cdkpatterns/TheStateMachineTest.java diff --git a/the-state-machine/java/src/test/java/com/cdkpatterns/TheStateMachineTest.java b/the-state-machine/java/src/test/java/com/cdkpatterns/TheStateMachineTest.java deleted file mode 100644 index b6e558fe..00000000 --- a/the-state-machine/java/src/test/java/com/cdkpatterns/TheStateMachineTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.cdkpatterns; - -import software.amazon.awscdk.core.App; - -import com.cdkpatterns.TheStateMachineStack; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; - -import java.io.IOException; - -import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.assertThat; - -public class TheStateMachineTest { - private final static ObjectMapper JSON = - new ObjectMapper().configure(SerializationFeature.INDENT_OUTPUT, true); - - @Test - public void testStack() throws IOException { - App app = new App(); - TheStateMachineStack stack = new TheStateMachineStack(app, "test"); - - // synthesize the stack to a CloudFormation template and compare against - // a checked-in JSON file. - JsonNode actual = JSON.valueToTree(app.synth().getStackArtifact(stack.getArtifactId()).getTemplate()); - - // After Synth, performs some basic tests - - // AWS::StepFunctions::StateMachine exists test - assertThat(actual.toString()).contains("AWS::StepFunctions::StateMachine"); - - // AWS::Lambda::Function exists test - assertThat(actual.toString()).contains("AWS::Lambda::Function"); - - // AWS::SQS::Queue exists test - assertThat(actual.toString()).contains("AWS::SQS::Queue"); - - // AWS::ApiGateway::Method exists test - assertThat(actual.toString()).contains("AWS::ApiGateway::Method"); - } -} From 11ca2289c26c35e9b3c65c2fbbb7ee9798725701 Mon Sep 17 00:00:00 2001 From: Leandro Damascena Date: Mon, 11 Jan 2021 10:54:24 +0000 Subject: [PATCH 3/5] fixed ts tests --- the-state-machine/typescript/test/the-state-machine.test.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/the-state-machine/typescript/test/the-state-machine.test.ts b/the-state-machine/typescript/test/the-state-machine.test.ts index 8969f52a..e4910ca7 100644 --- a/the-state-machine/typescript/test/the-state-machine.test.ts +++ b/the-state-machine/typescript/test/the-state-machine.test.ts @@ -13,6 +13,7 @@ test('API Gateway Proxy Created', () => { )); }); + test('State Machine Created', () => { const app = new cdk.App(); // WHEN @@ -23,10 +24,10 @@ test('State Machine Created', () => { "Fn::Join": [ "", [ - "{\"StartAt\":\"Order Pizza Job\",\"States\":{\"Order Pizza Job\":{\"Next\":\"With Pineapple?\",\"InputPath\":\"$.flavour\",\"Type\":\"Task\",\"Resource\":\"", + "{\"StartAt\":\"Order Pizza Job\",\"States\":{\"Order Pizza Job\":{\"Next\":\"With Pineapple?\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2}],\"Type\":\"Task\",\"InputPath\":\"$.flavour\",\"ResultPath\":\"$.pineappleAnalysis\",\"Resource\":\"", { }, - "\",\"ResultPath\":\"$.pineappleAnalysis\"},\"With Pineapple?\":{\"Type\":\"Choice\",\"Choices\":[{\"Variable\":\"$.pineappleAnalysis.containsPineapple\",\"BooleanEquals\":true,\"Next\":\"Sorry, We Dont add Pineapple\"}],\"Default\":\"Lets make your pizza\"},\"Lets make your pizza\":{\"Type\":\"Pass\",\"End\":true},\"Sorry, We Dont add Pineapple\":{\"Type\":\"Fail\",\"Error\":\"They asked for Pineapple\",\"Cause\":\"Failed To Make Pizza\"}},\"TimeoutSeconds\":300}" + "\"},\"With Pineapple?\":{\"Type\":\"Choice\",\"Choices\":[{\"Variable\":\"$.pineappleAnalysis.containsPineapple\",\"BooleanEquals\":true,\"Next\":\"Sorry, We Dont add Pineapple\"}],\"Default\":\"Lets make your pizza\"},\"Lets make your pizza\":{\"Type\":\"Pass\",\"End\":true},\"Sorry, We Dont add Pineapple\":{\"Type\":\"Fail\",\"Error\":\"They asked for Pineapple\",\"Cause\":\"Failed To Make Pizza\"}},\"TimeoutSeconds\":300}" ] ] } From a75816ee7376a846ceab647b2ac0a8ace46d5360 Mon Sep 17 00:00:00 2001 From: Matt Coulter <1432881+nideveloper@users.noreply.github.com> Date: Mon, 11 Jan 2021 11:43:21 +0000 Subject: [PATCH 4/5] some light refactoring --- .../typescript/lib/the-state-machine-stack.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/the-state-machine/typescript/lib/the-state-machine-stack.ts b/the-state-machine/typescript/lib/the-state-machine-stack.ts index f6fdca97..57765991 100644 --- a/the-state-machine/typescript/lib/the-state-machine-stack.ts +++ b/the-state-machine/typescript/lib/the-state-machine-stack.ts @@ -15,14 +15,12 @@ export class TheStateMachineStack extends cdk.Stack { //The first thing we need to do is see if they are asking for pineapple on a pizza let pineappleCheckLambda = new lambda.Function(this, 'pineappleCheckLambdaHandler', { - runtime: lambda.Runtime.NODEJS_12_X, // execution environment - code: lambda.Code.fromAsset('lambda-fns'), // code loaded from the "lambda-fns" directory - handler: 'orderPizza.handler' // file is "orderPizza", function is "handler" + runtime: lambda.Runtime.NODEJS_12_X, + code: lambda.Code.fromAsset('lambda-fns'), + handler: 'orderPizza.handler' }); // Step functions are built up of steps, we need to define our first step - // Refactored code because sfn.Task is Depecrated right now. Using StepFunctionsTaks.LambdaInvoke instead - // https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-stepfunctions.Task.html const orderPizza = new tasks.LambdaInvoke(this, "Order Pizza Job", { lambdaFunction: pineappleCheckLambda, inputPath: '$.flavour', @@ -63,9 +61,9 @@ export class TheStateMachineStack extends cdk.Stack { // defines an AWS Lambda resource to connect to our API Gateway const stateMachineLambda = new lambda.Function(this, 'stateMachineLambdaHandler', { - runtime: lambda.Runtime.NODEJS_12_X, // execution environment - code: lambda.Code.fromAsset('lambda-fns'), // code loaded from the "lambda-fns" directory - handler: 'stateMachineLambda.handler', // file is "stateMachineLambda", function is "handler + runtime: lambda.Runtime.NODEJS_12_X, + code: lambda.Code.fromAsset('lambda-fns'), + handler: 'stateMachineLambda.handler', deadLetterQueue:dlq, environment: { statemachine_arn: stateMachine.stateMachineArn From 447488e00d775ea6ffdae6127e906891136276e5 Mon Sep 17 00:00:00 2001 From: Matt Coulter <1432881+nideveloper@users.noreply.github.com> Date: Mon, 11 Jan 2021 11:44:21 +0000 Subject: [PATCH 5/5] Update the_state_machine_stack.py --- .../the_state_machine_stack.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/the-state-machine/python/the_state_machine/the_state_machine_stack.py b/the-state-machine/python/the_state_machine/the_state_machine_stack.py index 9469eb15..22ce5285 100644 --- a/the-state-machine/python/the_state_machine/the_state_machine_stack.py +++ b/the-state-machine/python/the_state_machine/the_state_machine_stack.py @@ -17,14 +17,12 @@ def __init__(self, scope: core.Construct, id: str, **kwargs) -> None: # The first thing we need to do is see if they are asking for pineapple on a pizza pineapple_check_lambda = _lambda.Function(self, "pineappleCheckLambdaHandler", - runtime=_lambda.Runtime.NODEJS_12_X, # execution environment - handler="orderPizza.handler", # file is "orderPizza", function is "handler" - code=_lambda.Code.from_asset("lambda_fns"), # code loaded from the "lambda_fns" directory + runtime=_lambda.Runtime.NODEJS_12_X, + handler="orderPizza.handler", + code=_lambda.Code.from_asset("lambda_fns"), ) # Step functions are built up of steps, we need to define our first step - # Refactored code because sfn.Task is Depecrated right now. Using StepFunctionsTaks.LambdaInvoke instead - # https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-stepfunctions.Task.html order_pizza = step_fn_tasks.LambdaInvoke(self, 'Order Pizza Job', lambda_function=pineapple_check_lambda, input_path='$.flavour', @@ -54,9 +52,9 @@ def __init__(self, scope: core.Construct, id: str, **kwargs) -> None: # defines an AWS Lambda resource to connect to our API Gateway state_machine_lambda = _lambda.Function(self, "stateMachineLambdaHandler", - runtime=_lambda.Runtime.NODEJS_12_X, # execution environment - handler="stateMachineLambda.handler", # file is "stateMachineLambda", function is "handler - code=_lambda.Code.from_asset("lambda_fns"), # code loaded from the "lambda_fns" directory + runtime=_lambda.Runtime.NODEJS_12_X, + handler="stateMachineLambda.handler", + code=_lambda.Code.from_asset("lambda_fns"), environment={ 'statemachine_arn': state_machine.state_machine_arn } @@ -65,7 +63,7 @@ def __init__(self, scope: core.Construct, id: str, **kwargs) -> None: state_machine.grant_start_execution(state_machine_lambda) # Simple API Gateway proxy integration - # defines an API Gateway REST API resource backed by our "sqs_publish_lambda" function. + # defines an API Gateway REST API resource backed by our "state_machine_lambda" function. api_gw.LambdaRestApi(self, 'Endpoint', handler=state_machine_lambda - ) \ No newline at end of file + )