部署时出现 AWS Lambda 和 Cognito 错误:一次只能处理一个更新此用户池的请求



在我的 AWS 项目中,我使用无服务器框架来部署 lambda 函数和 Cognito 用户池。

我希望我的 2 个 lambda 函数由 Cognito 用户池事件触发,所以我这样做了:

functions:
autoMoveToUserGroup:
handler: src/auto-move-to-user-group.handler
name: auto-move-to-user-group
events:
- cognitoUserPool:
pool: test-user-pool
trigger: PostAuthentication
existing: True
autoValidationUserEmailModification:
handler: src/auto-validation-user-email-modification.handler
name: auto-validation-user-email-modification
events:
- cognitoUserPool:
pool: test-user-pool
trigger: CustomMessage
existing: True
resources:
Resources:
MyCognitoUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: test-user-pool
AutoVerifiedAttributes:
- email
UsernameAttributes:
- email
Schema:
- Name: email
Required: True

使用serverless deploy命令进行部署时,有时会收到以下错误:

An error occurred: AutoDashvalidationDashuserDashemailDashmodificationCustomCognitoUserPool1 - Failed to create resource.
Only one request to update this UserPool can be processed at a time.

它看起来像一个随机错误,因为它不会每次都发生(尽管经常发生(。此外,当它发生时,它并不总是发生在同一个函数上。

我做错了什么吗?我该如何解决这个问题?

感谢您的帮助。

好的,所以这里有一个解决方法:不使用无服务器语法中的events部分,我们只能使用原始的CloudFormation语法来做到这一点:

resources:
Resources:
MyCognitoUserPool:
Type: AWS::Cognito::UserPool
Properties:
...
LambdaConfig:
CustomMessage: arn:aws:lambda:eu-central-1:123456789012:function:auto-validation-user-email-modification
lambdaCognitoPermissionCustomMessage:
Type: AWS::Lambda::Permission
Properties: 
Action: 'lambda:InvokeFunction'
FunctionName: !Ref 'AutoValidationUserEmailModificationLambdaFunction'
Principal: cognito-idp.amazonaws.com
SourceArn: !GetAtt
- MyCognitoUserPool
- Arn

此外,根据无服务器团队的说法,这实际上是一个应该在 2019 年 8 月 14 日修复和部署的错误。

希望对您有所帮助。

最新更新