DynamoDB Streams 的變更資料擷取 - Amazon DynamoDB

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

DynamoDB Streams 的變更資料擷取

DynamoDB Streams 可擷取任何 DynamoDB 資料表中依時間順序排序的項目層級修改,並將此資訊存放於日誌中長達 24 小時。應用程式可以存取此日誌,並近乎即時地檢視資料項目修改前後的顯示內容。

靜態加密功能會加密 DynamoDB Streams 中的資料。如需詳細資訊,請參閱 DynamoDB 靜態加密

DynamoDB 串流是 DynamoDB 資料表中項目變更資訊的排序流程。當您在資料表啟用串流時,DynamoDB 會擷取資料表中資料項目的每項修改資訊。

應用程式每次建立、更新或刪除資料表中的項目時,DynamoDB Streams 都會使用已修改項目的主索引鍵屬性寫入串流紀錄。串流紀錄包含 DynamoDB 資料表中單一項目資料修改的相關資訊。您可以設定串流,讓串流紀錄擷取其他資訊,例如修改項目的「之前」與「之後」影像。

DynamoDB Streams 可協助確保下列事項:

  • 每個串流紀錄只在串流中出現一次。

  • 對於 DynamoDB 資料表中的每個修改項目,串流紀錄的出現順序與項目的實際修改順序相同。

DynamoDB Streams 會近乎即時地寫入串流紀錄,讓您可以建立使用這些串流並根據內容採取動作的應用程式。

DynamoDB Streams 的端點

AWS 為 DynamoDB 和動態資料庫 DynamoDB Streams 維護個別的端點。為了使用資料庫資料表與索引,應用程式必須能存取 DynamoDB 端點。為了讀取及處理 DynamoDB Streams 紀錄,應用程式必須能存取同一區域中的 DynamoDB Streams 端點。

DynamoDB Streams 端點的命名慣用格式為 streams.dynamodb.<region>.amazonaws.com。例如,如果使用端點 dynamodb.us-west-2.amazonaws.com 存取 DynamoDB,則將使用端點 streams.dynamodb.us-west-2.amazonaws.com 存取 DynamoDB Streams。

注意

如需 DynamoDB 和 DynamoDB Streams 區域與端點的完整清單,請參閱 AWS 一般參考 中的區域與端點

開 AWS 發套件會為 DynamoDB 和動態資料庫 DynamoDB Streams 提供個別的用戶端。視您需求的不同,應用程式可以存取 DynamoDB 端點、DynamoDB Streams 端點,或同時存取這兩種端點。若要連線到這兩種端點,您的應用程式必須具體化兩個用戶端:一個用於 DynamoDB,另一個用於 DynamoDB Streams。

啟用串流

當您使用 AWS CLI 或其中一個 AWS SDK 建立新資料表時,您可以在新資料表上啟用串流。您也可以在現有的資料表上啟用或停用串流,或變更串流的設定。DynamoDB Streams 會以非同步方式運作,因此若您啟用串流,也不會影響資料表的效能。

管理 DynamoDB Streams 最簡單的方式就是使用 AWS Management Console。

  1. 登入 AWS Management Console 並開啟 DynamoDB 支援主控台,網址為 https://console.aws.amazon.com/dynamodb/。

  2. 在 DynamoDB 主控台儀表板上,選擇 Tables (資料表),然後選取現有的資料表。

  3. 選擇 Exports and streams (匯出與串流) 索引標籤。

  4. DynamoDB 串流詳細資料區段中,選擇開啟

  5. 在 [開啟 DynamoDB 串流] 頁面上,選擇修改表格中的資料時要寫入串流的資訊:

    • 僅限金鑰屬性:僅已修改項目的金鑰屬性。

    • 新映像:在修改後出現的整個項目。

    • 舊映像:在修改前出現的整個項目。

    • 新舊映像:項目的新舊映像。

    如果設定符合您的需求,請選擇 [開啟串流]。

  6. (選擇性) 若要停用現有串流,請選擇 DynamoDB 串流詳細資料下的關閉

您也可以使用 CreateTableUpdateTable API 操作來啟用或修改串流。StreamSpecification 參數可決定串流的設定方式:

  • StreamEnabled:指定是否啟用 (true) 或停用 (false) 資料表的串流。

  • StreamViewType:指定每次修改資料表資料時,將會寫入串流的資訊:

    • KEYS_ONLY:僅已修改項目的索引鍵屬性。

    • NEW_IMAGE:在修改後出現的整個項目。

    • OLD_IMAGE:在修改前出現的整個項目。

    • NEW_AND_OLD_IMAGES:項目的新舊映像。

