【发布时间】:2018-07-17 15:12:18
【问题描述】:
我正在尝试从 Lambda 函数访问 AWS Cognito UserPool。该函数配置为池的PreSignUp 触发器。这是我的 lambda 代码(注意,我正在使用 TypeScript 进行开发):
import { CognitoUserPoolEvent, Handler, Context, Callback } from 'aws-lambda';
import { CognitoIdentityServiceProvider } from 'aws-sdk';
export const onPreSignUp: Handler =
(event: CognitoUserPoolEvent, context: Context, cb: Callback | undefined) => {
context.callbackWaitsForEmptyEventLoop = false;
const userAttr = event.request.userAttributes || undefined;
console.log(userAttr);
if (cb) {
const cognitoPoolId = process.env.COGNITO_USER_POOL_ID;
const email = userAttr.email || userAttr['cognito:email_alias'];
if (!cognitoPoolId) {
console.warn('No user pool id defined', cognitoPoolId);
return cb(new Error('Can not create user'));
}
const identityService = new CognitoIdentityServiceProvider();
const params = {
UserPoolId: cognitoPoolId,
Filter: `email = "${email}"`,
};
console.log("try to list users", params);
identityService.listUsers(params, (err, data) => {
console.log('list users');
if (err) {
console.warn('listUsers Error', err);
return cb(new Error('Can not create user'));
}
console.log("data", data);
return cb(null, 'todo');
});
}
}
不幸的是,listUsers 的回调永远不会返回。如果我传递了一个无效的params 对象,回调会立即返回。
我还尝试将 lambdas 超时设置为最大(5 分钟)并增加 RAM。没有什么帮助。 lambda 执行角色具有AmazonCognitoReadOnly,它提供完全读取访问权限。如果这会是一个问题,我也预计会出现授权错误。
编辑:在我发布这个之后,我已经解决了我的问题:lambda 被配置为在 VPC 中运行。将 VPC 设置为 none 即可解决。
【问题讨论】:
-
感谢分享!我也没有考虑 VPC!
标签: amazon-web-services aws-lambda amazon-cognito