Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(cdk): add sdkv3 support to sdk.ts #31501

Draft
wants to merge 22 commits into
base: main
Choose a base branch
from
Draft

Conversation

HBobertz
Copy link
Contributor

@HBobertz HBobertz commented Sep 19, 2024

Reason for this change

Adding support for the SDKv2 to v3 migration in the cdk

Description of changes

Created copies of the SDK and ISDK classes with v3 support. Future migration efforts involving this class should use SDKv3. Once everything is migrated we will delete the original implementation and rename v3 to just SDK

Checklist


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license

@aws-cdk-automation aws-cdk-automation requested a review from a team September 19, 2024 20:16
@github-actions github-actions bot added the p2 label Sep 19, 2024
@mergify mergify bot added the contribution/core This is a PR that came from AWS. label Sep 19, 2024
Copy link
Collaborator

@aws-cdk-automation aws-cdk-automation left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pull request linter has failed. See the aws-cdk-automation comment below for failure reasons. If you believe this pull request should receive an exemption, please comment and provide a justification.

A comment requesting an exemption should contain the text Exemption Request. Additionally, if clarification is needed add Clarification Request to a comment.

@aws-cdk-automation aws-cdk-automation added the pr/needs-cli-test-run This PR needs CLI tests run against it. label Sep 19, 2024
Comment on lines +71 to +86
lambda(): Lambda;
cloudFormation(): CloudFormation;
ec2(): EC2;
iam(): IAM;
ssm(): SSM;
s3(): S3;
route53(): Route53;
ecr(): ECR;
ecs(): ECS;
elbv2(): ElasticLoadBalancingV2;
secretsManager(): SecretsManager;
kms(): KMS;
stepFunctions(): SFN;
codeBuild(): CodeBuild;
cloudWatchLogs(): CloudWatchLogs;
appsync(): AppSync;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's not change any of these methods for now. Create new ones, that return the corresponding service client (e.g., S3Client) and incrementally switch to these new methods. Once no one is using the old methods anymore, we delete them.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Donezo

Copy link
Contributor Author

@HBobertz HBobertz Sep 23, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually I realized I took a different approach to the one you described. I just created a completely updated SDKv3 class with all of the services upgraded to v3 and then left the original SDK class unchanged.

My thought was that when migrating something which depends on SDK we'd swap it to SDKv3 and then when everything is swapped over we delete the original and rename SDKv3 to SDK

Let me know if you think this approach isn't as effective and if you'd just rather see me keep the same class and then we swap out services out one at a time every time we update a file.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, a brand new class and interface also works. My only suggestion now is to include in this PR a change in some other file that uses the ISDK interface, just to smoke test the change. There's a lot of fiddling about with error handling and whatnot here. Let's make sure they still work in v3.

