やったこと
AWSアカウント「A」でやったこと
- DataPipelineで、DynamoDBからデータをエクスポート、S3に保存
- S3に保存されたデータをローカルにダウンロード
AWSアカウント「B」でやったこと
- ローカルにダウンロードしたデータをS3にアップロード
- DataPipelineで、S3からデータをインポートし、DynamoDBにインポート
- DataPipelineがFAIL
結論
エクスポートしてできたファイルの「manifest」を手動で編集して使用する必要あり
なぜ?
DataPipelineのS3<>DynamoDBのインポート/エクスポートは、同一バケットを想定してるっぽい。(元にそういった記事しか見つからなかった)
が、今回のようにAWSアカウントを跨ぐということは、バケット名は絶対に異なる。(バケット名はグローバルでユニークなので)
後々ようやく気づいたのだが、エクスポートしてできたファイルの中の1つ「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ではあたかもワンストップでできるような見た目になっており、気付くまでだいぶ時間がかかった。
教訓:エクスポートされたデータをちゃんと確認しましょう