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

fix(events-targets): AwsApi fails when SDKv3 Command expects Uint8Array #27034

Merged
merged 4 commits into from
Sep 7, 2023

Conversation

mrgrain
Copy link
Contributor

@mrgrain mrgrain commented Sep 6, 2023

In #27002 we have migrated the AwsApi Construct to SDKv3.
However some SDKv3 Commands expect a Uint8Array in places where SDKv2 previously would accept a string.
This is a problem because handler input is passed directly into the SDK calls and the input can only contain JSON data types.
To solves this, we keep a list of SDK actions and parameters that should be coerced to Uint8Array.


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 6, 2023 17:20
@github-actions github-actions bot added the p2 label Sep 6, 2023
@mergify mergify bot added the contribution/core This is a PR that came from AWS. label Sep 6, 2023
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.

@mrgrain mrgrain force-pushed the mrgrain/fix/auto-convert-string-to-blob branch 2 times, most recently from cf80c07 to f31a8d0 Compare September 7, 2023 12:12
@mrgrain mrgrain marked this pull request as ready for review September 7, 2023 12:13
@mrgrain mrgrain force-pushed the mrgrain/fix/auto-convert-string-to-blob branch from f31a8d0 to a0953ec Compare September 7, 2023 12:15
@mrgrain mrgrain force-pushed the mrgrain/fix/auto-convert-string-to-blob branch from 48c9c34 to 41d3631 Compare September 7, 2023 13:24
@aws-cdk-automation aws-cdk-automation dismissed their stale review September 7, 2023 13:26

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

@mrgrain mrgrain force-pushed the mrgrain/fix/auto-convert-string-to-blob branch 5 times, most recently from af6c178 to e744212 Compare September 7, 2023 16:03
@mrgrain mrgrain force-pushed the mrgrain/fix/auto-convert-string-to-blob branch from e744212 to 83158ea Compare September 7, 2023 16:25
@aws-cdk-automation
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: AutoBuildv2Project1C6BFA3F-wQm2hXv2jqQv
  • Commit ID: 83158ea
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

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

@mergify
Copy link
Contributor

mergify bot commented Sep 7, 2023

Thank you for contributing! Your pull request will be updated from main and then merged automatically (do not update manually, and be sure to allow changes to be pushed to your fork).

@mergify mergify bot merged commit 641f9e8 into main Sep 7, 2023
9 checks passed
@mergify mergify bot deleted the mrgrain/fix/auto-convert-string-to-blob branch September 7, 2023 16:54
rix0rrr added a commit that referenced this pull request Sep 8, 2023
…t8Array

The SDKv3 has changed the input representation of `blob` types from
`string | Buffer | Uint8Array` to `Uint8Array`. That means all places
where customers were passing in `strings` now fail to pass the right
kind of value.

Similar to #27034, but for `AwsCustomResource`.
rix0rrr added a commit that referenced this pull request Sep 8, 2023
…t8Array

The SDKv3 has changed the input representation of `blob` types from
`string | Buffer | Uint8Array` to `Uint8Array`. That means all places
where customers were passing in `strings` now fail to pass the right
kind of value.

Similar to #27034, but for `AwsCustomResource`.
mergify bot pushed a commit that referenced this pull request Sep 8, 2023
…t8Array (#27065)

The SDKv3 has changed the input representation of `blob` types from `string | Buffer | Uint8Array` to `Uint8Array`. That means all places where customers were passing in `strings` now fail to pass the right kind of value.

Similar to #27034, but for `AwsCustomResource`.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
mikewrighton pushed a commit that referenced this pull request Sep 14, 2023
…ay (#27034)

In #27002 we have migrated the AwsApi Construct to SDKv3.
However some SDKv3 Commands expect a `Uint8Array` in places where SDKv2 previously would accept a `string`.
This is a problem because handler input is passed directly into the SDK calls and the input can only contain JSON data types.
To solves this, we keep a list of SDK actions and parameters that should be coerced to `Uint8Array`.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
mikewrighton pushed a commit that referenced this pull request Sep 14, 2023
…t8Array (#27065)

The SDKv3 has changed the input representation of `blob` types from `string | Buffer | Uint8Array` to `Uint8Array`. That means all places where customers were passing in `strings` now fail to pass the right kind of value.

Similar to #27034, but for `AwsCustomResource`.

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
mergify bot pushed a commit that referenced this pull request Mar 4, 2024
## Description
The following issue reports an error that occurs when calling an API that takes the `Date` type as a parameter, such as `GetMetricData` API, from a Custom Resource Lambda function, where the parameter is passed as `string` type to the AWS SDK.
#27962
https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/cloudwatch/command/GetMetricDataCommand/#:~:text=Description-,EndTime,-Required

To resolve this error, the `string` type must be properly converted to `Date` type when calling the AWS SDK from Lambda.
In this PR, I added the conversion to Date type in the same way as the existing conversion to `number` and `Uint8Array` types.
`Uint8Array`: #27034
`number`: #27112

## Major changes
### `update-sdkv3-parameters-model.ts` script
If the type is `timestamp` in the `smithy` specification, write `d` to the state machine so that it can be converted to a Date type later.
https://smithy.io/2.0/spec/simple-types.html#timestamp

`update-sdkv3-parameters-model.sh` script was not called from anywhere, so I called it manually and updated the JSON file.
Please let me know if there is a problem.

### `sdk-v2-to-v3-adapter` module
I added code to convert value marked `d` in state machine to `Date` type.
If the conversion to `Date` type fails, the `Date` class does not throw an exception, so the error is handled in a slightly tricky way.
Also added a unit test for this process.

### `integ-tests-alpha` module
Added integ-test to verify that errors reported in the related issue have been resolved.
The IAM Policy added internally by the call to `adPolicyStatementFromSdkCall` looks like the following and does not call `GetMetricData` correctly, so the `addToRolePolicy` method was used to explicitly add a new Policy is added explicitly with the `addToRolePolicy` method.
```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "monitoring:GetMetricData"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        }
    ]
}
```
https://github.com/aws/aws-cdk/blob/1a9c30e55e58203bd0a61de82711cf10f1e04851/packages/aws-cdk-lib/custom-resources/lib/helpers-internal/sdk-v3-metadata.json#L174


fixes #27962

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
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
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants