当 运行 用于 Amplify 部署的 lambda 函数时,未调用 AWS SDK 函数

AWS SDK function is not being called when run used on a lambda function deployed by Amplify

我正在尝试以编程方式将用户添加到我的 Amplify 项目中的组。我创建了一个如下所示的 lambda 函数,并使用放大函数部署了它。我按照这篇文章设置了函数角色的权限:https://www.linkedin.com/pulse/aws-amplify-adding-user-group-programmatically-guillermo-misa-iii。函数 get 被执行。没有错误。它甚至没有 运行 控制台日志,这意味着没有调用回调。用户也没有被添加到组中。 lambda 函数日志中没有错误日志。知道发生了什么事吗?

const AWS = require('aws-sdk');

exports.handler = async (event, context, callback) => {
    const cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider();

    cognitoIdentityServiceProvider.adminAddUserToGroup({
        GroupName: 'abcd', //your confirmed user gets added to this group
        UserPoolId: event.arguments.userPoolId,
        Username: event.arguments.userName
    }, function(err, data) {
        console.log('Ran the function')

        if (err) {
            callback(err) // uh oh, an error
        }

        callback(null, event); // yay! success
    })

    // return response;
};

在我遵循的指南中,他们使用普通函数作为 lambda 处理程序:

exports.handler = (event, context, callback) => {})

但是我使用了一个async函数:

exports.handler = async (event, context, callback) => {})

似乎在async 函数中,lambda 不会等到回调被调用。它希望我们在代码中使用 async await 语法。所以,我必须像这样转换函数:

try {
    await cognitoIdentityServiceProvider.adminAddUserToGroup({
        GroupName: 'abcd', //your confirmed user gets added to this group
        UserPoolId: event.arguments.userPoolId,
        Username: event.arguments.userName
    }).promise()

    callback(null, event); // yay! success
} catch (error) {
    console.log(error)
}

现在一切正常! 注意 如果我们调用 .promise().

我们可以从 aws-sdk 函数中得到一个承诺