1. 程式人生 > >AWS Dynamodb 跨區域遷移資料方案(cross-region replication)

AWS Dynamodb 跨區域遷移資料方案(cross-region replication)

最近實在受不了中國訪問AWS首爾區域了 ,決定把整個環境遷移到新加坡,伺服器遷移倒是比較簡單,但資料庫遷移遇到很大的麻煩。

原以為DynamoDB 全域性表可以很容解決跨區域資料同步的問題,結果發現DynamoDB全域性表只能在為空表的前提下使用,即必須是新建的表。而不能說 用到中途把普通表改成支援多區域的全域性表。

文章目錄


這裡介紹遷移過程中找到的三種方案:

1 AWS Data Pipeline 方案

您可以使用 AWS Data Pipeline 將 DynamoDB 表中的資料匯出到 Amazon S3 儲存桶中的檔案。也可以使用該控制檯將 Amazon S3 中的資料匯入到同一 AWS 區域或不同區域中的 DynamoDB 表中。

簡單說就是AWS官方提供的DynamoDB資料匯出方南,會涉及到3個服務 Datapipeline EMR S3,會開啟3臺EC2作為資料傳輸處理的伺服器,注意費用,EMR開啟的伺服器都比較好。並沒有使用這種方案,因為AWS 提供教程 按照Datapipe 中Dynamodb匯出模板,EMR的申請EC2的AMI較低。連資源等申請不過,再加上許可權要找主賬號申請就沒有采用這種方案。

文件地址:https://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBPipeline.html

2 git上AWS的遷移工具包dynamodb-cross-region-library

git地址:https://github.com/awslabs/dynamodb-cross-region-library

這是基於Java環境的lib,這個lib支援使用DynamoDB流來保證24兩表同步更新,程式碼是2016年的,最近環境上的Java環境感覺都比較新 lib都編譯不過,所以也沒使用這種方案。

git clone 
mvn install
java -jar target/dynamodb-cross-region-replication-1.2.1.jar --sourceRegion <source_region> --sourceTable <source_table_name> --destinationRegion <destination_region> --destinationTable <destination_table_name>

3 Silvermine DynamoDB Table Sync

受到了第二種的啟發,於是在萬能npm上去找果然找到了想要的工具:Silvermine DynamoDB Table Sync

npm地址:https://www.npmjs.com/package/@silvermine/dynamodb-table-sync

這是一個完成度不高的工具,僅可以用於兩區域表差異對比並同步。並不能做到上兩種方案的支援實時流同步的問題,即最新的資料也會實時複製到新表。但因為本身資料量比較小,剛好滿足需求。這裡介紹下使用:

(1) 先確定你linux環境下配置有相應的AWS 根憑證,如ls ~/.aws/credentials (window環境也類似)因為該工具需要訪問DynamoDB 就必須要要有憑證。

(2) 全域性安裝

npm install -g silvermine-dynamodb-table-sync

(3) 使用

dynamodb-table-sync -m us-east-1:my-dynamodb-table -s eu-west-1:my-dynamodb-table
-m引數 主區域DynamoDB 即資料來源
-s引數 從區域DynamoDB 及目標區域
這裡後面可以帶兩個引數
--write-missing 如果兩區域間從區域缺少 則自動建立
--write-differing 如果兩區域從區域有差異則自動同步 

4 總結

如果是生產環境必須使用第一種方案保證遷移安全可靠,遇到問題可以提交AWS support解決。如果開發或待上線環境可以使用2或3方案。主要是用的是子賬號開許可權太麻煩,導致第一種用出一堆坑。