【问题标题】:How to configure Serverless Cognito Lambda Triggers如何配置无服务器 Cognito Lambda 触发器
【发布时间】:2019-12-15 15:11:01
【问题描述】:

使用无服务器框架创建 Cognito 用户池以及用于 TOPT SMS 授权期间的 cognito 事件的多个 lambda。一切都已创建,但 lambda 函数未在 Cognito 中注册。

相对较新的 Serverless jut 似乎无法让它们连接起来。尝试了池名称,因为其他人试图在创建结束时将其标记为已经存在,池在那里并且 lambda 在那里但没有连接。

目前正在关注另一篇文章,尝试将用户池更改为 CognitoUserPoolMyUserPool,然后在 lambda 中将其引用为 MyUserPool。还在这两个位置都尝试过 CognitoUserPool ,但都没有工作。

serverless.yaml 文件示例:

service: cognito-authentication

frameworkVersion: ">=1.1.0 <2.0.0"

package:
  individually: false

plugins:
  - serverless-bundle 

custom:
  stage: ${opt:stage, self:provider.stage}
  poolName: ${self:custom.stage}-user-pool

provider:
  name: aws
  runtime: nodejs10.x
  stage: dev
  iamRoleStatements:
    - Effect: Allow
      Action:
        - sns:*
      Resource: 
        - "*"

functions:

  preSignUp:
    handler: functions/pre-signup.main
    events:
      - cognitoUserPool:
        pool: MyUserPool
        trigger: PreSignUp

  defineAuthChallenge:
    handler: functions/define-auth-challenge.main
    events:
      - cognitoUserPool:
        pool: MyUserPool
        trigger: DefineAuthChallenge

  createAuthChallenge:
    handler: functions/create-auth-challenge.main
    events:
      - cognitoUserPool:
        pool: MyUserPool
        trigger: CreateAuthChallenge

  verifyAuthChallengeResponse:
    handler: functions/verify-auth-challenge-response.main
    events:
      - cognitoUserPool:
        pool: MyUserPool
        trigger: VerifyAuthChallengeResponse

resources:
  Resources:
    CognitoUserPoolMyUserPool:
      Type: "AWS::Cognito::UserPool"
      Properties:
        # Generate a name based on the stage
        UserPoolName: ${self:custom.poolName}
        # Set phone_number as an alias
        UsernameAttributes:
          - phone_number
        Policies:
          PasswordPolicy:
            MinimumLength: 6
            RequireLowercase: False
            RequireNumbers: False
            RequireSymbols: False
            RequireUppercase: False

    CognitoUserPoolClient:
      Type: "AWS::Cognito::UserPoolClient"
      Properties:
        # Generate an app client name based on the stage
        ClientName: ${self:custom.stage}-sms-auth-client
        UserPoolId:
          Ref: CognitoUserPoolMyUserPool
        ExplicitAuthFlows:
          - CUSTOM_AUTH_FLOW_ONLY
        GenerateSecret: false

期望用户池已正确创建并配置为使用 lambda 来触发工作流执行。

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cognito serverless-framework eventtrigger


    【解决方案1】:

    我已经复制粘贴了您的代码(并添加了相关的 Lambda 函数),它对我有用。

    我已经使用以下命令测试了PreSignUp: aws cognito-idp admin-create-user --region &lt;region&gt; --user-pool-id &lt;user-pool-id&gt; --username &lt;phone&gt;

    虽然没有显示在 AWS 控制台 Lambda UI 中,但触发器确实显示在 Cognito->User Pools->dev-user-pool->Triggers 中,这令人困惑。

    示例回购:https://github.com/erezrokah/serverless-cognito-triggers

    【讨论】:

    • 埃雷兹谢谢。请提供您正在使用的无服务器版本吗?我目前正在使用 1.49.0(企业插件:1.3.5,平台 SDK:2.1.0),我想知道这是否是问题所在。尽管我的 lambda 在部署到 lambda 控制台时正确显示,但您在用户池中显示的事实正是我没有做的。
    • serverless --version 输出:1.49.0 (Enterprise Plugin: 1.3.6, Platform SDK: 2.1.0) 在没有池的自定义设置的情况下删除堆栈并重试如何?
    • Erez 我非常感谢你发布你的 repo,具有讽刺意味的是,这几乎是我的,但我的 yml 中一定有一些格式错误,我仍然找不到,因为你的确实有效。我真的从你的 serverless.yml 上下载了你的 repo,它按预期工作。
    【解决方案2】:

    我在您的 serverless.yml 中发现了问题。您在 cognitoUserPool 下缺少一个缩进。我尝试了两种方式,并且可以与额外的缩进一起使用。

    preSignUp:
        handler: functions/pre-signup.main
        events:
          - cognitoUserPool:
              pool: MyUserPool
              trigger: PreSignUp
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-11
      • 2019-06-22
      • 2017-08-13
      • 2023-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多