首页 > 解决方案 > 在 Amplify 部署的 lambda 函数上运行时未调用 AWS 开发工具包函数

问题描述

我正在尝试以编程方式将用户添加到我的 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;
};

标签: amazon-web-servicesaws-lambdaaws-amplify

解决方案


在我遵循的指南中,他们使用了一个普通函数作为 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)
}

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


推荐阅读