fix(custom-resource): provider framework lambda missing GetFunction permission #33301
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue # (if applicable)
Closes #26838.
Note that this is re-creating #32904 which was reverted due to it causing problem in the release process.
Reason for this change
In the Provider Framework lambda code, there is a logic to catch error arise from invoking the User Defined handler lambda. Upon error, it polls the state of the User Defined handler until it is in ACTIVE state (#22612 added this logic):
aws-cdk/packages/aws-cdk-lib/custom-resources/lib/provider-framework/runtime/outbound.ts
Lines 66 to 80 in 64b865b
The polling uses the AWS SDK
waitUntilFunctionActiveV2
function, which calls the Lambda GetFunction API:https://github.com/aws/aws-sdk-js-v3/blob/6858c7e04730a2b524b06355969e4076c28ae863/clients/client-lambda/src/waiters/waitForFunctionActiveV2.ts#L57
However, the Provider Framework lambda does not have the
lambda:GetFunction
permission.Why is the issue saying the
lambda:GetFunctionConfiguration
is needed instead oflambda:GetFunction
?At some point in time, the retry logic used
waitUntilFunctionActive
for polling, which use theGetFunctionConfiguration
. But this is no longer the case after c3a4b7b#diff-85920270c638d83b082246e0026f1a316dd39aaa3cd8720fdaeb3d526e438f7fR66Description of changes
Added the
lambda:GetFunction
permission on the role used by the Provider Framework lambda.Describe any new or updated permissions being added
The
lambda:GetFunction
permission is added.Description of how you validated changes
There isn't a straight forward way to test the INACTIVE lambda scenario as one need to wait 14 days for a Lambda function to become INACTIVE. Therefore, I am not able to create an integ test.
What I did was locally changing the Provider Framework lambda code to throw an error such that it executes the catch block. Then I verified in CloudTrail that the Provider Framework lambda called
GetFunction
successfully and then it was also able to invoke the User Defined Handler lambda.Checklist
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license