

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon DynamoDB 串流作為 EventBridge 管道的來源
<a name="eb-pipes-dynamodb"></a>

您可以使用 EventBridge 接管來接收 DynamoDB 串流中的記錄。然後，您可以選擇性地篩選或增強這些記錄，然後再將它們傳送到目標進行處理。您可以在設定管道時選擇 Amazon DynamoDB Streams 的特定設定。當將資料傳送至目的地時，EventBridge 管道會維護資料串流中的記錄順序。

**重要**  
停用做為管道來源的 DynamoDB 串流會導致該管道變得無法使用，即使您之後重新啟用串流也是如此。發生這種情況的原因是：  
您無法停止、啟動或更新其來源已停用的管道。
建立後，您無法使用新來源更新管道。當您重新啟用 DynamoDB 串流時，該串流會指派一個新的 Amazon Resource Name (ARN)，且不再與您的管道相關聯。
如果您確實重新啟用 DynamoDB 串流，則需要使用串流的新 ARN 建立新管道。

**範例事件**

下列範例事件顯示管道接收的資訊。您可以使用此事件來建立和篩選事件模式，或定義輸入轉換。並非所有欄位都可以篩選。如需有關所能篩選欄位的詳細資訊，請參閱 [Amazon EventBridge 管道中的事件篩選](eb-pipes-event-filtering.md)。

```
[
  {
    "eventID": "1",
    "eventVersion": "1.0",
    "dynamodb": {
      "Keys": {
        "Id": {
          "N": "101"
        }
      },
      "NewImage": {
        "Message": {
          "S": "New item!"
        },
        "Id": {
          "N": "101"
        }
      },
      "StreamViewType": "NEW_AND_OLD_IMAGES",
      "SequenceNumber": "111",
      "SizeBytes": 26
    },
    "awsRegion": "us-west-2",
    "eventName": "INSERT",
    "eventSourceARN": "arn:aws:dynamodb:us-east-1:111122223333:table/EventSourceTable",
    "eventSource": "aws:dynamodb"
  },
  {
    "eventID": "2",
    "eventVersion": "1.0",
    "dynamodb": {
      "OldImage": {
        "Message": {
          "S": "New item!"
        },
        "Id": {
          "N": "101"
        }
      },
      "SequenceNumber": "222",
      "Keys": {
        "Id": {
          "N": "101"
        }
      },
      "SizeBytes": 59,
      "NewImage": {
        "Message": {
          "S": "This item has changed"
        },
        "Id": {
          "N": "101"
        }
      },
      "StreamViewType": "NEW_AND_OLD_IMAGES"
    },
    "awsRegion": "us-west-2",
    "eventName": "MODIFY",
    "eventSourceARN": "arn:aws:dynamodb:us-east-1:111122223333:table/EventSourceTable",
    "eventSource": "aws:dynamodb"
  }
]
```

## 輪詢和批次處理串流
<a name="pipes-ddb-polling"></a>

EventBridge 會輪詢您 DynamoDB 串流中的碎片，其記錄的基本速率為每秒 4 次。當記錄可用時，EventBridge 會處理事件，並等待結果。如果處理成功，EventBridge 會恢復輪詢，直到收到多筆記錄。

EventBridge 預設會在記錄可用時立即調用管道。如果 EventBridge 從來源中讀取的批次之中只有一筆記錄，只會處理一筆事件。為避免處理少量記錄，您可讓管道設定批次間隔，要求管道緩衝記錄最長達五分鐘。處理事件之前，EventBridge 會繼續從來源中讀取記錄，直到收集到完整批次、批次間隔到期或者批次達到 6 MB 的承載限制。

**重要**  
管道將至少從 DynamoDB 將串流記錄交付至 Amazon SQS 一次。為了確保不會捨棄任何記錄，建議您設定最長存留期短於 DynamoDB 串流保留期間的重試政策。一般而言，DynamoDB 串流會保留事件 24 小時。

您還可以透過並行處理來自每個碎片的多個批次來增加並行性。EventBridge 可同時處理每個碎片中最多 10 個批次。如果增加每個碎片的並行批次數量，EventBridge 仍會確保在分割區索引鍵層級進行依序處理。

規劃 `ParallelizationFactor` 設定來同時處理 Kinesis 或 DynamoDB 資料串流的一個碎片與多個管道執行。您可以透過從 1 (預設) 到 10 的並行化因子指定 EventBridge 從碎片輪詢的並行批次數。例如，當 `ParallelizationFactor` 設定為 2 時，您最多可以有 200 個並行 EventBridge 管道執行，來處理 100 個 Kinesis 資料碎片。當資料量急劇波動並且 `IteratorAge` 高時，這有助於縱向擴展處理輸送量。請注意，如果您使用 Kinesis 彙總，則並行化因子將不起作用。

## 輪詢和串流開始位置
<a name="pipes-ddb-stream-start-position"></a>

請注意，建立和更新管道期間的串流輪詢最終會一致。
+ 在建立管道期間，從串流開始輪詢事件可能需要幾分鐘時間。
+ 在更新管道資源輪訓組態期間，從串流停止並重新開始輪詢事件可能需要幾分鐘時間。

這表示如果您指定 `LATEST` 當作串流的開始位置，管道可能會在建立或更新期間遺漏事件。若要確保沒有遺漏任何事件，請將串流開始位置指定為 `TRIM_HORIZON`。

## 報告批次項目失敗
<a name="pipes-ddb-batch-failures"></a>

EventBridge 取用和處理來源的串流資料時，依預設，只有在批次成功完成時，其檢查點才會到批次的最高序號。若要避免重新處理失敗批次中成功處理過的訊息，您可以設定擴充或目標，傳回哪些訊息成功，哪些失敗的物件。我們將其稱為部分批次回應。

如需詳細資訊，請參閱[部分批次失敗](eb-pipes-batching-concurrency.md#pipes-partial-batch-failure)。

### 成功與失敗條件
<a name="pipes-ddb-batch-failures-conditions"></a>

如果您傳回下列任一項目，EventBridge 會將批次視為完全成功：
+ 空白 `batchItemFailure` 清單
+ Null `batchItemFailure` 清單
+ 空白 `EventResponse`
+ Null `EventResponse`

如果您傳回下列任一項目，EventBridge 會將批次視為完全失敗：
+ 空白字串 `itemIdentifier`
+ Null `itemIdentifier`
+ 具有錯誤金鑰名稱的 `itemIdentifier`

EventBridge 會根據您的重試策略來重試失敗。