Dynamodb 撞牆筆記 – 2 – 自架的 Dynamodb Server 怎麼 restart 後資料就消失

參考此篇 stackoverflow

原來是因為我用 Docker 架設 Dynamodb Server ,而它裡面預設跑 Dynamodb 的指令參數帶有 -inMemory,資料預設都存在記憶體內,所以重開之後自然資料都沒存著。

啟動參數需調整,加上 -sharedDb 使資料存到檔案,然後加上 -dbPath 指定路徑,才能把 Dynamo 資料存在硬碟,範例如下

-jar DynamoDBLocal.jar -sharedDb -dbPath /home/dynamodblocal/data/

而以我跑 Docker 來說, Container 建立時,我調整了兩個部分:

  1. 上面的啟動指令要覆寫預設的 CMD
  2. 把儲存的資料用 volume 接到 container 外頭,不然如果之後 create container 後資料會消失,存在 host 這邊比較方便

關於第 1. 點,想進一步了解,可參考文件 docker container create,也就是下面範例的 [COMMAND] [ARG…] 這部分。

$ docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]

最終參考範例如下

Docker Container 參考指令

docker run -d \
 -p 8001:8000 \
 -e AWS_ACCESS_KEY_ID=fakeMyKeyId \
 -e AWS_SECRET_ACCESS_KEY=fakeSecretAccessKey \
 -e AWS_REGION=us-west-2 \
 -v /YOUR_PATH/dynamo/data:/home/dynamodblocal/data \
 --name dynamo amazon/dynamodb-local:latest \
 -jar DynamoDBLocal.jar -sharedDb -dbPath /home/dynamodblocal/data/

我除了在最後面覆寫預設 CMD 外,也用 -v /YOUR_PATH/dynamo/data:/home/dynamodblocal/data 的方式,把 Dynamodb 存資料的資料夾接到外頭 host 這邊。


You Might Also Like

Leave a Reply

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料