ReplicatedWriteConflictException
TL;DR — Você escreveu em um item em uma tabela global multi-região fortemente consistente (MRSC) enquanto uma solicitação em outra região estava modificando o mesmo item. A forte consistência multirregional não permite que ambas as vitórias aconteçam, então uma gravação é rejeitada. O AWS documenta isso como passível de nova tentativa: faça backoff e tente novamente, e reduza a contenção entre regiões em itens importantes sempre que possível.
O que significa
ReplicatedWriteConflictException: One or more items in this request are
being modified by a request in another Region.As tabelas globais clássicas (eventualmente consistentes) aceitam escritas simultâneas em todos os lugares e depois se reconciliam com as vitórias do último escritor. As tabelas globais do MRSC fazem o oposto: uma gravação deve ser coordenada entre as regiões antes de ser reconhecida, portanto, duas regiões modificando o mesmo item ao mesmo tempo é um conflito genuíno - e um lado recebe esta exceção em vez de uma substituição silenciosa.
Por que isso acontece
- O mesmo item é gravado em várias regiões simultaneamente — duas implantações de aplicativos tratando o item como se fossem suas para atualização.
- Um item de coordenação quente — contadores, bloqueios ou itens de configuração singleton tocados por cada região são ímãs naturais de conflito.
- Repetidas tempestades entre regiões — novas tentativas simultâneas da mesma operação lógica de regiões diferentes continuam colidindo novamente.
Como corrigir
Tentar novamente com espera exponencial e jitter — o conflito é momentâneo; assim que a gravação da outra região for concluída, a nova tentativa continuará. A AWS marca este erro como passível de nova tentativa:
// let the SDK's adaptive retry handle it, or catch and back off: catch (e) { if (e.name === 'ReplicatedWriteConflictException') return retryWithBackoff(op); throw e; }Dê a cada item uma região de origem — encaminhe as gravações de uma dada chave por uma única região (por residência do usuário, tenant ou partição), mantendo as outras regiões majoritariamente de leitura. A contenção some quando só uma região altera um item.
Torne as atualizações concorrentes comutativas — atualizações de contador atômico (
ADD/SET x = x + :n) em atributos separados conflitam menos do que ciclos de leitura-modificação-escrita no item inteiro.Reverifique a intenção após perder a corrida — a outra Region mudou o item; um retry condicional (
ConditionExpressionem um atributo de versão) garante que sua escrita ainda é válida contra o novo estado.Roteie itens de coordenação quentes por uma única Region. Locks, contadores e blobs de configuração escritos a partir de toda Region são a fonte usual de conflito.
Inspecione no DynoTable
Compare o mesmo item entre Regions depois de um conflito — troque com ⌘P, abra a tabela com ⌘K e leia o item em cada Region réplica lado a lado. O staging (⌘S) permite preparar um retry condicional e revisar o diff antes do commit.
Estime o custo das escritas replicadas com a calculadora de preços antes de habilitar MRSC em uma tabela quente. Configure cada Region em Settings → Profiles com Test Connection. Veja Connect to AWS e Install.
Fontes
- How DynamoDB global tables work (verificado em 2026-07-13)
- Error handling with DynamoDB (verificado em 2026-07-13)
Erros relacionados
- TransactionConflictException — o primo de Region única: uma transação em andamento é dona do item.
- Incompatibilidade de versão da tabela global
- ReplicaAlreadyExistsException
- Aprenda: DynamoDB global tables
Referências
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- How DynamoDB global tables work — Amazon DynamoDB Developer Guide
- PutItem — Amazon DynamoDB API Reference
Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.