【问题标题】:AWS Lambda not being invoked by other LambdaAWS Lambda 未被其他 Lambda 调用
【发布时间】:2021-08-04 10:45:51
【问题描述】:

我创建了一个基于以下Github Repo 的自定义 AWS 身份验证流程

我希望verify-auth-challenge-response Lambda 调用我创建的自定义 Lambda,我用它来设置用户密码。这是在用户没有经过验证的电子邮件地址的情况下。我不希望他们必须完成两次验证码,所以如果接受挑战,希望这个新的 Lambda 设置密码。

我将verify-auth-challenge-response修改如下

import { VerifyAuthChallengeResponseTriggerHandler } from 'aws-lambda';
import AWS from 'aws-sdk';

export const handler: VerifyAuthChallengeResponseTriggerHandler = async (event, context) => {
    const expectedAnswer = event.request.privateChallengeParameters!.secretLoginCode; 
    if (event.request.challengeAnswer === expectedAnswer) {
        event.response.answerCorrect = true;
        changePassword(context);
    } else {
        event.response.answerCorrect = false;
    }
    return event;
};

//@ts-ignore
const changePassword = async (context) => {
    const lambda = new AWS.Lambda({
        region: 'eu-west-2'
      });
    const params = {
        FunctionName: 'CustomLambdaName', // the lambda function we are going to invoke
        InvocationType: 'Event',
        LogType: 'Tail',
        Payload: '{ "password" : "PasswordSuppliedByUser" }'
    }
    lambda.invoke(params, function(err, data) {
        if (err){
             console.log(err, err.stack);
             context.done('error', err);
            } // an error occurred
        else     {
            console.log(data);
            context.succeed(data.Payload);
        }       // successful response
      });
}

我在Resources下的项目template.yaml中添加了我的自定义Lambda:

  ChangePassword:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: lambda-triggers/change-password/
      Handler: change-password.handler
      Runtime: nodejs12.x

部署后,我创建了一个具有这些策略的 IAM 角色

AWSLambdaExecute
AWSLambdaBasicExecutionRole
AWSLambdaRole

并将角色手动分配给verify-auth-challenge-responsechange-password lambdas。

verify-auth-challenge-response 执行时,它返回OK,并且我添加的控制台日志显示它通过了invoke 调用。但是我的change-password lambda 从未被调用过。知道如何调试它为什么没有被调用吗?我想知道它是否与 Lambda 中的异步行为有关。

谢谢!

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cognito


    【解决方案1】:

    我想知道它是否与 Lambda 中的异步行为有关。

    大概吧。您正在使用async handler,因此您的函数似乎在它有机会调用其他函数之前完成。

    要克服这个问题,您可以将代码包装在new Promise 的处理程序中,如AWS docs 所示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-18
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      相关资源
      最近更新 更多