我目前的堆栈是这样的。
我的数据库使用的是 sub
由cognito生成的id作为userId,所以它们是一样的。我也把电子邮件地址复制到我的数据库中作为用户名。我的目的是使用Cognito来进行认证,而我自己的数据库则用来实现我的应用程序的功能。
然而,如果用户希望更新他们的电子邮件地址,我需要在cognito和我的数据库中同时修改这个地址。我的第一次尝试是在我的lambda中使用以下方法调用cognito admin_update_user_attributes
但很快就意识到它被阻止了与互联网的外部呼叫,所以我创建了一个NAT网关,虽然它可以工作,但它的成本实在是太高了!我的第二个想法是通过cognito,让我的前端进行呼叫,然后让cognito触发lambda更新我的数据库,但我认为这是不可能的。
我的第二个想法是通过cognito,让我的前端进行调用,然后让cognito触发一个lambda来更新我的数据库,但我认为这是不可能的。
是否有一个配置或我遗漏的东西可以通过API网关通过lambda访问AWS cognito,因为它们都是AWS服务。
我不想通过我的前端进行两个独立的调用,因为这会造成一个被完成而另一个没有完成的风险。
谢谢你
如果你在VPC中设置了Lambda功能,就需要一个NAT网关,因为目前还没有Cognito VPC端点。
如果你使用的是像Dynamo这样的数据库,Lambda函数不需要在VPC中,这样你就可以实现你上面提到的用例。
另一个选择是异步地进行Cognito更新,所以你的Lambda有可能使用VPC端点把一个对象放到SQS中,然后由一个Lambda poller(在VPC之外)来轮询消息并更新Cognito。或者通过使用私有的API Gateways来实现类似的用例。
这些只是潜在的想法,我自己还没有做过。