0
0

More than 1 year has passed since last update.

EC2を使用して、別アカウントのS3バケットからオブジェクトを移行する方法

Last updated at Posted at 2022-02-25

はじめに

S3間で40TB以上のデータ移行が必要になり、普通にやると約2日かかる。
そこで、tmuxを使用しセッションが切れても実行し続ける環境をEC2インスタンス上で構築しました。
その時の学習をアウトプットできればと思います。

手順

  • 前提

    • EC2インスタンスにSSM接続ができるように設定する
    • EC2を起動するサブネットへS3用のエンドポイントを作成
  • 手順
     1. 【targetアカウント】EC2用のIAMロールを作成
     2. 【sourceアカウント】バケットポリシーを作成
     3. 【targetアカウント】EC2インスタンスにtmuxをインストール
     4. 【targetアカウント】tmuxで新規シェルを作成し、移行コマンドの実行

今回の構成図

コメント 2022-02-25 152932.jpg

手順1 【targetアカウント】EC2用のIAMロールを作成

1.1 下記カスタマ管理ポリシーを作成

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::<sourceのS3バケット名>",
                "arn:aws:s3:::<sourceのS3バケット名>/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::<targetのS3バケット名>",
                "arn:aws:s3:::<targetのS3バケット名>/*"
            ]
        }
    ]
}

1.2 カスタマー管理ポリシーを、EC2へアタッチするIAMロールへ追加

手順2 【sourceアカウント】バケットポリシーを作成

下記バケットポリシーをsorceアカウントの対象S3バケットのバケットポリシーに記入します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AddCannedAcl",
      "Effect": "Allow",
      "Principal": {
        "AWS": "<EC2へアタッチしたIAMロールのARN>"
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetObject",
        "s3:GetObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::<targetのS3バケット名>",
        "arn:aws:s3:::<targetのS3バケット名>/*"
      ]
    }
  ]
}

ここまでで、EC2へSSM接続しsorceアカウントの対象のS3バケットのオブジェクト名など取得できることを確認する。

# 下記コマンドで、オブジェクト名が表示されたら成功
$ aws s3 ls s3://<sourceのS3バケット名>

オブジェクト名が取得できなければ、
・バケットポリシーの内容
・S3用のエンドポンとがあるか
など確認する。

手順3 【targetアカウント】EC2インスタンスにtmuxをインストール

tmuxとは

端末多重化ソフトウェア(ターミナル画面を複数開くことで、同時作業が可能になる)

tmuxを使用する背景:

セッションマネージャーにはセッション維持の制限時間があるが、tmuxで作成したターミナルは明示的にセッションを終了しなければ維持され続ける。
冒頭でも書いたように、今回は40TB以上のデータを移行するので最低でも2日間はセッションを維持しておく必要がある。

# 下記コマンドでインストール
$ sudo yum install -y tmux

手順4 【targetアカウント】tmuxで新規シェルを作成し、移行コマンドの実行

4.1 新規セッションの起動

# 下記コマンドで新規セッションの開始
$ tmux new -s <セッション名>

4.2 起動したセッションで、コマンドを実行

# 下記コマンドでデータ移行
aws s3 sync s3://<sourceバケット名> s3://<targetバケット名>/ --acl bucket-owner-full-control

無事データが移行できていることを確認!

4.3 【番外】tmuxのセッションから抜ける方法

ctrl + bを押した後に dを入力

参考

Amazon S3 の VPC エンドポイントのタイプ
とほほのtmux入門

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