amazon-web-services - 在 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;
};
解决方案
在我遵循的指南中,他们使用了一个普通函数作为 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()
.
推荐阅读
- sql - 运行时“3129”更新语句
- github - 检查 GitHub 预接收挂钩的作用
- r - 无法调整 TCGAbiolinks
- python - 为什么 SQL Server 返回 0.759999 之类的数字,而 MySQL 返回 0.76?
- ruby - 如何修复这个关于 end 关键字的 Ruby 语法错误?
- sql-server - 将整个 XML 文档复制/粘贴到单个 SQL Server 行中
- wordpress - Woocommerce - 我的帐户菜单项未显示正确的内容
- angular - 如何在 Angular 服务中正确实现这一行?
- c# - 将日期与 datenow 进行比较时,EF Core Where 子句抛出异常
- javascript - 如何仅在第一页(div)上隐藏“上一个”按钮并在最后一页(div)上隐藏“下一个按钮”