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

AWS Lambda and Cognito error on deploy: Only one request to update this UserPool can be processed at a time

在我的 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 日修复和部署。

希望对您有所帮助。