@HBobertz HBobertz marked this pull request as ready for review September 23, 2024 01:15
@HBobertz HBobertz changed the title chore(aws-cdk): update sdk.ts and dependents from v2 to v3 chore(cdk): add sdkv3 support to sdk.ts Sep 23, 2024
@@ -73,6 +73,7 @@ Flags come in three types:
| [@aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault](#aws-cdkcustom-resourceslogapiresponsedatapropertytruedefault) | When enabled, the custom resource used for `AwsCustomResource` will configure the `logApiResponseData` property as true by default | 2.145.0 | (fix) |
| [@aws-cdk/aws-s3:keepNotificationInImportedBucket](#aws-cdkaws-s3keepnotificationinimportedbucket) | When enabled, Adding notifications to a bucket in the current stack will not remove notification from imported stack. | 2.155.0 | (fix) |
| [@aws-cdk/aws-stepfunctions-tasks:useNewS3UriParametersForBedrockInvokeModelTask](#aws-cdkaws-stepfunctions-tasksusenews3uriparametersforbedrockinvokemodeltask) | When enabled, use new props for S3 URI field in task definition of state machine for bedrock invoke model. | 2.156.0 | (fix) |
| [@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions](#aws-cdkaws-ecsreduceec2fargatecloudwatchpermissions) | When enabled, we will only grant the necessary permissions when users specify cloudwatch log group through logConfiguration | 2.159.0 | (fix) |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this supposed to be here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah I didn't manually update this, this ame along with some build or something. Merged from main and got rid of this

Comment on lines +71 to +86
lambda(): Lambda;
cloudFormation(): CloudFormation;
ec2(): EC2;
iam(): IAM;
ssm(): SSM;
s3(): S3;
route53(): Route53;
ecr(): ECR;
ecs(): ECS;
elbv2(): ElasticLoadBalancingV2;
secretsManager(): SecretsManager;
kms(): KMS;
stepFunctions(): SFN;
codeBuild(): CodeBuild;
cloudWatchLogs(): CloudWatchLogs;
appsync(): AppSync;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, a brand new class and interface also works. My only suggestion now is to include in this PR a change in some other file that uses the ISDK interface, just to smoke test the change. There's a lot of fiddling about with error handling and whatnot here. Let's make sure they still work in v3.

@HBobertz HBobertz added pr-linter/cli-integ-tested Assert that any CLI changes have been integ tested and removed pr/needs-cli-test-run This PR needs CLI tests run against it. labels Sep 26, 2024
@aws-cdk-automation aws-cdk-automation dismissed their stale review September 26, 2024 13:07

✅ Updated pull request passes all PRLinter validations. Dismissing previous PRLinter review.

@HBobertz HBobertz marked this pull request as draft September 27, 2024 13:58
@HBobertz HBobertz marked this pull request as ready for review September 28, 2024 16:03
@aws-cdk-automation
Copy link
Collaborator

➡️ PR build request submitted to test-main-pipeline ⬅️

A maintainer must now check the pipeline and add the pr-linter/cli-integ-tested label once the pipeline succeeds.

@HBobertz HBobertz added pr/needs-cli-test-run This PR needs CLI tests run against it. pr/do-not-merge This PR should not be merged at this time. and removed pr-linter/cli-integ-tested Assert that any CLI changes have been integ tested labels Sep 28, 2024
@HBobertz HBobertz marked this pull request as draft September 28, 2024 20:09
Copy link
Collaborator

@aws-cdk-automation aws-cdk-automation left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pull request linter has failed. See the aws-cdk-automation comment below for failure reasons. If you believe this pull request should receive an exemption, please comment and provide a justification.

A comment requesting an exemption should contain the text Exemption Request. Additionally, if clarification is needed add Clarification Request to a comment.

Copy link
Collaborator

@aws-cdk-automation aws-cdk-automation left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pull request linter has failed. See the aws-cdk-automation comment below for failure reasons. If you believe this pull request should receive an exemption, please comment and provide a justification.

A comment requesting an exemption should contain the text Exemption Request. Additionally, if clarification is needed add Clarification Request to a comment.

/**
* Replace the {ACCOUNT} and {REGION} placeholders in all strings found in a complex object.
*/
export async function replaceEnvPlaceholdersv3<A extends { }>(object: A, env: cxapi.Environment, sdkProvider: SdkProviderv3): Promise<A> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of duplicating this function, another way of doing this is:

  1. Create a new interface that only has the baseCredentialsPartition method.
  2. Both SdkProvider and SdkProviderv3 implement it.
  3. Change the last parameter of this method to be of the new interface.

This doesn't change any behavior and we get to write less code. No need for isSdkProviderV3 and its usage, for example.

Copy link
Contributor Author

@HBobertz HBobertz Oct 1, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Like the suggestion, but I think I need to change this code anyway, I'll figure that out today, TBD on this suggestion until I figure out what I'm doing with provideContextValues

/**
* Iterate over the list of missing context values and invoke the appropriate providers from the map to retrieve them
*/
export async function provideContextValuesv3(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is this used?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it was used previously, I don't know if I still need it yet lol. I'll be sure to get rid of it before I pull it out of draft. I'm just keeping it around for safe keeping for now

@@ -118,9 +121,9 @@ test('looks up the requested (symmetric) VPC', async () => {
});

test('throws when no such VPC is found', async () => {
AWS.mock('EC2', 'describeVpcs', (params: aws.EC2.DescribeVpcsRequest, cb: AwsCallback<aws.EC2.DescribeVpcsResult>) => {
ec2Mock.on(DescribeVpcsCommand).callsFake(params => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can leave it like this or we can use the slightly more readable pattern:

ec2Mock
  .on(DescribeVpcsCommand, {
     Filters: [{ Name: 'foo', Values: ['bar'] }]
  })
  .resolves({});

@aws-cdk-automation
Copy link
Collaborator

The pull request linter fails with the following errors:

❌ CLI code has changed. A maintainer must run the code through the testing pipeline (git fetch origin pull/31501/head && git push -f origin FETCH_HEAD:test-main-pipeline), then add the 'pr-linter/cli-integ-tested' label when the pipeline succeeds.

PRs must pass status checks before we can provide a meaningful review.

If you would like to request an exemption from the status checks or clarification on feedback, please leave a comment on this PR containing Exemption Request and/or Clarification Request.

✅ A exemption request has been requested. Please wait for a maintainer's review.

@aws-cdk-automation
Copy link
Collaborator

The pull request linter fails with the following errors:

❌ CLI code has changed. A maintainer must run the code through the testing pipeline (git fetch origin pull/31501/head && git push -f origin FETCH_HEAD:test-main-pipeline), then add the 'pr-linter/cli-integ-tested' label when the pipeline succeeds.

PRs must pass status checks before we can provide a meaningful review.

If you would like to request an exemption from the status checks or clarification on feedback, please leave a comment on this PR containing Exemption Request and/or Clarification Request.

✅ A exemption request has been requested. Please wait for a maintainer's review.

@HBobertz
Copy link
Contributor Author

HBobertz commented Oct 2, 2024

we're not pushing this last commit I made dd9aff8

This is purely for a discussion I'm having with Otavio.

@aws-cdk-automation
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: AutoBuildv2Project1C6BFA3F-wQm2hXv2jqQv
  • Commit ID: dd9aff8
  • Result: FAILED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
contribution/core This is a PR that came from AWS. p2 pr/do-not-merge This PR should not be merged at this time. pr/needs-cli-test-run This PR needs CLI tests run against it.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants