标签: amazon-dynamodb-streams

AWS DynamoDB 未知操作异常

我试图建立一个非常简单的表格,就像在这个例子中一样,但它不起作用。当我在 API Gateway 的 AWS 控制台中对其进行测试时,总是得到以下响应:

转换前的端点响应正文:{"__type":"com.amazon.coral.service#UnknownOperationException"}

我的映射表如下所示:

#set($inputRoot = $input.path('$'))
{ 
    "TableName": "Subscriptions",
    "Item": {
        "subscriptionId": {
            "S": "$inputRoot.subscriptionId"
        },
        "userId": {
            "S": "$inputRoot.userId"
        },
        "durationInMonth": {
            "S": "$inputRoot.durationInMonth"
        },
        "sku": {
            "S": "$inputRoot.sku"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 Requestbody 看起来像这样。

{
  "userId": "4",
  "subscriptionId": "5",
  "sku": "12345",
  "durationInMonth": "1"
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

谢谢你的帮助。周末愉快。

娜塔莉

amazon-web-services amazon-dynamodb aws-api-gateway amazon-dynamodb-streams api-gateway

3
推荐指数
1
解决办法
2997
查看次数

使用多个条件表达式的 AWS DynamoDB 更新项目

我有一个 DynamoDB 表,我希望使用多个条件表达式更新特定值。我们可以这样做吗?我的代码:-

        dynamodb = session.resource('dynamodb')
        table = dynamodb.Table('gold-images')
        response = table.update_item(
            Key={
                    'AccountRegionOS' : AccOs,
                    'CreationDate' : cred
                },
            UpdateExpression="set is_active = :r",
            ConditionExpression="CreationDate < :num",
            ExpressionAttributeValues={
                ':num' : last_month,
                ':r': "No"
            },
            ReturnValues="UPDATED_NEW"
Run Code Online (Sandbox Code Playgroud)

我希望条件表达式为

        dynamodb = session.resource('dynamodb')
        table = dynamodb.Table('gold-images')
        response = table.update_item(
            Key={
                    'AccountRegionOS' : AccOs,
                    'CreationDate' : cred
                },
            UpdateExpression="set is_active = :r",
            ConditionExpression=("CreationDate < :num") & ("AMIID = :ami"),
            ExpressionAttributeValues={
                ':num' : last_month,
                ':r': "No",
                ':ami' : i
            },
            ReturnValues="UPDATED_NEW"
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb amazon-dynamodb-streams

3
推荐指数
1
解决办法
1万
查看次数

用于删除操作的 DynamoDB 流事件中的元数据?

我打算使用 DynamoDB 流来实现一个日志跟踪,跟踪对许多表的更改(并将其写入 S3 上的日志文件)。每当对表进行修改时,都会从流事件中调用 lambda 函数。现在,我需要记录进行修改的用户。对于putand update,我可以通过包含一个包含调用者 ID 的实际表属性来解决这个问题。现在存储在表中的记录将包含此 ID,这并不是真正可取的,因为它是有关操作的更多元数据而不是记录本身的一部分,但我可以接受。

例如:

put({
  TableName: 'fruits',
  Item: {
    id: 7,
    name: 'Apple',
    flavor: 'Delicious',
    __modifiedBy: 'USER_42'
  })
Run Code Online (Sandbox Code Playgroud)

这将导致 lambda 函数调用,我可以在其中将如下内容写入我的 S3 日志文件:

table: 'fruits',
operation: 'put',
time: '2018-12-10T13:35:00Z',
user: 'USER_42',
data: {
    id: 7,
    name: 'Apple',
    flavor: 'Delicious',
}
Run Code Online (Sandbox Code Playgroud)

但是,对于删除,出现了一个问题——如何记录删除操作的调用用户?当然,我可以发出两个请求,一个更新__modifiedBy,另一个删除项目,流只会__modifiedByOLD_IMAGE包含在流事件中的获取值。然而,这确实是不可取的,因为一次删除一个项目必须花费 2 次写入。

那么有没有更好的方法,例如将元数据附加到 DynamoDB 操作,这些方法会被转移到流事件中,而不是写入表本身的数据的一部分?

amazon-dynamodb amazon-dynamodb-streams

3
推荐指数
1
解决办法
3958
查看次数

AWS DynamoDB 流:我可以将记录保留超过 24 小时吗?

我有一个表的 dynamoDB 流和 lambda 触发器。lambda 触发器基本上将 dynamoDB 表同步到 DocumentDB。

如果 DocumentDB 宕机超过 24 小时怎么办?如何将 dynamoDB 中发生的所有活动(放置、删除、更新)放回到流中,以便 lambda 触发器可以访问记录并将数据同步到 DocumentDB。

我看到 dynamoDB 流最多保留记录 24 小时。

disaster-recovery amazon-web-services amazon-dynamodb amazon-dynamodb-streams

3
推荐指数
1
解决办法
2683
查看次数

Lambda 函数中的过滤条件

我想使用 AWS CDK 在我的 lambda 上启用 DynamoDB 流,我可以这样做,但我也想在 lambda 上启用过滤条件

但我收到此错误:

过滤器模式定义无效。(服务:AWSLambda;状态代码:400;错误代码:InvalidParameterValueException

这是我从 DynamoDB 流中收到的事件:

{
    "input": {
        "Records": [
            {
                "eventID": "e92e0072a661a06df0e62e411f",
                "eventName": "INSERT",
                "eventVersion": "1.1",
                "eventSource": "aws:dynamodb",
                "awsRegion": "<region>",
                "dynamodb": {
                    "ApproximateCreationDateTime": 1639500357,
                    "Keys": {
                        "service": {
                            "S": "service"
                        },
                        "key": {
                            "S": "key"
                        }
                    },
                    "NewImage": {
                        "service": {
                            "S": "service"
                        },
                        "channel": {
                            "S": "email"
                        },
                        "key": {
                            "S": "key"
                        }
                    },
                    "SequenceNumber": "711500000000015864417",
                    "SizeBytes": 168,
                    "StreamViewType": "NEW_IMAGE"
                },
                "eventSourceARN": "arn:aws:dynamodb:<region>:<account>:table/table-name/stream/2021-12-14T13:00:29.888"
            }
        ]
    },
    "env": …
Run Code Online (Sandbox Code Playgroud)

amazon-dynamodb aws-lambda amazon-dynamodb-streams aws-cdk

3
推荐指数
1
解决办法
5945
查看次数

如何处理 DynamoDB 全局流

希望创建一个用于存储客户信息的 DynamoDB 全局表。我遇到的问题是我当前的模式是侦听此表上的更改并使用 Lambda 触发器发送电子邮件更新。

即您的个人资料信息已更改。如果这不是你..

我现在是否需要在每个区域都拥有该 Lambda,数据复制是否意味着它会针对每个区域触发?

amazon-dynamodb aws-lambda amazon-dynamodb-streams

2
推荐指数
1
解决办法
1844
查看次数

无法访问流 arn:aws:dynamodb:us-east-2:144091332251:table/users/stream/2019-06-05T08:00:51.428

我想在新记录插入dynamodb或现有记录更新后立即触发 lambda 函数。同样,我正在使用 awsdynamodb流功能。我试图这样做,但它使我低于错误。

Cannot access stream arn:aws:dynamodb:us-east-2:144091332251:table/users/stream/2019-06-05T08:00:51.428. Please ensure the role can perform the GetRecords, GetShardIterator, DescribeStream, and ListStreams Actions on your stream in IAM. (Service: AWSLambda; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: c88c1297-438b-11e1-a338-e57e98788b7c)
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb amazon-dynamodb-streams

2
推荐指数
1
解决办法
2088
查看次数

使用排序键的 DynamoDB 版本控制

任何人都使用https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-sort-keys.html中所述的排序键实现了版本控制?

尝试使用打字稿来实现这一点,以构建包含项目版本的数据库。有没有什么方法可以使用 updateItem 来执行此操作,或者是否需要 get + put 操作?

非常感谢任何帮助我入门或帮助的示例!

amazon-web-services nosql amazon-dynamodb amazon-dynamodb-streams

2
推荐指数
1
解决办法
2222
查看次数

AWS DynamoDB Stream python转换本机格式

我有一个由DynamoDB流触发的Lambda函数。我的问题是收到的事件的奇怪格式(每个键/值的类型)。

确实存在一种解决方法,可以将本机文档转换为本地python格式(无任何类型)。我正在寻找一种动态解决方案,因为将来我想将此lambda与其他DynamoDB表流(具有不同的格式(多个dict /列表级别))一起使用

例:

{
  "Records": [
    {
      "eventID": "1",
      "eventVersion": "1.0",
      "dynamodb": {
        "Keys": {
          "Id": {
            "N": "101"
          }
        },
        "NewImage": {
          "Message": {
            "S": "New item!"
          },
          "Id": {
            "N": "101"
          }
        },
        "StreamViewType": "NEW_AND_OLD_IMAGES",
        "SequenceNumber": "111",
        "SizeBytes": 26
      },
      "awsRegion": "us-west-2",
      "eventName": "INSERT",
      "eventSourceARN": "arn:aws:dynamodb:us-west-2:account-id:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899",
      "eventSource": "aws:dynamodb"
    },
    {
      "eventID": "2",
      "eventVersion": "1.0",
      "dynamodb": {
        "OldImage": {
          "Message": {
            "S": "New item!"
          },
          "Id": {
            "N": "101"
          }
        },
        "SequenceNumber": "222",
        "Keys": {
          "Id": {
            "N": …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services amazon-dynamodb-streams

1
推荐指数
1
解决办法
1331
查看次数

我什么时候应该使用 DynamoDB 触发器而不是用另一个触发器调用 Lambda?

我目前有一个正在更新 DynamoDB 表的 AWS Lambda 函数,并且我需要另一个需要在数据更新后运行的 Lambda 函数。在这种情况下,使用 DynamoDB 触发器而不是使用第一个触发器调用第二个 Lambda 有什么好处吗?

看来,编程调用可以让我更好地控制何时调用 Lambda(即,我可以在调用之前等待多个更新发生),并且从 DynamoDB Stream 读取数据需要花钱,而简单地调用 Lambda 则不需要。

那么,在这里使用触发器有什么好处吗?或者我自己调用 Lambda 会更好吗?

amazon-dynamodb aws-lambda amazon-dynamodb-streams

1
推荐指数
1
解决办法
1628
查看次数

在 YAML 中使用 Fn::GetAtt 时,流集合条目之间缺少逗号

我正在尝试在 YAML 中为 DynamoDB 添加事件流,DynamoDB 表是一个根据其部署到的环境而变化的变量,我用来Fn::GetAtt确定TABLE_NAME,但它给了我一个例外。

  1. 语法正确吗?
  2. 除了 YAML 之外,还有其他方法可以配置流吗Fn::GetAtt

例外:

missed comma between flow collection entries in "erverless.yml" at line 60, 
column28:Fn::GetAtt: [ ${self:custom.TABLE_NAME ...
Run Code Online (Sandbox Code Playgroud)

代码:

  custom:
      TABLE_NAME : mix of account + env + name
  events:
  - stream:
      type: dynamodb
      arn:
        Fn::GetAtt: [ ${self:custom.TABLE_NAME}, StreamArn ]
Run Code Online (Sandbox Code Playgroud)

yaml serverless-framework amazon-dynamodb-streams serverless

1
推荐指数
1
解决办法
2万
查看次数

如何将 Dynamodb 流 DynamoDBEvent 新图像或旧图像转换为我自己的具体对象类型 T,而无需手动映射?

我有一个从 DynamoDB 流事件触发的 lambda 函数。它接受的对象来自DynamoDBEventNugetAmazon.Lambda.DynamoDBEvents包。

public async Task FunctionHandler(DynamoDBEvent event, ILambdaContext context)
{
    foreach (var record in event.Records)
    {
        var newImage = event.Dynamodb.NewImage; // Or "OldImage" property
        var myObject = new MyObject();

        myObject.ItemId = newImage["ItemId"].N;
        myObject.IdList = newImage["IdList"].NS;
        myObject.CustomerName = newImage["CustomerName"].S;
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以轻松地将此事件转换为我自己的类,如下所示,例如:

public class MyObject 
{
    public int ItemId { get; set; }
    public List<int> IdList { get; set; }
    public string CustomerName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

无需创建自己的映射器来操作每种类型的每个单独属性的 DynamoDBEvent 对象?

该类AttributeValue包含许多不同的属性,DynamoDb …

c# amazon-dynamodb aws-lambda amazon-dynamodb-streams

0
推荐指数
1
解决办法
2891
查看次数