同步RDS数据库和Cognito的最佳方法

时间:2019-02-03 19:31:03

标签: amazon-web-services amazon-cognito

我在所有AWS Tools BTW中都是新手。无论如何,我已经创建了Cognito用户池,可以创建和登录新用户,但我的RDS数据库中也需要这些字段。

昨天,我正在阅读有关该问题的文档和教程,但是看起来有很多方法可以同步两个数据源。我不知道AppSync之类的选项是否可以执行此操作,或者我需要编写一个两步的lambda,所以我正在为像你们这样经验丰富的用户寻求建议。

3 个答案:

答案 0 :(得分:1)

您只能在Cognito用户池中具有身份验证所需的基本属性,例如用户名,名称,电子邮件和电话号码,以及其他某些数据库(例如RDS或DynamoDB)中的其余元数据。
在dynamo或RDS中,您可以在cognito中创建用户名和其余元数据的一对一映射。例如:

*username* -> pk
employee_id
address
user_type
first_name
last_name
marital_status
gender

从实施的角度来看:
公开lambda以创建和更新用户。仅使用先前使用cognito API定义的必需属性在cognito中创建用户,然后将该用户的元数据插入您选择的数据库中。 PUT API也会有所变化,只是需要稍作更改即可更新数据库中的用户池和用户元数据。

答案 1 :(得分:1)

您可以将AWS AppSync Lambda解析器与Cognito用户池结合使用,作为AppSync API的AuthZ选择,以满足您的用例。本质上,当用户使用cognito完成身份验证时,您将拥有包含用户属性的“ $ context.identity.claims”,并且可以在lambda解析器内部写入RDS数据库。

一些参考文档:

答案 2 :(得分:1)

简短回答:

您可以通过侦听Cognito事件(例如,使用AWS Lambda)将Cognito用户池数据复制到SQL表。

长答案:

我认为您可以将Cognito用户池用作身份验证/用户数据Bounded Context,换句话说,就是身份验证和用户数据的唯一真实来源。

和其他需要用户数据的BC(例如Sales上下文)可以使用某种数据复制体系结构以只读方式同步用户数据,进行内部复杂查询或仅与Cognito脱钩。

在这种情况下,数据复制的一个示例是侦听Cognito事件(AWS Lambda可以帮助其完成)以将用户数据复制到Bounded Context(恰好是该上下文所需的数据的一部分)。

但是请记住,复制的数据是只读的,原始的Cognito数据应该是事实的唯一来源。