【问题标题】:Can I make a call to AWS Cognito via a Lambda through the API gateway?我可以通过 API 网关通过 Lambda 调用 AWS Cognito 吗?
【发布时间】:2020-10-03 05:11:42
【问题描述】:

我当前的堆栈是这样的:

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

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

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

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

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

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

谢谢

【问题讨论】:

    标签: aws-lambda aws-api-gateway amazon-cognito api-gateway amazon-cognito-triggers


    【解决方案1】:

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

    List of currently supported AWS services with endpoints.

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

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

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

    【讨论】:

    • 感谢您的回复。最初我尝试使用 dynamodb,但遇到了同样的问题,我需要一个 NAT 网关……后来我发现它并没有真正满足我的需求。我的数据库是 EC2 实例上的 Neo4J。如果我正确理解您的回复,我想知道是否有可能有一个单独的 lambda 可以调用 Cognito,然后调用我的 api-gateway > lambda > EC2 ......但这似乎很冗长。另外,如果我说的任何话听起来很愚蠢,请原谅我,这是我的第一个牛仔竞技表演。谢谢
    • @stackOp 请阅读所有原始帖子 :) “所以我创建了一个 nat 网关,它可以工作,但它的成本太高了!”
    • 你的想法很有趣。我有这种情况,我的 pgsql 在 ec2 中,我正在尝试从 cognito 中提取信息。由于它是只读的,您还有什么想法吗?我希望它是具有成本效益的解决方案。
    猜你喜欢
    • 2017-01-22
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2019-06-05
    • 2020-12-12
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多