API TransactWriteItems завершается ошибкой для группы обновлений, число которой превышает 10. Ошибка: член должен иметь длину, меньшую или равную 10 - PullRequest
1 голос
/ 24 февраля 2020

Проблема API TransactWriteItems выдает приведенную ниже ошибку для группы обновлений, число которой превышает 10, даже если ожидается, что API будет работать до 25.

Согласно AWS TransactWriteItems API Документация:

TransactWriteItems - это синхронная операция записи, которая группирует до 25 запросов действий. Эти действия могут быть нацелены на элементы в разных таблицах, но не на разные AWS учетные записи или регионы, и никакие два действия не могут быть нацелены на один и тот же элемент. Например, вы не можете одновременно и ConditionCheck, и Update один и тот же элемент. Совокупный размер элементов в транзакции не может превышать 4 МБ.

Версия AWS SDK

"aws -sdk ":" ^ 2.624.0 "

Ошибка

message: 'Member must have length less than or equal to 10',
code: 'ValidationException',
time: 2020-02-24T05:07:02.795Z,
requestId: 'a3952ab2-593e-4164-ad2f-3a000e599cia',
statusCode: 400,
retryable: false,
retryDelay: 48.36097368479314 } 
'ValidationException*: Member must have length less than or equal to 10 at Request.extractError (node_modules/aws-sdk/lib/protocol/json.js:51:27)\n    at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:106:20)\n    at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:78:10)\n    at Request.emit (node_modules/aws-sdk/lib/request.js:683:14)\n    at Request.transition (node_modules/aws-sdk/lib/request.js:22:10)\n    at AcceptorStateMachine.runTo (node_modules/aws-sdk/lib/state_machine.js:14:12)\n    at node_modules/aws-sdk/lib/state_machine.js:26:10\n    at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:38:9)\n    at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:685:12)\n    at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:116:18)'

Код:

var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({
    'region': 'eu-west-1'
});

// Throws the error if the TransactItems array is > 10
var params = {
    TransactItems: [{
        Update: {
            Key: { "id": { "S": "ABC-XYABV2-2019" }},
            ExpressionAttributeNames: { "#s": "s" },
            ExpressionAttributeValues: { ":s": { "S": "OHIO" } },
            UpdateExpression: "SET #s = :s",
            TableName: "test-order-dev"
        }
    }, 
    ...
    ....
    .....
    {
        Update: {
            Key: { "id": { "S": "CDE-ZUABV2-2020" }},
            ExpressionAttributeNames: { "#s": "s" },
            ExpressionAttributeValues: { ":s": { "S": "OHIO" } },
            UpdateExpression: "SET #s = :s",
            TableName: "test-order-dev"
        }
    }
]
};
dynamodb.transactWriteItems(params, function (err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else console.log(data); // successful response
});

Я только что нашел одну AWS ссылку на форум , которая описывает ту же проблему и подсказки для использования последней версии SDK. Я на последней версии SDK, интересно, в чем может быть проблема. Поделитесь своими мыслями или решением, если оно существует: -)

1 Ответ

1 голос
/ 31 марта 2020

Вчера я столкнулся с этой проблемой при обновлении более 10 строк с использованием транзакций. Я обнаружил, что это проблема с моей локальной DynamodB, которую я установил, используя docker pull amazon/dynamodb-local. Это работало хорошо с 25 макс транзакциями при использовании онлайн БД. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...