From 63ef2b7a06f6bd81c8315803b62c437209132ad5 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Thu, 8 Apr 2021 02:07:18 +0000 Subject: [PATCH 1/2] created workflows --- src/aws-genomics-cdk/README.md | 134 +- src/aws-genomics-cdk/app.config.json | 43 +- .../assets/launch_template_user_data.txt | 69 +- src/aws-genomics-cdk/bin/aws-genomics-cdk.ts | 24 +- src/aws-genomics-cdk/containers/README.md | 232 +-- src/aws-genomics-cdk/containers/build.sh | 6 +- .../containers/bwa/Dockerfile | 39 + .../containers/gatk/Dockerfile | 3 + .../containers/picard/Dockerfile | 2 + .../containers/samtools/Dockerfile | 48 + src/aws-genomics-cdk/examples/README.md | 194 ++- .../examples/batch-bwa-job.json | 33 + .../examples/batch-fastqc-job.json | 14 +- .../examples/batch-gatk-dictionary.json | 21 + .../examples/batch-gatk-htc.json | 33 + .../batch-picard-add-missing-groups.json | 29 + .../examples/batch-samtools-index.json | 25 + .../examples/batch-samtools-sort.json | 25 + .../lib/aws-genomics-cdk-stack.ts | 52 +- .../batch-compute-environmnet-construct.ts | 4 +- .../lib/batch/batch-iam-stack.ts | 13 +- src/aws-genomics-cdk/lib/batch/batch-stack.ts | 15 +- .../genomics-state-machine-stack.ts | 104 -- .../lib/step-functions/job-definitions.ts | 68 - src/aws-genomics-cdk/lib/vpc/vpc-stack.ts | 4 +- .../genomics-task-construct.ts | 0 .../job-definition-construct.ts | 4 +- .../lib/workflows/job-definitions.ts | 132 ++ .../lib/workflows/variant-calling-stack.ts | 298 ++++ .../lib/workflows/workflow-config.ts | 4 + src/aws-genomics-cdk/package-lock.json | 1492 +++++++++-------- src/aws-genomics-cdk/package.json | 14 +- 32 files changed, 1936 insertions(+), 1242 deletions(-) create mode 100644 src/aws-genomics-cdk/containers/bwa/Dockerfile create mode 100644 src/aws-genomics-cdk/containers/gatk/Dockerfile create mode 100644 src/aws-genomics-cdk/containers/picard/Dockerfile create mode 100644 src/aws-genomics-cdk/containers/samtools/Dockerfile create mode 100644 src/aws-genomics-cdk/examples/batch-bwa-job.json create mode 100644 src/aws-genomics-cdk/examples/batch-gatk-dictionary.json create mode 100644 src/aws-genomics-cdk/examples/batch-gatk-htc.json create mode 100644 src/aws-genomics-cdk/examples/batch-picard-add-missing-groups.json create mode 100644 src/aws-genomics-cdk/examples/batch-samtools-index.json create mode 100644 src/aws-genomics-cdk/examples/batch-samtools-sort.json delete mode 100644 src/aws-genomics-cdk/lib/step-functions/genomics-state-machine-stack.ts delete mode 100644 src/aws-genomics-cdk/lib/step-functions/job-definitions.ts rename src/aws-genomics-cdk/lib/{step-functions => workflows}/genomics-task-construct.ts (100%) rename src/aws-genomics-cdk/lib/{step-functions => workflows}/job-definition-construct.ts (90%) create mode 100644 src/aws-genomics-cdk/lib/workflows/job-definitions.ts create mode 100644 src/aws-genomics-cdk/lib/workflows/variant-calling-stack.ts create mode 100644 src/aws-genomics-cdk/lib/workflows/workflow-config.ts diff --git a/src/aws-genomics-cdk/README.md b/src/aws-genomics-cdk/README.md index a51783607..3e6b5ecec 100644 --- a/src/aws-genomics-cdk/README.md +++ b/src/aws-genomics-cdk/README.md @@ -1,14 +1,18 @@ # Genomics Workflows on AWS - CDK code -Contained herein is a CDK application for creating AWS resources for working with large-scale biomedical data - e.g. genomics. +Contained herein is a CDK application for creating AWS resources for working +with large-scale biomedical data - e.g. genomics. -In order to deploy this CDK application, you'll need an environment with AWS CLI access and AWS CDK installed. A quick -way yo get an environment for running this application is to launch [AWS Cloud9](https://aws.amazon.com/cloud9/). +In order to deploy this CDK application, you'll need an environment with AWS +CLI access and AWS CDK installed. A quick way to get an environment for running +this application is to launch [AWS Cloud9](https://aws.amazon.com/cloud9/). -AWS Cloud9 is a cloud-based integrated development environment (IDE) that lets you write, run, and debug your code -with just a browser. It includes a code editor, debugger, and terminal. Cloud9 comes prepackaged with essential -tools for popular programming languages, including JavaScript, Python, PHP, and more, so you don’t need to install -files or configure your development machine to start new projects. +AWS Cloud9 is a cloud-based integrated development environment (IDE) that lets +you write, run, and debug your code with just a browser. It includes a code +editor, debugger, and terminal. Cloud9 comes prepackaged with essential +tools for popular programming languages, including JavaScript, Python, PHP, and +more, so you don’t need to install files or configure your development machine +to start new projects. ## Download @@ -20,41 +24,70 @@ git clone https://github.com/aws-samples/aws-genomics-workflows.git ## Configure -This CDK application requires an S3 bucket and a VPC. The application can create them as part of the deployment or -you could configure the application to use your own S3 bucket and/or existing VPC. - -After cloning the repo, open, update, and save the application configuration file - `app.config.json`. - -**accountID** - Your [AWS account id](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html). -**region** - The [AWS region](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html) -you want to use for the deployment (e.g., us-east-1, us-west-2, etc.). -**S3.existingBucket** - If you want to use an existing bucket, set this value to true, otherwise set it to false to -create a new bucket. +This CDK application requires an S3 bucket and a VPC. The application can +create them as part of the deployment or you could configure the application to +use your own S3 bucket and/or existing VPC. + +After cloning the repo, open, update, and save the application configuration +file - `app.config.json`. + +**accountID** - Your +[AWS account id](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html). +**region** - The +[AWS region](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html) +you want to use for the deployment (e.g., us-east-1, us-west-2, etc.). +**projectName** - A name for the project that will be used as a prefix for the +CDK stacks and constrcuts. +**tags** - A list of key,value strings to use as tags for the AWS resources +created by this app. +**S3.existingBucket** - If you want to use an existing bucket, set this value +to true, otherwise set it to false to create a new bucket. **S3.bucketName** - The bucket name to use or create. -**VPC.createVPC** - If you want to create a new VPC, set this to true, otherwise set to false. -**VPC.existingVPCName** - If you set the createVPC option to false, you must provide a valid VPC name to use in the -same region of the deployment. -**VPC.maxAZs** - The amount of availability zones to use when creating a new VPC. -**VPC.cidr** - The [CIDR block](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) for the new VPC. -**VPC.cidrMask** - The [CIDR block subnet mask](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#Subnet_masks) +**VPC.createVPC** - If you want to create a new VPC, set this to true, +otherwise set to false. +**VPC.VPCName** - The VPC name to use a create. +**VPC.maxAZs** - The amount of availability zones to use when creating a new +VPC. +**VPC.cidr** - The +[CIDR block](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) for +the new VPC. +**VPC.cidrMask** - The +[CIDR block subnet mask](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#Subnet_masks) for the new VPC. -**batch.defaultVolumeSize** - The default EBS volume size in GiB to be attached to the EC2 instance under AWS Batch. -**batch.spotMaxVCPUs** - The limit on vcpus when using [spot instances](https://aws.amazon.com/ec2/spot/). +**batch.defaultVolumeSize** - The default EBS volume size in GiB to be attached +to the EC2 instance under AWS Batch. +**batch.spotMaxVCPUs** - The limit on vcpus when using +[spot instances](https://aws.amazon.com/ec2/spot/). **batch.onDemendMaxVCPUs** - The limit on vcpus when using on-demand instances. -**batch.instanceTypes** - The [EC2 instance types](https://aws.amazon.com/ec2/instance-types/) to use in AWS Batch. -**stepFunctions.launchDemoPipeline** - If set to true, the application will deploy a demo pipeline using step fuinctions. -**stepFunctions.jobDefinitions** - List of parametrs for the demo application bioinformatics tools. +**batch.instanceTypes** - The +[EC2 instance types](https://aws.amazon.com/ec2/instance-types/) to use in +AWS Batch. +**workflows** - A list of workflows that you would like to launch. There are +demo workflows under the `lib/workflows` directory. To add a workflow, update +the code in the `lib/aws-genomics-cdk-stack.ts` file. Look for the workflows +section. + ``` { "accountID": "111111111111", "region": "us-west-2", + "projectName": "genomics", + "tags": [{ + "name": "Environment", + "value": "production" + }, + { + "name": "Project", + "value": "genomics-pipeline" + } + ] "S3": { "existingBucket": true, - "bucketName": "" + "bucketName": "YOUR-BUCKET-NAME" }, "VPC": { "createVPC": true, - "existingVPCName": "", + "VPCName": "genomics-vpc", "maxAZs": 2, "cidr": "10.0.0.0/16", "cidrMask": 24 @@ -79,34 +112,17 @@ for the new VPC. "c5.24xlarge" ] }, - "stepFunctions": { - "launchDemoPipeline": true, - "jobDefinitions": { - "fastqc": { - "repository": "genomics/fastqc", - "memoryLimit": 8000, - "vcpus": 4, - "spot": true, - "retryAttempts":1, - "timeout": 600 - }, - "minimap2": { - "repository": "genomics/minimap2", - "memoryLimit": 16000, - "vcpus": 8, - "spot": true, - "retryAttempts":1, - "timeout": 3600 - } - } - } + "workflows": [{ + "name": "variantCalling", + "spot": true + }] } ``` ## Deploy -To deploy the CDK application, use the command line and make sure you are in the root folder of the CDK application. -(`src/aws-genomics-cdk`). +To deploy the CDK application, use the command line and make sure you are in +the root folder of the CDK application (`src/aws-genomics-cdk`). First install the neccessary node.js modules ``` npm install @@ -114,9 +130,9 @@ npm install Then deploy the application. ``` -# The "--require-approval never" parameter will skip the question to approve specific resouce creation, -# such as IAM roles. You can remove this parameter if you want to be prompted to approve creating these -# resources. +# The "--require-approval never" parameter will skip the question to approve +# specific resouce creation, such as IAM roles. You can remove this parameter +# if you want to be prompted to approve creating these resources. cdk deploy --all --require-approval never ``` @@ -129,7 +145,7 @@ cdk deploy --all --require-approval never | `lib/vpc/vpc-stack.ts` | An optional stack that will launch a VPC | | `lib/batch/batch-stack.ts` | An AWS Batch stack with 2 comnpute environments (spot and on demand) and 2 queues (default and high priority) | | `lib/batch/batch-iam-stack.ts` | An IAM stack with roles and policies required for running AWS Batch | -| `lid/step-fuinctions/genomics-state-machine-stack.ts` | A step function demo of running a pipeline | +| `llib/workflows` | A folder containing pipeline stacks | ## Constructs @@ -139,6 +155,6 @@ cdk deploy --all --require-approval never | `lib/batch/batch-compute-environmnet-construct.ts` | A construct for creating an [AWS Batch compute environment](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) | | `lib/batch/job-queue-construct.ts` | A construct for creating an [AWS Batch job queue](https://docs.aws.amazon.com/batch/latest/userguide/job_queues.html) | | `lib/batch/launch-template-construct.ts` | A construct for creating an [EC2 launch template](https://docs.aws.amazon.com/autoscaling/ec2/userguide/LaunchTemplates.html) | -| `lib/step-functions/genomics-task-construct.ts` | A construct for creating a step function task that submits a batch job | -| `lib/step-functions/job-definition-construct.ts` | A construct for creating an [AWS Batch job definition](https://docs.aws.amazon.com/batch/latest/userguide/job_definitions.html) to be used as a task in step functions | +| `lib/workflows/genomics-task-construct.ts` | A construct for creating a step function task that submits a batch job | +| `lib/workflows/job-definition-construct.ts` | A construct for creating an [AWS Batch job definition](https://docs.aws.amazon.com/batch/latest/userguide/job_definitions.html) to be used as a task in step functions | diff --git a/src/aws-genomics-cdk/app.config.json b/src/aws-genomics-cdk/app.config.json index 028785b68..729d3ab4e 100644 --- a/src/aws-genomics-cdk/app.config.json +++ b/src/aws-genomics-cdk/app.config.json @@ -1,13 +1,23 @@ { - "accountID": "111111111111", + "accountID": "840249831562", "region": "us-west-2", + "projectName": "genomics", + "tags": [{ + "name": "Environment", + "value": "production" + }, + { + "name": "Project", + "value": "genomics-pipeline" + } + ], "S3": { "existingBucket": true, - "bucketName": "" + "bucketName": "genomics-pipelines-840249831562" }, "VPC": { "createVPC": true, - "existingVPCName": "", + "VPCName": "genomics-vpc", "maxAZs": 2, "cidr": "10.0.0.0/16", "cidrMask": 24 @@ -32,25 +42,8 @@ "c5.24xlarge" ] }, - "stepFunctions": { - "launchDemoPipeline": true, - "jobDefinitions": { - "fastqc": { - "repository": "genomics/fastqc", - "memoryLimit": 8000, - "vcpus": 4, - "spot": true, - "retryAttempts":1, - "timeout": 600 - }, - "minimap2": { - "repository": "genomics/minimap2", - "memoryLimit": 16000, - "vcpus": 8, - "spot": true, - "retryAttempts":1, - "timeout": 3600 - } - } - } -} \ No newline at end of file + "workflows": [{ + "name": "variantCalling", + "spot": true + }] +} diff --git a/src/aws-genomics-cdk/assets/launch_template_user_data.txt b/src/aws-genomics-cdk/assets/launch_template_user_data.txt index 54044af34..23eda50a7 100644 --- a/src/aws-genomics-cdk/assets/launch_template_user_data.txt +++ b/src/aws-genomics-cdk/assets/launch_template_user_data.txt @@ -4,6 +4,10 @@ Content-Type: multipart/mixed; boundary="==BOUNDARY==" --==BOUNDARY== Content-Type: text/cloud-config; charset="us-ascii" +#cloud-config +repo_update: true +repo_upgrade: security + packages: - jq - btrfs-progs @@ -11,8 +15,61 @@ packages: - git - amazon-ssm-agent - unzip +- amazon-cloudwatch-agent + +write_files: +- permissions: '0644' + path: /opt/aws/amazon-cloudwatch-agent/etc/config.json + content: | + { + "agent": { + "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log" + }, + "logs": { + "logs_collected": { + "files": { + "collect_list": [ + { + "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log", + "log_group_name": "/aws/ecs/container-instance/${Namespace}", + "log_stream_name": "/aws/ecs/container-instance/${Namespace}/{instance_id}/amazon-cloudwatch-agent.log" + }, + { + "file_path": "/var/log/cloud-init.log", + "log_group_name": "/aws/ecs/container-instance/${Namespace}", + "log_stream_name": "/aws/ecs/container-instance/${Namespace}/{instance_id}/cloud-init.log" + }, + { + "file_path": "/var/log/cloud-init-output.log", + "log_group_name": "/aws/ecs/container-instance/${Namespace}", + "log_stream_name": "/aws/ecs/container-instance/${Namespace}/{instance_id}/cloud-init-output.log" + }, + { + "file_path": "/var/log/ecs/ecs-init.log", + "log_group_name": "/aws/ecs/container-instance/${Namespace}", + "log_stream_name": "/aws/ecs/container-instance/${Namespace}/{instance_id}/ecs-init.log" + }, + { + "file_path": "/var/log/ecs/ecs-agent.log", + "log_group_name": "/aws/ecs/container-instance/${Namespace}", + "log_stream_name": "/aws/ecs/container-instance/${Namespace}/{instance_id}/ecs-agent.log" + }, + { + "file_path": "/var/log/ecs/ecs-volume-plugin.log", + "log_group_name": "/aws/ecs/container-instance/${Namespace}", + "log_stream_name": "/aws/ecs/container-instance/${Namespace}/{instance_id}/ecs-volume-plugin.log" + } + ] + } + } + } + } runcmd: + +# start the amazon-cloudwatch-agent +- /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/config.json + # install aws-cli v2 and copy the static binary in an easy to find location for bind-mounts into containers - curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "/tmp/awscliv2.zip" - unzip -q /tmp/awscliv2.zip -d /tmp @@ -24,11 +81,19 @@ runcmd: - mkdir -p /opt/aws-cli/bin - cp -a $(dirname $(find /usr/local/aws-cli -name 'aws' -type f))/. /opt/aws-cli/bin/ +# set environment variables for provisioning +- export GWFCORE_NAMESPACE=${Namespace} +- export INSTALLED_ARTIFACTS_S3_ROOT_URL=$(aws ssm get-parameter --name /gwfcore/${Namespace}/installed-artifacts/s3-root-url --query 'Parameter.Value' --output text) # enable ecs spot instance draining - echo ECS_ENABLE_SPOT_INSTANCE_DRAINING=true >> /etc/ecs/ecs.config -- systemctl enable amazon-ssm-agent -- systemctl start amazon-ssm-agent +# pull docker images only if missing +- echo ECS_IMAGE_PULL_BEHAVIOR=prefer-cached >> /etc/ecs/ecs.config + +- cd /opt +- aws s3 sync $INSTALLED_ARTIFACTS_S3_ROOT_URL/ecs-additions ./ecs-additions +- chmod a+x /opt/ecs-additions/provision.sh +- /opt/ecs-additions/provision.sh --==BOUNDARY==-- \ No newline at end of file diff --git a/src/aws-genomics-cdk/bin/aws-genomics-cdk.ts b/src/aws-genomics-cdk/bin/aws-genomics-cdk.ts index f1a12640c..a30fb404c 100644 --- a/src/aws-genomics-cdk/bin/aws-genomics-cdk.ts +++ b/src/aws-genomics-cdk/bin/aws-genomics-cdk.ts @@ -1,13 +1,23 @@ #!/usr/bin/env node -import 'source-map-support/register'; -import * as cdk from '@aws-cdk/core'; -import { AwsGenomicsCdkStack } from '../lib/aws-genomics-cdk-stack'; +import "source-map-support/register"; +import * as cdk from "@aws-cdk/core"; +import { AwsGenomicsCdkStack } from "../lib/aws-genomics-cdk-stack"; import * as config from "../app.config.json"; const env = { - account: process.env.CDK_DEFAULT_ACCOUNT ?? config.accountID, - region: process.env.CDK_DEFAULT_REGION ?? config.region -} + account: process.env.CDK_DEFAULT_ACCOUNT ?? config.accountID, + region: process.env.CDK_DEFAULT_REGION ?? config.region, +}; const app = new cdk.App(); -new AwsGenomicsCdkStack(app, 'AwsGenomicsCdkStack', {env: env}); +const genomicsStack = new AwsGenomicsCdkStack( + app, + `${config.projectName}CdkStack`, + { + env: env, + } +); + +for (let i = 0; i < config.tags.length; i++) { + cdk.Tags.of(genomicsStack).add(config.tags[i].name, config.tags[i].value); +} diff --git a/src/aws-genomics-cdk/containers/README.md b/src/aws-genomics-cdk/containers/README.md index 180712c1c..5951991b6 100644 --- a/src/aws-genomics-cdk/containers/README.md +++ b/src/aws-genomics-cdk/containers/README.md @@ -1,43 +1,68 @@ # Setting up bioinformatics containers -The CDK genomics pipeline project is leveraging [AWS Batch](https://aws.amazon.com/batch/) for -running bioinformatics jobs. AWS Batch works with docker containers which means we'll need to -build or use an existing docker container with the bioinfomatics tools installed. - -Start by creating a folder for your tool and place the Dockerfile inside of that folder. -There are few sample tools in this repos that you can look at: -**copy** - A tool for testing the system without the need to run any bioinfomatics tools. -**fastqc** - A quality control tool for high throughput sequence data. [Tool reference](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) -**minimap2** - Minimap2 is a versatile sequence alignment program that aligns DNA or mRNA sequences against a large reference database. [Tool reference](https://github.com/lh3/minimap2) - -For each of these tools you can find a folder that contains 2 files - Dockerfile and job.json -**Dockerfile** - The docker file to use for the bioinfomatics tool -**job.json** - A sample job you can use to test the tool with AWS bath. To run AWS batch command to test a job use the -follwing command: `aws batch submit-job --cli-input-json file://job.json` +The CDK genomics pipeline project is leveraging +[AWS Batch](https://aws.amazon.com/batch/) for +running bioinformatics jobs. AWS Batch works with docker containers which means +we'll need to build or use an existing docker container with the bioinfomatics +tools installed. + +Start by creating a folder for your tool and place the Dockerfile inside of +that folder. There are few sample tools in this repos that you can look at: +**[fastqc](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)** - +A quality control tool for high throughput sequence data. +**[minimap2](https://github.com/lh3/minimap2)** -A versatile sequence alignment +program that aligns DNA or mRNA sequences against a large reference database. +**[bwa](https://github.com/lh3/bwa)** - A software package for mapping +low-divergent sequences against a large reference genome, such as the human +genome. +**[gatk](https://gatk.broadinstitute.org/hc/en-us)** - A genomic analysis +toolkit focused on variant discovery. +**[picard](https://broadinstitute.github.io/picard/)** - Picard is a set of +command line tools for manipulating high-throughput sequencing (HTS) data and +formats such as SAM/BAM/CRAM and VCF. +**[samtools](https://github.com/samtools/samtools)** - Provide various +utilities for manipulating alignments in the SAM format, including sorting, +merging, indexing and generating alignments in a per-position format. + + +For each of these tools you can find a folder that contains a Dockerfile - +a docker file to use for the bioinfomatics tool. ### Building a container -This project include a tool to help build a container and push it to [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/) (ECR) -The tool is relying on 2 environment variables CDK_DEFAULT_ACCOUNT (your AWS 12 digit account id) and -CDK_DEFAULT_REGION (the regiong where you would like to deploy your pipelione. e.g., us-west-2). You'll need to add this parameter -to your environment variables (e.g., `~/.bash_profile`). -To add these parameters to `~/.bash_profile`, open the file and add these 2 lines and make sure to set the region and account id -accordingly. +This project include a tool to help build a container and push it to +[Amazon Elastic Container Registry](https://aws.amazon.com/ecr/) (ECR). +The tool is relying on 2 environment variables ``CDK_DEFAULT_ACCOUNT`` +(your AWS 12 digit account id) and ``CDK_DEFAULT_REGION`` (the regiong where +you would like to deploy your pipelione. e.g., us-west-2). You'll need to add +this parameter to your environment variables (e.g., `~/.bash_profile`). + +To add these parameters to `~/.bash_profile`, open the file and add these +2 lines and make sure to set the region and account id accordingly. ``` export CDK_DEFAULT_REGION='us-west-2' export CDK_DEFAULT_ACCOUNT='111111111111' ``` -Save the file and run the following command: `source ~/.bash_profile`. This will set the environment variabled. - -To build the container and push it to ECR use the build.sh script by running `./build.sh TOOL_NANE` (e.g., `./build.sh fastqc`). - -The build tool will first build the bioinformatics docker container and then will chain it with `entry.dockerfile` docker container. -This container overrides the docker `ENTRYPOINT` and introduce a script (`entrypoint.sh`) which will act as the docker -container `ENTRYPOINT`. This script can copy data files from urls and S3 buckets to the local running machine, then execute the -bioinformatics tool, and at the end will be able to save any output files creatd by the running tool back to an S3 bucket. - -When submitting a job to run the bioinfomatics tools, you can provide the following environment variables that will take -care of copying input files to the machine and copy output files to S3. +Save the file and run the following command: `source ~/.bash_profile`. This +will set the environment variabled. + +To build the container and push it to ECR use the build.sh script by running +`./build.sh TOOL_NANE [optional: PROJECT_NAME]` (e.g., `./build.sh fastqc` or +`./build fastqc my-project-name`). +The default value for `PROJECT_NAME` is `genomics` which will add the container +repository under `genomics/TOOL_NANE` + +The build tool will first build the bioinformatics docker container and then +will chain it with `entry.dockerfile` docker container. This container +overrides the docker `ENTRYPOINT` and introduce a script (`entrypoint.sh`) +which will act as the docker container `ENTRYPOINT`. This script can copy data +files from urls and S3 buckets to the local running machine, then execute the +bioinformatics tool, and at the end will be able to save any output files +creatd by the running tool back to an S3 bucket. + +When submitting a job to run the bioinfomatics tools, you can provide the +following environment variables that will take care of copying input files to +the machine and copy output files to S3. ``` JOB_WORKFLOW_NAME @@ -101,147 +126,4 @@ JOB_OUTPUT_S3_COPY_METHOD ``` ### Testing the bioinformatics tool -After [deploying the CDK genomics pipeline project](GITHUB URL) you could test the genomics tools directly with AWS Batch. -Create a file named job.json in the folder of the bioinformatics tool (the same folder where you places the Dockerfile) - -``` -{ - "jobName": "", - "jobQueue": "", - "jobDefinition": "", - "containerOverrides": { - "vcpus": 1, - "memory": 1000, - "command": [""], - "environment": [{ - "name": "JOB_INPUTS", - "value": "" - }, - { - "name": "JOB_INPUT_S3_COPY_METHOD", - "value": "" - }, - { - "name": "JOB_OUTPUTS", - "value": "" - }, - { - "name": "JOB_OUTPUT_S3_COPY_METHOD", - "value": "" - }, - { - "name": "JOB_OUTPUT_PREFIX", - "value": "" - }, - { - "name": "JOB_AWS_CLI_PATH", - "value": "/opt/aws-cli/bin" - } - ] - } -} - -``` - -**jobName** (string) -The name of the job. The first character must be alphanumeric, and up to 128 letters (uppercase and lowercase), -numbers, hyphens, and underscores are allowed. - -**jobQueue** (string) -The [job queue](https://docs.aws.amazon.com/batch/latest/userguide/job_queues.html) into which the job is submitted. -You can specify either the name or the Amazon Resource Name (ARN) of the queue. - -**jobDefinition** (string) -The [job definition](https://docs.aws.amazon.com/batch/latest/userguide/job_definitions.html) used by this job. -This value can be one of name , name:revision , or the Amazon Resource Name (ARN) for the job definition. If name is -specified without a revision then the latest active revision is used. - -**containerOverrides.vcpus** (integer) -The number of vCPUs to reserve for the container. This value overrides the value set in the job definition. - -**containerOverrides.memory** (integer) -The number of MiB of memory reserved for the job. This value overrides the value set in the job definition. - -**containerOverrides.command** (list) -The command to send to the container that overrides the default command from the Docker image or the job definition. - -**containerOverrides.environment** (list) -The environment variables to send to the container. You can add new environment variables, which are added to the -container at launch, or you can override the existing environment variables from the Docker image or the job definition. -(structure) -A key-value pair object. -**name** (string) -The name of the key-value pair. For environment variables, this is the name of the environment variable. -**value** (string) -The value of the key-value pair. For environment variables, this is the value of the environment variable. - -Example for a job.json -``` -{ - "jobName": "fastqc", - "jobQueue": "genomics-default-queue", - "jobDefinition": "genomics-fastqc:1", - "containerOverrides": { - "vcpus": 8, - "memory": 16000, - "command": ["fastqc *.gz"], - "environment": [{ - "name": "JOB_INPUTS", - "value": "s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R1_trim_samp-0p1.fastq.gz s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R2_trim_samp-0p1.fastq.gz" - }, - { - "name": "JOB_INPUT_S3_COPY_METHOD", - "value": "s3cp" - }, - { - "name": "JOB_OUTPUTS", - "value": "*.html *.zip" - }, - { - "name": "JOB_OUTPUT_S3_COPY_METHOD", - "value": "s3cp" - }, - { - "name": "JOB_OUTPUT_PREFIX", - "value": "s3://my-genomics-bucket-name/some-folder-name" - }, - { - "name": "JOB_AWS_CLI_PATH", - "value": v - } - ] - } -} - -``` -In this example we are running the FastQC tools that will take fastq files and generate a report. It will output zip and -html files which we will save to an S3 bucket. -**jobName** - "fastqc". A name that describe the job to be run. -**jobQueue** - "genomics-default-queue". A valid name of a job queue. This could be found in the AWS web console > -Batch > Job queues. -**jobDefinition** - "genomics-fastqc:1". A valid and active job definition and it's version. This could be found in the -AWS web console > Batch > Job definitions. -**containerOverrides.vcpus** - 8. Request a machine that has at least 8 cores. -**containerOverrides.memory** - 16000. Request a machine that has at least 16GiB of RAM. -**containerOverrides.command** - ["fastqc *.gz"]. Run the fastq command on all the .gz files in the working directory. -**containerOverrides.environment** - A list of key-value pairs. - -**name**: JOB_INPUTS. -**value**: fastq files from an S3 bucket - -**name**: JOB_INPUT_S3_COPY_METHOD -**value**: "s3cp. Use the aws s3 cp command to copy files from an S3 bucket to the a local directory. - -**name**: JOB_OUTPUTS. -**value**: "*.html *.zip". Copy all html and zip files from a local directory to an S3 bucket. - -**name**: JOB_OUTPUT_S3_COPY_METHOD. -**value**: "s3cp". Use the aws s3 cp command to copy files from a local directory to an S3 bucket. - -**name**: JOB_OUTPUT_PREFIX. -**value**: An S3 bucket and a prefix (folder) to copy the output files into. - -**name**: JOB_AWS_CLI_PATH. -**value**: "/opt/aws-cli/bin". Path to add to the PATH environment variable so that the AWS CLI can be located - -To run AWS batch command to test a job use the follwing command: `aws batch submit-job --cli-input-json file://job.json` \ No newline at end of file +Navigate to the [examples section](SET URL) of this repo. \ No newline at end of file diff --git a/src/aws-genomics-cdk/containers/build.sh b/src/aws-genomics-cdk/containers/build.sh index 2657a80c5..e5fcca915 100755 --- a/src/aws-genomics-cdk/containers/build.sh +++ b/src/aws-genomics-cdk/containers/build.sh @@ -1,14 +1,16 @@ #!/bin/bash set -e +DEFAULT_PROJECT_NAME="genomics" IMAGE_NAME=$1 +PROJECT_NAME="${2:-$DEFAULT_PROJECT_NAME}" DOCKER_FILE_PATH="./${IMAGE_NAME}/Dockerfile" REGISTRY="$CDK_DEFAULT_ACCOUNT.dkr.ecr.$CDK_DEFAULT_REGION.amazonaws.com" -REPOSITORY_NAME="genomics/${IMAGE_NAME}" +REPOSITORY_NAME="${PROJECT_NAME}/${IMAGE_NAME}" IMAGE_TAG=":latest" IMAGE_WITH_TAG="${IMAGE_NAME}${IMAGE_TAG}" REGISTRY_PATH="${REGISTRY}/${REPOSITORY_NAME}" -REGISTRY_PATH_WITH_TAG="${REGISTRY}/genomics/${IMAGE_WITH_TAG}" +REGISTRY_PATH_WITH_TAG="${REGISTRY}/${PROJECT_NAME}/${IMAGE_WITH_TAG}" if [ -z "${IMAGE_NAME}" ] diff --git a/src/aws-genomics-cdk/containers/bwa/Dockerfile b/src/aws-genomics-cdk/containers/bwa/Dockerfile new file mode 100644 index 000000000..c99832a2b --- /dev/null +++ b/src/aws-genomics-cdk/containers/bwa/Dockerfile @@ -0,0 +1,39 @@ +FROM public.ecr.aws/lts/ubuntu:18.04 AS build + +ARG BWA_VERSION=0.7.17 + +RUN apt-get update -y \ + && apt-get install -y \ + wget \ + make \ + gcc \ + zlib1g-dev \ + bzip2 + + +WORKDIR /opt/src +RUN wget https://github.com/lh3/bwa/releases/download/v${BWA_VERSION}/bwa-${BWA_VERSION}.tar.bz2 \ + && tar -xjvf bwa-*.tar.bz2 \ + && cd bwa-* \ + && make \ + && cp bwa /opt/src + + +FROM public.ecr.aws/lts/ubuntu:18.04 AS final + +RUN apt-get update -y \ + && apt-get install -y \ + wget \ + make \ + zlib1g \ + bzip2 \ + && apt-get clean + +WORKDIR /opt/bin +COPY --from=build /opt/src/bwa . + +ENV PATH=/opt/bin:$PATH + +WORKDIR /scratch + +ENTRYPOINT ["bwa"] \ No newline at end of file diff --git a/src/aws-genomics-cdk/containers/gatk/Dockerfile b/src/aws-genomics-cdk/containers/gatk/Dockerfile new file mode 100644 index 000000000..186d4094b --- /dev/null +++ b/src/aws-genomics-cdk/containers/gatk/Dockerfile @@ -0,0 +1,3 @@ +FROM broadinstitute/gatk:4.1.3.0 + +ENTRYPOINT ["gatk"] \ No newline at end of file diff --git a/src/aws-genomics-cdk/containers/picard/Dockerfile b/src/aws-genomics-cdk/containers/picard/Dockerfile new file mode 100644 index 000000000..76083889c --- /dev/null +++ b/src/aws-genomics-cdk/containers/picard/Dockerfile @@ -0,0 +1,2 @@ +FROM broadinstitute/picard + diff --git a/src/aws-genomics-cdk/containers/samtools/Dockerfile b/src/aws-genomics-cdk/containers/samtools/Dockerfile new file mode 100644 index 000000000..961a0fb68 --- /dev/null +++ b/src/aws-genomics-cdk/containers/samtools/Dockerfile @@ -0,0 +1,48 @@ +FROM public.ecr.aws/lts/ubuntu:18.04 AS build + +ARG VERSION=1.9 + +# Metadata +LABEL container.base.image="ubuntu:18.04" +LABEL software.name="SAMtools" +LABEL software.version=${VERSION} +LABEL software.description="Utilities for the Sequence Alignment/Map (SAM/BAM/CRAM) formats" +LABEL software.website="http://www.htslib.org" +LABEL software.documentation="http://www.htslib.org/doc/samtools.html" +LABEL software.license="MIT/Expat" +LABEL tags="Genomics" + +# System and library dependencies +RUN apt-get -y update && \ + apt-get -y install \ + autoconf \ + automake \ + make \ + gcc \ + perl \ + zlib1g-dev \ + libbz2-dev \ + liblzma-dev \ + libcurl4-gnutls-dev \ + libssl-dev \ + libncurses5-dev \ + wget && \ + apt-get clean + +# Application installation +RUN wget -O /samtools-${VERSION}.tar.bz2 \ + https://github.com/samtools/samtools/releases/download/${VERSION}/samtools-${VERSION}.tar.bz2 && \ + tar xvjf /samtools-${VERSION}.tar.bz2 && rm /samtools-${VERSION}.tar.bz2 + +WORKDIR /samtools-${VERSION} +RUN ./configure && make + +FROM public.ecr.aws/lts/ubuntu:18.04 AS final +COPY --from=build /samtools-*/samtools /usr/local/bin + +RUN apt-get -y update && \ + apt-get -y install \ + libcurl3-gnutls && \ + apt-get clean + +ENTRYPOINT ["samtools"] \ No newline at end of file diff --git a/src/aws-genomics-cdk/examples/README.md b/src/aws-genomics-cdk/examples/README.md index 44797276e..0a82f4800 100644 --- a/src/aws-genomics-cdk/examples/README.md +++ b/src/aws-genomics-cdk/examples/README.md @@ -1,50 +1,31 @@ # Bioinformatics tools examples -You can test the bioinfomatics tools with AWS Batch directly or start a full Step Functions pipeline. - -**jobName** - A name for the job, this will appear in the AWS Batch Job list -**jobQueue** - The name of the queue you want to use in AWS Batch. You can get this name from the AWS Batch console > -Job queues. -**jobDefinition** - The AWS Batch job definition including a version number. You can get this name from the AWS Batch console > -Job definitions. -**containerOverrides.vcpus** - The desired amount of vcpus to run this job. -**containerOverrides.memory** - The number of MiB of memory reserved for the job. -**containerOverrides.command** - The command to be executed. -**containerOverrides.environment** - Environment variables to send to the container. Refer to the special environment -variables in the [containers readme file](../README.md). - -Change the "JOB_OUTPUT_PREFIX" parameter to an existing bucket and choose a prefix (e.g., s3://mybucketname/test). - -### FastQC -To run the command, cd to the examples directory (e.g., ``cd src/aws-genomics-cdk/examples``) and run the following -command ``aws batch submit-job --cli-input-json file://batch-fastqc-job.json`` -If the job finish successfully you should see new html and zip files in the S3 location you configured. +After [deploying the CDK genomics pipeline project](GITHUB URL) you could test +the genomics tools directly with AWS Batch or start a Step Functions pipeline. + +### Testing bioinformatics tools using AWS Batch +Create a file named batch-TOOL_NANE.json. ``` -batch-fastqc-job.json { - "jobName": "fastqc", - "jobQueue": "genomics-default-job-queue", - "jobDefinition": "genomics-fastqc:1", + "jobName": "", + "jobQueue": "", + "jobDefinition": "", "containerOverrides": { - "vcpus": 2, - "memory": 4000, - "command": ["fastqc *.gz"], + "vcpus": 1, + "memory": 1000, + "command": [""], "environment": [{ "name": "JOB_INPUTS", - "value": "s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R1_trim_samp-0p1.fastq.gz s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R2_trim_samp-0p1.fastq.gz" + "value": "" }, { "name": "JOB_OUTPUTS", - "value": "*.html *.zip" + "value": "" }, { "name": "JOB_OUTPUT_PREFIX", - "value": "s3://[YOUR BUCKET NAME]/[SOME PREFIX]" - }, - { - "name": "JOB_AWS_CLI_PATH", - "value": "/opt/aws-cli/bin" + "value": "" } ] } @@ -52,65 +33,116 @@ batch-fastqc-job.json ``` +**jobName** (string) +The name of the job. The first character must be alphanumeric, and up to 128 +letters (uppercase and lowercase), numbers, hyphens, and underscores are +allowed. + +**jobQueue** (string) +The [job queue](https://docs.aws.amazon.com/batch/latest/userguide/job_queues.html) +into which the job is submitted. You can specify either the name or the Amazon +Resource Name (ARN) of the queue. + +**jobDefinition** (string) +The [job definition](https://docs.aws.amazon.com/batch/latest/userguide/job_definitions.html) +used by this job. This value can be one of name , name:revision , or the Amazon +Resource Name (ARN) for the job definition. If name is specified without +a revision then the latest active revision is used. -### Minimap2 -To run the command, cd to the examples directory (e.g., ``cd src/aws-genomics-cdk/examples``) and run the following -command ``aws batch submit-job --cli-input-json file://batch-minimap2-job.json`` -If the job finish successfully you should see new sam files in the S3 location you configured. +**containerOverrides.vcpus** (integer optional) +The number of vCPUs to reserve for the container. This value overrides the +value set in the job definition. + +**containerOverrides.memory** (integer optional) +The number of MiB of memory reserved for the job. This value overrides the +value set in the job definition. + +**containerOverrides.command** (list) +The command to send to the container that overrides the default command from +the Docker image or the job definition. + +**containerOverrides.environment** (list) +The environment variables to send to the container. You can add new environment +variables, which are added to the container at launch, or you can override the +existing environment variables from the Docker image or the job definition. +(structure) +A key-value pair object. +**name** (string) +The name of the key-value pair. For environment variables, this is the name of +the environment variable. +**value** (string) +The value of the key-value pair. For environment variables, this is the value +of the environment variable. + +Example for a `batch-fastqc.json` ``` -batch-minimap2-job.json { - "jobName": "minimap2", + "jobName": "fastqc", "jobQueue": "genomics-default-queue", - "jobDefinition": "minimap2:1", + "jobDefinition": "genomics-fastqc:1", "containerOverrides": { - "vcpus": 8, - "memory": 16000, - "command": ["minimap2 -ax map-pb Homo_sapiens_assembly38.fasta NIST7035_R1_trim_samp-0p1.fastq.gz > NIST7035.sam"], + "vcpus": 1, + "memory": 1000, + "command": ["fastqc *.gz"], "environment": [{ - "name": "JOB_INPUTS", - "value": "s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R1_trim_samp-0p1.fastq.gz" - }, - { - "name": "JOB_OUTPUTS", - "value": "*.sam" - }, - { - "name": "JOB_OUTPUT_PREFIX", - "value": "s3://[YOUR BUCKET NAME]/[SOME PREFIX]" - }, - { - "name": "JOB_AWS_CLI_PATH", - "value": "/opt/aws-cli/bin" - } + "name": "JOB_INPUTS", + "value": "s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R*.fastq.gz" + }, + { + "name": "JOB_OUTPUTS", + "value": "*.html *.zip" + }, + { + "name": "JOB_OUTPUT_PREFIX", + "value": "s3://my-genomics-bucket-name/some-folder-name" + } ] } } + ``` +In this example we are running the FastQC tools that will take fastq files and +generate a report. It will output zip and html files which we will save to an +S3 bucket. +**jobName** - "fastqc". A name that describe the job to be run. +**jobQueue** - "genomics-default-queue". A valid name of a job queue. This +could be found in the AWS web console > Batch > Job queues. +**jobDefinition** - "genomics-fastqc:1". A valid and active job definition and +it's version. This could be found in the AWS web console > Batch > Job +definitions. +**containerOverrides.vcpus** - 1. Request a machine that has at least 1 core. +**containerOverrides.memory** - 1000. Request a machine that has at least +1000MiB of RAM. +**containerOverrides.command** - ["fastqc *.gz"]. Run the fastq command on all +the .gz files in the working directory. +**containerOverrides.environment** - A list of key-value pairs. +**name**: JOB_INPUTS. +**value**: fastq files from a source S3 bucket -### A demo pipeline that runs FasqQC and then Minimap2 +**name**: JOB_OUTPUTS. +**value**: "*.html *.zip". Copy all html and zip files from a local directory +to an S3 bucket. + +**name**: JOB_OUTPUT_PREFIX. +**value**: An S3 bucket and a prefix (folder) to copy the output files into. + + +There are several examples under the `examples` directory. To run an example, +edit the example file you want to run (e.g., `examples/batch-fastqc-job.json`), +update the `JOB_INPUTS` to a valid source of your sample fastq files, or leave +the default value to use a demo sample. Update the `JOB_OUTPUT_PREFIX` to a +valid s3 bucket and a subfolder where you want the output zip and html files +to be saved to. + +Change directory to the examples directory and then submit the job to Batch. -Logon to the AWS console, navigate to Step Functions and click on the "genomics-pipelines-state-machine" state machine. -Click on the "Start execution" button and use the following json content for the input section. Change the -"JOB_OUTPUT_PREFIX" parameter to an existing bucket and choose a prefix (e.g., s3://mybucketname/test). ``` -{ - "params": { - "environment": { - "JOB_OUTPUT_PREFIX": "[YOUR BUCKET NAME]/[SOME PREFIX]" - }, - "fastqc": { - "input": "s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R1_trim_samp-0p1.fastq.gz s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R2_trim_samp-0p1.fastq.gz", - "output": "*.html *.zip" - }, - "minimap2": { - "input": "s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R1_trim_samp-0p1.fastq.gz", - "fastaFileName": "Homo_sapiens_assembly38.fasta", - "fastqFiles": "NIST7035_R1_trim_samp-0p1.fastq.gz", - "samOutput": "hg38-NIST7035.sam", - "output": "*.sam" - } - } -} -``` \ No newline at end of file +cd examples +aws batch submit-job --cli-input-json file://batch-fastqc-job.json +``` + +Navigate to the Batch jobs page (AWS console -> AWS Batch -> Jobs -> select the +job queue you used (e.g., `genomics-default-queue`) to track the progress of +the job. You can click on the job name and them click on the Log stream name +link to track the stdout on the running task. diff --git a/src/aws-genomics-cdk/examples/batch-bwa-job.json b/src/aws-genomics-cdk/examples/batch-bwa-job.json new file mode 100644 index 000000000..d68d3ef94 --- /dev/null +++ b/src/aws-genomics-cdk/examples/batch-bwa-job.json @@ -0,0 +1,33 @@ +{ + "jobName": "bwa", + "jobQueue": "genomics-default-queue", + "jobDefinition": "bwa:3", + "containerOverrides": { + "command": ["bwa mem -t 8 -p -o ${SAMPLE_ID}.sam ${REFERENCE_NAME}.fasta ${SAMPLE_ID}_*1*.fastq.gz"], + "environment": [{ + "name": "JOB_INPUTS", + "value": "s3://genomics-pipelines-840249831562/sample/ s3://genomics-pipelines-840249831562/hg38/v0/" + }, + { + "name": "SAMPLE_ID", + "value": "NIST7035" + }, + { + "name": "REFERENCE_NAME", + "value": "Homo_sapiens_assembly38" + }, + { + "name": "JOB_OUTPUTS", + "value": "*.sam" + }, + { + "name": "JOB_OUTPUT_PREFIX", + "value": "s3://genomics-pipelines-840249831562/output" + }, + { + "name": "JOB_INPUT_S3_COPY_METHOD", + "value": "s3sync" + } + ] + } +} \ No newline at end of file diff --git a/src/aws-genomics-cdk/examples/batch-fastqc-job.json b/src/aws-genomics-cdk/examples/batch-fastqc-job.json index 19730e23f..ffd1848c2 100644 --- a/src/aws-genomics-cdk/examples/batch-fastqc-job.json +++ b/src/aws-genomics-cdk/examples/batch-fastqc-job.json @@ -1,14 +1,12 @@ { "jobName": "fastqc", "jobQueue": "genomics-default-queue", - "jobDefinition": "fastqc:1", + "jobDefinition": "fastqc:3", "containerOverrides": { - "vcpus": 2, - "memory": 4000, "command": ["fastqc *.gz"], "environment": [{ "name": "JOB_INPUTS", - "value": "s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R1_trim_samp-0p1.fastq.gz s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R2_trim_samp-0p1.fastq.gz" + "value": "s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R*.fastq.gz" }, { "name": "JOB_OUTPUTS", @@ -16,12 +14,8 @@ }, { "name": "JOB_OUTPUT_PREFIX", - "value": "s3://[YOUR BUCKET NAME]/[SOME PREFIX]" - }, - { - "name": "JOB_AWS_CLI_PATH", - "value": "/opt/aws-cli/bin" + "value": "s3://genomics-pipelines-840249831562/output" } ] } -} +} \ No newline at end of file diff --git a/src/aws-genomics-cdk/examples/batch-gatk-dictionary.json b/src/aws-genomics-cdk/examples/batch-gatk-dictionary.json new file mode 100644 index 000000000..f0a4a98e4 --- /dev/null +++ b/src/aws-genomics-cdk/examples/batch-gatk-dictionary.json @@ -0,0 +1,21 @@ +{ + "jobName": "gatk-create-dictionary", + "jobQueue": "genomics-default-queue", + "jobDefinition": "gatkCreateSequenceDictionary:1", + "containerOverrides": { + "command": ["java -jar /usr/app/picard.jar CreateSequenceDictionary R=Homo_sapiens_assembly38.fasta O=Homo_sapiens_assembly38.dict"], + "environment": [{ + "name": "JOB_INPUTS", + "value": "s3://genomics-pipelines-840249831562/hg38/v0/Homo_sapiens_assembly38.fasta" + }, + { + "name": "JOB_OUTPUTS", + "value": "*.dict" + }, + { + "name": "JOB_OUTPUT_PREFIX", + "value": "s3://genomics-pipelines-840249831562/hg38/v0" + } + ] + } +} \ No newline at end of file diff --git a/src/aws-genomics-cdk/examples/batch-gatk-htc.json b/src/aws-genomics-cdk/examples/batch-gatk-htc.json new file mode 100644 index 000000000..89ca2b06b --- /dev/null +++ b/src/aws-genomics-cdk/examples/batch-gatk-htc.json @@ -0,0 +1,33 @@ +{ + "jobName": "gatkHaploTypeCaller", + "jobQueue": "genomics-default-queue", + "jobDefinition": "gatkHaplotypeCaller:1", + "containerOverrides": { + "command": ["gatk --java-options \"-Xmx4g\" HaplotypeCaller -R ${REFERENCE_NAME}.fasta -I ${SAMPLE_ID}.bam -O ${SAMPLE_ID}.vcf.gz -bamout ${SAMPLE_ID}.out.bam"], + "environment": [{ + "name": "JOB_INPUTS", + "value": "s3://genomics-pipelines-840249831562/output/ s3://genomics-pipelines-840249831562/hg38/v0/" + }, + { + "name": "SAMPLE_ID", + "value": "NIST7035" + }, + { + "name": "REFERENCE_NAME", + "value": "Homo_sapiens_assembly38" + }, + { + "name": "JOB_OUTPUTS", + "value": "*.out.bam *.vcf.gz" + }, + { + "name": "JOB_OUTPUT_PREFIX", + "value": "s3://genomics-pipelines-840249831562/output" + }, + { + "name": "JOB_INPUT_S3_COPY_METHOD", + "value": "s3sync" + } + ] + } +} diff --git a/src/aws-genomics-cdk/examples/batch-picard-add-missing-groups.json b/src/aws-genomics-cdk/examples/batch-picard-add-missing-groups.json new file mode 100644 index 000000000..a93b8fffc --- /dev/null +++ b/src/aws-genomics-cdk/examples/batch-picard-add-missing-groups.json @@ -0,0 +1,29 @@ +{ + "jobName": "picard-add-missing-groups", + "jobQueue": "genomics-default-queue", + "jobDefinition": "picardAddMissingGroups:1", + "containerOverrides": { + "command": ["java -jar /usr/picard/picard.jar AddOrReplaceReadGroups", + " -I ${SAMPLE_ID}.bam -O ${SAMPLE_ID}.rg.bam -RGID 4 --RGLB lib1 ", + " --RGPL ILLUMINA --RGPU unit1 --RGSM 20;", + " cp ${SAMPLE_ID}.rg.bam ${SAMPLE_ID}.bam;", + " rm ${SAMPLE_ID}.rg.bam"], + "environment": [{ + "name": "JOB_INPUTS", + "value": "s3://genomics-pipelines-840249831562/output/NIST7035.bam" + }, + { + "name": "SAMPLE_ID", + "value": "NIST7035" + }, + { + "name": "JOB_OUTPUTS", + "value": "*.bam" + }, + { + "name": "JOB_OUTPUT_PREFIX", + "value": "s3://genomics-pipelines-840249831562/output" + } + ] + } +} \ No newline at end of file diff --git a/src/aws-genomics-cdk/examples/batch-samtools-index.json b/src/aws-genomics-cdk/examples/batch-samtools-index.json new file mode 100644 index 000000000..ebd6da035 --- /dev/null +++ b/src/aws-genomics-cdk/examples/batch-samtools-index.json @@ -0,0 +1,25 @@ +{ + "jobName": "samtoolsIndex", + "jobQueue": "genomics-default-queue", + "jobDefinition": "samtoolsIndex:2", + "containerOverrides": { + "command": ["samtools index ${SAMPLE_ID}.bam"], + "environment": [{ + "name": "JOB_INPUTS", + "value": "s3://genomics-pipelines-840249831562/output/NIST7035.bam" + }, + { + "name": "SAMPLE_ID", + "value": "NIST7035" + }, + { + "name": "JOB_OUTPUTS", + "value": "*.bam *.bai" + }, + { + "name": "JOB_OUTPUT_PREFIX", + "value": "s3://genomics-pipelines-840249831562/output" + } + ] + } +} \ No newline at end of file diff --git a/src/aws-genomics-cdk/examples/batch-samtools-sort.json b/src/aws-genomics-cdk/examples/batch-samtools-sort.json new file mode 100644 index 000000000..6747ea62e --- /dev/null +++ b/src/aws-genomics-cdk/examples/batch-samtools-sort.json @@ -0,0 +1,25 @@ +{ + "jobName": "samtoolsSort", + "jobQueue": "genomics-default-queue", + "jobDefinition": "samtoolsSort:1", + "containerOverrides": { + "command": ["samtools sort -@ 4 -o ${SAMPLE_ID}.bam ${SAMPLE_ID}.sam"], + "environment": [{ + "name": "JOB_INPUTS", + "value": "s3://genomics-pipelines-840249831562/output/NIST7035.sam" + }, + { + "name": "SAMPLE_ID", + "value": "NIST7035" + }, + { + "name": "JOB_OUTPUTS", + "value": "*.bam" + }, + { + "name": "JOB_OUTPUT_PREFIX", + "value": "s3://genomics-pipelines-840249831562/output" + } + ] + } +} \ No newline at end of file diff --git a/src/aws-genomics-cdk/lib/aws-genomics-cdk-stack.ts b/src/aws-genomics-cdk/lib/aws-genomics-cdk-stack.ts index e225d5d61..cc0954223 100644 --- a/src/aws-genomics-cdk/lib/aws-genomics-cdk-stack.ts +++ b/src/aws-genomics-cdk/lib/aws-genomics-cdk-stack.ts @@ -4,7 +4,10 @@ import * as s3 from "@aws-cdk/aws-s3"; import * as config from "../app.config.json"; import GenomicsVpcStack from "./vpc/vpc-stack"; import GenomicsBatchStack from "./batch/batch-stack"; -import GenomicsStateMachineProps from "./step-functions/genomics-state-machine-stack"; + +//Workflows +import { WorkflowConfig } from "./workflows/workflow-config"; +import VariantCallingStateMachine from "./workflows/variant-calling-stack"; export class AwsGenomicsCdkStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props: cdk.StackProps) { @@ -13,11 +16,11 @@ export class AwsGenomicsCdkStack extends cdk.Stack { // Create a new VPC or use an existing one let vpc: ec2.Vpc; if (config.VPC.createVPC) { - vpc = new GenomicsVpcStack(this, "genomics-vpc", props).vpc; + vpc = new GenomicsVpcStack(this, config.VPC.VPCName, props).vpc; } else { - vpc = ec2.Vpc.fromLookup(this, "genomics-vpc-lookup", { - vpcName: config.VPC.existingVPCName, - }) as ec2.Vpc + vpc = ec2.Vpc.fromLookup(this, `${config.projectName}-vpc-lookup`, { + vpcName: config.VPC.VPCName, + }) as ec2.Vpc; } // Create a new bucket if set in the config @@ -38,17 +41,34 @@ export class AwsGenomicsCdkStack extends cdk.Stack { bucket: config.S3.bucketName, }; - const batch = new GenomicsBatchStack(this, "genomics-batch", batchProps); - - if(config.stepFunctions.launchDemoPipeline === true){ - const genomicsDemoProps = { - genomicsDefaultQueue: batch.genomicsDefaultQueue, - genomicsHighPriorityQueue: batch.genomicsHighPriorityQueue, - env: props.env as cdk.ResourceEnvironment, - taskRole: batch.taskRole - }; - - new GenomicsStateMachineProps(this, "genomics-demo-pipeline", genomicsDemoProps) + const batch = new GenomicsBatchStack( + this, + `${config.projectName}-batch`, + batchProps + ); + + // loop throgh the app.config workflows file and set infrastructure for + // the provided workflows + let workflow: WorkflowConfig; + for (let i = 0; i < config.workflows.length; i++) { + workflow = config.workflows[i] as WorkflowConfig; + + switch (workflow.name) { + case "variantCalling": + new VariantCallingStateMachine( + this, + `${config.projectName}-${workflow.name}`, + { + stackProps: props, + batchQueue: + workflow.spot === true + ? batch.genomicsDefaultQueue + : batch.genomicsHighPriorityQueue, + taskRole: batch.taskRole, + } + ); + break; + } } } } diff --git a/src/aws-genomics-cdk/lib/batch/batch-compute-environmnet-construct.ts b/src/aws-genomics-cdk/lib/batch/batch-compute-environmnet-construct.ts index dd37e1895..843f15ce3 100644 --- a/src/aws-genomics-cdk/lib/batch/batch-compute-environmnet-construct.ts +++ b/src/aws-genomics-cdk/lib/batch/batch-compute-environmnet-construct.ts @@ -3,6 +3,7 @@ import * as batch from "@aws-cdk/aws-batch"; import * as ec2 from "@aws-cdk/aws-ec2"; import * as ecs from "@aws-cdk/aws-ecs"; import * as iam from "@aws-cdk/aws-iam"; +import * as config from "../../app.config.json"; export class GenomicsComputeEnvironmentProps { readonly computeResourcesType?: batch.ComputeResourceType; @@ -35,8 +36,7 @@ export default class GenomicsComputeEnvironment extends cdk.Construct { props.allocationStrategy ?? batch.AllocationStrategy.SPOT_CAPACITY_OPTIMIZED, computeResourcesTags: props.computeResourcesTags ?? { - Name: "genomics-instance", - Environment: "production", + Name: `${config.projectName}-instance` }, image: ecs.EcsOptimizedImage.amazonLinux2(), instanceRole: props.instanceProfileArn, diff --git a/src/aws-genomics-cdk/lib/batch/batch-iam-stack.ts b/src/aws-genomics-cdk/lib/batch/batch-iam-stack.ts index 57bb3b8d8..37135f434 100644 --- a/src/aws-genomics-cdk/lib/batch/batch-iam-stack.ts +++ b/src/aws-genomics-cdk/lib/batch/batch-iam-stack.ts @@ -2,6 +2,7 @@ import * as cdk from "@aws-cdk/core"; import * as iam from "@aws-cdk/aws-iam"; import * as path from "path"; import * as fs from "fs"; +import * as config from "../../app.config.json"; export interface GenomicsIamProps { readonly bucketName: string; @@ -19,7 +20,7 @@ export default class GenomicsIam extends cdk.Stack { // Create a task role to be used by AWS batch container const taskRoleProps = { - roleName: "genomics-ecs-task-role", + roleName: `${config.projectName}-ecs-task-role`, assumedBy: new iam.ServicePrincipal("ecs-tasks.amazonaws.com"), description: "allow ecs task to assume a role for the genomics pipleine", managedPolicies: [iam.ManagedPolicy.fromAwsManagedPolicyName("AmazonS3ReadOnlyAccess")] @@ -30,7 +31,7 @@ export default class GenomicsIam extends cdk.Stack { // Create an instance role for the EC2 host machine for AWS Batch const instanceRoleProps = { - roleName: "genomics-batch-instance-role", + roleName: `${config.projectName}-batch-instance-role`, assumedBy: new iam.ServicePrincipal("ec2.amazonaws.com"), description: "allow ec2 instance to assume a role for the genomics pipleine", managedPolicies: [ @@ -45,7 +46,7 @@ export default class GenomicsIam extends cdk.Stack { // Create a spot fleet role to be used by AWS Batch when launching spot instances const fleetRoleProps = { - roleName: "genomics-spot-fleet-role", + roleName: `${config.projectName}-spot-fleet-role`, assumedBy: new iam.ServicePrincipal("ec2.amazonaws.com"), description: "allow ec2 instance to assume a role for the genomics pipleine", managedPolicies: [iam.ManagedPolicy.fromAwsManagedPolicyName("service-role/AmazonEC2SpotFleetTaggingRole")] @@ -56,7 +57,7 @@ export default class GenomicsIam extends cdk.Stack { // Create a service role for AWS Batch so it can assume other roles for the genomics pipeline const batchServiceRoleProps = { - roleName: "genomics-batch-service-role", + roleName: `${config.projectName}-batch-service-role`, assumedBy: new iam.ServicePrincipal("batch.amazonaws.com"), description: "allow batch to assume a role for the genomics pipleine", managedPolicies: [iam.ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSBatchServiceRole")] @@ -70,7 +71,7 @@ export default class GenomicsIam extends cdk.Stack { const bucketPolicy = fs.readFileSync(filePath, {encoding: "utf-8"}).replace(/BUCKET_NAME/g, props.bucketName); const policyProps = { - policyName: "genomics-policy-s3", + policyName: `${config.projectName}-policy-s3`, document: iam.PolicyDocument.fromJson(JSON.parse(bucketPolicy)), force: true, roles: [this.taskRole, instanceRole] @@ -81,7 +82,7 @@ export default class GenomicsIam extends cdk.Stack { // Create an instance profile to be used by AWS Batch compute environment const instanceProfileProps = { roles: [instanceRoleProps.roleName], - instanceProfileName: "genomics-batch-instance-profile" + instanceProfileName: `${config.projectName}-batch-instance-profile` }; const instanceProfile = new iam.CfnInstanceProfile(this, instanceProfileProps.instanceProfileName, instanceProfileProps); this.instanceProfileArn = `arn:aws:iam::${props.account}:instance-profile/${instanceProfileProps.instanceProfileName}`; diff --git a/src/aws-genomics-cdk/lib/batch/batch-stack.ts b/src/aws-genomics-cdk/lib/batch/batch-stack.ts index b2ff6076f..6c0fa176f 100644 --- a/src/aws-genomics-cdk/lib/batch/batch-stack.ts +++ b/src/aws-genomics-cdk/lib/batch/batch-stack.ts @@ -32,14 +32,14 @@ export default class GenomicsBatchStack extends cdk.Stack { account: env.account as string } - const genomicsIam = new GenomicsIam(this, "genomics-iam", genomicsIamProps); + const genomicsIam = new GenomicsIam(this, `${config.projectName}-iam`, genomicsIamProps); this.taskRole = genomicsIam.taskRole; // Create a EC2 Launch Template to be used by AWS Batch const launchTemplateProps = { - launchTemplateName: "genomics-launch-template", + launchTemplateName: `${config.projectName}-launch-template`, volumeSize: config.batch.defaultVolumeSize }; @@ -54,7 +54,7 @@ export default class GenomicsBatchStack extends cdk.Stack { // Create spot compute environment for the genomics pipeline using SPOT instances const spotComputeEnvironmentProps = { - computeEnvironmentName: "genomics-spot-compute-environment", + computeEnvironmentName: `${config.projectName}-spot-compute-environment`, vpc: props.vpc, instanceTypes: envInstanceType, maxvCpus: config.batch.spotMaxVCPUs, @@ -71,7 +71,7 @@ export default class GenomicsBatchStack extends cdk.Stack { // Create on demand compute environment using on demand instances const onDemandComputeEnvironmentProps = { - computeEnvironmentName: "genomics-on-demand-compute-environment", + computeEnvironmentName: `${config.projectName}-on-demand-compute-environment`, computeResourcesType: batch.ComputeResourceType.ON_DEMAND, allocationStrategy: batch.AllocationStrategy.BEST_FIT, vpc: props.vpc, @@ -92,10 +92,9 @@ export default class GenomicsBatchStack extends cdk.Stack { // Create default queue, using spot first and then on-demand instances const defaultQueueProps = { computeEnvironments: [ - spotComputeEnvironment.computeEnvironment, - onDemandComputeEnvironment.computeEnvironment + spotComputeEnvironment.computeEnvironment ], - jobQueueName: "genomics-default-queue", + jobQueueName: `${config.projectName}-default-queue`, priority: 100 }; @@ -110,7 +109,7 @@ export default class GenomicsBatchStack extends cdk.Stack { spotComputeEnvironment.computeEnvironment ], - jobQueueName: "genomics-high-priority-queue", + jobQueueName: `${config.projectName}-high-priority-queue`, priority: 1000 } diff --git a/src/aws-genomics-cdk/lib/step-functions/genomics-state-machine-stack.ts b/src/aws-genomics-cdk/lib/step-functions/genomics-state-machine-stack.ts deleted file mode 100644 index 1cd6285c0..000000000 --- a/src/aws-genomics-cdk/lib/step-functions/genomics-state-machine-stack.ts +++ /dev/null @@ -1,104 +0,0 @@ -import * as cdk from "@aws-cdk/core"; -import * as batch from "@aws-cdk/aws-batch"; -import * as sfn from "@aws-cdk/aws-stepfunctions"; -import * as iam from "@aws-cdk/aws-iam"; -import * as jobDefinitions from "./job-definitions"; -import GenomicsTask from "./genomics-task-construct"; -import GenomicsJobDefinition from "./job-definition-construct"; -import * as config from "../../app.config.json"; - -export interface GenomicsStateMachineProps { - readonly genomicsDefaultQueue: batch.JobQueue; - readonly genomicsHighPriorityQueue: batch.JobQueue; - readonly env: cdk.ResourceEnvironment; - readonly taskRole: iam.Role; -} - -export default class GenomicsStateMachine extends cdk.Stack { - constructor( - scope: cdk.Construct, - id: string, - props: GenomicsStateMachineProps - ) { - super(scope, id, { env: props.env }); - - const jobDefinitionProps = { - env: props.env, - stack: this, - jobRole: props.taskRole, - }; - - const fastQC = new jobDefinitions.FastQcJobDefinition({ - ...jobDefinitionProps, - ...config.stepFunctions.jobDefinitions.fastqc, - }); - - const minimap2 = new jobDefinitions.Minimap2JObDefinition({ - ...jobDefinitionProps, - ...config.stepFunctions.jobDefinitions.minimap2, - }); - - const step1TaskProps = { - taskName: "FASTQC", - environment: { - JOB_INPUTS: sfn.JsonPath.stringAt("$.params.fastqc.input"), - JOB_OUTPUTS: sfn.JsonPath.stringAt("$.params.fastqc.output"), - }, - command: ["fastqc *.gz"], - jobDefinition: new GenomicsJobDefinition( - this, - fastQC.jobDefinitionName, - fastQC - ).jobDefinition, - queue: config.stepFunctions.jobDefinitions.fastqc.spot === true - ? props.genomicsDefaultQueue - : props.genomicsHighPriorityQueue, - }; - - const step1Task = new GenomicsTask( - this, - step1TaskProps.taskName, - step1TaskProps - ).task; - - const step2TaskProps = { - taskName: "MINIMAP2", - environment: { - JOB_INPUTS: sfn.JsonPath.stringAt("$.params.minimap2.input"), - FASTA_INPUT: sfn.JsonPath.stringAt("$.params.minimap2.fastaFileName"), - FASTQ_INPUT: sfn.JsonPath.stringAt("$.params.minimap2.fastqFiles"), - SAM_OUTPUT: sfn.JsonPath.stringAt("$.params.minimap2.samOutput"), - JOB_OUTPUTS: sfn.JsonPath.stringAt("$.params.minimap2.output"), - }, - command: ["minimap2 -ax map-pb $FASTA_INPUT $FASTQ_INPUT > $SAM_OUTPUT"], - jobDefinition: new GenomicsJobDefinition( - this, - minimap2.jobDefinitionName, - minimap2 - ).jobDefinition, - queue: config.stepFunctions.jobDefinitions.minimap2.spot === true - ? props.genomicsDefaultQueue - : props.genomicsHighPriorityQueue, - }; - - const step2Task = new GenomicsTask( - this, - step2TaskProps.taskName, - step2TaskProps - ).task; - - const definition = step1Task.next(step2Task); - - const stateMachineProps = { - definition, - stateMachineName: "genomics-pipelines-state-machine", - timeout: cdk.Duration.hours(1), - }; - - new sfn.StateMachine( - this, - stateMachineProps.stateMachineName, - stateMachineProps - ); - } -} diff --git a/src/aws-genomics-cdk/lib/step-functions/job-definitions.ts b/src/aws-genomics-cdk/lib/step-functions/job-definitions.ts deleted file mode 100644 index 703c56bb4..000000000 --- a/src/aws-genomics-cdk/lib/step-functions/job-definitions.ts +++ /dev/null @@ -1,68 +0,0 @@ -import * as cdk from "@aws-cdk/core"; -import * as iam from "@aws-cdk/aws-iam"; - -export enum GenomicsJobDefinitionTypes { - FASTQC = "fastqc", - MINIMAP2 = "minimap2" -} - -export interface GenomicsJobDefinitionProps { - readonly repository: string; - readonly jobDefinitionName?: string; - readonly retryAttempts?: number; - readonly timeout?: number; - readonly env: cdk.ResourceEnvironment; - readonly stack: cdk.Stack; - readonly jobRole: iam.Role; - readonly memoryLimit?: number; - readonly vcpus?: number; -} - -class JobDefinitionBase implements GenomicsJobDefinitionProps { - public repository: string; - public jobDefinitionName: string; - public retryAttempts?: number; - public timeout?: number; - public env: cdk.ResourceEnvironment; - public stack: cdk.Stack; - public jobRole: iam.Role; - public memoryLimit?: number; - public vcpus?: number; - - constructor() { - this.retryAttempts = 1; - this.timeout = 3600; - this.memoryLimit = 16000; - this.vcpus = 8; - } -} - -export class FastQcJobDefinition extends JobDefinitionBase { - constructor(props: GenomicsJobDefinitionProps) { - super(); - this.repository = props.repository; - this.jobDefinitionName = GenomicsJobDefinitionTypes.FASTQC; - this.retryAttempts = props.retryAttempts ?? this.retryAttempts; - this.timeout = props.timeout ?? this.timeout; - this.env = props.env; - this.stack = props.stack; - this.jobRole = props.jobRole; - this.memoryLimit = props.memoryLimit ?? this.memoryLimit; - this.vcpus = props.vcpus ?? this.vcpus; - } -} - -export class Minimap2JObDefinition extends JobDefinitionBase { - constructor(props: GenomicsJobDefinitionProps) { - super(); - this.repository = props.repository; - this.jobDefinitionName = GenomicsJobDefinitionTypes.MINIMAP2; - this.retryAttempts = props.retryAttempts ?? this.retryAttempts; - this.timeout = props.timeout ?? this.timeout; - this.env = props.env; - this.stack = props.stack; - this.jobRole = props.jobRole; - this.memoryLimit = props.memoryLimit ?? this.memoryLimit; - this.vcpus = props.vcpus ?? this.vcpus; - } -} \ No newline at end of file diff --git a/src/aws-genomics-cdk/lib/vpc/vpc-stack.ts b/src/aws-genomics-cdk/lib/vpc/vpc-stack.ts index e72678f9c..895e1e484 100644 --- a/src/aws-genomics-cdk/lib/vpc/vpc-stack.ts +++ b/src/aws-genomics-cdk/lib/vpc/vpc-stack.ts @@ -23,10 +23,10 @@ export default class GenomicsVpcStack extends cdk.Stack { const vpcProp = { cidr: config.VPC.cidr, - max_azs: config.VPC.maxAZs, + maxAZs: config.VPC.maxAZs, subnetConfiguration: subnetConf }; - this.vpc = new ec2.Vpc(this, "genomics-vpc", vpcProp); + this.vpc = new ec2.Vpc(this, config.VPC.VPCName, vpcProp); } } diff --git a/src/aws-genomics-cdk/lib/step-functions/genomics-task-construct.ts b/src/aws-genomics-cdk/lib/workflows/genomics-task-construct.ts similarity index 100% rename from src/aws-genomics-cdk/lib/step-functions/genomics-task-construct.ts rename to src/aws-genomics-cdk/lib/workflows/genomics-task-construct.ts diff --git a/src/aws-genomics-cdk/lib/step-functions/job-definition-construct.ts b/src/aws-genomics-cdk/lib/workflows/job-definition-construct.ts similarity index 90% rename from src/aws-genomics-cdk/lib/step-functions/job-definition-construct.ts rename to src/aws-genomics-cdk/lib/workflows/job-definition-construct.ts index 93e4fdfcb..2a6671f0e 100644 --- a/src/aws-genomics-cdk/lib/step-functions/job-definition-construct.ts +++ b/src/aws-genomics-cdk/lib/workflows/job-definition-construct.ts @@ -49,11 +49,11 @@ export default class GenomicsJobDefinition extends cdk.Construct{ const jobDefinitionProps = { container: jobDefinitionContainerProps, - jobDefinitionName: props.jobDefinitionName as string, + jobDefinitionName: id, retryAttempts: props.retryAttempts ?? 1, timeout: cdk.Duration.seconds(props.timeout ?? 3600) }; - this.jobDefinition = new batch.JobDefinition(this, jobDefinitionProps.jobDefinitionName, jobDefinitionProps); + this.jobDefinition = new batch.JobDefinition(this, id, jobDefinitionProps); } } \ No newline at end of file diff --git a/src/aws-genomics-cdk/lib/workflows/job-definitions.ts b/src/aws-genomics-cdk/lib/workflows/job-definitions.ts new file mode 100644 index 000000000..8dc951183 --- /dev/null +++ b/src/aws-genomics-cdk/lib/workflows/job-definitions.ts @@ -0,0 +1,132 @@ +import * as cdk from "@aws-cdk/core"; +import * as iam from "@aws-cdk/aws-iam"; + +export enum GenomicsJobDefinitionTypes { + FASTQC = "fastqc", + MINIMAP2 = "minimap2", + GATK = "gatk", + BWA = "bwa", + SAMTOOLS = "samtools", + PICARD = "picard" +} + +export interface GenomicsJobDefinitionProps { + readonly repository: string; + readonly jobDefinitionName?: string; + readonly retryAttempts?: number; + readonly timeout?: number; + readonly env: cdk.ResourceEnvironment; + readonly stack: cdk.Stack; + readonly jobRole: iam.Role; + readonly memoryLimit?: number; + readonly vcpus?: number; +} + +export class JobDefinitionBase implements GenomicsJobDefinitionProps { + public repository: string; + public jobDefinitionName: string; + public retryAttempts?: number; + public timeout?: number; + public env: cdk.ResourceEnvironment; + public stack: cdk.Stack; + public jobRole: iam.Role; + public memoryLimit?: number; + public vcpus?: number; + + constructor() { + this.retryAttempts = 1; + this.timeout = 3600; + this.memoryLimit = 16000; + this.vcpus = 8; + } +} + +export class FastQcJobDefinition extends JobDefinitionBase { + constructor(props: GenomicsJobDefinitionProps) { + super(); + this.repository = props.repository; + this.jobDefinitionName = GenomicsJobDefinitionTypes.FASTQC; + this.retryAttempts = props.retryAttempts ?? this.retryAttempts; + this.timeout = props.timeout ?? this.timeout; + this.env = props.env; + this.stack = props.stack; + this.jobRole = props.jobRole; + this.memoryLimit = props.memoryLimit ?? this.memoryLimit; + this.vcpus = props.vcpus ?? this.vcpus; + } +} + +export class Minimap2JObDefinition extends JobDefinitionBase { + constructor(props: GenomicsJobDefinitionProps) { + super(); + this.repository = props.repository; + this.jobDefinitionName = GenomicsJobDefinitionTypes.MINIMAP2; + this.retryAttempts = props.retryAttempts ?? this.retryAttempts; + this.timeout = props.timeout ?? this.timeout; + this.env = props.env; + this.stack = props.stack; + this.jobRole = props.jobRole; + this.memoryLimit = props.memoryLimit ?? this.memoryLimit; + this.vcpus = props.vcpus ?? this.vcpus; + } +} + +export class GatkJObDefinition extends JobDefinitionBase { + constructor(props: GenomicsJobDefinitionProps) { + super(); + this.repository = props.repository; + this.jobDefinitionName = GenomicsJobDefinitionTypes.GATK; + this.retryAttempts = props.retryAttempts ?? this.retryAttempts; + this.timeout = props.timeout ?? this.timeout; + this.env = props.env; + this.stack = props.stack; + this.jobRole = props.jobRole; + this.memoryLimit = props.memoryLimit ?? this.memoryLimit; + this.vcpus = props.vcpus ?? this.vcpus; + } +} + +export class BwaJObDefinition extends JobDefinitionBase { + constructor(props: GenomicsJobDefinitionProps) { + super(); + this.repository = props.repository; + this.jobDefinitionName = GenomicsJobDefinitionTypes.BWA; + this.retryAttempts = props.retryAttempts ?? this.retryAttempts; + this.timeout = props.timeout ?? this.timeout; + this.env = props.env; + this.stack = props.stack; + this.jobRole = props.jobRole; + this.memoryLimit = props.memoryLimit ?? this.memoryLimit; + this.vcpus = props.vcpus ?? this.vcpus; + } +} + +export class SamToolsJObDefinition extends JobDefinitionBase { + constructor(props: GenomicsJobDefinitionProps) { + super(); + this.repository = props.repository; + this.jobDefinitionName = GenomicsJobDefinitionTypes.SAMTOOLS; + this.retryAttempts = props.retryAttempts ?? this.retryAttempts; + this.timeout = props.timeout ?? this.timeout; + this.env = props.env; + this.stack = props.stack; + this.jobRole = props.jobRole; + this.memoryLimit = props.memoryLimit ?? this.memoryLimit; + this.vcpus = props.vcpus ?? this.vcpus; + } +} + +export class PicardJObDefinition extends JobDefinitionBase { + constructor(props: GenomicsJobDefinitionProps) { + super(); + this.repository = props.repository; + this.jobDefinitionName = GenomicsJobDefinitionTypes.PICARD; + this.retryAttempts = props.retryAttempts ?? this.retryAttempts; + this.timeout = props.timeout ?? this.timeout; + this.env = props.env; + this.stack = props.stack; + this.jobRole = props.jobRole; + this.memoryLimit = props.memoryLimit ?? this.memoryLimit; + this.vcpus = props.vcpus ?? this.vcpus; + } +} \ No newline at end of file diff --git a/src/aws-genomics-cdk/lib/workflows/variant-calling-stack.ts b/src/aws-genomics-cdk/lib/workflows/variant-calling-stack.ts new file mode 100644 index 000000000..43babde50 --- /dev/null +++ b/src/aws-genomics-cdk/lib/workflows/variant-calling-stack.ts @@ -0,0 +1,298 @@ +import * as cdk from "@aws-cdk/core"; +import * as batch from "@aws-cdk/aws-batch"; +import * as sfn from "@aws-cdk/aws-stepfunctions"; +import * as iam from "@aws-cdk/aws-iam"; +import * as jobDefinitions from "./job-definitions"; +import * as tasks from "@aws-cdk/aws-stepfunctions-tasks"; +import GenomicsTask from "./genomics-task-construct"; +import GenomicsJobDefinition from "./job-definition-construct"; + +export interface GenomicsStateMachineProps { + readonly stackProps: cdk.StackProps; + readonly batchQueue: batch.JobQueue; + readonly taskRole: iam.Role; +} + +/** + * A stack for variant calling using GATK HaplotypeCaller + * The stack will set the following pipeline: + * FastQC -> bwa mem -> samtools sort -> samtools index -> GATK HaplotypeCaller + * + * The result for each step will be stage via S3 and will be used for the next + * step of the pipeline. + * + * The final output will be a realigned reads stored in a bam file on S3 + * + **/ +export default class VariantCallingStateMachine extends cdk.Stack { + getTimeout(defs: jobDefinitions.JobDefinitionBase[]): number { + let result: number = 0; + for (let i = 0; i < defs.length; i++) { + result += (defs[i].timeout ?? 3600) * (defs[i].retryAttempts ?? 1); + } + return result; + } + + constructor( + scope: cdk.Construct, + id: string, + props: GenomicsStateMachineProps + ) { + super(scope, id, props.stackProps); + + // Default properties for initializing a job definition class + const defaultJobDefinitionProps = { + env: props.stackProps.env as cdk.ResourceEnvironment, + stack: this, + jobRole: props.taskRole, + }; + + // Initialzing a job definition for the gatk tool to run create dictionary + // This won't be used as part of the pipeline but just create a batch job + // definition that can be used to create a dictionary to reference databases + const gatkCreateDisctionary = new jobDefinitions.GatkJObDefinition({ + ...defaultJobDefinitionProps, + repository: "genomics/gatk", + timeout: 600, + memoryLimit: 8000, + vcpus: 4, + }); + + new GenomicsJobDefinition( + this, + `${gatkCreateDisctionary.jobDefinitionName}CreateSequenceDictionary`, + gatkCreateDisctionary + ); + + // Initialzie a job definition for the FastQC tool + const fastQC = new jobDefinitions.FastQcJobDefinition({ + ...defaultJobDefinitionProps, + repository: "genomics/fastqc", + timeout: 600, + memoryLimit: 1000, + vcpus: 1, + }); + + // Initilalize a job definitiion for the BWA tool to run bwa mem + const bwaMem = new jobDefinitions.BwaJObDefinition({ + ...defaultJobDefinitionProps, + repository: "genomics/bwa", + timeout: 600, + memoryLimit: 8000, + vcpus: 8, + }); + + // Initilalize a job definitiion for the sam tool to run samtools sort + const samToolsSort = new jobDefinitions.SamToolsJObDefinition({ + ...defaultJobDefinitionProps, + repository: "genomics/samtools", + timeout: 300, + memoryLimit: 8000, + vcpus: 4, + }); + + // Initilalize a job definitiion for the sam tool to run samtools index + const samToolsIndex = new jobDefinitions.SamToolsJObDefinition({ + ...defaultJobDefinitionProps, + repository: "genomics/samtools", + timeout: 300, + memoryLimit: 1000, + vcpus: 1, + }); + + // Initialize a job definition for the picard tool to add missing groups + const picardAddMissingGroups = new jobDefinitions.PicardJObDefinition({ + ...defaultJobDefinitionProps, + repository: "genomics/picard", + timeout: 600, + memoryLimit: 8000, + vcpus: 4, + }); + + // Initilalize a job definitiion for the gatk tool to run gatk HaplotypeCaller + const gatkHaplotypeCaller = new jobDefinitions.GatkJObDefinition({ + ...defaultJobDefinitionProps, + repository: "genomics/gatk", + timeout: 3600, + memoryLimit: 16000, + vcpus: 8, + }); + + // Set the total timeout for the entire execution + const totalTimeout = this.getTimeout([ + fastQC, + bwaMem, + samToolsSort, + samToolsIndex, + gatkHaplotypeCaller, + ]); + + // Set the first task to FastQC + const step1TaskProps = { + taskName: "FASTQC", + environment: { + JOB_INPUTS: sfn.JsonPath.stringAt("$.params.fastqc.input"), + JOB_OUTPUTS: sfn.JsonPath.stringAt("$.params.fastqc.output"), + }, + command: ["fastqc *.gz"], + jobDefinition: new GenomicsJobDefinition( + this, + fastQC.jobDefinitionName, + fastQC + ).jobDefinition, + queue: props.batchQueue, + }; + + const step1Task = new GenomicsTask( + this, + step1TaskProps.taskName, + step1TaskProps + ).task; + + // Set the second task to bwa mem + const step2TaskProps = { + taskName: "BWAMEM", + environment: { + JOB_INPUTS: sfn.JsonPath.stringAt("$.params.bwa.input"), + SAMPLE_ID: sfn.JsonPath.stringAt("$.params.common.sampleId"), + REFERENCE_NAME: sfn.JsonPath.stringAt("$.params.common.referenceName"), + JOB_OUTPUTS: sfn.JsonPath.stringAt("$.params.bwa.output"), + }, + command: [ + "bwa mem -t 8 -p ", + " -o ${SAMPLE_ID}.sam ${REFERENCE_NAME}.fasta ${SAMPLE_ID}_*1*.fastq.gz" + ], + jobDefinition: new GenomicsJobDefinition( + this, + bwaMem.jobDefinitionName, + bwaMem + ).jobDefinition, + queue: props.batchQueue, + }; + + const step2Task = new GenomicsTask( + this, + step2TaskProps.taskName, + step2TaskProps + ).task; + + // Set the third task to samtools sort + const step3TaskProps = { + taskName: "SAMTOOLS-SORT", + environment: { + JOB_INPUTS: sfn.JsonPath.stringAt("$.params.samtoolsSort.input"), + SAMPLE_ID: sfn.JsonPath.stringAt("$.params.common.sampleId"), + JOB_OUTPUTS: sfn.JsonPath.stringAt("$.params.samtoolsSort.output"), + }, + command: ["samtools sort -@ 4 -o ${SAMPLE_ID}.bam ${SAMPLE_ID}.sam"], + jobDefinition: new GenomicsJobDefinition( + this, + `${samToolsSort.jobDefinitionName}Sort`, + samToolsSort + ).jobDefinition, + queue: props.batchQueue, + }; + + const step3Task = new GenomicsTask( + this, + step3TaskProps.taskName, + step3TaskProps + ).task; + + // set the forth task to picard AddOrReplaceReadGroups + const step4TaskProps = { + taskName: "PICARD-ADDMISSINGGROUPS", + environment: { + JOB_INPUTS: sfn.JsonPath.stringAt("$.params.picard.input"), + SAMPLE_ID: sfn.JsonPath.stringAt("$.params.common.sampleId"), + JOB_OUTPUTS: sfn.JsonPath.stringAt("$.params.picard.output"), + }, + command: [ + "java -jar /usr/picard/picard.jar AddOrReplaceReadGroups", + " -I ${SAMPLE_ID}.bam -O ${SAMPLE_ID}.rg.bam -RGID 4 --RGLB lib1", + " --RGPL ILLUMINA --RGPU unit1 --RGSM 20;", + " mv ${SAMPLE_ID}.rg.bam ${SAMPLE_ID}.bam", + ], + jobDefinition: new GenomicsJobDefinition( + this, + `${picardAddMissingGroups.jobDefinitionName}AddMissingGroups`, + picardAddMissingGroups + ).jobDefinition, + queue: props.batchQueue, + }; + + const step4Task = new GenomicsTask( + this, + step4TaskProps.taskName, + step4TaskProps + ).task; + + // Set the fifth task to samtools index + const step5TaskProps = { + taskName: "SAMTOOLS-INDEX", + environment: { + JOB_INPUTS: sfn.JsonPath.stringAt("$.params.samtoolsIndex.input"), + SAMPLE_ID: sfn.JsonPath.stringAt("$.params.common.sampleId"), + JOB_OUTPUTS: sfn.JsonPath.stringAt("$.params.samtoolsIndex.output"), + }, + command: ["samtools index ${SAMPLE_ID}.bam"], + jobDefinition: new GenomicsJobDefinition( + this, + `${samToolsIndex.jobDefinitionName}Index`, + samToolsIndex + ).jobDefinition, + queue: props.batchQueue, + }; + + const step5Task = new GenomicsTask( + this, + step5TaskProps.taskName, + step5TaskProps + ).task; + + // set the fifth task to gatk HaplotypeCaller + const step6TaskProps = { + taskName: "GATK-HAPLOTYPECALLER", + environment: { + JOB_INPUTS: sfn.JsonPath.stringAt("$.params.gatk.input"), + SAMPLE_ID: sfn.JsonPath.stringAt("$.params.common.sampleId"), + REFERENCE_NAME: sfn.JsonPath.stringAt("$.params.common.referenceName"), + JOB_OUTPUTS: sfn.JsonPath.stringAt("$.params.gatk.output"), + JOB_INPUT_S3_COPY_METHOD: "s3sync" + }, + command: [ + 'gatk --java-options "-Xmx4g" HaplotypeCaller', + ' -R ${REFERENCE_NAME}.fasta -I ${SAMPLE_ID}.bam', + ' -O ${SAMPLE_ID}.vcf.gz -bamout ${SAMPLE_ID}.out.bam', + ], + jobDefinition: new GenomicsJobDefinition( + this, + `${gatkHaplotypeCaller.jobDefinitionName}HaplotypeCaller`, + gatkHaplotypeCaller + ).jobDefinition, + queue: props.batchQueue, + }; + + const step6Task = new GenomicsTask( + this, + step6TaskProps.taskName, + step6TaskProps + ).task; + + const definition = step1Task.next( + step2Task.next(step3Task.next(step4Task.next(step5Task.next(step6Task)))) + ); + + const stateMachineProps = { + definition, + stateMachineName: "genomics-pipelines-variant-calling", + timeout: cdk.Duration.seconds(totalTimeout), + }; + + new sfn.StateMachine( + this, + stateMachineProps.stateMachineName, + stateMachineProps + ); + } +} diff --git a/src/aws-genomics-cdk/lib/workflows/workflow-config.ts b/src/aws-genomics-cdk/lib/workflows/workflow-config.ts new file mode 100644 index 000000000..3bef5e641 --- /dev/null +++ b/src/aws-genomics-cdk/lib/workflows/workflow-config.ts @@ -0,0 +1,4 @@ +export interface WorkflowConfig { + readonly name: string; + readonly spot: boolean; +} \ No newline at end of file diff --git a/src/aws-genomics-cdk/package-lock.json b/src/aws-genomics-cdk/package-lock.json index 8a31410ac..f91dbd911 100644 --- a/src/aws-genomics-cdk/package-lock.json +++ b/src/aws-genomics-cdk/package-lock.json @@ -5,252 +5,253 @@ "requires": true, "dependencies": { "@aws-cdk/assert": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.93.0.tgz", - "integrity": "sha512-yiQPc+gNjUSGg0VgTK55uzyP4QZdYhGZVhIxF2Imlr3FhTb8uYybYSzx+yhrYhxPnUmnP3BN/0rJexn4gR6iow==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.96.0.tgz", + "integrity": "sha512-IcnV35/g1L8BlceMS5h/aAYXR/pecR8ltbRGxMK/f9nArjrg2Nn7fowM7B1PxdrSFpbBzcEL4Lm8G+hXFmxfcg==", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.93.0", - "@aws-cdk/cloudformation-diff": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/cloud-assembly-schema": "1.96.0", + "@aws-cdk/cloudformation-diff": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/assets": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.93.0.tgz", - "integrity": "sha512-fUt6OqjkH0kJ9cpJftJl7W6FMGYlIVuK8jL8/72ouQL8CBEnasjsDRp9DWxT7cH1RWkieYrd3JKWLqVg3FDc+g==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.96.0.tgz", + "integrity": "sha512-gt+BNsFCUs/SCvwKhifZhEtsZNBFvzbUFrNaheCbNvbhs+k04/tBTEnOeoNLaCdD3yWXMnbxaxah1H76QADx9A==", "requires": { - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-apigateway": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigateway/-/aws-apigateway-1.93.0.tgz", - "integrity": "sha512-korbRqW3H8LKEGaPDLPo4FrtENVLE0WsYzkhP7JB6SCrHCZWJM4RuCOax88n/rvz6Hw0LSrIPEynzueV11XOcA==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.93.0", - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-cognito": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-logs": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/aws-s3-assets": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "constructs": "^3.2.0" + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigateway/-/aws-apigateway-1.96.0.tgz", + "integrity": "sha512-XP5BZbA+tt2MAKACwDC31aW/X4UYBBvNEYXNxXjrbiL3xhe6Rnsi/ols9WsRRoflLLlimPhu3/YHiiUsQ5LzDw==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.96.0", + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-cognito": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-logs": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/aws-s3-assets": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-apigatewayv2": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.93.0.tgz", - "integrity": "sha512-OFKnlwsPcrHhItclW94SwrHJxxHU4hJzMHjqlGqPm1XI6oBx0q/dXWdo+I+uq+fMMDYGzbc8zvxz5H+v+6A/2w==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.96.0.tgz", + "integrity": "sha512-qZVCHcJUXAV42h/ZiNa2eANW7+5kPYwFeJCLT82L/HUZKprkOzWazb90JIfpTYs9jjMI/pPtSEoAftd/2uwvcQ==", "requires": { - "@aws-cdk/aws-certificatemanager": "1.93.0", - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-certificatemanager": "1.96.0", + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-apigatewayv2-integrations": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.93.0.tgz", - "integrity": "sha512-R7HB7+t0PKjrk/zLNwKJzabJd7eVqz32F3xRIn4hvt6RCqJNADYJuqjTvqR84Vvj97QmsgbjYUv2lNvetBl6Nw==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2-integrations/-/aws-apigatewayv2-integrations-1.96.0.tgz", + "integrity": "sha512-SffGJaOd8uriPf7sGwN6Ll/+nn1gMq7l/ZqVru1KWkwG0BZnJrdBgrBWa4HQ7ZVlzKtfa4cftwE7hmxZZdQl/g==", "requires": { - "@aws-cdk/aws-apigatewayv2": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-servicediscovery": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-apigatewayv2": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-servicediscovery": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-applicationautoscaling": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.93.0.tgz", - "integrity": "sha512-mPXCunz/3QwOthrw+VRZ5EGRV+W8S3LuKxWMjCp/Ij6q8DXY74TFRmznOiEE3e6rW3/Pl3BZdLu3V4Ctl6oGOg==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.96.0.tgz", + "integrity": "sha512-NxW709a4ioLHLK9/yi+mlBzjOMlXaXnXfpzwIu17AUcFQBitKyQ3vo/PAIZYFupI5BhidlgjFtD67CZlPZXZHg==", "requires": { - "@aws-cdk/aws-autoscaling-common": "1.93.0", - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-autoscaling-common": "1.96.0", + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-autoscaling": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling/-/aws-autoscaling-1.93.0.tgz", - "integrity": "sha512-AZ7J1ZDxZe9HX00PhY/yRBUXPjJTots1+Xi9eTmXf8oetxJpPIpy3/23XMcGbO+QvWlWMbTKvNljM4C4ZLEhqg==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling/-/aws-autoscaling-1.96.0.tgz", + "integrity": "sha512-AUX0Fg+sduris7u0xGLUoO8Vf4NtKEm9zM3mZzlMk2tanZ7tUrnp2M54fFXxcFiwF37r2KE2ioosG9n+7jLb1w==", "requires": { - "@aws-cdk/aws-autoscaling-common": "1.93.0", - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-elasticloadbalancing": "1.93.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-sns": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-autoscaling-common": "1.96.0", + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-elasticloadbalancing": "1.96.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-sns": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-autoscaling-common": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.93.0.tgz", - "integrity": "sha512-bfWYi0Zlzqg6ZfRyDU3HLxAjbB69v3nf1bO++27jrrPPE/j79fx7f9SYmtbbJnwPaUiBeeLm23I8PERyBLOmNQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.96.0.tgz", + "integrity": "sha512-i3lBOLNW4dvGDYLVdvnnFOmV5JmpsHg6tSKDMHdtfsYqR3lswfAg+qAuAmazYIz2JlG+UVIJRmcSmZVEQKKpIA==", "requires": { - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-autoscaling-hooktargets": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-hooktargets/-/aws-autoscaling-hooktargets-1.93.0.tgz", - "integrity": "sha512-YKWLZYr527rb+WA7rRxeLhxDB9D5I3Og0rRVmsu/tgPm60/MNcsVU5ps1MlNCWMxfZHQ19zXwgbIK0aQdzMvQg==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-hooktargets/-/aws-autoscaling-hooktargets-1.96.0.tgz", + "integrity": "sha512-a8KKkjpHjv++5Vz2waQWisv+Hs3lN7/iUOTNadCEMECjdrQe0tX5qCh/8FsxGv/EQXMhMOGYCY3S+uW3SYJIuA==", "requires": { - "@aws-cdk/aws-autoscaling": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-sns": "1.93.0", - "@aws-cdk/aws-sns-subscriptions": "1.93.0", - "@aws-cdk/aws-sqs": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-autoscaling": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-sns": "1.96.0", + "@aws-cdk/aws-sns-subscriptions": "1.96.0", + "@aws-cdk/aws-sqs": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-batch": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-batch/-/aws-batch-1.93.0.tgz", - "integrity": "sha512-62iBagaWuFs8WyU0KIAJrfHb9aHTy3lEj+NczFGfsn+Bq2CWBOCheLGiHxI7smlYamw/O5Ru9NgCXoKbEQhVuQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-batch/-/aws-batch-1.96.0.tgz", + "integrity": "sha512-QKMKRwoG9FBWq8INUQCfuj6M+DQ8SvRHdRe3ZWFJQ8FL5bEvWltgLLwd0ixCzJojj3wrfJoEroCB2KaEYa/6CQ==", "requires": { - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-ecr": "1.93.0", - "@aws-cdk/aws-ecs": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-secretsmanager": "1.93.0", - "@aws-cdk/aws-ssm": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-ecr": "1.96.0", + "@aws-cdk/aws-ecs": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-secretsmanager": "1.96.0", + "@aws-cdk/aws-ssm": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-certificatemanager": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.93.0.tgz", - "integrity": "sha512-m0B0FS099i4JxlYl5m3pQeVzs+kzX5r7ecoKOcJ0F3AE1IUndb6ODf3E/CPEP9A3IfOvCdF3yVv+TF3YQGVGLg==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.96.0.tgz", + "integrity": "sha512-eCuSAj0gAbugVsbud28fhR2tS7LzhIzJTE2qLgqMb3kn1f/osToXgg8oJ7+qXiLcLpDquL8TuJW3GVFMKMkjEw==", "requires": { - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-route53": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-route53": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-cloudformation": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.93.0.tgz", - "integrity": "sha512-+2rw0atlRFErwuEqfO0b+rRKoVn4oo6mPbfBULKFabDYcu56oTobaKFJ2jBNtJyXojIws2qdghSp/qg4pp0rBA==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.96.0.tgz", + "integrity": "sha512-wLcIfjxPU+mS0ys0O7TBQ0Ju7KdS83q6eS0qBlBelGpZQjjEi2RULOej2EpVMBAHXd3vEgGKrOUCEPbMP2jI/A==", "requires": { - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/aws-sns": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/aws-sns": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-cloudfront": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.93.0.tgz", - "integrity": "sha512-mthRLS5zs45Uwixiab4/EGqAkAmoup3A/JZ4VmXbjHM2zYvKb0a0gU/hQKwoX+kCpTjCpNcRJhoSZ6/ROLhjrg==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.93.0", - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/aws-ssm": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.96.0.tgz", + "integrity": "sha512-P4fA72zbyXc2XRl5dlfmlSNVVm3EJUYQ4YKrTrqkT1l0pqPEIzc1Ad1o8zMBlEuyJ2EjLYASMv2Ik9Emc3ySgw==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.96.0", + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/aws-ssm": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-cloudwatch": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.93.0.tgz", - "integrity": "sha512-oN0RZO1bvxopJTTGX18hZNnatnrXqFjv0CxLnjAToYkuCx5GSuVpigJeK0YrzDqVWC80eVnuqHSJ9ORvLTJ0/g==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.96.0.tgz", + "integrity": "sha512-vlYf3Jay+srt1A6SOX5/fcFWQmXcouTzDWQovvg36DWPNknH2dF9nHpf7YrEesj7Nwxlo9aA0MrFBYqThlsy3w==", "requires": { - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-codebuild": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codebuild/-/aws-codebuild-1.93.0.tgz", - "integrity": "sha512-xkvvL5kw7SOSwgThELxj/r5R8gLFdIFz9iQe8PXvextlCxmGWBFIzTWJofmx/MLIm7eqQF/55iT3vKJ3S0Byow==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-codecommit": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-ecr": "1.93.0", - "@aws-cdk/aws-ecr-assets": "1.93.0", - "@aws-cdk/aws-events": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-logs": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/aws-s3-assets": "1.93.0", - "@aws-cdk/aws-secretsmanager": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/region-info": "1.93.0", - "constructs": "^3.2.0" + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codebuild/-/aws-codebuild-1.96.0.tgz", + "integrity": "sha512-aEswphnappGAsnMXXNPEEVgUv0kx56+AJyTYE5OjctpIPWov6/RmpKhzqpFudGX16FmVDeXOo3m2U7kKYW/pXw==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-codecommit": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-ecr": "1.96.0", + "@aws-cdk/aws-ecr-assets": "1.96.0", + "@aws-cdk/aws-events": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-logs": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/aws-s3-assets": "1.96.0", + "@aws-cdk/aws-secretsmanager": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/region-info": "1.96.0", + "@aws-cdk/yaml-cfn": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-codecommit": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codecommit/-/aws-codecommit-1.93.0.tgz", - "integrity": "sha512-+IHEUI7CkNseTzMCR6PFuIJf++FMuKUpPkaUSxoBmyUy6Mwtw6GDWQvvrN4d4RV45a4YWOdwD3WaKwEWvjqJ1w==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codecommit/-/aws-codecommit-1.96.0.tgz", + "integrity": "sha512-sJb6K5U/9B55nmPuV6cer0FBWl8+IWYd7wJs+5jofXSEQ/PghiNGd0KAg+TSEbMTB3A/BxBTW0dnwXb076caQg==", "requires": { - "@aws-cdk/aws-events": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-events": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-codeguruprofiler": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.93.0.tgz", - "integrity": "sha512-ft+npsdzlokkh1mEjkAT21la4EeD33p7lv19ItfcYwgWsYR+LnzgxWRcUaa4dkKaAYlqZRy221YlkRvArngzxg==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.96.0.tgz", + "integrity": "sha512-P+7U76bKLB0MDKCer6w1JqfnzmN05Ezi4SfqXMjURj89DB8sHs0SxUvkfGd2oN4VgeWa3S9Ko4KUmihNS59ILA==", "requires": { - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-cognito": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.93.0.tgz", - "integrity": "sha512-+07WMXa0kiaFeApaDM76+4XXFt7y71sIGy5QiTRrDKsRlSt9ja5XyAX9J2hSku06NaYRfSWY88e2TX/19R6yWA==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/custom-resources": "1.93.0", - "constructs": "^3.2.0", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.96.0.tgz", + "integrity": "sha512-TSo/jmGv9mWvj8MgBH0LMQ+IatP54sKqywBuREEy0qnNma/Uuii7JYZ4/YYXqc7hNtWyUNNXr+jzj89elI6w4w==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/custom-resources": "1.96.0", + "constructs": "^3.3.69", "punycode": "^2.1.1" }, "dependencies": { @@ -261,70 +262,70 @@ } }, "@aws-cdk/aws-databrew": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-databrew/-/aws-databrew-1.93.0.tgz", - "integrity": "sha512-scLTMm3F8mx1RjMB0Mo/fCyGP+WH1WHKXj6ot5fkBhSv3Xn+1zGtPme2V64HbiwntNyQ3GB369VFcxypfqncEA==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-databrew/-/aws-databrew-1.96.0.tgz", + "integrity": "sha512-qoE4IHZ8Ps2iw6EVCwNV3VdN2jVcpEIAhxjht/98WMNI1k81yFzYngLqzJj7e3QPnSWslT4jLi52IVXwi1+tgQ==", "requires": { - "@aws-cdk/core": "1.93.0" + "@aws-cdk/core": "1.96.0" } }, "@aws-cdk/aws-dynamodb": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.93.0.tgz", - "integrity": "sha512-y9fzUfvwBVhxdcCkj/Gr0QWsUwkf3TIxvxwgY3VsfM3C7HzIjz4P6D+BbA1kOui0zyPhMJkcnfkdG5PObI3F6g==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.96.0.tgz", + "integrity": "sha512-Q8cpBG6RBR8YTKVqJ/L5WuHRHe2aJXaQhrGvFb7nxeamxsakH2MtumUFJX8DHV+zyYN1KHOaWonPYHC4UVjusw==", "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.93.0", - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/custom-resources": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-applicationautoscaling": "1.96.0", + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/custom-resources": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-ec2": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.93.0.tgz", - "integrity": "sha512-LWNY3SrCR+t8DTXbf5Qszw8GJcMOZzub/bQNmlgxYyXoxrW7tiVniDKRXR8tn3CCgUV/S1YH7h60QKYd8Vg9XQ==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-logs": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/aws-s3-assets": "1.93.0", - "@aws-cdk/aws-ssm": "1.93.0", - "@aws-cdk/cloud-assembly-schema": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "@aws-cdk/region-info": "1.93.0", - "constructs": "^3.2.0" + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.96.0.tgz", + "integrity": "sha512-jU5gpfFm5ZKVznHgHk7TD9luthg2lcsBhQJC7K3ZkRqKf0UZiAyhy5qQs1SYYPIl5DikYAWHOjJRKtUbsXDT/w==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-logs": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/aws-s3-assets": "1.96.0", + "@aws-cdk/aws-ssm": "1.96.0", + "@aws-cdk/cloud-assembly-schema": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "@aws-cdk/region-info": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-ecr": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.93.0.tgz", - "integrity": "sha512-pU9IDvO2vxE5kb3FU4ejFvy0Ei85u0j3TgYI4Fj8ZCDZj8CJ25r33t87//tWbhLJjudj4engFnJXzmxlPxx91g==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.96.0.tgz", + "integrity": "sha512-URY1abET2RxDTzm67jU/D7kM8xqV3wMu2W6lxwvIabO8x9K9EqTFZ5ZSaC3bO+4OKZ0L+1RGAHRoUY4mOUpe/g==", "requires": { - "@aws-cdk/aws-events": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-events": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-ecr-assets": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.93.0.tgz", - "integrity": "sha512-c0GSmUduhKk4pAzzbRZqhA1GjpDVxxm9tdNBKmW1MUAOSv+xDpNeBjH636hduREUNnhuepKlWn+BGcOMcqWiHA==", - "requires": { - "@aws-cdk/assets": "1.93.0", - "@aws-cdk/aws-ecr": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "constructs": "^3.2.0", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.96.0.tgz", + "integrity": "sha512-3jbVxgeTaZ+D+rjqG71xxjWT6qggI7txhDanQjhmHEC4ND6Ac/dKwzhNwtsU/lKA825GTNinihY2RH5lF43RsA==", + "requires": { + "@aws-cdk/assets": "1.96.0", + "@aws-cdk/aws-ecr": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "constructs": "^3.3.69", "minimatch": "^3.0.4" }, "dependencies": { @@ -354,415 +355,415 @@ } }, "@aws-cdk/aws-ecs": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecs/-/aws-ecs-1.93.0.tgz", - "integrity": "sha512-LEbP7vJu5K7i1hCBxBiRJbwHTe3AkOjYgwX2PSJ67bb4FJRC1D+lmVD9Sir9ZCT0QVSlrmvC1q4e5e6FUP+lTw==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.93.0", - "@aws-cdk/aws-autoscaling": "1.93.0", - "@aws-cdk/aws-autoscaling-hooktargets": "1.93.0", - "@aws-cdk/aws-certificatemanager": "1.93.0", - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-ecr": "1.93.0", - "@aws-cdk/aws-ecr-assets": "1.93.0", - "@aws-cdk/aws-elasticloadbalancing": "1.93.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-logs": "1.93.0", - "@aws-cdk/aws-route53": "1.93.0", - "@aws-cdk/aws-route53-targets": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/aws-s3-assets": "1.93.0", - "@aws-cdk/aws-secretsmanager": "1.93.0", - "@aws-cdk/aws-servicediscovery": "1.93.0", - "@aws-cdk/aws-sns": "1.93.0", - "@aws-cdk/aws-sqs": "1.93.0", - "@aws-cdk/aws-ssm": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "constructs": "^3.2.0" + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecs/-/aws-ecs-1.96.0.tgz", + "integrity": "sha512-FrXJYfT8iUUeVlTk90NE43vZ6klMNNIU/yVM/TNtiyUm+cFeQOHybHor6R47auQ/fffihia+ZxAjK77UXNrqqA==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.96.0", + "@aws-cdk/aws-autoscaling": "1.96.0", + "@aws-cdk/aws-autoscaling-hooktargets": "1.96.0", + "@aws-cdk/aws-certificatemanager": "1.96.0", + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-ecr": "1.96.0", + "@aws-cdk/aws-ecr-assets": "1.96.0", + "@aws-cdk/aws-elasticloadbalancing": "1.96.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-logs": "1.96.0", + "@aws-cdk/aws-route53": "1.96.0", + "@aws-cdk/aws-route53-targets": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/aws-s3-assets": "1.96.0", + "@aws-cdk/aws-secretsmanager": "1.96.0", + "@aws-cdk/aws-servicediscovery": "1.96.0", + "@aws-cdk/aws-sns": "1.96.0", + "@aws-cdk/aws-sqs": "1.96.0", + "@aws-cdk/aws-ssm": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-efs": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.93.0.tgz", - "integrity": "sha512-PdifxqrNGJT4jOceredsFLh3Z0R3IDw6Exg2xMVYcGZ81vUuEiP/U8lljTXlFHrYOg/TR1vMoyrFp8CGdgBHiQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.96.0.tgz", + "integrity": "sha512-oxAzIitrA82J0jFPAz/qvOL+d6YpxwArXJFDrNAPHZ64UgFMMv6lPTgaOMhe+MNN7S6DJMJ6EPmyRJnRg77Xgw==", "requires": { - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/cloud-assembly-schema": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/cloud-assembly-schema": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-eks": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-eks/-/aws-eks-1.93.0.tgz", - "integrity": "sha512-FXXtyQPksjn8klwLDKa4D9hqe/k+JglzpNiJNE7P3OCeGHFyJlKoZwVyxG7jg4rRS2ErJjfkiNRofrtelRMOdQ==", - "requires": { - "@aws-cdk/aws-autoscaling": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-ssm": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/custom-resources": "1.93.0", - "@aws-cdk/lambda-layer-awscli": "1.93.0", - "@aws-cdk/lambda-layer-kubectl": "1.93.0", - "constructs": "^3.2.0", - "yaml": "1.10.0" + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-eks/-/aws-eks-1.96.0.tgz", + "integrity": "sha512-ejU7JuPj/0iIiXKOv9et/vfWorjIbmo58rE4CASjjeaxNWcfQ1WMK95TO5RWbwiFURB74V2cVmRM60he+rpyRA==", + "requires": { + "@aws-cdk/aws-autoscaling": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-ssm": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/custom-resources": "1.96.0", + "@aws-cdk/lambda-layer-awscli": "1.96.0", + "@aws-cdk/lambda-layer-kubectl": "1.96.0", + "constructs": "^3.3.69", + "yaml": "1.10.2" }, "dependencies": { "yaml": { - "version": "1.10.0", + "version": "1.10.2", "bundled": true } } }, "@aws-cdk/aws-elasticloadbalancing": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.93.0.tgz", - "integrity": "sha512-2nnEj7Pu5c3nKYIJDK6tFCS9bVDmhPbyShR3qbCLeImrV9G/pv+AwcQmlsGglaEw77IrTiy3scFxUwtILGRH8A==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.96.0.tgz", + "integrity": "sha512-hesfjjB69kWiQW+4Mwye7cnnNJN758CNH6Kekbbkm92IKDa37w/da2RZJzwvOQ1NZ8GWJuSH22/PqGuwEplKOw==", "requires": { - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-elasticloadbalancingv2": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.93.0.tgz", - "integrity": "sha512-/vfqx+CNXfY721iu6BsF528dN3BUWkMTjAWnZ+wuB0IpEUK2Cd0uU5MpqiJUfjgG/a4x9CcbJgJfmR0on2o4ag==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.93.0", - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/cloud-assembly-schema": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "@aws-cdk/region-info": "1.93.0", - "constructs": "^3.2.0" + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.96.0.tgz", + "integrity": "sha512-hb03P0x6ISZlX96AkPRHJ4dkNnWcGbR+qmXv1vhr8erBoBDEzYDxuBn8D2POiNGPD+/nWzmYNZyOr9P2ptq05A==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.96.0", + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/cloud-assembly-schema": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "@aws-cdk/region-info": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-events": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.93.0.tgz", - "integrity": "sha512-bMniBA36M6PzqF2HXdpsMEcpVe6GhqUG05v3tqrBkoOqOjS6KG7h884n60Ru/DTTVBX78XKFcr8mUt7gJcjVEQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.96.0.tgz", + "integrity": "sha512-sbfwjyvpRiDIKnJ9T4wDyv9e1783bzHPBalZqoUCmITXEDzETM1JR6lvsEbnIdzLlutx2MALIL4fKc9lWmeMVA==", "requires": { - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-globalaccelerator": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-globalaccelerator/-/aws-globalaccelerator-1.93.0.tgz", - "integrity": "sha512-teBGtCqiYGJ19D7WTJz61r8lvh8bXVQghJ/7VYsZB3z2itr0242VKtbT5pkUlWPcGP9LZCXzk57gKDpn7Tt0dA==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-globalaccelerator/-/aws-globalaccelerator-1.96.0.tgz", + "integrity": "sha512-QmyoEyhQn1DeQ+BvRwbqsRgf4HrIhfDbsKnrQptGvjtdqhBkcixSFupkpp34AfyOuNAv1pXFn8F4itTC8/chnQ==", "requires": { - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/custom-resources": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/custom-resources": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-glue": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-glue/-/aws-glue-1.93.0.tgz", - "integrity": "sha512-IizynY+E63nIBpyHBgJCLpgDrW3J1gvkyo/5psPSuAXRr1+pMvrNsArTU3BApvIJTmZV3zAV7xeu6+5JGdwyxQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-glue/-/aws-glue-1.96.0.tgz", + "integrity": "sha512-Ne6QrAhFoayp0qtPYGwnjEY8/XOTUlzHOMy8pTm3BACFXiYwOYSb1oDyqyTQtpMixr0CuoVSc0dhYXNzuyteQg==", "requires": { - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-iam": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.93.0.tgz", - "integrity": "sha512-QhRh+B4w8Q70RmAQuNxsAKfDeui5qPgT8veyLyMQ1PMuB5K2qhK8l3EYP3cwhnCU8xo0bO0Z48W64LcKlFxH0A==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.96.0.tgz", + "integrity": "sha512-ikpmhDFgmhZmvU89aVon0BVtJS85ez/VqlE9Xvo3UBEKjoCt5ptvIX9tqbqlBp3FwKWvOEXVgKE81kn5OWvDWg==", "requires": { - "@aws-cdk/core": "1.93.0", - "@aws-cdk/region-info": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/core": "1.96.0", + "@aws-cdk/region-info": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-kms": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.93.0.tgz", - "integrity": "sha512-bx90WaCMakEQzavpbmF/xAbGtJRhyZxlzJ6rnCpwI+2yKJjRVnHTUKsqWb5wCOo/v47n3RIL7LK5LZPiFJnR+g==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.96.0.tgz", + "integrity": "sha512-yNtEsekR188JEFbS0AD5kDXUD2kQnzJd69GV+mNUcJtmwbJQVzs8m/wnZaVcx+Q8+qLEXPro2H0evCfyExJR5w==", "requires": { - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-lambda": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.93.0.tgz", - "integrity": "sha512-OawHCa7HHp9fLa872CtSKa2wAJz3g2oQVt0A9NzB7jDd3qkRhaVnCeVpe3tHc4hwK7srjS8xC0/ldYoQ/zOIvw==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.93.0", - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-codeguruprofiler": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-ecr": "1.93.0", - "@aws-cdk/aws-ecr-assets": "1.93.0", - "@aws-cdk/aws-efs": "1.93.0", - "@aws-cdk/aws-events": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-logs": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/aws-s3-assets": "1.93.0", - "@aws-cdk/aws-signer": "1.93.0", - "@aws-cdk/aws-sqs": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "constructs": "^3.2.0" + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.96.0.tgz", + "integrity": "sha512-U3j6ipy9gIrQEysE3jvSfBeBalkjxp6ZPNr3mOCECtgNcWhoHaoSmwwvGCvhbnsL6ZxjwwGH2Bm5raoWyeu9YQ==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.96.0", + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-codeguruprofiler": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-ecr": "1.96.0", + "@aws-cdk/aws-ecr-assets": "1.96.0", + "@aws-cdk/aws-efs": "1.96.0", + "@aws-cdk/aws-events": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-logs": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/aws-s3-assets": "1.96.0", + "@aws-cdk/aws-signer": "1.96.0", + "@aws-cdk/aws-sqs": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-logs": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.93.0.tgz", - "integrity": "sha512-jC0PGjz8Sp8/GfnJrF1Fg5u3J3Z+tWW0a9ExO+iGl2vmE91JBmwYRwU/06HDxev/E8iUZdGL6VMdlNWQ4a7m3g==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.96.0.tgz", + "integrity": "sha512-LflFQ1Tz8VhiG4XHLqMmNw+AIM8chrnTjGoDulsOKASMcX254amLQYl137LLXpUI5eyr+P520o4XUh/AyRBy5Q==", "requires": { - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-s3-assets": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-s3-assets": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-route53": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.93.0.tgz", - "integrity": "sha512-2+1A2OtSTs/Ie/A30tYP+TIgnlabS4TtP2Nni4FODtVIPSpljvfGRZ1PhVjueFoeXNErWS0YWqaIUSyCfSnSnA==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.96.0.tgz", + "integrity": "sha512-9fLrM+cP9hKPbhH1SGKuqSs0p4uYIg4KHjkB9JMUMc/DJ0jE9r+uOA5Hx3YLUCBf70AfTdjzaiUpnwaNWQdDkQ==", "requires": { - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-logs": "1.93.0", - "@aws-cdk/cloud-assembly-schema": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/custom-resources": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-logs": "1.96.0", + "@aws-cdk/cloud-assembly-schema": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/custom-resources": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-route53-targets": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.93.0.tgz", - "integrity": "sha512-/AiZEs1jFcveWLSN/7ogp79kuEu1P9PI4UG8Tjhy2ZJGJhWr7yrduO5cQjRqbQ1BvaCmBGR5Oa8RLwoLtGzNBQ==", - "requires": { - "@aws-cdk/aws-apigateway": "1.93.0", - "@aws-cdk/aws-apigatewayv2": "1.93.0", - "@aws-cdk/aws-cloudfront": "1.93.0", - "@aws-cdk/aws-cognito": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-elasticloadbalancing": "1.93.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.93.0", - "@aws-cdk/aws-globalaccelerator": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-route53": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/region-info": "1.93.0", - "constructs": "^3.2.0" + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.96.0.tgz", + "integrity": "sha512-ygP8mZx+tqveQ6oCWvIIu8laAbwINzRcV6YDg4D38sN2V+tjUkr+6hGsHkpVqdc1hcT4EwBum/Ul9lIkp53Ypg==", + "requires": { + "@aws-cdk/aws-apigateway": "1.96.0", + "@aws-cdk/aws-apigatewayv2": "1.96.0", + "@aws-cdk/aws-cloudfront": "1.96.0", + "@aws-cdk/aws-cognito": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-elasticloadbalancing": "1.96.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.96.0", + "@aws-cdk/aws-globalaccelerator": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-route53": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/region-info": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-s3": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.93.0.tgz", - "integrity": "sha512-sDm3Q0DODqxCeYLLwTg+YdKLPQnH0MXr5n6C29ZomK7xdKk8kA7LN18MwiLAfrvggZxaA/7VkWsatP3Q+bYfoQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.96.0.tgz", + "integrity": "sha512-dqsjXJRaUK3u3Ij9RvR0N+xmfvQkiUHTL3Wxgg9WUqgG2Q0fO2lEcsKLvkc4B1isWMlBg3Dy9vY3fFZUke4gBg==", "requires": { - "@aws-cdk/aws-events": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-events": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-s3-assets": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.93.0.tgz", - "integrity": "sha512-iRNp01EGjgZRcqzIiPHAzweeBwI+B6W88ZgzwEBpiGI4PD17UOvabepPm53T+kRX1Ly57iDsi121ItI2p1Akwg==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.96.0.tgz", + "integrity": "sha512-NK9jD4+2BSSw3RKIWlzxDFZkinwtyWlMf1uxzbUKw8KuxpmuMhkx8OwWwKxM50BaNOKVAbBfXh8uhQTyCsQ4Zg==", "requires": { - "@aws-cdk/assets": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/assets": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-sam": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sam/-/aws-sam-1.93.0.tgz", - "integrity": "sha512-RQztwvPwbSTsOK3hLunwlKdPuQwIJhArXdMebfmMPqsU7eO7c0ZFjkMkHaOnWCI/qwhsgfKd3SmYTGCJp/mC0Q==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sam/-/aws-sam-1.96.0.tgz", + "integrity": "sha512-Lv3JqBzvm+MdAeAw3VqH9+/Ia2GLP3ebZuTC5NKXBqyAih7Gh4kUI2Yoxc31la02aUz7aDhXwaev+3ujw9niJg==", "requires": { - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-secretsmanager": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.93.0.tgz", - "integrity": "sha512-Vyl2k66J0Ag256W8YBcdS7QM9cr6/aBZuEq5kyFT9GMwhpQ5RpDT+OUg31Pu3mLizlU70YlYueegnUQYEjxTbQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.96.0.tgz", + "integrity": "sha512-CVk9UeBv92qwUjGiQ4IfkcINqS4jDg6p87i94GkrBt2xx+1NiGuIhGPkbgCbCiwLevZB2THJZDlUmVmQbip/cg==", "requires": { - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-sam": "1.93.0", - "@aws-cdk/core": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-sam": "1.96.0", + "@aws-cdk/core": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-servicediscovery": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.93.0.tgz", - "integrity": "sha512-KFunVCODLl8WaP1F+yaUBsnhck4hItgYqtvF2YYt3FaEkefLOYRaOMqlvnmtOYLv4a776GSJnDrEW/2QBwD1HA==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.96.0.tgz", + "integrity": "sha512-aNhXfc1SekD4ZJDVtu45OdSkn+NnzBJlGEB8FrVL2hEK1QpX1xpsxljcc8b7nZ3ld3cVmd6ntuUvBjAYE9mTjA==", "requires": { - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.93.0", - "@aws-cdk/aws-route53": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.96.0", + "@aws-cdk/aws-route53": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-signer": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-signer/-/aws-signer-1.93.0.tgz", - "integrity": "sha512-nLkClk9emiUVhXsYEiSqznbN23sq2IxOYemgZZP4nptKwOgRYbdQcmHzmaj7ps+cmu0yYIF26zrIGwNRJ0B2oQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-signer/-/aws-signer-1.96.0.tgz", + "integrity": "sha512-UkdcpL4e/NJ6POdgKS/575uyvPHx8fV8XQSF34m3If5Xoq3GLoZhzskWg0ayzM5ogxaisiDb4JMta64sud+SOQ==", "requires": { - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-sns": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.93.0.tgz", - "integrity": "sha512-acMvsQhItehHXNBS3K30Ws53DJUXbxLDfrEXQhrc0tubZEt4Oexgwla1QjrkXCBZaxIFlFH7Q3qUEkP5OtN7kQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.96.0.tgz", + "integrity": "sha512-r7IfRHkVnqmEgoU10QdJQwMy8fqfmtPoRfPqFHDUWSdsSR361UW2O36mOn4m69UJv2L08EjjPn2ZdltqwQAHIg==", "requires": { - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-events": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-sqs": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-events": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-sqs": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-sns-subscriptions": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.93.0.tgz", - "integrity": "sha512-I9+WnBlW9aitiDXKx5WYSi0R/YBb2pIQMsTmftQGskg8mlzecmtHRIST8fEd1x8KBqPY4H7Fzx0YsVzItQnZnQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.96.0.tgz", + "integrity": "sha512-QeYXAC9aF8l7wpe4cUUouomPZSJZnOXJY3REkaYLHMJoQoNn16VU/HzqUT9hVwuuC8YlMQ6nCr30HqCdFieK0A==", "requires": { - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-sns": "1.93.0", - "@aws-cdk/aws-sqs": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-sns": "1.96.0", + "@aws-cdk/aws-sqs": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-sqs": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.93.0.tgz", - "integrity": "sha512-f7f0gxrCjhqPTgrW3fpnFa3RoHqWKDQBnnzSSY4DhZZINE4AIEr44zBr1bP5olQ5oybdd5McBCVNmlr6813kpw==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.96.0.tgz", + "integrity": "sha512-d5IbcqqxP3ZVB25WEYVKhpXg0LVXphply+yyMIxoF7wWh6oGxXJUGOXLErYxJtz4vzlV+2wKwv2zBaIrzhXeFw==", "requires": { - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-ssm": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.93.0.tgz", - "integrity": "sha512-ptcuPc5S5bNiI4xluHAoO4Y8fFY4vePr0bvG+l5QHTNWvvJa+TIwD/jz91xJCrt83qAHwcnjSGZj94JIK732PQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.96.0.tgz", + "integrity": "sha512-Z8uFIaT3ZNpONnuSlY5JQTxk5rZ2nfCLBJXy9Ka1EcqWvuNAmnGaXcatYgzsgAfWj31OT0IUpzn49pak1aLeVQ==", "requires": { - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/cloud-assembly-schema": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/cloud-assembly-schema": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-stepfunctions": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions/-/aws-stepfunctions-1.93.0.tgz", - "integrity": "sha512-ak1iCdNL3tOjrsNYqX41pcRbawRjtup0oCrzoJutn7Hro8t7SxYASbx4rm7QjQpRvGKxFgFn86rhLrTIULVEag==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions/-/aws-stepfunctions-1.96.0.tgz", + "integrity": "sha512-57F2pQrTT4jShsZR5KRhlatuiztzYtHq3OXg7fRkCKw/bgFbXPgImt9Qp0ksRPEA+JvV1mHWhYh4lYHOTqa+Og==", "requires": { - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-events": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-logs": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-events": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-logs": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/aws-stepfunctions-tasks": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions-tasks/-/aws-stepfunctions-tasks-1.93.0.tgz", - "integrity": "sha512-6go46xQQYxdhO2f7pTQHZm/tD6AMO4dBpmtycQBxZgiLJ60J7fsSUQU80I+RTMMq6EIc2H8VrixXoXyNAHtjig==", - "requires": { - "@aws-cdk/aws-apigateway": "1.93.0", - "@aws-cdk/aws-apigatewayv2": "1.93.0", - "@aws-cdk/aws-apigatewayv2-integrations": "1.93.0", - "@aws-cdk/aws-batch": "1.93.0", - "@aws-cdk/aws-cloudwatch": "1.93.0", - "@aws-cdk/aws-codebuild": "1.93.0", - "@aws-cdk/aws-databrew": "1.93.0", - "@aws-cdk/aws-dynamodb": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-ecr": "1.93.0", - "@aws-cdk/aws-ecr-assets": "1.93.0", - "@aws-cdk/aws-ecs": "1.93.0", - "@aws-cdk/aws-eks": "1.93.0", - "@aws-cdk/aws-glue": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-kms": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-s3": "1.93.0", - "@aws-cdk/aws-sns": "1.93.0", - "@aws-cdk/aws-sqs": "1.93.0", - "@aws-cdk/aws-stepfunctions": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions-tasks/-/aws-stepfunctions-tasks-1.96.0.tgz", + "integrity": "sha512-SWojkFsloDem8lQF96beVNMmSscf8qrduV3nBxjTA/UD5ySvWS+EpifEqjn3FCmATJw1h7qOXc/FUALGyMe6Fg==", + "requires": { + "@aws-cdk/aws-apigateway": "1.96.0", + "@aws-cdk/aws-apigatewayv2": "1.96.0", + "@aws-cdk/aws-apigatewayv2-integrations": "1.96.0", + "@aws-cdk/aws-batch": "1.96.0", + "@aws-cdk/aws-cloudwatch": "1.96.0", + "@aws-cdk/aws-codebuild": "1.96.0", + "@aws-cdk/aws-databrew": "1.96.0", + "@aws-cdk/aws-dynamodb": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-ecr": "1.96.0", + "@aws-cdk/aws-ecr-assets": "1.96.0", + "@aws-cdk/aws-ecs": "1.96.0", + "@aws-cdk/aws-eks": "1.96.0", + "@aws-cdk/aws-glue": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-kms": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-s3": "1.96.0", + "@aws-cdk/aws-sns": "1.96.0", + "@aws-cdk/aws-sqs": "1.96.0", + "@aws-cdk/aws-stepfunctions": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/cfnspec": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.93.0.tgz", - "integrity": "sha512-uInqSj+xWDTU7HrGZEhzQawmI3ugtdv66r4JTPOjCLUB6qDtnGhT5dsK/MHNyQkC07WjDSjkF1BxAlnCC1NRtw==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.96.0.tgz", + "integrity": "sha512-icJHNGbYQIFgpQarXWEdTxJ1EpXB2yzkN94bxEow+1HR8LtCBr9KIX/+82dT6UvLfz24ThBtwdNuw9zJkA3Otw==", "dev": true, "requires": { "md5": "^2.3.0" } }, "@aws-cdk/cloud-assembly-schema": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.93.0.tgz", - "integrity": "sha512-ky7MrButxqUwLS1LLSSxc5FXxr0BB9ECvJVdJJg0lfuL4+v/xB7Ba0vHdLtSd4dVPJ47MlqDdrE4uEQjlleDMQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.96.0.tgz", + "integrity": "sha512-2Fypls2LkWDuc2BRaKmK9eBPknG0Gis+FoCrpn/r3l7xWvqTHfDaC/gpJqIdGpHKVEbFvRewh92WGm4zdbob9A==", "requires": { "jsonschema": "^1.4.0", - "semver": "^7.3.4" + "semver": "^7.3.5" }, "dependencies": { "jsonschema": { @@ -777,7 +778,7 @@ } }, "semver": { - "version": "7.3.4", + "version": "7.3.5", "bundled": true, "requires": { "lru-cache": "^6.0.0" @@ -790,29 +791,29 @@ } }, "@aws-cdk/cloudformation-diff": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.93.0.tgz", - "integrity": "sha512-wjAlhERlIJZzXJ8UqOqUb6Iaq8ufwzvRwuUkmpX5xW5LGdqMqSgfQjbZCPf2gIVxWUrhmYvCKlH6QlR+mCUdqw==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.96.0.tgz", + "integrity": "sha512-l85qhLx0g3RLaDHvEFh3dVAgjeJWttvhQDNnFmXagfArNhhjprz8T2Degy6tBCAjmxJ1W+vr+GZjgq6ACh6VCQ==", "dev": true, "requires": { - "@aws-cdk/cfnspec": "1.93.0", + "@aws-cdk/cfnspec": "1.96.0", "colors": "^1.4.0", "diff": "^5.0.0", "fast-deep-equal": "^3.1.3", "string-width": "^4.2.2", - "table": "^6.0.7" + "table": "^6.0.9" } }, "@aws-cdk/core": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.93.0.tgz", - "integrity": "sha512-Z/1IZJJBfurswUKKMxoVbS0hJGIdVaTYlMCcSsYIlEVgv4D+4YfkRnWsp99IscUr1zvs+FTfM/K1ykXb8u2gaQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.96.0.tgz", + "integrity": "sha512-W8pAE2n9WgBDi0uHe0rUb95sVUe+rIe8pWZuHq60HhD5Omjb7qVxV5D95Z8TOkOrbLbCYJEUjsLV/ka0iqMOnQ==", "requires": { - "@aws-cdk/cloud-assembly-schema": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "@aws-cdk/region-info": "1.93.0", + "@aws-cdk/cloud-assembly-schema": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "@aws-cdk/region-info": "1.96.0", "@balena/dockerignore": "^1.0.2", - "constructs": "^3.2.0", + "constructs": "^3.3.69", "fs-extra": "^9.1.0", "ignore": "^5.1.8", "minimatch": "^3.0.4" @@ -882,27 +883,27 @@ } }, "@aws-cdk/custom-resources": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.93.0.tgz", - "integrity": "sha512-IzgxGK3hFFT/5BOuiNSrg8s04korg4lO7BYJdtpilroJsYLEuzv06u3XP8r8sR7XTseMbGqy5ppYfBc1glUr1w==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.96.0.tgz", + "integrity": "sha512-zQ6bVX+5kTeDs1Jw1viSC5s62sGiok1/ZGlvJ5lyFXtg6NCX+hKPmt+eZYJAAmFSRwMPWw+kD4+OWXFfSNJ2Lg==", "requires": { - "@aws-cdk/aws-cloudformation": "1.93.0", - "@aws-cdk/aws-ec2": "1.93.0", - "@aws-cdk/aws-iam": "1.93.0", - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/aws-logs": "1.93.0", - "@aws-cdk/aws-sns": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-cloudformation": "1.96.0", + "@aws-cdk/aws-ec2": "1.96.0", + "@aws-cdk/aws-iam": "1.96.0", + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/aws-logs": "1.96.0", + "@aws-cdk/aws-sns": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/cx-api": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.93.0.tgz", - "integrity": "sha512-uZNAjYbMaSwaqIBwW9pqFwPIp38LrLyyRraHjin02QuJBubOnZEGfpcuo4Io9JPAF6h0FZbDNavlt4qkzzKS4g==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.96.0.tgz", + "integrity": "sha512-LiPWV1ALunni72XU6BywqyCxHDIMUsDQ0HYfRak37hAstAOhdqeUOlnG3goB9MTkMF7FOcU61a/izGDlVwPXQg==", "requires": { - "@aws-cdk/cloud-assembly-schema": "1.93.0", - "semver": "^7.3.4" + "@aws-cdk/cloud-assembly-schema": "1.96.0", + "semver": "^7.3.5" }, "dependencies": { "lru-cache": { @@ -913,7 +914,7 @@ } }, "semver": { - "version": "7.3.4", + "version": "7.3.5", "bundled": true, "requires": { "lru-cache": "^6.0.0" @@ -926,29 +927,43 @@ } }, "@aws-cdk/lambda-layer-awscli": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-awscli/-/lambda-layer-awscli-1.93.0.tgz", - "integrity": "sha512-ue7GuV+9kXuHPEiw4HhJN81JZ3IVa2macTzVzt6fWvpE24BOT5z1oTJtIgWTjQE8gDRvCzwcHUl7IjHdT1QoMg==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-awscli/-/lambda-layer-awscli-1.96.0.tgz", + "integrity": "sha512-V2OAc4Zndop2fz+58xxDQ8EBnaK59ZQ910ze/2BKUBly47m9iCc6zgDn9JfYmv/CSq13ei9/iXveUrN5g1eAew==", "requires": { - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/lambda-layer-kubectl": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl/-/lambda-layer-kubectl-1.93.0.tgz", - "integrity": "sha512-oGq+gO54Z4YuYDVn49QXWoUeGK7FSF1peA7QPpTEc3POHIUYNC/2fwRV6V6AsZQS0FSzBuOW+uX7sQ2nGjgP8A==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl/-/lambda-layer-kubectl-1.96.0.tgz", + "integrity": "sha512-jO2LLIlhBwPaDEDmKP+k7EbQ76czD8N4QAVCnpR1x/PhK0JFDF3qfr2kvrNfIkJkN8pQJT5oP7imh8+d2j9hJw==", "requires": { - "@aws-cdk/aws-lambda": "1.93.0", - "@aws-cdk/core": "1.93.0", - "constructs": "^3.2.0" + "@aws-cdk/aws-lambda": "1.96.0", + "@aws-cdk/core": "1.96.0", + "constructs": "^3.3.69" } }, "@aws-cdk/region-info": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.93.0.tgz", - "integrity": "sha512-JyCIv/NlUnd+elSD74EXO6ZjhPHg5KMMdiPpZM/+8RJuHnvtKI7fL0E31/DulgeVSj/S1TvjVn0xOoKAkfQrnw==" + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.96.0.tgz", + "integrity": "sha512-esmTSLHD/OMf2YLPfB5rULgDi07xbpErD7Y3nqXxgR/M7zmd8AaT45qaDwIz17Tw+CrwL4KHud9HOT2xvdq3sQ==" + }, + "@aws-cdk/yaml-cfn": { + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/yaml-cfn/-/yaml-cfn-1.96.0.tgz", + "integrity": "sha512-+1FCGcBaAK9OPYiLwSsSLzmgNlewdwsvN/1A8zceMSaOcsPgnKzpZCR4H6Ct/GA7Xu5Lg9h3Y823icN+0+NJ7A==", + "requires": { + "yaml": "1.10.2" + }, + "dependencies": { + "yaml": { + "version": "1.10.2", + "bundled": true + } + } }, "@babel/code-frame": { "version": "7.12.13", @@ -1772,9 +1787,9 @@ "dev": true }, "ajv": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz", - "integrity": "sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.0.5.tgz", + "integrity": "sha512-RkiLa/AeJx7+9OvniQ/qeWu0w74A8DiPPBclQ6ji3ZQkv5KamO+QGpqmi7O4JIw3rHGUXZ6CoP9tsAkn3gyazg==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -1904,20 +1919,20 @@ "dev": true }, "aws-cdk": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.93.0.tgz", - "integrity": "sha512-/nu/42rVYK06j/w2uoxLc4zCbpdyWBuAXLXj74UyilHakoKDCyvAA6LCiAOlLP8BrpFyd/tbdB3aRue8qCEb1A==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.96.0.tgz", + "integrity": "sha512-u4T+jbMuaID1Q7eytAvzaAYxVAGiWWmMYVundowqOfkTBIATaBntFf6T0pB5PxrAcJyW3vKm1hDtETcZlDVIow==", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.93.0", - "@aws-cdk/cloudformation-diff": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "@aws-cdk/region-info": "1.93.0", - "@aws-cdk/yaml-cfn": "1.93.0", - "archiver": "^5.2.0", + "@aws-cdk/cloud-assembly-schema": "1.96.0", + "@aws-cdk/cloudformation-diff": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "@aws-cdk/region-info": "1.96.0", + "@aws-cdk/yaml-cfn": "1.96.0", + "archiver": "^5.3.0", "aws-sdk": "^2.848.0", "camelcase": "^6.2.0", - "cdk-assets": "1.93.0", + "cdk-assets": "1.96.0", "colors": "^1.4.0", "decamelize": "^5.0.0", "fs-extra": "^9.1.0", @@ -1926,70 +1941,70 @@ "minimatch": ">=3.0", "promptly": "^3.2.0", "proxy-agent": "^4.0.1", - "semver": "^7.3.4", + "semver": "^7.3.5", "source-map-support": "^0.5.19", - "table": "^6.0.7", + "table": "^6.0.9", "uuid": "^8.3.2", "wrap-ansi": "^7.0.0", "yargs": "^16.2.0" }, "dependencies": { "@aws-cdk/cfnspec": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.93.0.tgz", - "integrity": "sha512-uInqSj+xWDTU7HrGZEhzQawmI3ugtdv66r4JTPOjCLUB6qDtnGhT5dsK/MHNyQkC07WjDSjkF1BxAlnCC1NRtw==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.96.0.tgz", + "integrity": "sha512-icJHNGbYQIFgpQarXWEdTxJ1EpXB2yzkN94bxEow+1HR8LtCBr9KIX/+82dT6UvLfz24ThBtwdNuw9zJkA3Otw==", "dev": true, "requires": { "md5": "^2.3.0" } }, "@aws-cdk/cloud-assembly-schema": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.93.0.tgz", - "integrity": "sha512-ky7MrButxqUwLS1LLSSxc5FXxr0BB9ECvJVdJJg0lfuL4+v/xB7Ba0vHdLtSd4dVPJ47MlqDdrE4uEQjlleDMQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.96.0.tgz", + "integrity": "sha512-2Fypls2LkWDuc2BRaKmK9eBPknG0Gis+FoCrpn/r3l7xWvqTHfDaC/gpJqIdGpHKVEbFvRewh92WGm4zdbob9A==", "dev": true, "requires": { "jsonschema": "^1.4.0", - "semver": "^7.3.4" + "semver": "^7.3.5" } }, "@aws-cdk/cloudformation-diff": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.93.0.tgz", - "integrity": "sha512-wjAlhERlIJZzXJ8UqOqUb6Iaq8ufwzvRwuUkmpX5xW5LGdqMqSgfQjbZCPf2gIVxWUrhmYvCKlH6QlR+mCUdqw==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.96.0.tgz", + "integrity": "sha512-l85qhLx0g3RLaDHvEFh3dVAgjeJWttvhQDNnFmXagfArNhhjprz8T2Degy6tBCAjmxJ1W+vr+GZjgq6ACh6VCQ==", "dev": true, "requires": { - "@aws-cdk/cfnspec": "1.93.0", + "@aws-cdk/cfnspec": "1.96.0", "colors": "^1.4.0", "diff": "^5.0.0", "fast-deep-equal": "^3.1.3", "string-width": "^4.2.2", - "table": "^6.0.7" + "table": "^6.0.9" } }, "@aws-cdk/cx-api": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.93.0.tgz", - "integrity": "sha512-uZNAjYbMaSwaqIBwW9pqFwPIp38LrLyyRraHjin02QuJBubOnZEGfpcuo4Io9JPAF6h0FZbDNavlt4qkzzKS4g==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.96.0.tgz", + "integrity": "sha512-LiPWV1ALunni72XU6BywqyCxHDIMUsDQ0HYfRak37hAstAOhdqeUOlnG3goB9MTkMF7FOcU61a/izGDlVwPXQg==", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.93.0", - "semver": "^7.3.4" + "@aws-cdk/cloud-assembly-schema": "1.96.0", + "semver": "^7.3.5" } }, "@aws-cdk/region-info": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.93.0.tgz", - "integrity": "sha512-JyCIv/NlUnd+elSD74EXO6ZjhPHg5KMMdiPpZM/+8RJuHnvtKI7fL0E31/DulgeVSj/S1TvjVn0xOoKAkfQrnw==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.96.0.tgz", + "integrity": "sha512-esmTSLHD/OMf2YLPfB5rULgDi07xbpErD7Y3nqXxgR/M7zmd8AaT45qaDwIz17Tw+CrwL4KHud9HOT2xvdq3sQ==", "dev": true }, "@aws-cdk/yaml-cfn": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/yaml-cfn/-/yaml-cfn-1.93.0.tgz", - "integrity": "sha512-Nra7gJ1JHiYQHDG0Q07kRuo/15YnlDLfuTHkNQJjeCNqBQTVc4x/M/awPoVDZb9FcyYkmxqZHx8TOElEMT3OlQ==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/yaml-cfn/-/yaml-cfn-1.96.0.tgz", + "integrity": "sha512-+1FCGcBaAK9OPYiLwSsSLzmgNlewdwsvN/1A8zceMSaOcsPgnKzpZCR4H6Ct/GA7Xu5Lg9h3Y823icN+0+NJ7A==", "dev": true, "requires": { - "yaml": "1.10.0" + "yaml": "1.10.2" } }, "@tootallnate/once": { @@ -2008,9 +2023,9 @@ } }, "ajv": { - "version": "7.1.1", - "resolved": "https://registry.yarnpkg.com/ajv/-/ajv-7.1.1.tgz#1e6b37a454021fa9941713f38b952fc1c8d32a84", - "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", + "version": "8.0.2", + "resolved": "https://registry.yarnpkg.com/ajv/-/ajv-8.0.2.tgz#1396e27f208ed56dd5638ab5a251edeb1c91d402", + "integrity": "sha512-V0HGxJd0PiDF0ecHYIesTOqfd1gJguwQUOYfMfAWnRsWQEXfc5ifbUFhD3Wjc+O+y7VAqL+g07prq9gHQ/JOZQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -2035,9 +2050,9 @@ } }, "archiver": { - "version": "5.2.0", - "resolved": "https://registry.yarnpkg.com/archiver/-/archiver-5.2.0.tgz#25aa1b3d9febf7aec5b0f296e77e69960c26db94", - "integrity": "sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ==", + "version": "5.3.0", + "resolved": "https://registry.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", "dev": true, "requires": { "archiver-utils": "^2.1.0", @@ -2045,8 +2060,8 @@ "buffer-crc32": "^0.2.1", "readable-stream": "^3.6.0", "readdir-glob": "^1.0.0", - "tar-stream": "^2.1.4", - "zip-stream": "^4.0.4" + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" }, "dependencies": { "readable-stream": { @@ -2123,9 +2138,9 @@ "dev": true }, "aws-sdk": { - "version": "2.856.0", - "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.856.0.tgz#a82719952949bdfda73832b465321a49577cf784", - "integrity": "sha512-B9uRDhIxlmaz5GIDC2Q+OgVMnsPFzuu1HknWedpTre6ARG+Ukm8KQ3VA5MhsBtSm61X5u1Uwk5AlEv+feLaShA==", + "version": "2.866.0", + "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.866.0.tgz#8150fb2e0cfecd281968edee7cad84598d8d7a09", + "integrity": "sha512-6Z581Ek2Yfm78NpeEFMNuSoyiYG7tipEaqfWNFR1AGyYheZwql4ajhzzlpWn91LBpdm7qcFldSNY9U0tKpKWNw==", "dev": true, "requires": { "buffer": "4.9.2", @@ -2261,6 +2276,16 @@ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "camelcase": { "version": "6.2.0", "resolved": "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809", @@ -2268,14 +2293,14 @@ "dev": true }, "cdk-assets": { - "version": "1.93.0", - "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.93.0.tgz", - "integrity": "sha512-9t4s8CmUJJFn8HFDh4NS5KzhJh90Lu4gdFhDNXgYThnXjawRBkEyjgjAWKwFSrQJ9/lWXsBz5PdlvO0cewjSwg==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.96.0.tgz", + "integrity": "sha512-hjOdlUPNCh9BOih0ALRzCy7w/VouZDYq5B84gMPNGvsFTmUBi4rlsa964fyZlu3sDB5rNgOXOkTjQuZ9L4BGQg==", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.93.0", - "@aws-cdk/cx-api": "1.93.0", - "archiver": "^5.2.0", + "@aws-cdk/cloud-assembly-schema": "1.96.0", + "@aws-cdk/cx-api": "1.96.0", + "archiver": "^5.3.0", "aws-sdk": "^2.848.0", "glob": "^7.1.6", "yargs": "^16.2.0" @@ -2650,12 +2675,29 @@ } } }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-uri": { "version": "3.0.2", "resolved": "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c", @@ -2718,6 +2760,21 @@ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, "heap": { "version": "0.2.6", "resolved": "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac", @@ -2795,6 +2852,15 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", @@ -2807,6 +2873,18 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", @@ -2871,10 +2949,10 @@ "type-check": "~0.3.2" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, "lodash.defaults": { @@ -2901,6 +2979,12 @@ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", "dev": true }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "lodash.union": { "version": "4.6.0", "resolved": "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88", @@ -2949,9 +3033,9 @@ "dev": true }, "netmask": { - "version": "1.0.6", - "resolved": "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", + "version": "2.0.1", + "resolved": "https://registry.yarnpkg.com/netmask/-/netmask-2.0.1.tgz#5a5cbdcbb7b6de650870e15e83d3e9553a414cf4", + "integrity": "sha512-gB8eG6ubxz67c7O2gaGiyWdRUIbH61q7anjgueDqCC9kvIs/b4CTtCMaQKeJbv1/Y7FT19I4zKwYmjnjInRQsg==", "dev": true }, "normalize-path": { @@ -3001,14 +3085,14 @@ } }, "pac-resolver": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.1.0.tgz#4b12e7d096b255a3b84e53f6831f32e9c7e5fe95", - "integrity": "sha512-d6lf2IrZJJ7ooVHr7BfwSjRO1yKSJMaiiWYSHcrxSIUtZrCa4KKGwcztdkZ/E9LFleJfjoi1yl+XLR7AX24nbQ==", + "version": "4.2.0", + "resolved": "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.2.0.tgz#b82bcb9992d48166920bc83c7542abb454bd9bdd", + "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", "dev": true, "requires": { "degenerator": "^2.2.0", "ip": "^1.1.5", - "netmask": "^1.0.6" + "netmask": "^2.0.1" } }, "path-is-absolute": { @@ -3154,9 +3238,9 @@ "dev": true }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -3203,9 +3287,9 @@ "dev": true }, "socks": { - "version": "2.5.1", - "resolved": "https://registry.yarnpkg.com/socks/-/socks-2.5.1.tgz#7720640b6b5ec9a07d556419203baa3f0596df5f", - "integrity": "sha512-oZCsJJxapULAYJaEYBSzMcz8m3jqgGrHaGhkmU/o/PQfFWYWxkAaA0UMGImb6s6tEXfKi959X6VJjMMQ3P6TTQ==", + "version": "2.6.0", + "resolved": "https://registry.yarnpkg.com/socks/-/socks-2.6.0.tgz#6b984928461d39871b3666754b9000ecf39dfac2", + "integrity": "sha512-mNmr9owlinMplev0Wd7UHFlqI4ofnBnNzFuzrm63PPaHgbkqCFe4T5LzwKmtQ/f2tX0NTpcdVLyD/FHxFBstYw==", "dev": true, "requires": { "ip": "^1.1.5", @@ -3275,13 +3359,18 @@ } }, "table": { - "version": "6.0.7", - "resolved": "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "version": "6.0.9", + "resolved": "https://registry.yarnpkg.com/table/-/table-6.0.9.tgz#790a12bf1e09b87b30e60419bafd6a1fd85536fb", + "integrity": "sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ==", "dev": true, "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.0" } @@ -3471,9 +3560,9 @@ "dev": true }, "yaml": { - "version": "1.10.0", - "resolved": "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "version": "1.10.2", + "resolved": "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { @@ -3492,9 +3581,9 @@ } }, "yargs-parser": { - "version": "20.2.6", - "resolved": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20", - "integrity": "sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==", + "version": "20.2.7", + "resolved": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", "dev": true }, "zip-stream": { @@ -3769,6 +3858,16 @@ "unset-value": "^1.0.0" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3941,9 +4040,9 @@ "dev": true }, "constructs": { - "version": "3.3.65", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.3.65.tgz", - "integrity": "sha512-/tjHzxwK4Nz9SAm40kkC2mij3Y3LngVVj/dvk7Xpex25/PMhVRYy1pmJ0/5I5Y6bAMG1HRjcSAyf4k9YZyxJjw==" + "version": "3.3.71", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.3.71.tgz", + "integrity": "sha512-3KFtTsA7OV27m/+pJhN4iJkKzHbPIPvyvEX5BQ/JCAWjfCHOQEVpIgxHLpT4i8L1OFta+pJrzcEVAHo6UitwqA==" }, "convert-source-map": { "version": "1.7.0", @@ -4550,6 +4649,17 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -4664,6 +4774,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -4821,6 +4937,15 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -4915,6 +5040,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -4936,6 +5067,12 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -5718,12 +5855,30 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -7071,13 +7226,18 @@ "dev": true }, "table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", - "dev": true, - "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.9.tgz", + "integrity": "sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.0" } diff --git a/src/aws-genomics-cdk/package.json b/src/aws-genomics-cdk/package.json index 613a8ab2f..eb5f361e2 100644 --- a/src/aws-genomics-cdk/package.json +++ b/src/aws-genomics-cdk/package.json @@ -11,21 +11,21 @@ "cdk": "cdk" }, "devDependencies": { - "@aws-cdk/assert": "1.93.0", + "@aws-cdk/assert": "1.96.0", "@types/jest": "^26.0.10", "@types/node": "10.17.27", "jest": "^26.4.2", "ts-jest": "^26.2.0", - "aws-cdk": "1.93.0", + "aws-cdk": "1.96.0", "ts-node": "^9.0.0", "typescript": "~3.9.7" }, "dependencies": { - "@aws-cdk/aws-batch": "^1.93.0", - "@aws-cdk/aws-ec2": "^1.93.0", - "@aws-cdk/aws-stepfunctions": "^1.93.0", - "@aws-cdk/aws-stepfunctions-tasks": "^1.93.0", - "@aws-cdk/core": "1.93.0", + "@aws-cdk/aws-batch": "^1.96.0", + "@aws-cdk/aws-ec2": "^1.96.0", + "@aws-cdk/aws-stepfunctions": "^1.96.0", + "@aws-cdk/aws-stepfunctions-tasks": "^1.96.0", + "@aws-cdk/core": "1.96.0", "source-map-support": "^0.5.16" } } From 182e361988b4fd962b70d44d15316a65696cd20d Mon Sep 17 00:00:00 2001 From: Itzik Paz Date: Thu, 8 Apr 2021 17:30:16 +0000 Subject: [PATCH 2/2] examples cleanup --- src/aws-genomics-cdk/app.config.json | 4 +-- .../examples/batch-bwa-job.json | 10 ++----- .../examples/batch-fastqc-job.json | 4 +-- .../examples/batch-gatk-dictionary.json | 4 +-- .../examples/batch-gatk-htc.json | 4 +-- .../examples/batch-minimap2-job.json | 28 ++++++++----------- .../batch-picard-add-missing-groups.json | 14 +++++----- .../examples/batch-samtools-index.json | 6 ++-- .../examples/batch-samtools-sort.json | 4 +-- 9 files changed, 35 insertions(+), 43 deletions(-) diff --git a/src/aws-genomics-cdk/app.config.json b/src/aws-genomics-cdk/app.config.json index 729d3ab4e..e61947793 100644 --- a/src/aws-genomics-cdk/app.config.json +++ b/src/aws-genomics-cdk/app.config.json @@ -1,5 +1,5 @@ { - "accountID": "840249831562", + "accountID": "111111111111", "region": "us-west-2", "projectName": "genomics", "tags": [{ @@ -13,7 +13,7 @@ ], "S3": { "existingBucket": true, - "bucketName": "genomics-pipelines-840249831562" + "bucketName": "YOUR-BUCKET-NAME" }, "VPC": { "createVPC": true, diff --git a/src/aws-genomics-cdk/examples/batch-bwa-job.json b/src/aws-genomics-cdk/examples/batch-bwa-job.json index d68d3ef94..943015f9f 100644 --- a/src/aws-genomics-cdk/examples/batch-bwa-job.json +++ b/src/aws-genomics-cdk/examples/batch-bwa-job.json @@ -1,12 +1,12 @@ { "jobName": "bwa", "jobQueue": "genomics-default-queue", - "jobDefinition": "bwa:3", + "jobDefinition": "bwa:1", "containerOverrides": { "command": ["bwa mem -t 8 -p -o ${SAMPLE_ID}.sam ${REFERENCE_NAME}.fasta ${SAMPLE_ID}_*1*.fastq.gz"], "environment": [{ "name": "JOB_INPUTS", - "value": "s3://genomics-pipelines-840249831562/sample/ s3://genomics-pipelines-840249831562/hg38/v0/" + "value": "s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035* s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta*" }, { "name": "SAMPLE_ID", @@ -22,11 +22,7 @@ }, { "name": "JOB_OUTPUT_PREFIX", - "value": "s3://genomics-pipelines-840249831562/output" - }, - { - "name": "JOB_INPUT_S3_COPY_METHOD", - "value": "s3sync" + "value": "s3://YOUR-BUCKET-NAME/output" } ] } diff --git a/src/aws-genomics-cdk/examples/batch-fastqc-job.json b/src/aws-genomics-cdk/examples/batch-fastqc-job.json index ffd1848c2..3c98fb3d1 100644 --- a/src/aws-genomics-cdk/examples/batch-fastqc-job.json +++ b/src/aws-genomics-cdk/examples/batch-fastqc-job.json @@ -1,7 +1,7 @@ { "jobName": "fastqc", "jobQueue": "genomics-default-queue", - "jobDefinition": "fastqc:3", + "jobDefinition": "fastqc:1", "containerOverrides": { "command": ["fastqc *.gz"], "environment": [{ @@ -14,7 +14,7 @@ }, { "name": "JOB_OUTPUT_PREFIX", - "value": "s3://genomics-pipelines-840249831562/output" + "value": "s3://YOUR-BUCKET-NAME/output" } ] } diff --git a/src/aws-genomics-cdk/examples/batch-gatk-dictionary.json b/src/aws-genomics-cdk/examples/batch-gatk-dictionary.json index f0a4a98e4..c6d083096 100644 --- a/src/aws-genomics-cdk/examples/batch-gatk-dictionary.json +++ b/src/aws-genomics-cdk/examples/batch-gatk-dictionary.json @@ -6,7 +6,7 @@ "command": ["java -jar /usr/app/picard.jar CreateSequenceDictionary R=Homo_sapiens_assembly38.fasta O=Homo_sapiens_assembly38.dict"], "environment": [{ "name": "JOB_INPUTS", - "value": "s3://genomics-pipelines-840249831562/hg38/v0/Homo_sapiens_assembly38.fasta" + "value": "s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta" }, { "name": "JOB_OUTPUTS", @@ -14,7 +14,7 @@ }, { "name": "JOB_OUTPUT_PREFIX", - "value": "s3://genomics-pipelines-840249831562/hg38/v0" + "value": "s3://YOUR-BUCKET-NAME/ref" } ] } diff --git a/src/aws-genomics-cdk/examples/batch-gatk-htc.json b/src/aws-genomics-cdk/examples/batch-gatk-htc.json index 89ca2b06b..70963057e 100644 --- a/src/aws-genomics-cdk/examples/batch-gatk-htc.json +++ b/src/aws-genomics-cdk/examples/batch-gatk-htc.json @@ -6,7 +6,7 @@ "command": ["gatk --java-options \"-Xmx4g\" HaplotypeCaller -R ${REFERENCE_NAME}.fasta -I ${SAMPLE_ID}.bam -O ${SAMPLE_ID}.vcf.gz -bamout ${SAMPLE_ID}.out.bam"], "environment": [{ "name": "JOB_INPUTS", - "value": "s3://genomics-pipelines-840249831562/output/ s3://genomics-pipelines-840249831562/hg38/v0/" + "value": "s3://YOUR-BUCKET-NAME/ref s3://YOUR-BUCKET-NAME/samples" }, { "name": "SAMPLE_ID", @@ -22,7 +22,7 @@ }, { "name": "JOB_OUTPUT_PREFIX", - "value": "s3://genomics-pipelines-840249831562/output" + "value": "s3://YOUR-BUCKET-NAME/output" }, { "name": "JOB_INPUT_S3_COPY_METHOD", diff --git a/src/aws-genomics-cdk/examples/batch-minimap2-job.json b/src/aws-genomics-cdk/examples/batch-minimap2-job.json index 7b8a711fc..91b5692bf 100644 --- a/src/aws-genomics-cdk/examples/batch-minimap2-job.json +++ b/src/aws-genomics-cdk/examples/batch-minimap2-job.json @@ -7,21 +7,17 @@ "memory": 16000, "command": ["minimap2 -ax map-pb Homo_sapiens_assembly38.fasta NIST7035_R1_trim_samp-0p1.fastq.gz > NIST7035.sam"], "environment": [{ - "name": "JOB_INPUTS", - "value": "s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R1_trim_samp-0p1.fastq.gz" - }, - { - "name": "JOB_OUTPUTS", - "value": "*.sam" - }, - { - "name": "JOB_OUTPUT_PREFIX", - "value": "s3://[YOUR BUCKET NAME]/[SOME PREFIX]" - }, - { - "name": "JOB_AWS_CLI_PATH", - "value": "/opt/aws-cli/bin" - } + "name": "JOB_INPUTS", + "value": "s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta s3://aws-batch-genomics-shared/secondary-analysis/example-files/fastq/NIST7035_R1_trim_samp-0p1.fastq.gz" + }, + { + "name": "JOB_OUTPUTS", + "value": "*.sam" + }, + { + "name": "JOB_OUTPUT_PREFIX", + "value": "s3://YOUR-BUCKET-NAME/output" + } ] } -} \ No newline at end of file +} diff --git a/src/aws-genomics-cdk/examples/batch-picard-add-missing-groups.json b/src/aws-genomics-cdk/examples/batch-picard-add-missing-groups.json index a93b8fffc..1ad527a3e 100644 --- a/src/aws-genomics-cdk/examples/batch-picard-add-missing-groups.json +++ b/src/aws-genomics-cdk/examples/batch-picard-add-missing-groups.json @@ -4,13 +4,13 @@ "jobDefinition": "picardAddMissingGroups:1", "containerOverrides": { "command": ["java -jar /usr/picard/picard.jar AddOrReplaceReadGroups", - " -I ${SAMPLE_ID}.bam -O ${SAMPLE_ID}.rg.bam -RGID 4 --RGLB lib1 ", - " --RGPL ILLUMINA --RGPU unit1 --RGSM 20;", - " cp ${SAMPLE_ID}.rg.bam ${SAMPLE_ID}.bam;", - " rm ${SAMPLE_ID}.rg.bam"], + " -I ${SAMPLE_ID}.bam -O ${SAMPLE_ID}.rg.bam -RGID 4 --RGLB lib1 ", + " --RGPL ILLUMINA --RGPU unit1 --RGSM 20;", + " mv ${SAMPLE_ID}.rg.bam ${SAMPLE_ID}.bam;" + ], "environment": [{ "name": "JOB_INPUTS", - "value": "s3://genomics-pipelines-840249831562/output/NIST7035.bam" + "value": "s3://YOUR-BUCKET-NAME/samples/NIST7035.bam" }, { "name": "SAMPLE_ID", @@ -22,8 +22,8 @@ }, { "name": "JOB_OUTPUT_PREFIX", - "value": "s3://genomics-pipelines-840249831562/output" + "value": "s3://YOUR-BUCKET-NAME/output" } ] } -} \ No newline at end of file +} diff --git a/src/aws-genomics-cdk/examples/batch-samtools-index.json b/src/aws-genomics-cdk/examples/batch-samtools-index.json index ebd6da035..e57e601c1 100644 --- a/src/aws-genomics-cdk/examples/batch-samtools-index.json +++ b/src/aws-genomics-cdk/examples/batch-samtools-index.json @@ -1,12 +1,12 @@ { "jobName": "samtoolsIndex", "jobQueue": "genomics-default-queue", - "jobDefinition": "samtoolsIndex:2", + "jobDefinition": "samtoolsIndex:1", "containerOverrides": { "command": ["samtools index ${SAMPLE_ID}.bam"], "environment": [{ "name": "JOB_INPUTS", - "value": "s3://genomics-pipelines-840249831562/output/NIST7035.bam" + "value": "s3://YOUR-BUCKET-NAME/samples/NIST7035.bam" }, { "name": "SAMPLE_ID", @@ -18,7 +18,7 @@ }, { "name": "JOB_OUTPUT_PREFIX", - "value": "s3://genomics-pipelines-840249831562/output" + "value": "s3://YOUR-BUCKET-NAME/output" } ] } diff --git a/src/aws-genomics-cdk/examples/batch-samtools-sort.json b/src/aws-genomics-cdk/examples/batch-samtools-sort.json index 6747ea62e..7b9a9936a 100644 --- a/src/aws-genomics-cdk/examples/batch-samtools-sort.json +++ b/src/aws-genomics-cdk/examples/batch-samtools-sort.json @@ -6,7 +6,7 @@ "command": ["samtools sort -@ 4 -o ${SAMPLE_ID}.bam ${SAMPLE_ID}.sam"], "environment": [{ "name": "JOB_INPUTS", - "value": "s3://genomics-pipelines-840249831562/output/NIST7035.sam" + "value": "s3://YOUR-BUCKET-NAME/samples/NIST7035.sam" }, { "name": "SAMPLE_ID", @@ -18,7 +18,7 @@ }, { "name": "JOB_OUTPUT_PREFIX", - "value": "s3://genomics-pipelines-840249831562/output" + "value": "s3://YOUR-BUCKET-NAME/output" } ] }