我正在尝试创建一个使用来自 dynamoDB 表的流的 lambda 函数。但是我想知道处理在执行过程中可能因某些错误而未处理的数据的最佳做法是什么?例如,我的 lambda 失败了,而且我有很多流,这是重新处理丢失数据的最佳方法?
谢谢
streaming amazon-dynamodb aws-lambda amazon-dynamodb-streams
我正在使用数据管道(DP)进行DynamoDB的每日备份,但是,我想对DP运行(DP运行之间的更新)遗漏的数据进行增量备份.为了实现这一点,我想使用DynamoDB Streams + Lambda + S3为S3带来实时的DynamoDB更新.我理解DynamoDB流如何工作,但是,我正在努力创建一个写入S3的Lambda函数,并说每小时滚动一个文件.
有人试过吗?
amazon-s3 amazon-web-services aws-lambda amazon-dynamodb-streams
我正在使用DynamoDB本地从nodejs(Javascript SDK)运行集成测试.当我调用getRecords时,我得到"TrimmedDataAccessException".如果我在AWS(非本地)中针对DynamoDB运行相同的代码,它可以正常工作.这是步骤:
"put"命令的顺序很重要.如果我把"EventStore"放在首先一切正常,但是当我首先使用"Music"时它会失败.如果我更改顺序,我的应用程序逻辑将是错误的,因此只更改顺序对我来说是一个问题.
运行DynamoDB
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb -dbPath /data
Run Code Online (Sandbox Code Playgroud)
CREATETABLE
{
TableName: "EventStore",
KeySchema: [
{ AttributeName: "EntityId", KeyType: "HASH" },
{ AttributeName: "Version", KeyType: "RANGE" }
],
AttributeDefinitions: [
{ AttributeName: "EntityId", AttributeType: "S" },
{ AttributeName: "Version", AttributeType: "N" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10
},
StreamSpecification: {
StreamEnabled: true,
StreamViewType: "NEW_IMAGE"
}
}
Run Code Online (Sandbox Code Playgroud)
createTable(响应)
{
"TableDescription": {
"AttributeDefinitions": [
{
"AttributeName": "EntityId",
"AttributeType": "S" …Run Code Online (Sandbox Code Playgroud) 是否可以使用batchgetitem api从dynamodb全局二级索引中检索行?如果我的目标是也基于某些非键属性从主表中检索数据,但应在 100 个项目的批次中检索数据 - GSI 索引是否不适合此处?
BatchItemGet API 也可用于查询吗?假设一个表有主键和排序键,同一个主键可以有多个排序键,我可以使用仅带有主键的 batchItemGet 检索多个主键还是在这里不会触发?
我想更新 DynamoDB 中的包含,为此我需要迭代表中存在的现有分区键。有什么方法可以使用 Python 仅获取分区键列表。扫描和查询仅适用于我的表的属性。有没有办法获取表的所有分区键?
我可以编写一个 Lambda 函数来处理多个 REST API 请求吗?我在 Dynamo DB 中有我的数据
流程:API 网关-->Lambda 函数-->Dynamo 数据库示例:
Request1:GET Method-Need to pull data from Table1
/device/{device_id}/start/{start_date}/end/{end_date}/events
Request2:GET Method-Need to pull data from Table2
/device/{device_id}/start/{start_date}/end/{end_date}/event_count
Request3:POST Method-Need to put data from Table3
/device/{device_id}/start/{start_date}/end/{end_date}/fault_events
Run Code Online (Sandbox Code Playgroud)
我应该编写 3 个不同的 lambda 函数来处理 3 个不同的请求,还是可以在一个 BIG Lambda 函数中处理所有 3 个请求,最好的解决方案是什么。
amazon-web-services amazon-dynamodb aws-lambda aws-api-gateway amazon-dynamodb-streams
我想使用 DynamoDB Streams + AWS Lambda 来处理聊天消息。有关同一对话user_idX:user_idY(房间)的消息必须按顺序处理。全局排序并不重要。
假设我以正确的顺序(room:msg1、room:msg2 等)提供 DynamoDB,如何保证流将按顺序提供 AWS Lambda,并保证跨单个流处理相关消息(房间)的顺序?
例如,考虑到我有 2 个分片,如何确保逻辑组进入同一个分片?
我必须完成这个:
Shard 1: 12:12:msg3 12:12:msg2 12:12:msg1 ==> consumer
Shard 2: 13:24:msg2 51:91:msg3 13:24:msg1 51:92:msg2 51:92:msg1 ==> consumer
Run Code Online (Sandbox Code Playgroud)
而不是这个(消息遵循我在数据库中保存的顺序,但它们被放置在不同的分片中,因此错误地并行处理同一房间的不同序列):
Shard 1: 13:24:msg2 51:92:msg2 12:12:msg2 51:92:msg2 12:12:msg1 ==> consumer
Shard 2: 51:91:msg3 12:12:msg3 13:24:msg1 51:92:msg1 ==> consumer
Run Code Online (Sandbox Code Playgroud)
这篇官方文章提到了这一点,但我在文档中找不到如何实现它的任何地方:
对单个主键所做的一系列更改的相对顺序将保留在分片中。此外,给定的密钥将存在于在给定时间点处于活动状态的一组同级分片中的至多一个中。因此,您的代码可以简单地处理分片内的流记录,以便准确跟踪项目的更改。
1) 如何在 DynamoDB Streams 中设置分区键?
2)如何创建保证分区键一致传递的Stream分片?
3)这真的可能吗?由于官方文章提到:给定的密钥最多会出现在给定时间点处于活动状态的一组同级分片中的最多一个中,因此看起来 msg1 可能会转到分片 1,然后 msg2 可能会转到分片 2,正如我的上面的例子?
编辑:在这个问题中,我发现了这一点:
流拥有的分片数量取决于表拥有的分区数量。因此,如果您有一个包含 4 …
一个 AWS Lambda 函数可以有两个事件源(一个 Kinesis 流和一个 DynamoDB 流)吗?
我已经查看过,但没有找到任何文档表明我可以或不能为同一个 AWS Lambda 函数拥有不同类型的事件源。
amazon-web-services amazon-kinesis aws-lambda amazon-dynamodb-streams
我正在创建无服务器框架项目。
DynamoDB 表是由其他 CloudFormation Stack 创建的。
我如何在中引用现有 dynamodb 表的 StreamArnserverless.yml
我的配置如下
resources:
Resources:
MyDbTable: //'arn:aws:dynamodb:us-east-2:xxxx:table/MyTable'
provider:
name: aws
...
onDBUpdate:
handler: handler.onDBUpdate
events:
- stream:
type: dynamodb
arn:
Fn::GetAtt:
- MyDbTable
- StreamArn
Run Code Online (Sandbox Code Playgroud) amazon-dynamodb serverless-framework amazon-dynamodb-streams