From 6642f9b5c88bef8e2ec91db101c234277c76a4bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 10:48:21 +0000 Subject: [PATCH 1/4] chore(deps): bump tj-actions/changed-files from 44.5.5 to 44.5.6 (#30918) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 44.5.5 to 44.5.6.
Release notes

Sourced from tj-actions/changed-files's releases.

v44.5.6

What's Changed

Full Changelog: https://github.com/tj-actions/changed-files/compare/v44...v44.5.6

Changelog

Sourced from tj-actions/changed-files's changelog.

Changelog

44.5.6 - (2024-07-18)

🐛 Bug Fixes

⚙️ Miscellaneous Tasks

⬆️ Upgrades

Co-authored-by: jackton1 17484350+jackton1@users.noreply.github.com (9adb915) - (tj-actions[bot])

44.5.5 - (2024-06-24)

⚙️ Miscellaneous Tasks

⬆️ Upgrades

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tj-actions/changed-files&package-manager=github_actions&previous-version=44.5.5&new-version=44.5.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- .github/workflows/request-cli-integ-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/request-cli-integ-test.yml b/.github/workflows/request-cli-integ-test.yml index fcac8f5814c46..a75209adcfb84 100644 --- a/.github/workflows/request-cli-integ-test.yml +++ b/.github/workflows/request-cli-integ-test.yml @@ -19,7 +19,7 @@ jobs: persist-credentials: false - name: Find changed cli files id: changed-cli-files - uses: tj-actions/changed-files@cc733854b1f224978ef800d29e4709d5ee2883e4 + uses: tj-actions/changed-files@6b2903bdce6310cfbddd87c418f253cf29b2dec9 with: base_sha: ${{ github.event.pull_request.base.sha }} files_yaml: | From 153a698f9fff7c244d4ca6f5e97d15b63840ab7a Mon Sep 17 00:00:00 2001 From: AWS CDK Automation <43080478+aws-cdk-automation@users.noreply.github.com> Date: Mon, 22 Jul 2024 07:13:39 -0700 Subject: [PATCH 2/4] feat: update L1 CloudFormation resource definitions (#30921) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updates the L1 CloudFormation resource definitions with the latest changes from `@aws-cdk/aws-service-spec` **L1 CloudFormation resource definition changes:** ``` ├[~] service aws-cloudformation │ └ resources │ └[~] resource AWS::CloudFormation::StackSet │ └ types │ └[~] type DeploymentTargets │ └ properties │ └ AccountFilterType: (documentation changed) ├[~] service aws-codepipeline │ └ resources │ └[~] resource AWS::CodePipeline::Webhook │ ├ properties │ │ └ Authentication: (documentation changed) │ └ types │ └[~] type WebhookAuthConfiguration │ └ properties │ └ SecretToken: (documentation changed) ├[~] service aws-ec2 │ └ resources │ ├[~] resource AWS::EC2::EC2Fleet │ │ └ types │ │ └[~] type FleetLaunchTemplateOverridesRequest │ │ └ properties │ │ └ WeightedCapacity: (documentation changed) │ └[~] resource AWS::EC2::SpotFleet │ └ types │ ├[~] type LaunchTemplateOverrides │ │ └ properties │ │ └ WeightedCapacity: (documentation changed) │ └[~] type SpotFleetLaunchSpecification │ └ properties │ └ WeightedCapacity: (documentation changed) ├[~] service aws-elasticloadbalancingv2 │ └ resources │ └[~] resource AWS::ElasticLoadBalancingV2::TargetGroup │ └ types │ └[~] type TargetGroupAttribute │ └ properties │ └ Key: (documentation changed) ├[~] service aws-emr │ └ resources │ ├[~] resource AWS::EMR::Cluster │ │ └ properties │ │ └ AutoTerminationPolicy: (documentation changed) │ ├[~] resource AWS::EMR::SecurityConfiguration │ │ └ properties │ │ └ SecurityConfiguration: (documentation changed) │ └[~] resource AWS::EMR::WALWorkspace │ ├ - documentation: A WAL workspace is a logical container of write-ahead logs (WALs). All WALs in Amazon EMR WAL are encapsulated by a WAL workspace. │ │ + documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-walworkspace.html │ └ properties │ ├ Tags: (documentation changed) │ └ WALWorkspaceName: (documentation changed) ├[~] service aws-glue │ └ resources │ └[~] resource AWS::Glue::Job │ └ properties │ └ GlueVersion: (documentation changed) ├[~] service aws-guardduty │ └ resources │ └[~] resource AWS::GuardDuty::MalwareProtectionPlan │ └ properties │ └ Role: (documentation changed) └[~] service aws-rds └ resources ├[~] resource AWS::RDS::DBCluster │ ├ properties │ │ └ PubliclyAccessible: (documentation changed) │ └ types │ └[~] type MasterUserSecret │ └ properties │ └ SecretArn: (documentation changed) └[~] resource AWS::RDS::DBInstance ├ attributes │ └ MasterUserSecret.SecretArn: (documentation changed) └ types └[~] type MasterUserSecret └ properties └ SecretArn: (documentation changed) ``` --- .../@aws-cdk/cloudformation-diff/package.json | 4 +-- packages/@aws-cdk/integ-runner/package.json | 2 +- packages/aws-cdk-lib/package.json | 2 +- tools/@aws-cdk/spec2cdk/package.json | 6 ++-- yarn.lock | 28 +++++++++---------- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/@aws-cdk/cloudformation-diff/package.json b/packages/@aws-cdk/cloudformation-diff/package.json index ed7b8815d0938..82365b2bdc11d 100644 --- a/packages/@aws-cdk/cloudformation-diff/package.json +++ b/packages/@aws-cdk/cloudformation-diff/package.json @@ -23,8 +23,8 @@ }, "license": "Apache-2.0", "dependencies": { - "@aws-cdk/aws-service-spec": "^0.1.11", - "@aws-cdk/service-spec-types": "^0.0.79", + "@aws-cdk/aws-service-spec": "^0.1.12", + "@aws-cdk/service-spec-types": "^0.0.80", "chalk": "^4", "diff": "^5.2.0", "fast-deep-equal": "^3.1.3", diff --git a/packages/@aws-cdk/integ-runner/package.json b/packages/@aws-cdk/integ-runner/package.json index 790e4d2d08834..aeb23b6153f68 100644 --- a/packages/@aws-cdk/integ-runner/package.json +++ b/packages/@aws-cdk/integ-runner/package.json @@ -74,7 +74,7 @@ "@aws-cdk/cloud-assembly-schema": "0.0.0", "@aws-cdk/cloudformation-diff": "0.0.0", "@aws-cdk/cx-api": "0.0.0", - "@aws-cdk/aws-service-spec": "^0.1.11", + "@aws-cdk/aws-service-spec": "^0.1.12", "cdk-assets": "0.0.0", "@aws-cdk/cdk-cli-wrapper": "0.0.0", "aws-cdk": "0.0.0", diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index f1959368727a2..bc15082dbc092 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -135,7 +135,7 @@ "mime-types": "^2.1.35" }, "devDependencies": { - "@aws-cdk/aws-service-spec": "^0.1.11", + "@aws-cdk/aws-service-spec": "^0.1.12", "@aws-cdk/cdk-build-tools": "0.0.0", "@aws-cdk/custom-resource-handlers": "0.0.0", "@aws-cdk/pkglint": "0.0.0", diff --git a/tools/@aws-cdk/spec2cdk/package.json b/tools/@aws-cdk/spec2cdk/package.json index 7cccaa70dedf4..b6cef52e84d10 100644 --- a/tools/@aws-cdk/spec2cdk/package.json +++ b/tools/@aws-cdk/spec2cdk/package.json @@ -32,9 +32,9 @@ }, "license": "Apache-2.0", "dependencies": { - "@aws-cdk/aws-service-spec": "^0.1.11", - "@aws-cdk/service-spec-importers": "^0.0.40", - "@aws-cdk/service-spec-types": "^0.0.79", + "@aws-cdk/aws-service-spec": "^0.1.12", + "@aws-cdk/service-spec-importers": "^0.0.41", + "@aws-cdk/service-spec-types": "^0.0.80", "@cdklabs/tskb": "^0.0.3", "@cdklabs/typewriter": "^0.0.3", "camelcase": "^6", diff --git a/yarn.lock b/yarn.lock index 196e2fc5a9ec2..a38305994df03 100644 --- a/yarn.lock +++ b/yarn.lock @@ -51,12 +51,12 @@ resolved "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.3.tgz#9b5d213b5ce5ad4461f6a4720195ff8de72e6523" integrity sha512-twhuEG+JPOYCYPx/xy5uH2+VUsIEhPTzDY0F1KuB+ocjWWB/KEDiOVL19nHvbPCB6fhWnkykXEMJ4HHcKvjtvg== -"@aws-cdk/aws-service-spec@^0.1.11": - version "0.1.11" - resolved "https://registry.npmjs.org/@aws-cdk/aws-service-spec/-/aws-service-spec-0.1.11.tgz#a0e2acddf9fb260a992ea813767525d9509ec657" - integrity sha512-OGsu1Z+xWZcUBmbBazcplYzXopweuZGd3HL8rBgn5LbSyGAeiRVsw8/EhwBg4/emUu+sw6L7PmDJ2igX8HWYMw== +"@aws-cdk/aws-service-spec@^0.1.12": + version "0.1.12" + resolved "https://registry.npmjs.org/@aws-cdk/aws-service-spec/-/aws-service-spec-0.1.12.tgz#202b8ee67fc9e56c61f9c8970c940eaec10659e3" + integrity sha512-WhqQw+0xWgZLs4CAwZ1+SMM/xj7oodFkqNJoRxJ2Cq5ErwcPjbtKGaua1BkMavEvIgOPkgfTaggqSRo4ACojdQ== dependencies: - "@aws-cdk/service-spec-types" "^0.0.79" + "@aws-cdk/service-spec-types" "^0.0.80" "@cdklabs/tskb" "^0.0.3" "@aws-cdk/lambda-layer-kubectl-v24@^2.0.242": @@ -74,12 +74,12 @@ resolved "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl-v30/-/lambda-layer-kubectl-v30-2.0.0.tgz#97c40d31e5350ce7170be5d188361118b1e39231" integrity sha512-yES6NfrJ3QV1372lAZ2FLXp/no4bqDWBXeSREJdrpWjQzD0wvL/hCpHEyjZrzHhOi27YbMxFTQ3g9isKAul8+A== -"@aws-cdk/service-spec-importers@^0.0.40": - version "0.0.40" - resolved "https://registry.npmjs.org/@aws-cdk/service-spec-importers/-/service-spec-importers-0.0.40.tgz#3f27aebe00a030067294194166fc06d3e700935e" - integrity sha512-JTIWU7+LK1uUvAo+7QekGqskJpM0wLAWrW6T8+eHP5SlJvy6Qt9sdENgYThFjDsgzVkveyaAS/VcARsLzEkJcA== +"@aws-cdk/service-spec-importers@^0.0.41": + version "0.0.41" + resolved "https://registry.npmjs.org/@aws-cdk/service-spec-importers/-/service-spec-importers-0.0.41.tgz#d956180a3aa4d25a16bbabb92d854c9b2da9df0c" + integrity sha512-Cmh0U8xUYhcduLSCto8RJOldqORlavZ+9kZ/4eWK4MSgbdx6y0qekW6fPRkhFIvuamUyGdcq12vov+o24mSr7Q== dependencies: - "@aws-cdk/service-spec-types" "^0.0.79" + "@aws-cdk/service-spec-types" "^0.0.80" "@cdklabs/tskb" "^0.0.3" ajv "^6" canonicalize "^2.0.0" @@ -90,10 +90,10 @@ glob "^8" sort-json "^2.0.1" -"@aws-cdk/service-spec-types@^0.0.79": - version "0.0.79" - resolved "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.79.tgz#9efdc886768e3b3754826ad0da291b7ecc209775" - integrity sha512-of5gMJx8Qn54rh5bxnsTg12d2N4EFToIEyczeWOXsNYsmsDDJlsrswCsBySe0BwLWvRga2iv1kFk8W6f+cIAZQ== +"@aws-cdk/service-spec-types@^0.0.80": + version "0.0.80" + resolved "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.80.tgz#6532855ca854c236b3dd4342726f1351b6ac55ee" + integrity sha512-h+GK+gNP3QvCUjrnm12+AdrpTlI9twrBHRAUMCq1d0pIcvWyFNoiMrxWVYeRs3stgvSKZYdanqt/zS3SUPwkZw== dependencies: "@cdklabs/tskb" "^0.0.3" From 8651bbe57d77e2e4a4ae70f7abb1c8af42687058 Mon Sep 17 00:00:00 2001 From: akita <45204489+yoyoyo-pg@users.noreply.github.com> Date: Tue, 23 Jul 2024 06:56:02 +0900 Subject: [PATCH 3/4] feat(apigatewayv2): add `description` property for stage (#30820) ### Issue # (if applicable) ### Reason for this change The `description` property existed in the L1 construct but was not present in the L2 construct ### Description of changes Add the `description` property for `HttpStage` and `WebSocketStage`, which was missing in the L2 construct. ### Description of how you validated changes I Added both unit test and integration tests. ### Checklist - [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- ...dk-aws-apigatewayv2-http-stage.assets.json | 6 +- ...-aws-apigatewayv2-http-stage.template.json | 5 +- .../test/http/integ.stage.js.snapshot/cdk.out | 2 +- .../http/integ.stage.js.snapshot/integ.json | 2 +- .../integ.stage.js.snapshot/manifest.json | 17 +++--- .../http/integ.stage.js.snapshot/tree.json | 57 ++++++++++++------- .../aws-apigatewayv2/test/http/integ.stage.ts | 1 + ...s-apigatewayv2-websocket-stage.assets.json | 6 +- ...apigatewayv2-websocket-stage.template.json | 5 +- .../websocket/integ.stage.js.snapshot/cdk.out | 2 +- .../integ.stage.js.snapshot/integ.json | 2 +- .../integ.stage.js.snapshot/manifest.json | 17 +++--- .../integ.stage.js.snapshot/tree.json | 57 ++++++++++++------- .../test/websocket/integ.stage.ts | 1 + .../aws-cdk-lib/aws-apigatewayv2/README.md | 2 + .../aws-apigatewayv2/lib/common/stage.ts | 7 +++ .../aws-apigatewayv2/lib/http/stage.ts | 1 + .../aws-apigatewayv2/lib/websocket/stage.ts | 1 + .../aws-apigatewayv2/test/http/stage.test.ts | 19 +++++++ .../test/websocket/stage.test.ts | 18 ++++++ 20 files changed, 158 insertions(+), 70 deletions(-) diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-http-stage.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-http-stage.assets.json index 06756a2e5598d..54d26fb516d85 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-http-stage.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-http-stage.assets.json @@ -1,7 +1,7 @@ { - "version": "20.0.0", + "version": "36.0.0", "files": { - "5626e75fff43d2eed0d63a5a925cb78eb1fd3d7fded40fe3b4036e0ce26a1ea9": { + "d0e21994eba50227669b2052acb6e237940781e64fc7baad9c2946a2c56d4b8d": { "source": { "path": "aws-cdk-aws-apigatewayv2-http-stage.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "5626e75fff43d2eed0d63a5a925cb78eb1fd3d7fded40fe3b4036e0ce26a1ea9.json", + "objectKey": "d0e21994eba50227669b2052acb6e237940781e64fc7baad9c2946a2c56d4b8d.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-http-stage.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-http-stage.template.json index b76d9a45614f9..e684ea62ef5e0 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-http-stage.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-http-stage.template.json @@ -13,11 +13,12 @@ "ApiId": { "Ref": "HttpApiF5A9A8A7" }, - "StageName": "$default", "DefaultRouteSettings": { "ThrottlingBurstLimit": 1000, "ThrottlingRateLimit": 1000 - } + }, + "Description": "My Stage", + "StageName": "$default" } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/cdk.out index 588d7b269d34f..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"20.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/integ.json index c6c8b8b07f69d..6f3b6b3048bfd 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "20.0.0", + "version": "36.0.0", "testCases": { "integ.stage": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/manifest.json index d3158c39559bf..7619a5e497d6c 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "20.0.0", + "version": "36.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "aws-cdk-aws-apigatewayv2-http-stage.assets": { "type": "cdk:asset-manifest", "properties": { @@ -20,10 +14,11 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "aws-cdk-aws-apigatewayv2-http-stage.template.json", + "terminationProtection": false, "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/5626e75fff43d2eed0d63a5a925cb78eb1fd3d7fded40fe3b4036e0ce26a1ea9.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/d0e21994eba50227669b2052acb6e237940781e64fc7baad9c2946a2c56d4b8d.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -65,6 +60,12 @@ ] }, "displayName": "aws-cdk-aws-apigatewayv2-http-stage" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/tree.json index f31d5e8093c41..d51fb3fce8033 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" - } - }, "aws-cdk-aws-apigatewayv2-http-stage": { "id": "aws-cdk-aws-apigatewayv2-http-stage", "path": "aws-cdk-aws-apigatewayv2-http-stage", @@ -31,14 +23,14 @@ } }, "constructInfo": { - "fqn": "@aws-cdk/aws-apigatewayv2.CfnApi", - "version": "0.0.0" + "fqn": "constructs.Construct", + "version": "10.3.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-apigatewayv2.HttpApi", - "version": "0.0.0" + "fqn": "constructs.Construct", + "version": "10.3.0" } }, "HttpStageWithProperties": { @@ -54,34 +46,59 @@ "apiId": { "Ref": "HttpApiF5A9A8A7" }, - "stageName": "$default", "defaultRouteSettings": { "throttlingBurstLimit": 1000, "throttlingRateLimit": 1000 - } + }, + "description": "My Stage", + "stageName": "$default" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-apigatewayv2.CfnStage", - "version": "0.0.0" + "fqn": "constructs.Construct", + "version": "10.3.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-apigatewayv2.HttpStage", - "version": "0.0.0" + "fqn": "constructs.Construct", + "version": "10.3.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-cdk-aws-apigatewayv2-http-stage/BootstrapVersion", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-cdk-aws-apigatewayv2-http-stage/CheckBootstrapVersion", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.3.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.3.0" } } } \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.ts index aecd99bf008e5..bf3bec4e11a04 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/http/integ.stage.ts @@ -12,6 +12,7 @@ new apigw.HttpStage(stack, 'HttpStageWithProperties', { rateLimit: 1000, burstLimit: 1000, }, + description: 'My Stage', }); app.synth(); diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-websocket-stage.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-websocket-stage.assets.json index 119ff1f7003e3..772dd4683f795 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-websocket-stage.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-websocket-stage.assets.json @@ -1,7 +1,7 @@ { - "version": "20.0.0", + "version": "36.0.0", "files": { - "dd0f806b2fa0378baba7f8e65cc092119e36b7975bcba997a6ecd0b4e03d044f": { + "02efbccda911967e201733b39679d97db7a1c0b2ee2c60da90fb7fe7b4352502": { "source": { "path": "aws-cdk-aws-apigatewayv2-websocket-stage.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "dd0f806b2fa0378baba7f8e65cc092119e36b7975bcba997a6ecd0b4e03d044f.json", + "objectKey": "02efbccda911967e201733b39679d97db7a1c0b2ee2c60da90fb7fe7b4352502.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-websocket-stage.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-websocket-stage.template.json index 16328be32e85c..03da37384007b 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-websocket-stage.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/aws-cdk-aws-apigatewayv2-websocket-stage.template.json @@ -14,11 +14,12 @@ "ApiId": { "Ref": "WebSocketApi34BCF99B" }, - "StageName": "dev", "DefaultRouteSettings": { "ThrottlingBurstLimit": 1000, "ThrottlingRateLimit": 1000 - } + }, + "Description": "My Stage", + "StageName": "dev" } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/cdk.out index 588d7b269d34f..1f0068d32659a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/cdk.out +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"20.0.0"} \ No newline at end of file +{"version":"36.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/integ.json index 1d60b8f02d922..d35c639b2cf4c 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/integ.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "20.0.0", + "version": "36.0.0", "testCases": { "integ.stage": { "stacks": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/manifest.json index 7b98580ef726f..a42e23755bdcf 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "20.0.0", + "version": "36.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "aws-cdk-aws-apigatewayv2-websocket-stage.assets": { "type": "cdk:asset-manifest", "properties": { @@ -20,10 +14,11 @@ "environment": "aws://unknown-account/unknown-region", "properties": { "templateFile": "aws-cdk-aws-apigatewayv2-websocket-stage.template.json", + "terminationProtection": false, "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/dd0f806b2fa0378baba7f8e65cc092119e36b7975bcba997a6ecd0b4e03d044f.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/02efbccda911967e201733b39679d97db7a1c0b2ee2c60da90fb7fe7b4352502.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -65,6 +60,12 @@ ] }, "displayName": "aws-cdk-aws-apigatewayv2-websocket-stage" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/tree.json index 525202a1ad08a..c1e47bf0a01af 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" - } - }, "aws-cdk-aws-apigatewayv2-websocket-stage": { "id": "aws-cdk-aws-apigatewayv2-websocket-stage", "path": "aws-cdk-aws-apigatewayv2-websocket-stage", @@ -32,14 +24,14 @@ } }, "constructInfo": { - "fqn": "@aws-cdk/aws-apigatewayv2.CfnApi", - "version": "0.0.0" + "fqn": "constructs.Construct", + "version": "10.3.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-apigatewayv2.WebSocketApi", - "version": "0.0.0" + "fqn": "constructs.Construct", + "version": "10.3.0" } }, "WebSocketStage": { @@ -55,34 +47,59 @@ "apiId": { "Ref": "WebSocketApi34BCF99B" }, - "stageName": "dev", "defaultRouteSettings": { "throttlingBurstLimit": 1000, "throttlingRateLimit": 1000 - } + }, + "description": "My Stage", + "stageName": "dev" } }, "constructInfo": { - "fqn": "@aws-cdk/aws-apigatewayv2.CfnStage", - "version": "0.0.0" + "fqn": "constructs.Construct", + "version": "10.3.0" } } }, "constructInfo": { - "fqn": "@aws-cdk/aws-apigatewayv2.WebSocketStage", - "version": "0.0.0" + "fqn": "constructs.Construct", + "version": "10.3.0" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-cdk-aws-apigatewayv2-websocket-stage/BootstrapVersion", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-cdk-aws-apigatewayv2-websocket-stage/CheckBootstrapVersion", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.3.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.3.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.3.0" } } } \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.ts index 214632ef68a33..ecfff658d5f4b 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-apigatewayv2/test/websocket/integ.stage.ts @@ -13,6 +13,7 @@ new apigw.WebSocketStage(stack, 'WebSocketStage', { rateLimit: 1000, burstLimit: 1000, }, + description: 'My Stage', }); app.synth(); diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/README.md b/packages/aws-cdk-lib/aws-apigatewayv2/README.md index e5604dafebf1a..8b74889d941cb 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/README.md +++ b/packages/aws-cdk-lib/aws-apigatewayv2/README.md @@ -137,6 +137,7 @@ declare const api: apigwv2.HttpApi; new apigwv2.HttpStage(this, 'Stage', { httpApi: api, stageName: 'beta', + description: 'My Stage', }); ``` @@ -373,6 +374,7 @@ const webSocketApi = new apigwv2.WebSocketApi(this, 'mywsapi', { new apigwv2.WebSocketStage(this, 'mystage', { webSocketApi, stageName: 'dev', + description: 'My Stage', autoDeploy: true, }); ``` diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/common/stage.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/common/stage.ts index 0301bf4b31c4c..3eca733715514 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/common/stage.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/common/stage.ts @@ -66,6 +66,13 @@ export interface StageOptions { * @default - no throttling configuration */ readonly throttle?: ThrottleSettings; + + /** + * The description for the API stage + * + * @default - no description + */ + readonly description?: string; } /** diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/stage.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/stage.ts index c8484904271f9..0ec38b893af56 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/stage.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/stage.ts @@ -171,6 +171,7 @@ export class HttpStage extends HttpStageBase { throttlingBurstLimit: props.throttle?.burstLimit, throttlingRateLimit: props.throttle?.rateLimit, }, + description: props.description, }); this.stageName = this.physicalName; diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/stage.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/stage.ts index 2e534ff7a75a5..6332b7532fd17 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/stage.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/stage.ts @@ -95,6 +95,7 @@ export class WebSocketStage extends StageBase implements IWebSocketStage { throttlingBurstLimit: props.throttle?.burstLimit, throttlingRateLimit: props.throttle?.rateLimit, }, + description: props.description, }); if (props.domainMapping) { diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/test/http/stage.test.ts b/packages/aws-cdk-lib/aws-apigatewayv2/test/http/stage.test.ts index ebd2e7b593ab8..357b4617f11ba 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/test/http/stage.test.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/test/http/stage.test.ts @@ -190,4 +190,23 @@ describe('HttpStage with domain mapping', () => { }, }); }); + + test('specify description', () => { + // GIVEN + const stack = new Stack(); + const api = new HttpApi(stack, 'Api', { + createDefaultStage: false, + }); + + // WHEN + new HttpStage(stack, 'DefaultStage', { + httpApi: api, + description: 'My Stage', + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::ApiGatewayV2::Stage', { + Description: 'My Stage', + }); + }); }); diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/test/websocket/stage.test.ts b/packages/aws-cdk-lib/aws-apigatewayv2/test/websocket/stage.test.ts index 20cc23a2e50da..549f7c02b2c91 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/test/websocket/stage.test.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/test/websocket/stage.test.ts @@ -133,4 +133,22 @@ describe('WebSocketStage', () => { }, }); }); + + test('specify description', () => { + // GIVEN + const stack = new Stack(); + const api = new WebSocketApi(stack, 'Api'); + + // WHEN + new WebSocketStage(stack, 'DefaultStage', { + webSocketApi: api, + stageName: 'dev', + description: 'My Stage', + }); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::ApiGatewayV2::Stage', { + Description: 'My Stage', + }); + }); }); From 0baa573917da3c5bf7e1ed80012e334758d0ab81 Mon Sep 17 00:00:00 2001 From: Xia Zhao <78883180+xazhao@users.noreply.github.com> Date: Mon, 22 Jul 2024 17:33:13 -0700 Subject: [PATCH 4/4] fix(ecs): fromServiceArnWithCluster not accepting value from SSM Parameter string (#30902) ### Issue # (if applicable) Closes #30798. ### Reason for this change `fromServiceArnWithCluster()` function can't handle token value correctly. ### Description of changes Replace ``` const resourceName = arn.resourceName; ``` With ``` Arn.extractResourceName() ``` because the function above has the ability to handle token values. ### Description of how you validated changes - Updated the unit test - Manually verified the ECS cluster resource was used in the code pipeline when using the SSM parameter. ### Checklist - [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../aws-ecs/lib/base/base-service.ts | 24 ++++++++++++------- .../aws-ecs/test/base-service.test.ts | 7 +++++- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/packages/aws-cdk-lib/aws-ecs/lib/base/base-service.ts b/packages/aws-cdk-lib/aws-ecs/lib/base/base-service.ts index 2cbea1c5eb0b4..89fc0d7434f41 100644 --- a/packages/aws-cdk-lib/aws-ecs/lib/base/base-service.ts +++ b/packages/aws-cdk-lib/aws-ecs/lib/base/base-service.ts @@ -19,6 +19,8 @@ import { ArnFormat, FeatureFlags, Token, + Arn, + Fn, } from '../../../core'; import * as cxapi from '../../../cx-api'; import { RegionInfo } from '../../../region-info'; @@ -516,16 +518,20 @@ export abstract class BaseService extends Resource public static fromServiceArnWithCluster(scope: Construct, id: string, serviceArn: string): IBaseService { const stack = Stack.of(scope); const arn = stack.splitArn(serviceArn, ArnFormat.SLASH_RESOURCE_NAME); - const resourceName = arn.resourceName; - if (!resourceName) { - throw new Error(`Missing resource Name from service ARN: ${serviceArn}`); - } - const resourceNameParts = resourceName.split('/'); - if (resourceNameParts.length !== 2) { - throw new Error(`resource name ${resourceName} from service ARN: ${serviceArn} is not using the ARN cluster format`); + const resourceName = Arn.extractResourceName(serviceArn, 'service'); + let clusterName: string; + let serviceName: string; + if (Token.isUnresolved(resourceName)) { + clusterName = Fn.select(0, Fn.split('/', resourceName)); + serviceName = Fn.select(1, Fn.split('/', resourceName)); + } else { + const resourceNameParts = resourceName.split('/'); + if (resourceNameParts.length !== 2) { + throw new Error(`resource name ${resourceName} from service ARN: ${serviceArn} is not using the ARN cluster format`); + } + clusterName = resourceNameParts[0]; + serviceName = resourceNameParts[1]; } - const clusterName = resourceNameParts[0]; - const serviceName = resourceNameParts[1]; const clusterArn = Stack.of(scope).formatArn({ partition: arn.partition, diff --git a/packages/aws-cdk-lib/aws-ecs/test/base-service.test.ts b/packages/aws-cdk-lib/aws-ecs/test/base-service.test.ts index d670e8fbc8c32..9ef3b54a68c43 100644 --- a/packages/aws-cdk-lib/aws-ecs/test/base-service.test.ts +++ b/packages/aws-cdk-lib/aws-ecs/test/base-service.test.ts @@ -38,7 +38,7 @@ describe('When import an ECS Service', () => { test('throws an expection if no resourceName provided on fromServiceArnWithCluster', () => { expect(() => { ecs.BaseService.fromServiceArnWithCluster(stack, 'Service', 'arn:aws:ecs:service-region:service-account:service'); - }).toThrowError(/Missing resource Name from service ARN/); + }).toThrowError(/Expected resource name in ARN, didn't find one: 'arn:aws:ecs:service-region:service-account:service'/); }); test('throws an expection if not using cluster arn format on fromServiceArnWithCluster', () => { @@ -47,6 +47,11 @@ describe('When import an ECS Service', () => { }).toThrowError(/is not using the ARN cluster format/); }); + test('skip validation for tokenized values', () => { + expect(() => ecs.BaseService.fromServiceArnWithCluster(stack, 'Service', + cdk.Lazy.string({ produce: () => 'arn:aws:ecs:service-region:service-account:service' }))).not.toThrow(); + }); + test('should add a dependency on task role', () => { // GIVEN const vpc = new ec2.Vpc(stack, 'Vpc');