您可以隨時啟用或停用串流。但若嘗試在已有串流的資料表中啟用串流,就會收到 ResourceInUseException。若嘗試在沒有串流的資料表中停用串流,就會收到 ValidationException

當您將 StreamEnabled 設定為 true 時,DynamoDB 會建立新的串流,並對其指派唯一的串流描述項。如果您停用再重新啟用資料表串流,則會使用不同的串流描述項建立新的串流。

每個串流都可依 Amazon 資源名稱 (ARN) 唯一識別。以下是名為 TestTable 的 DynamoDB 資料表上串流的 ARN 範例。

arn:aws:dynamodb:us-west-2:111122223333:table/TestTable/stream/2015-05-11T21:21:33.291

若要判斷資料表的最新串流描述項,請發出 DynamoDB DescribeTable 請求,並尋找回應中的 LatestStreamArn 元素。

注意

一旦串流設定完畢,就無法再編輯 StreamViewType。若您需要變更已設定完畢的串流,就必須停用目前的串流並建立一個新的串流。

讀取及處理串流

若要讀取及處理串流,您的應用程式必須連線到 DynamoDB Streams 端點,並發出 API 請求。

串流由串流紀錄所組成。每個串流紀錄均代表串流所屬之 DynamoDB 資料表中的一項資料修改。每個串流紀錄會獲派一個序號,其反映出紀錄發佈至串流的順序。

串流紀錄會整理成群組,即碎片。每個碎片皆代表多個串流紀錄的容器,並含有存取及重複處理這些紀錄所需的資訊。碎片內的串流紀錄會在 24 小時後自動移除。

碎片為暫時性:系統會視需要自動建立及刪除這些碎片。任何碎片還可分割成多個新的碎片,這也會自動發生 (父碎片也可能只有一個子碎片。) 碎片可能會為了回應其父資料表上的上層寫入活動而分割,讓應用程式可同時處理多個碎片中的紀錄。

如果您停用串流,所有開啟的碎片都會關閉。串流中的資料在 24 小時內仍可供讀取。

由於碎片具有系屬關係 (父系與子系),因此應用程式一律必須先處理父碎片,再處理子碎片。這有利於確保串流紀錄也按照正確順序處理。(如果您使用的是 DynamoDB Streams Kinesis 轉接器,則系統會為您處理這個問題。應用程式會依正確順序處理碎片和串流紀錄。除了當應用程式正在執行時分割的碎片,其還會自動處理新的或過期碎片。如需詳細資訊,請參閱 使用 DynamoDB Streams Kinesis 轉接器處理串流記錄。)

下圖說明串流、串流中的碎片及碎片中的串流紀錄之間的關係。

注意

如果您執行的 PutItemUpdateItem 操作不會變更項目中的任何資料,則 DynamoDB Streams 不會寫入該操作的串流紀錄。

若要存取串流及處理其中的串流紀錄,您必須執行下列操作:

  • 判斷您要存取之串流的唯一 ARN。

  • 判斷串流中包含您感興趣之串流紀錄的碎片。

  • 存取碎片及擷取您要的串流紀錄。

注意

最多不得同時從同一個串流碎片讀取 2 個以上的處理程序。每個碎片具有 2 個以上的讀取器會導致調節。

DynamoDB Streams API 提供下列可讓應用程式使用的動作:

  • ListStreams:傳回目前帳戶及端點的串流描述項清單。您可以只選擇性地請求特定資料表名稱的串流描述項。

  • DescribeStream:傳回指定串流的詳細資訊。輸出包含與串流相關聯的碎片清單,包括碎片 ID。

  • GetShardIterator:傳回碎片疊代運算,其描述了碎片內的位置。您可以請求疊代運算提供串流中最舊點、最新點或特定點的存取權。

  • GetRecords:傳回指定碎片內的串流紀錄。您必須提供從 GetShardIterator 請求傳回的碎片疊代運算。

如需這些 API 操作的完整說明 (包括範例請求與回應),請參閱《Amazon DynamoDB Streams API 參考》。

DynamoDB Streams 的資料保留限制

DynamoDB Streams 中所有資料的生命週期皆為 24 小時。您可以擷取並分析任何指定資料表過去 24 小時的活動。但超過 24 小時的資料容易隨時受到裁剪 (移除) 的影響。

如果您停用資料表的串流,則串流中的資料在 24 小時內仍可供讀取。過了這段時間後,資料就會過期,且串流紀錄也會自動刪除。沒有手動刪除現有串流的機制。您必須等到保留限制過期 (24 小時),所有串流紀錄才會被刪除。