我试图建立一个非常简单的表格,就像在这个例子中一样,但它不起作用。当我在 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
我有一个 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) 我打算使用 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,另一个删除项目,流只会__modifiedBy从OLD_IMAGE包含在流事件中的获取值。然而,这确实是不可取的,因为一次删除一个项目必须花费 2 次写入。
那么有没有更好的方法,例如将元数据附加到 DynamoDB 操作,这些方法会被转移到流事件中,而不是写入表本身的数据的一部分?
我有一个表的 dynamoDB 流和 lambda 触发器。lambda 触发器基本上将 dynamoDB 表同步到 DocumentDB。
如果 DocumentDB 宕机超过 24 小时怎么办?如何将 dynamoDB 中发生的所有活动(放置、删除、更新)放回到流中,以便 lambda 触发器可以访问记录并将数据同步到 DocumentDB。
我看到 dynamoDB 流最多保留记录 24 小时。
disaster-recovery amazon-web-services amazon-dynamodb amazon-dynamodb-streams
我想使用 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) 希望创建一个用于存储客户信息的 DynamoDB 全局表。我遇到的问题是我当前的模式是侦听此表上的更改并使用 Lambda 触发器发送电子邮件更新。
即您的个人资料信息已更改。如果这不是你..
我现在是否需要在每个区域都拥有该 Lambda,数据复制是否意味着它会针对每个区域触发?
我想在新记录插入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) 任何人都使用https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-sort-keys.html中所述的排序键实现了版本控制?
尝试使用打字稿来实现这一点,以构建包含项目版本的数据库。有没有什么方法可以使用 updateItem 来执行此操作,或者是否需要 get + put 操作?
非常感谢任何帮助我入门或帮助的示例!
amazon-web-services nosql amazon-dynamodb amazon-dynamodb-streams
我有一个由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) 我目前有一个正在更新 DynamoDB 表的 AWS Lambda 函数,并且我需要另一个需要在数据更新后运行的 Lambda 函数。在这种情况下,使用 DynamoDB 触发器而不是使用第一个触发器调用第二个 Lambda 有什么好处吗?
看来,编程调用可以让我更好地控制何时调用 Lambda(即,我可以在调用之前等待多个更新发生),并且从 DynamoDB Stream 读取数据需要花钱,而简单地调用 Lambda 则不需要。
那么,在这里使用触发器有什么好处吗?或者我自己调用 Lambda 会更好吗?
我正在尝试在 YAML 中为 DynamoDB 添加事件流,DynamoDB 表是一个根据其部署到的环境而变化的变量,我用来Fn::GetAtt确定TABLE_NAME,但它给了我一个例外。
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
我有一个从 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 …
amazon-dynamodb ×10
aws-lambda ×4
api-gateway ×1
aws-cdk ×1
c# ×1
nosql ×1
python ×1
serverless ×1
yaml ×1