我可以通过 API 网关通过 Lambda 调用 AWS Cognito 吗?

Can I make a call to AWS Cognito via a Lambda through the API gateway?

我现在的堆栈是这样的:

  1. 用户通过 AWS Cognito 创建账户
  2. A post 确认 lambda 被触发,然后将更多用户详细信息添加到数据库

我的数据库使用 cognito 生成的 sub id 作为 userId,因此它们是相同的。我还将电子邮件地址复制为数据库中的用户名。我的意图是使用 Cognito 进行身份验证,并使用我自己的数据库来实现我的应用程序的功能。

但是,如果用户希望更新他们的电子邮件地址,我需要在 cognito 和我的数据库中进行修改。我第一次尝试使用 admin_update_user_attributes 在我的 lambda 中调用 cognito,但很快意识到它被阻止从外部调用互联网,所以我创建了一个 nat 网关,它可以工作,但它的成本太高了!

我的第二个想法是通过 cognito,让我的前端进行调用,然后让 cognito 触发 lambda 来更新我的数据库,但我认为这是不可能的。

是否有配置或我缺少的东西能够通过 API 网关通过 lambda 访问 AWS cognito,因为它们都是 AWS 服务。

我不想通过我的前端进行两个单独的调用,因为这会产生一个完成但另一个未完成的风险。

谢谢

如果您在 VPC 中使用 Lambda 函数,则需要 NAT 网关,因为此时没有 Cognito VPC 端点。

List of currently supported AWS services with endpoints.

如果您使用的是像 Dynamo 这样的数据库,Lambda 函数不需要在 VPC 中,因此您可以实现上面提到的用例。

另一种选择是异步执行 Cognito 更新,因此您的 Lambda 可能会使用 VPC 端点将对象放入 SQS,然后使用 Lambda 轮询器(在 VPC 之外)轮询消息并更新 Cognito。或者通过使用私有 API 网关实现类似的用例。

这些只是我自己没有做过的潜在想法。