Por que minha chamada de API TransactWriteItems falha no Amazon DynamoDB?
Minha chamada de API TransactWriteItems falha no Amazon DynamoDB. Quero saber a causa raiz do problema.
Resolução
A solicitação da API TransactWriteItems pode falhar ou ser rejeitada pelo DynamoDB por vários motivos. Consulte as seguintes resoluções para as etapas de solução de problemas.
A expressão de condição contém uma condição que não foi atendida
Se uma condição que você definiu para uma das operações em sua solicitação TransactWriteItems não for atendida, todas as operações falharão. A solicitação TransactWriteItems é uma operação de gravação síncrona que agrupa até 25 solicitações de ação. Todas as solicitações de ação são bem-sucedidas ou todas elas falham.
Se sua solicitação falhar devido a esse problema, você receberá uma mensagem de erro semelhante à seguinte:
"message": "Transaction cancelled, please refer cancellation reasons for specific reasons [ConditionalCheckFailed, None, None, None] (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: TransactionCanceledException;..."
Para resolver esse problema, verifique se todas as condições que você definiu para sua solicitação foram atendidas.
A tabela com a qual você está trabalhando está em uma região ou conta diferente
As solicitações TransactWriteItems permitem que você trabalhe com itens em tabelas diferentes. Mas você só pode trabalhar com tabelas que estão na mesma região e conta da AWS que enviou a solicitação. Para resolver esse problema, trabalhe somente com tabelas que estão na mesma região e conta da AWS a partir da qual você fez a solicitação TransactWriteItems.
O mesmo item é manipulado por várias ações na operação TransactWriteItems
Se mais de uma ação na operação TransactWriteItems manipular o mesmo item, a solicitação falhará e você receberá uma mensagem de erro semelhante à seguinte:
“A solicitação de transação não pode incluir várias operações em um item”
Por exemplo, se TransactWriteItems tentar executar uma operação ConditionCheck e uma operação Put no mesmo item, a solicitação falhará com uma TransactionConflictException. Você pode monitorar essa exceção com a métrica TransactionConflict para sua tabela do DynamoDB no Amazon CloudWatch.
Conflito entre solicitações simultâneas de TransactWriteItems
Um conflito transacional ocorre devido a solicitações simultâneas em nível de item para um item em diversas transações. Os conflitos de transação podem ocorrer pelos seguintes motivos:
- Uma solicitação PutItem, UpdateItem ou DeleteItem para um item entra em conflito com uma solicitação TransactWriteItems em andamento que inclui o mesmo item.
- Um item em uma solicitação TransactWriteItems faz parte de outra solicitação TransactWriteItems em andamento.
Se uma solicitação PutItem, UpdateItem ou DeleteItem for rejeitada por esse motivo, a solicitação falhará com uma TransactionConflictException. Mas se uma solicitação em nível de item em TransactWriteItems ou TransactGetItems for rejeitada por um motivo diferente, a solicitação falhará com uma TransactionCanceledException.
Não há capacidade provisionada suficiente para concluir a transação
Se você invocar a solicitação TransactWriteItems quando não houver capacidade provisionada suficiente, a tabela do DynamoDB sofrerá controle de utilização. Para obter mais informações sobre controle de utilização, consulte Por que minha tabela sob demanda do DynamoDB está sofrendo controle de utilização? e Por que minha tabela provisionada do Amazon DynamoDB está sofrendo controle de utilização?
As transações falham devido à exceção IdempotentParameterMismatch
Você pode incluir um token de cliente opcional em sua solicitação TransactWriteItems para garantir que as solicitações sejam idempotentes. Transações idempotentes podem ajudar a evitar erros de aplicação quando a mesma operação é enviada várias vezes devido a um tempo limite de conexão ou a outros problemas de conectividade.
Um token de cliente é válido por 10 minutos após o término da solicitação que o utiliza. Se a solicitação com esse token se repetir dentro da janela de 10 minutos, mas alterar algum parâmetro na transação, o DynamoDB retornará uma exceção IdempotentParameterMismatch.
Ocorreu um ValidationError
Se o tamanho de um item ficar maior que 400 KB ou um Índice secundário local (LSI) ficar muito grande, você terá um ValidationError. O DynamoDB limita o tamanho de cada item que você pode armazenar em uma tabela. Se sua aplicação precisar armazenar mais dados em um item do que o limite de tamanho permite, compacte um ou mais dos atributos maiores. Ou divida o item grande em vários itens menores, indexados por chaves de classificação. Você também pode armazenar o item como um objeto em um bucket do Amazon Simple Storage Service (Amazon S3). Depois de fazer isso, você pode armazenar o identificador de objeto do Amazon S3 em seu item do DynamoDB. Para obter mais informações, consulte as Práticas recomendadas para armazenar itens e atributos grandes.
Erros de validação também podem ocorrer devido às alterações feitas pela transação. Isso significa que os parâmetros na solicitação não atendem a uma ou mais restrições especificadas pelo serviço do DynamoDB. Para obter mais informações sobre os tipos de restrições e suas mensagens de erro associadas, consulte a documentação da Classe TransactionCanceledException.
O tamanho agregado dos itens em uma transação excede 4 MB
A operação TransactWriteItems não pode exceder 4 MB. Esse é um limite rígido. Para obter mais informações, consulte as Transações do DynamoDB.
Ocorreu um erro 4xx
Um erro do usuário, como um formato de dados inválido, pode ocorrer por vários motivos. Por exemplo, você pode receber um erro 4xx para um erro ResourceNotFoundException porque a operação TransactWriteItems não consegue encontrar a tabela ou o índice subjacente do DynamoDB. Ou a tabela ou o índice do DynamoDB pode não ter o status ATIVO.
Observação: Quando você usa o AWS SDK para Java, o DynamoDB lista os motivos do cancelamento na propriedade CancellationReasons. Essa propriedade não está definida para outras linguagens do SDK. Os motivos do cancelamento da transação estão listados na ordem dos itens solicitados.
Ocorreu um erro 5xx
As transações também podem falhar devido a erros do sistema que são registrados como erros 5xx. Você recebe esses erros quando o serviço não consegue atender à solicitação. Esses erros podem ocorrer por vários motivos, como problemas transitórios de rede na frota, problemas de infraestrutura, problemas relacionados ao nó de armazenamento e diversos outros. Para obter mais informações, consulte Solução de problemas para erros internos do servidor no Amazon DynamoDB.
Informações relacionadas
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um mês
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano