aws-sdk-js交易操作未暴露给DocumentClient



我正在JS中开发一些业务管理软件,我发现自己需要使用DynamoDb进行ACID事务。幸运的是,AWS刚刚发布了transactGet和transactWrite API,涵盖了正确的用例!

我正在使用AWS.DynamoDb.DocumentClient对象进行其他调用,似乎事务处理操作没有公开给我使用。

我入侵了aws-sdk代码,发现了这样的接口导出("aws-sdk":"^2.368.0",document_client.d.js,第2076行(:

export interface TransactWriteItem {
/**
* A request to perform a check item operation.
*/
ConditionCheck?: ConditionCheck;
/**
* A request to perform a PutItem operation.
*/
Put?: Put;
/**
* A request to perform a DeleteItem operation.
*/
Delete?: Delete;
/**
* A request to perform an UpdateItem operation.
*/
Update?: Update;
}

然而,每当我尝试用这种方法调用客户端时,我都会返回一个Type错误,即:

TypeError: dynamoDb[action] is not a function

在本地,我可以破解sdk并公开所有内容,但在我的部署环境中不接受它。

我应该如何继续?

非常感谢!

编辑:如果有什么价值的话,那就是我用来打电话的代码:

dynamo-lib.js:

import AWS from "aws-sdk";
export function call(action, params) {
const dynamoDb = new AWS.DynamoDB.DocumentClient();
return dynamoDb[action](params).promise();
}

Lambda代码:

import * as dynamoDbLib from '../libs/dynamodb-lib';
import { success, failure } from '../libs/response-lib';
export default async function main(params, callback) {
try {
const result = await dynamoDbLib.call("transactWrite", params);
callback(null, success(result));
} catch (e) {
console.log(e);
callback(null, failure({"status": "Internal server error"}));
}
}

编辑2:文档客户端似乎真的不导出该方法。

AWS.DynamoDB.DocumentClient = AWS.util.inherit({
/**
* @api private
*/
operations: {
batchGetItem: 'batchGet',
batchWriteItem: 'batchWrite',
putItem: 'put',
getItem: 'get',
deleteItem: 'delete',
updateItem: 'update',
scan: 'scan',
query: 'query'
},
...

正如公认答案中所提到的,解决方法是直接从DynamoDB对象使用transactWriteItems方法。

谢谢你的帮助=D
干杯!

更新:

问题已解决

Github线程

AWS SDK目前不支持dynamodb文档客户端中的事务,我在github上提出了这个问题,目前的解决方法是不使用文档客户端

let aws=require("aws-sdk");
aws.config.update(
{
region:"us-east-1",
endpoint: "dynamodb.us-east-1.amazonaws.com"    
}
);
var dynamodb = new  aws.DynamoDB();

dynamodb.transactWriteItems();

还要确保您使用的是SDK v2.365.0和

更新aws-sdk包(>2.365(

使用var dynamodb = new aws.DynamoDB();

而不是var dynamodb = new aws.DynamoDB.DocumentClient();

最新更新