Amazon DynamoDBのExport/ImportでAWSアカウントを跨ごうとして苦戦した話

Amazon DynamoDBのExport/ImportでAWSアカウントを跨ごうとして苦戦した話:

先日、DynamoDBを別のAWSアカウントに移す必要性が発生しました。AWS Data PipelineによるExportとImportで対応しようとしたのですが、AWSアカウントを跨ごうとしてハマったのでメモしておきます


移行できなかった構成



fig01.png


最初、このような構成・手順でデータを移そうとしましたが、失敗しました

(1) Data Pipelineを利用して、移行元DBのデータをS3にExport

(2) Exportされたファイルを手元の端末にダウンロード

(3) 移行先のAWSアカウントにログインし、ExportされたファイルをS3に保存

(4) Data Pipelineを利用して、移行先のDBへデータをImport

この方法では、(4)のImport中にエラーが出て失敗してしまいました。いくつか設定を変えて試してみましたが、解決できなかったので、別の構成を試すことにしました


移行できた構成



fig02.png


こちらの構成・手順で、無事移行できました

(1) Data Pipelineを利用して、移行元DBのデータをS3にExport

(2)(3) Data Pipelineを利用して、移行元AWSアカウントのS3にあるファイルをソースとして指定し、DynamoDBへImport

この構成をとるには、移行先AWSアカウントのEC2にアタッチされたIAM Roleが、移行元AWSアカウントのS3へアクセスできる必要があります。これにはいくつかの方法がありますが、こちらの記事を参考にバケットポリシーで許可しました(記事中の「2. バケットポリシーの許可」を採用しました)。EC2にアタッチされているIAM Role名がデフォルトのDataPipelineDefaultResourceRoleだとすると、バケットポリシーは以下のようになります。s3-bucket-name-in-123456789012は自身のバケット名に置き換えます

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
        { 
            "Sid": "Example", 
            "Effect": "Allow", 
            "Principal": { 
                "AWS": "arn:aws:iam::098765432109:role/DataPipelineDefaultResourceRole" 
            }, 
            "Action": "s3:*", 
            "Resource": [ 
                "arn:aws:s3:::s3-bucket-name-in-123456789012/*", 
                "arn:aws:s3:::s3-bucket-name-in-123456789012" 
            ] 
        } 
    ] 
} 
Actionは上記の例では全て許可していますが、DynamoDBへのImportに必要なActionだけに絞ることもできそうです

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)