我在实现确认后 lambda 函数时遇到问题,在该函数中我从注册过程中获取用户提交的凭据并将其写入“用户”DynamoDB 表。我试图写入表格的具体条目是 - 用户名 - 电子邮件 - 实际姓名
为了区分用户,我需要将主键作为“sub”值,因为用户可以更改他们的用户名,这可能会在将来导致问题。
我遇到的主要困惑点如下
1) 我应该以什么角色开始我的 Lambda 函数?
创建 lambda 函数时,我需要给它一个起始角色,但我不确定我应该使用什么起始模板。我知道我将需要 DynamoDB 写访问权限,但我没有看到相应的模板。
2) 如何访问 Cognito 用户的各个字段?
据我所知,这些值应该存储在处理程序函数的“事件”参数中,但我找不到任何文档或示例事件来说明如何访问诸如“sub”、“电子邮件”等。
amazon-web-services amazon-dynamodb amazon-cognito aws-lambda
我有一个确认后 lambda 函数,它将用户属性信息写入 dynamoDB 表。我已经设法通过执行以下操作来访问“事件”参数中的标准用户属性字段
event.request.userAttributes.sub
Run Code Online (Sandbox Code Playgroud)
但试图跑
event.request.userAttributes.role //where role is the name of my custom attribute
Run Code Online (Sandbox Code Playgroud)
似乎不起作用。有人知道正确的语法是什么吗?我是否需要为自定义属性设置任何特殊的读取权限?我在最初创建这个用户池很长时间后创建了这个自定义属性,如果这改变了事情的话。
因此,我正在尝试为我的应用程序实现新的云功能,但需要对现有数据库数据模型进行一些调整。我数据库中的每个用户都有一个我要每周更新的字段。我不希望此功能每周都为所有用户运行,因为这将是不必要的昂贵操作。相反,我只是决定通过在用户文档中存储“最后更新”字段来跟踪我上次更新该用户的时间。
问题是我现有的400多个用户中没有一个拥有此字段。因此,我正在寻找一种为数据库中所有现有用户添加此字段的方法,该字段已初始化为某个默认时间。
我曾考虑过按如下所述使用“批量写入”:https : //firebase.google.com/docs/firestore/manage-data/transactions#batched-writes
但似乎您需要指定要更新的每个文档的ID。我所有的用户都有一个由Firestore生成的UUID,因此手动写入每个用户对我来说并不实际。有什么办法可以在现有集合的每个文档中创建一个新字段?或者,也许不是一种获取所有文档ID的列表的方法,以便我可以遍历它并进行非常丑陋的批写?我只需要执行一次此大规模更新,然后再也不需要执行一次。除非我发现一条新数据,否则我想跟踪。
我正在尝试编写一个lambda函数,该函数会在将新映像写入S3存储桶时触发。触发器已经使用正确的S3存储桶进行了设置,因此我知道这不是问题。
lambda函数本身具有s3:GetObject和dynamodb。*角色(对于DynamoDB写操作应具有完全访问权限)。
这里的目标是简单地写一个我已经创建的名为'art'的表,并插入一个我试图从中获取的主键值(imageTitle)var imageName。然后,我想为该键分配一个属性,即存储在中的该图像的url var url。
这只是我要尝试的简单练习,因此我可以继续进行更复杂的数据库写入。但是到目前为止,art即使我向S3存储桶中添加了触发触发器的新对象,也没有将任何内容写入表中。lambda函数是否可能未部署?我直接在Lambda Console的内联编辑器中编写了它并保存了它。
这是代码:
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});
const s3 = new AWS.S3();
exports.handler = async (event, context, callback) => {
//var sourceBucket = event.Records[0].s3.bucket.name;
var sourceKey = event.Records[0].s3.object.key;
var imageName = sourceKey.stringify;
//generate imageURL
var url = "https://s3.amazonaws.com/myapp-20181030214040-deployment/public/" + imageName;
var params = {
TableName : 'art',
Item: {
imageTitle: imageName,
imageURL: url
}
};
docClient.put(params, function(err, data) {
if (err) console.log(err);
else …Run Code Online (Sandbox Code Playgroud)