Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 通过后确认lambda函数将Cognito用户信息写入DynamoDB?_Amazon Web Services_Aws Lambda_Amazon Dynamodb_Amazon Cognito - Fatal编程技术网

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

Amazon web services 通过后确认lambda函数将Cognito用户信息写入DynamoDB?,amazon-web-services,aws-lambda,amazon-dynamodb,amazon-cognito,Amazon Web Services,Aws Lambda,Amazon Dynamodb,Amazon Cognito,我在实现确认后lambda函数时遇到问题,在该函数中,我从注册过程中获取用户提交的凭据,并将其写入“用户”DynamoDB表。我试图写入表中的具体条目如下 -用户名 -电子邮件 -实际姓名 为了区分用户和其他用户,我需要主键是'sub'值,因为用户可以更改他们的用户名,这可能会在将来导致问题 我感到困惑的要点如下 1) 我应该以什么角色开始Lambda功能 创建lambda函数时,我需要给它一个起始角色,但我不确定应该使用什么起始模板。我知道我将需要DynamoDB写访问权限,但我没有看到用于此

我在实现确认后lambda函数时遇到问题,在该函数中,我从注册过程中获取用户提交的凭据,并将其写入“用户”DynamoDB表。我试图写入表中的具体条目如下 -用户名 -电子邮件 -实际姓名

为了区分用户和其他用户,我需要主键是'sub'值,因为用户可以更改他们的用户名,这可能会在将来导致问题

我感到困惑的要点如下

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

创建lambda函数时,我需要给它一个起始角色,但我不确定应该使用什么起始模板。我知道我将需要DynamoDB写访问权限,但我没有看到用于此的模板

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

据我所知,这些值应该存储在handler函数的“event”参数中,但我找不到任何文档或示例事件来显示如何访问诸如“sub”、“email”等单个字段。

1)您的Lambda角色

  • 创建Lambda函数,而不是使用模板,选择 创建一个新角色并为其命名(比如MyLambdaRole)
  • 进入IAM,进入角色菜单选项并找到MyLambdaRole角色。附加以下策略:AmazondynamodFullAccess
请注意,Lambda在默认情况下已经具有CloudWatch访问权限。AmazondynamodFullAccess的权限比您严格需要的权限多,但这并不是不合理的。如果您确实想要更细粒度的权限,我至少会让它与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用户数据

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

event.request.userAttributes.email
更多细节


最后一件事,您不需要为Lambda函数分配触发器。您所需要做的就是进入Cognito,并在触发器部分分配Lambda函数。这样Cognito就可以直接给Lambda打电话——Lambda不需要听任何特殊事件。

谢谢您直截了当的回答!我会尝试一下,然后再给你回复。一般来说,我是否总是需要在AWS配置中指定我的区域以及每个lambda函数的特定api版本?此外,我认为在处理程序函数上方调用“var AWS=require('AWS-sdk')”之类的语句。是否应该在处理程序函数中调用它们?如果要访问特定于某个区域的服务,只需指定一个区域。在本例中,您访问的是DynamoDB,它需要一个区域。您不必指定版本。AWS总是在他们的例子中这样做,所以我想这一定是一个很好的实践。我想如果您不指定一个版本,您将来可能会遇到代码意外中断的风险。