AWS Lambda 未被其他 Lambda 调用

AWS Lambda not being invoked by other Lambda

我已经根据以下 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
      });
}

我将自定义 Lambda 添加到 Resources 下的项目 template.yaml:

  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 lambda。

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

谢谢!

I am wondering if its related to async behaviour in the Lambda.

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

为了克服这个问题,您可以将代码包装在 new Promise 中的处理程序中,如 AWS docs.

中所示