0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【DataPipeline】AWSアカウント跨ぎで、DynamoDBエクスポートデータのインポートでハマった話し

Posted at

やったこと

AWSアカウント「A」でやったこと

  1. DataPipelineで、DynamoDBからデータをエクスポート、S3に保存
  2. S3に保存されたデータをローカルにダウンロード

AWSアカウント「B」でやったこと

  1. ローカルにダウンロードしたデータをS3にアップロード
  2. DataPipelineで、S3からデータをインポートし、DynamoDBにインポート
  3. DataPipelineがFAIL

結論

エクスポートしてできたファイルの「manifest」を手動で編集して使用する必要あり

なぜ?

DataPipelineのS3<>DynamoDBのインポート/エクスポートは、同一バケットを想定してるっぽい。(元にそういった記事しか見つからなかった)
が、今回のようにAWSアカウントを跨ぐということは、バケット名は絶対に異なる。(バケット名はグローバルでユニークなので)
後々ようやく気づいたのだが、エクスポートしてできたファイルの中の1つ「manifest」には以下のような記述があった。

manifest
{"name":"DynamoDB-export","version":3,
"entries": [
{"url":"s3://[AWSアカウントAのバケット名]/2019-08-25-09-06-35/4622bd21-0a13-4d5a-b96f-f2897e39ef17","mandatory":true}
]}

AWSアカウント「B」で、DataPipelineを使用してインポートする際に、このファイルも参照していて、このファイルに書かれているバケットに対してインポートするファイルを探しているようだった。
AWSアカウント「B」でインポートする場合は、manifestにかかれているバケット名を修正しなければならない。
そして、S3へアップロードする際も、ディレクトリ名、インポートするファイル名は合わせないといけない。
もちろん、DynamoDBのスキーマ構造もである。

気づけばなんてことないんだけど、DataPipelineではあたかもワンストップでできるような見た目になっており、気付くまでだいぶ時間がかかった。

教訓:エクスポートされたデータをちゃんと確認しましょう

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?