From cb522bb65b03e9b0cdcbd01b4f71798e628424f4 Mon Sep 17 00:00:00 2001 From: Brett Andrews Date: Sat, 20 Jan 2024 01:12:16 +1100 Subject: [PATCH 1/2] fix(amplify): addBranch fails synth with "cannot find entry file..." (#28772) #28658 missed changing one of the paths (i.e it didn't remove the extra '..') and I was still getting the "cannot find entry file" error. I can confirm that my CDK stack works as expected after making the change locally. This is my first CDK PR. I did the following: ``` yarn install npx lerna run build --scope=@aws-cdk/aws-amplify-alpha cd packages/@aws-cdk/aws-amplify-alpha yarn build yarn test yarn integ-runner --update-on-failed npx lerna run build --scope=aws-cdk-lib ``` Closes #28764 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- .../@aws-cdk/aws-amplify-alpha/lib/branch.ts | 2 +- .../index.js | 110 ------------------ ...k-amplify-app-asset-deployment.assets.json | 21 +--- ...amplify-app-asset-deployment.template.json | 2 +- ...ymentprovider02396C99.nested.template.json | 2 +- .../manifest.json | 2 +- .../tree.json | 4 +- 7 files changed, 10 insertions(+), 133 deletions(-) delete mode 100644 packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/asset.9307ab790c544d7c4d94504a1c950222bbfc119c2c12b44440ad46939e0b6364/index.js diff --git a/packages/@aws-cdk/aws-amplify-alpha/lib/branch.ts b/packages/@aws-cdk/aws-amplify-alpha/lib/branch.ts index 7638a15abcf15..daf30492f63e4 100644 --- a/packages/@aws-cdk/aws-amplify-alpha/lib/branch.ts +++ b/packages/@aws-cdk/aws-amplify-alpha/lib/branch.ts @@ -254,7 +254,7 @@ class AmplifyAssetDeploymentProvider extends NestedStack { this, 'amplify-asset-deployment-is-complete', { - entry: path.join(__dirname, '..', '..', 'custom-resource-handlers', 'dist', 'aws-amplify-alpha', 'asset-deployment-handler', 'index.js'), + entry: path.join(__dirname, '..', 'custom-resource-handlers', 'dist', 'aws-amplify-alpha', 'asset-deployment-handler', 'index.js'), handler: 'isComplete', initialPolicy: [ new iam.PolicyStatement({ diff --git a/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/asset.9307ab790c544d7c4d94504a1c950222bbfc119c2c12b44440ad46939e0b6364/index.js b/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/asset.9307ab790c544d7c4d94504a1c950222bbfc119c2c12b44440ad46939e0b6364/index.js deleted file mode 100644 index bbc9855f0e48e..0000000000000 --- a/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/asset.9307ab790c544d7c4d94504a1c950222bbfc119c2c12b44440ad46939e0b6364/index.js +++ /dev/null @@ -1,110 +0,0 @@ -"use strict"; - -// packages/@aws-cdk/custom-resource-handlers/dist/aws-amplify-alpha/asset-deployment-handler/index.js -var n = Object.defineProperty; -var h = Object.getOwnPropertyDescriptor; -var f = Object.getOwnPropertyNames; -var b = Object.prototype.hasOwnProperty; -var C = (t, e) => { - for (var s in e) - n(t, s, { get: e[s], enumerable: true }); -}; -var I = (t, e, s, o) => { - if (e && typeof e == "object" || typeof e == "function") - for (let r of f(e)) - !b.call(t, r) && r !== s && n(t, r, { get: () => e[r], enumerable: !(o = h(e, r)) || o.enumerable }); - return t; -}; -var A = (t) => I(n({}, "__esModule", { value: true }), t); -var P = {}; -C(P, { isComplete: () => w, onEvent: () => v }); -module.exports = A(P); -var c = require("@aws-sdk/client-amplify"); -var l = require("@aws-sdk/client-s3"); -var a = require("@aws-sdk/client-s3"); -var m = require("@aws-sdk/s3-request-presigner"); -var p = class { - constructor(e) { - this.requestType = e.RequestType, this.requestId = e.RequestId, this.logicalResourceId = e.LogicalResourceId, this.physicalResourceId = e.PhysicalResourceId, this.event = e; - } - onEvent() { - switch (this.requestType) { - case "Create": - return this.onCreate(); - case "Update": - return this.onUpdate(); - case "Delete": - return this.onDelete(); - } - throw new Error(`Invalid request type ${this.requestType}`); - } - isComplete() { - switch (this.requestType) { - case "Create": - return this.isCreateComplete(); - case "Update": - return this.isUpdateComplete(); - case "Delete": - return this.isDeleteComplete(); - } - throw new Error(`Invalid request type ${this.requestType}`); - } - log(e) { - console.log(JSON.stringify(e, void 0, 2)); - } -}; -var i = class extends p { - constructor(e, s, o) { - super(o), this.props = this.event.ResourceProperties, this.amplify = e, this.s3 = s; - } - async onCreate() { - console.log("deploying to Amplify with options:", JSON.stringify(this.props, void 0, 2)); - let e = await this.amplify.listJobs({ appId: this.props.AppId, branchName: this.props.BranchName, maxResults: 1 }); - if (e.jobSummaries && e.jobSummaries.find((y) => y.status === "PENDING")) - return Promise.reject("Amplify job already running. Aborting deployment."); - let s = new a.GetObjectCommand({ Bucket: this.props.S3BucketName, Key: this.props.S3ObjectKey }), o = await (0, m.getSignedUrl)(this.s3, s); - return { AmplifyJobId: (await this.amplify.startDeployment({ appId: this.props.AppId, branchName: this.props.BranchName, sourceUrl: o })).jobSummary?.jobId }; - } - async isCreateComplete() { - return this.isActive(this.event.AmplifyJobId); - } - async onDelete() { - } - async isDeleteComplete() { - return { IsComplete: true }; - } - async onUpdate() { - return this.onCreate(); - } - async isUpdateComplete() { - return this.isActive(this.event.AmplifyJobId); - } - async isActive(e) { - if (!e) - throw new Error("Unable to determine Amplify job status without job id"); - let s = await this.amplify.getJob({ appId: this.props.AppId, branchName: this.props.BranchName, jobId: e }); - if (s.job?.summary?.status === "SUCCEED") - return { IsComplete: true, Data: { JobId: e, Status: s.job.summary.status } }; - if (s.job?.summary?.status === "FAILED" || s.job?.summary?.status === "CANCELLED") - throw new Error(`Amplify job failed with status: ${s.job?.summary?.status}`); - return { IsComplete: false }; - } -}; -var R = "Custom::AmplifyAssetDeployment"; -var d = { logger: console }; -var E = new c.Amplify(d); -var g = new l.S3(d); -async function v(t) { - return u(t).onEvent(); -} -async function w(t) { - return u(t).isComplete(); -} -function u(t) { - switch (t.ResourceType) { - case R: - return new i(E, g, t); - default: - throw new Error(`Unsupported resource type "${t.ResourceType}"`); - } -} diff --git a/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/cdk-amplify-app-asset-deployment.assets.json b/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/cdk-amplify-app-asset-deployment.assets.json index b9004b1e7df51..9c9665a9ed57e 100644 --- a/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/cdk-amplify-app-asset-deployment.assets.json +++ b/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/cdk-amplify-app-asset-deployment.assets.json @@ -27,19 +27,6 @@ } } }, - "9307ab790c544d7c4d94504a1c950222bbfc119c2c12b44440ad46939e0b6364": { - "source": { - "path": "asset.9307ab790c544d7c4d94504a1c950222bbfc119c2c12b44440ad46939e0b6364", - "packaging": "zip" - }, - "destinations": { - "current_account-current_region": { - "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "9307ab790c544d7c4d94504a1c950222bbfc119c2c12b44440ad46939e0b6364.zip", - "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" - } - } - }, "c014eecccbb25b3f9b2930f62990f5a373bb117a6c78807df15d78a5ac33e9cd": { "source": { "path": "asset.c014eecccbb25b3f9b2930f62990f5a373bb117a6c78807df15d78a5ac33e9cd", @@ -53,7 +40,7 @@ } } }, - "2f9d2632b48a4f92f6691c3e3cfcbeb47798c945a2d03b93514de1a3d3ec72ed": { + "d43fb7d2905864414e4778c7de7f1a874634c94930fb3c2e0ce4aef8d44fcbbd": { "source": { "path": "cdkamplifyappassetdeploymentcomamazonawscdkcustomresourcesamplifyassetdeploymentprovider02396C99.nested.template.json", "packaging": "file" @@ -61,12 +48,12 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "2f9d2632b48a4f92f6691c3e3cfcbeb47798c945a2d03b93514de1a3d3ec72ed.json", + "objectKey": "d43fb7d2905864414e4778c7de7f1a874634c94930fb3c2e0ce4aef8d44fcbbd.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } }, - "c221e6276b2eea7f782d562cdf2ea6004fd2456f2dbf4de21ff01554544f6d3e": { + "e30313963257eb2802270982da6029e53020e8e4c8e9d24250a5e375cce86689": { "source": { "path": "cdk-amplify-app-asset-deployment.template.json", "packaging": "file" @@ -74,7 +61,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "c221e6276b2eea7f782d562cdf2ea6004fd2456f2dbf4de21ff01554544f6d3e.json", + "objectKey": "e30313963257eb2802270982da6029e53020e8e4c8e9d24250a5e375cce86689.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/cdk-amplify-app-asset-deployment.template.json b/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/cdk-amplify-app-asset-deployment.template.json index 9227907cdc9e5..87b4a49cec79d 100644 --- a/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/cdk-amplify-app-asset-deployment.template.json +++ b/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/cdk-amplify-app-asset-deployment.template.json @@ -90,7 +90,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/2f9d2632b48a4f92f6691c3e3cfcbeb47798c945a2d03b93514de1a3d3ec72ed.json" + "/d43fb7d2905864414e4778c7de7f1a874634c94930fb3c2e0ce4aef8d44fcbbd.json" ] ] } diff --git a/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/cdkamplifyappassetdeploymentcomamazonawscdkcustomresourcesamplifyassetdeploymentprovider02396C99.nested.template.json b/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/cdkamplifyappassetdeploymentcomamazonawscdkcustomresourcesamplifyassetdeploymentprovider02396C99.nested.template.json index e361b257eb42e..363d1a0c2fda3 100644 --- a/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/cdkamplifyappassetdeploymentcomamazonawscdkcustomresourcesamplifyassetdeploymentprovider02396C99.nested.template.json +++ b/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/cdkamplifyappassetdeploymentcomamazonawscdkcustomresourcesamplifyassetdeploymentprovider02396C99.nested.template.json @@ -144,7 +144,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "9307ab790c544d7c4d94504a1c950222bbfc119c2c12b44440ad46939e0b6364.zip" + "S3Key": "85f7bb0ac0b4da3571afd49c891d631f4f07c0ef710a02046d3a9abd8d9d4604.zip" }, "Environment": { "Variables": { diff --git a/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/manifest.json b/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/manifest.json index 2b578594c37fd..91f09158aa629 100644 --- a/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/manifest.json @@ -18,7 +18,7 @@ "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}/c221e6276b2eea7f782d562cdf2ea6004fd2456f2dbf4de21ff01554544f6d3e.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/e30313963257eb2802270982da6029e53020e8e4c8e9d24250a5e375cce86689.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/tree.json b/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/tree.json index c59cf57a9e7ff..2ced9b70a065c 100644 --- a/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-amplify-alpha/test/integ.app-asset-deployment.js.snapshot/tree.json @@ -470,7 +470,7 @@ "s3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "s3Key": "9307ab790c544d7c4d94504a1c950222bbfc119c2c12b44440ad46939e0b6364.zip" + "s3Key": "85f7bb0ac0b4da3571afd49c891d631f4f07c0ef710a02046d3a9abd8d9d4604.zip" }, "environment": { "variables": { @@ -1353,7 +1353,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/2f9d2632b48a4f92f6691c3e3cfcbeb47798c945a2d03b93514de1a3d3ec72ed.json" + "/d43fb7d2905864414e4778c7de7f1a874634c94930fb3c2e0ce4aef8d44fcbbd.json" ] ] } From 20ad55e7aec7d387550db865257dc6f8ebcab067 Mon Sep 17 00:00:00 2001 From: awsmjs <142322013+awsmjs@users.noreply.github.com> Date: Fri, 19 Jan 2024 09:47:46 -0500 Subject: [PATCH 2/2] chore(roadmap): update roadmap (#28759) updates to roadmap Closes #. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* --- ROADMAP.md | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 1f41b3f1c1f4d..6bcbbe47c530c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -28,31 +28,34 @@ Security and stability of the CDK is a top priority. If you think you’ve found | πŸš€ | Released | ## Themes +Over the course of the last few years, the CDK team has spent time speaking with and learning from its community. We've gathered that there were certain features that were greatly valued from the CDK and other features which would be beneficial to be added to its experience. We appreciate everyone sharing this feedback and we plan on addressing it through the targeted themes and RFCs listed below. Please be aware that the team will periodically work to add RFCs as we look to prioritize more work. + +### L2 Abstractions +It’s clear that constructs are imperative to the CDK experience. We repeatedly hear from CDK builders that the most important improvement that the CDK can make for its construct experience would be to provide greater service coverage. Because of this, the CDK team intends to direct much of its focus towards investigating how we can provide more comprehensive AWS service coverage in the next year. In the past, the CDK has relied on community and in-house authored constructs to address construct demand. In the future, our goal is to bring CDK builders a complete and consistent construct model through largely autogenerated means. This model would provide builders with Day 1 support of AWS services--the moment services are launched--complete with the features that builders love in their L2s. We’ll be investigating this effort in the coming months, and it’s possible that there will be gradual rollouts for us to realize this goal. If you have feedback on what is most important to you while you work with CDK constructs today, we would highly appreciate you sharing this within our [Complete Construct Model RFC](https://github.com/aws/aws-cdk-rfcs/issues/611). + +The CDK team is committed to supporting our existing library of AWS L2 abstractions. We continue to solicit community feedback on where additional L2 coverage makes it simpler and more efficient to build with AWS. Current L2s that the team’s working on are listed below. Please be aware that this list will update throughout the year. If you have feedback on other L2s that should be prioritized by our team, feel free to submit a separate RFC. +* πŸš€ [Enabling IPv6 on Resources and VPCs](https://github.com/aws/aws-cdk/pull/28366) +* πŸ” [CloudFront Origin Access Control L2](https://github.com/aws/aws-cdk-rfcs/issues/491) +* πŸ” [Rewrite EKS L2](https://github.com/aws/aws-cdk-rfcs/issues/605) - drop the custom resource implementation in favor of the native L1. -### User Experience -* πŸš€ [App Staging Synthesizer for Resource Isolation](https://aws.amazon.com/blogs/devops/enhancing-resource-isolation-in-aws-cdk-with-the-app-staging-synthesizer/) - This feature enhances resource isolation and cleanup control by creating separate staging resources for each application -* πŸ‘‚πŸ½ [CDK Refactoring](https://github.com/aws/aws-cdk-rfcs/issues/162) - We’re looking into providing built-in support for builder refactoring work. -* πŸ› οΈ [Understand deployment progress within CloudFormation](https://github.com/aws/aws-cdk-rfcs/issues/586) - This will help builders understand what CloudFormation is doing as deployments are in progress. -* πŸ” [Garbage Collection for Assets](https://github.com/aws/aws-cdk-rfcs/issues/64) - Assets which are uploaded to the CDK's S3 bucket and ECR repository are never deleted. ### Speed up development and testing +We've also heard from many CDK builders that there's a desire to see more features which enable builders to iterate within their development loop faster. Over the next year, the team is also making it a goal to provide greater support for testing, debugging and deployment. Apart from the tickets listed below, if you have feedback have related to this goal, please submit it via and RFC and we will work to prioritize it towards this goal. * πŸš€ [Enable CloudFormation builders to migrate existing infrastructure to CDK](https://github.com/aws/aws-cdk/blob/6004a17c593728e36ad4f5c3dcdd578ff46fa9bb/packages/aws-cdk/README.md#cdk-migrate) - CloudFormation builders can now generate a CDK application using an existing CloudFormation template in JSON or YAML format using cdk migrate! * πŸš€ [Policy Validation at Synth](https://docs.aws.amazon.com/cdk/v2/guide/policy-validation-synthesis.html) - Builders can now check their policies immediately after synthesis using CloudFormation Guard or OPA! * πŸ‘‚πŸ½ [Adding more resource support to Hotswap](https://github.com/aws/aws-cdk/issues/25418) - Apart from Lambda, we are looking into expanding resource support for Hotswap. Please share your feedback in this linked ticket! * πŸ” [Local application testing](https://github.com/aws/aws-cdk-rfcs/issues/585) - We are investigating how to improve CDK testing on builders’ locals. We would love to hear everyone’s feedback here on what they would like to see as part of this experience. * πŸ” [Upgrade deployment debugging experience](https://github.com/aws/aws-cdk-rfcs/issues/583) - We also are looking into providing more debugging support at time of deployment. Please drop a note in this tagged ticket if you have any opinions related to this experience! - -### CI/CD * πŸš€ [Secure CDK Deployments with IAM Permission Boundaries](https://aws.amazon.com/blogs/devops/secure-cdk-deployments-with-iam-permission-boundaries/) - CDK builders can now enact IAM permission boundaries, which help to ensure that all actions are within the overlap of the users permissions and the boundary, and ensure that any IAM entities that are created also have the same boundary applied! * πŸ‘‚πŸ½ [CDK CLI Upgrade](https://github.com/aws/aws-cdk-rfcs/issues/300) - We are looking into how to further improve the CLI experience. This includes allowing builders to automate necessary tasks and integrate the CDK into CI/CD pipelines if they desire to. Please share your feedback in this ticket if you have anything you would like noted! * πŸ‘‚πŸ½ [CDK CLI Triggers](https://github.com/aws/aws-cdk-rfcs/issues/228) - CLI enhancements are also being considered for post command hooks. -### L2 Abstractions -* πŸš€ [Enabling IPv6 on Resources and VPCs](https://github.com/aws/aws-cdk/pull/28366) -* πŸ” [CloudFront Origin Access Control L2](https://github.com/aws/aws-cdk-rfcs/issues/491) -* πŸ” [Rewrite EKS L2](https://github.com/aws/aws-cdk-rfcs/issues/605) - drop the custom resource implementation in favor of the native L1. - -We are currently investigating other L2s to build out next. Feel free to create an RFC to request. +### User Experience +These are items that improve the user experience of the CDK. We strive to make the CDK as efficient and intuitive as possible. If you have other feedback around this area, please submit an RFC to detail your suggestion. +* πŸš€ [App Staging Synthesizer for Resource Isolation](https://aws.amazon.com/blogs/devops/enhancing-resource-isolation-in-aws-cdk-with-the-app-staging-synthesizer/) - This feature enhances resource isolation and cleanup control by creating separate staging resources for each application +* πŸ‘‚πŸ½ [CDK Refactoring](https://github.com/aws/aws-cdk-rfcs/issues/162) - We’re looking into providing built-in support for builder refactoring work. +* πŸ› οΈ [Understand deployment progress within CloudFormation](https://github.com/aws/aws-cdk-rfcs/issues/586) - This will help builders understand what CloudFormation is doing as deployments are in progress. +* πŸ” [Garbage Collection for Assets](https://github.com/aws/aws-cdk-rfcs/issues/64) - Assets which are uploaded to the CDK's S3 bucket and ECR repository are never deleted. ## Community Engagement We would love to hear from you on how the CDK operates today and how it should grow in the future. To report a bug or create a small feature request, please [create an issue here](https://github.com/aws/aws-cdk/issues/new/choose). If you are seeking to request a change in strategic direction or make a CDK core framework change, please [create a Request for Comments (RFC) ticket here](https://github.com/aws/aws-cdk-rfcs/issues/new/choose). If you are ever unsure about where your feature request should live, it is best to follow the first link within the aws-cdk repo.