AWS CLI ile DynamoDB TransactWriteItems

İşlemin tamamı aws dynamodb transact-write-items'a tek bir --transact-items JSON dizisi olarak gider; dolayısıyla ilginç kısım CLI'nin kenarlarıdır: tırnaklamanın nerede bozulduğu, çıkış kodunun ne anlama geldiği ve varsayılan hata çıktısının bir iptali ayıklamak için gereken alanı düşürdüğü gerçeği. Bir işlemin size ne kazandırdığı her SDK'da aynıdır.

Kod

aws dynamodb transact-write-items \
  --transact-items '[
    {
      "Update": {
        "TableName": "Music",
        "Key": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}},
        "UpdateExpression": "SET #upd0 = #upd0 - :one",
        "ConditionExpression": "#upd0 >= :one",
        "ExpressionAttributeNames": {"#upd0": "Awards"},
        "ExpressionAttributeValues": {":one": {"N": "1"}}
      }
    },
    {
      "Update": {
        "TableName": "Music",
        "Key": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "A Mis Abuelos"}},
        "UpdateExpression": "SET #upd0 = if_not_exists(#upd0, :zero) + :one",
        "ExpressionAttributeNames": {"#upd0": "Awards"},
        "ExpressionAttributeValues": {":one": {"N": "1"}, ":zero": {"N": "0"}}
      }
    }
  ]'

İşlenen bir işlem hiçbir şey yazdırmaz ve 0 ile çıkar. Kontrol edilecek bir yanıt gövdesi yoktur, dolayısıyla bir betikte sonuç çıkış kodudur.

Açıklama

  • --transact-items — 100'e kadar Put / Update / Delete / ConditionCheck eylemi, toplamda 4 MB, değerler DynamoDB JSON biçiminde. Eylemler aynı hesap ve bölgedeki tablolara yayılabilir ve hiçbir ikisi aynı öğeyi hedefleyemez.

  • Üç çıkış kodu, üç farklı başarısızlık. 0 işlendi. 252, CLI'nin kendi parametre doğrulamasının isteği reddettiği ve hiçbir şeyin gönderilmediği anlamına gelir. 254, DynamoDB'nin yanıt verip hayır dediği anlamına gelir. Bu ayrım üzerinden dallanmaya değer: 252 JSON'unuzdaki bir hatadır, 254 ise başarısız olmasını beklediğiniz bir koşul olabilir.

  • Varsayılan hata biçimi eylem başına nedenleri düşürür. aws-cli v2 özeti yazdırır, sonra ayrıntıyı sakladığını söyler:

    aws: [ERROR]: An error occurred (TransactionCanceledException) when calling the TransactWriteItems operation: Transaction cancelled, please refer cancellation reasons for specific reasons [ConditionalCheckFailed, None]
    
    Additional error details:
    CancellationReasons: <complex value>
    Use "--cli-error-format json" or another error format to see the full details.

    Aynı komutu --cli-error-format json ile yeniden çalıştırın; yapı, eylem başına bir girdi olacak şekilde ve --transact-items sırasında, bozulmadan gelir:

    {
        "Message": "Transaction cancelled, please refer cancellation reasons for specific reasons [ConditionalCheckFailed, None]",
        "Code": "TransactionCanceledException",
        "CancellationReasons": [
            {
                "Code": "ConditionalCheckFailed",
                "Message": "The conditional request failed"
            },
            {
                "Code": "None"
            }
        ]
    }

    Burada ilk güncellemenin Awards >= 1 koşulu başarısız oldu; None ikinci eylemi masum olarak işaretler ve hiç Message alanı taşımadığına dikkat edin. Diğer her kod TransactionCanceledException sayfasında çözümleniyor.

  • Bir öğeyi iki kez hedeflemek bir iptal değildir. Hiçbir şey denenmeden önce doğrulamada başarısız olur; yazdırılacak neden olmamasının sebebi de budur:

    aws: [ERROR]: An error occurred (ValidationException) when calling the TransactWriteItems operation: Transaction request cannot include multiple operations on one item
  • ConditionCheck — işlemin değiştirmediği bir öğe üzerinde bir koşul öne sürer ve başarısız olursa işlemin tamamını veto eder.

  • --client-request-token — sabit bir belirteç, yeniden çalıştırmaları 10 dakika boyunca idempotent kılar. Aynı belirteci herhangi bir parametre değişmiş hâlde yeniden kullanın; DynamoDB yeni yükü sessizce uygulamak yerine IdempotentParameterMismatch döndürür.

  • Diziyi bir dosyada tutun. --transact-items file://transaction.json kabuk tırnaklamasını tamamen aradan çıkarır ve dosyanın farkı alınabilir.

2× kabuktan ölçülebilir

Aynı tek öğelik güncellemeyi iki kez çalıştırın, bir kez işlem içinde bir kez dışında, ikisini de --return-consumed-capacity TOTAL ile. DynamoDB Local, işlemsel yazma için 2.0, düz olan için 1.0 kapasite birimi bildirir: hazırlık ve işleme, her biri ayrı faturalanır.

Varsayılan olarak bir işleme uzanmaya karşı tüm argüman budur. Tek bir öğe üzerinde atomiklik için elinizde zaten daha ucuz bir araç var: bir kez faturalanan koşullu yazma. Bunu milyonlarca kez yapan bir iş yükünü fiyatlandırmak için DynamoDB fiyatlandırma hesaplayıcısı ikiye katlanmış yazma sayısını doğrudan alır. Bırakmak istediğiniz kısım kabukta DynamoDB JSON kurmaksa, DynoTable öğeleri gerçek bir tabloya karşı düzenler ve size ürettiği ifadeyi gösterir.

İlgili örnekler

Kaynaklar

En son 2026-07-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.