【发布时间】:2021-08-13 14:53:19
【问题描述】:
我知道之前有人问过这个问题,并且根据这些答案,我很确定我所拥有的是正确的。在这一点上,老实说,我觉得我错过了一些超级基本的东西。
DynamoDB 连接器已设置:
const AWS = require('aws-sdk');
// set up dynamoDB
const dynamoDb = new AWS.DynamoDB.DocumentClient();
我已经在无服务器中定义了一个带有键的 DynamoDB 表:
CampaignStreamDynamoDbTable:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
AttributeDefinitions:
- AttributeName: "id"
AttributeType: "S"
- AttributeName: "campaign_id"
AttributeType: "S"
KeySchema:
- AttributeName: "id"
KeyType: "HASH"
- AttributeName: "campaign_id"
KeyType: "RANGE"
StreamSpecification:
StreamViewType: "NEW_AND_OLD_IMAGES"
TableName: ${self:provider.environment.FS_CAMPAIGN_STREAM_TABLE}
我有一个函数可以更新包含主键和范围键的表(第三个参数是我更新测试的状态):
let update_test_status = async (test_id, campaign_key, test_status) => {
console.info("Updating bulk test " + test_id + " with campaign_key "+campaign_key+" to " + test_status);
let b = true;
const timestamp = new Date().getTime();
const update_params = {
TableName: process.env.FS_CAMPAIGN_STREAM_TABLE,
Key: {
id: test_id,
campaign_key: campaign_key
},
ProjectionExpression: "#s",
ExpressionAttributeNames: {"#s": "status"},
UpdateExpression: "set #s=:s, updated_at=:u",
ExpressionAttributeValues: {
":s": test_status,
":u": timestamp,
},
ReturnValues: "UPDATED_NEW"
};
try {
let results = await dynamoDb.update(update_params).promise();
} catch (error) {
console.error("Could not update the record: " + error);
test_status = "error";
console.error("Links processed, but error updating record in DB");
b = false;
}
return b;
};
try {
let results = await dynamoDb.update(update_params).promise();
} catch (error) {
console.error("Could not update the record: " + error);
test_status = "error";
console.error("Links processed, but error updating record in DB");
b = false;
}
return b;
};
我这样称呼这个函数:
await update_test_status(item.id.S, item.campaign_key.S, "processing")
其中 item 是 DynamoDB 记录
注意事项:
我已经验证了 id 和 key 都被传递给了 update 方法。 我试过带引号和不带引号的 KEY 参数
【问题讨论】:
标签: amazon-dynamodb