通过确认后lambda函数将Cognito用户信息写入DynamoDB吗?

时间:2018-11-14 04:28:28

标签: amazon-web-services aws-lambda amazon-dynamodb amazon-cognito

我在实施确认后lambda函数时遇到麻烦,在该函数中,我从注册过程中获取用户提交的凭据,并将其写入“用户” DynamoDB表中。我要写到表中的特定条目是 - 用户名 -电子邮件 -真实姓名

为了区分用户,我需要将主键设置为“ sub”值,因为用户可以更改其用户名,并且将来可能会引起问题。

我困惑的要点如下

1)我应该以什么角色开始Lambda功能?

创建lambda函数时,我需要赋予它一个开始角色,但我不确定自己应该使用哪个入门模板。我知道我将需要DynamoDB写入权限,但我没有看到该模板。

2)如何访问Cognito用户的各个字段?

据我所知,这些值应该存储在处理程序函数的'event'参数中,但是我找不到任何文档或示例事件来说明如何访问诸如'sub'之类的各个字段,“电子邮件”等

1 个答案:

答案 0 :(得分:2)

1)您的Lambda角色

  • 创建Lambda函数,而不是使用模板,而是选择 创建一个新角色并为其命名(比如说MyLambdaRole)。
  • 进入IAM,转到“角色”菜单选项,然后找到MyLambdaRole角色。附加以下策略:AmazonDynamoDBFullAccess

请注意,默认情况下,Lambda将已经具有CloudWatch访问权限。 AmazonDynamoDBFullAccess拥有的权限超出了您严格需要的权限,但并非不合理。如果您确实希望获得更细粒度的权限,则至少可以将其与AmazonDynamoDBFullAccess一起使用,然后从那里开始。还要注意,您根本不需要任何Cognito权限,因为您要做的只是解析Cognito发送给您的数据。

确保在脚本中导入相关的DynamoDB库。

例如:

exports.handler = (event, context, callback) => {

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'us-east-1'});

// Create the DynamoDB service object
ddb = new AWS.DynamoDB({apiVersion: '2012-10-08'});

};

2)访问各个Cognito用户数据

假设您正在使用NodeJ,如下所示:

event.request.userAttributes.email

更多详细信息here

最后一件事,您不需要为Lambda函数分配触发器。您所需要做的就是进入Cognito,并在触发器部分中分配Lambda函数。这样,Cognito会直接调用Lambda-Lambda不需要监听任何特殊事件。