はじめに

S3 のデータを別リージョンの S3 バケットへ転送する方法の 1 つとして、AWS DataSync を利用できます。
S3 のクロスリージョンレプリケーション機能でもデータの同期は可能ですが、

  • 大量データを転送したい場合
  • 一部のデータのみを別リージョンに保管したい場合
  • 一度だけのデータ転送を行いたい場合

等には、AWS DataSync を利用する方が効率的です。

本ブログでは、AWS DataSync を使った S3 のクロスリージョン間データ転送の設定方法について解説します。

構成

今回は、下記の構成図のように 東京リージョンのS3 から 大阪リージョンのS3 へデータ転送を行います。

作成するリソース一覧

作成するリソースは下記です。

  1. S3バケット
    • 東京リージョン(送信元)
    • 大阪リージョン(送信先)
  2. IAMロール、IAMポリシー
  3. DataSyncロケーション
    • 東京リージョン(送信元)
    • 大阪リージョン(送信先)
  4. DataSyncタスク

設定方法

1.S3バケットを作成

東京リージョンと大阪リージョンにS3バケットを一つづつ作成します。

東京リージョンで作成

大阪リージョンで作成

2.IAMロールを作成

S3に対して、DataSyncから読み書きなどの操作をするため、必要なIAMポリシーを作成し、IAMロールにアタッチします。

IAMポリシー

  • IAMポリシー名は datasync-test-policy としています。

ポリシーの詳細

Resource: には 作成したS3バケット名を入力します。

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Action": [
              "s3:GetBucketLocation",
              "s3:ListBucket",
              "s3:ListBucketMultipartUploads"
          ],
          "Resource": [
              "arn:aws:s3:::datasync-test-tokyo-bucket",
              "arn:aws:s3:::datasync-test-osaka-bucket"
          ],
          "Effect": "Allow"
      },
      {
          "Action": [
              "s3:AbortMultipartUpload",
              "s3:GetObject",
              "s3:ListMultipartUploadParts",
              "s3:PutObject",
              "s3:DeleteObject",
              "s3:GetObjectTagging"
          ],
          "Resource": [
              "arn:aws:s3:::datasync-test-tokyo-bucket/*",
              "arn:aws:s3:::datasync-test-osaka-bucket/*"
          ],
          "Effect": "Allow"
      }
  ]
} 

【参考】
Amazon S3 を使用した AWS DataSync 転送の設定
https://docs.aws.amazon.com/ja_jp/datasync/latest/userguide/create-s3-location.html

IAMロール

カスタム信頼ポリシーを選択し、信頼関係を入力

先に作成したIAMポリシーをアタッチ

IAMロール名を設定
  • IAMロール名は datasync-test-role としています。

IAMロールの信頼関係
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "datasync.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

3.DataSyncロケーションを作成

「送信元」または「送信先」となるストレージの場所を定義します。

東京リージョン側で作成

  • ロケーションタイプ:Simple Storage Service (Amazon S3)
  • S3 URI:東京リージョンで作成したS3のURI
  • S3ストレージクラス:標準
  • IAMロール:先に作成したIAMロール

大阪リージョン側で作成

  • ロケーションタイプ:Simple Storage Service (Amazon S3)
  • S3 URI:大阪リージョンで作成したS3のURI
  • S3ストレージクラス:標準
  • IAMロール:先に作成したIAMロール

4.DataSyncタスクを作成

「どのロケーションからどのロケーションへデータを転送するか」の実際の処理設定を行います。

送信元ロケーションの設定

  • データ送信元ロケーション:既存のロケーションを選択する
  • リージョン:Asia Pacific(Tokyo)
  • ロケーション:先に作成した東京リージョンのロケーションを選択

送信先ロケーションの設定

  • データ転送先ロケーション:既存のロケーションを選択する
  • リージョン:Asia Pacific(Osaka)
  • ロケーション:先に作成した大阪リージョンのロケーションを選択

設定を構成

  • タスクモード:拡張
  • 名前:任意のタスク名

で設定し、そのほかはデフォルトで設定します。
ここでは、転送対象ファイルの除外設定や、定期実行するためのスケジュール設定など使用用途にあわせてカスタマイズすることが可能です。

動作確認

設定が完了したので、データ転送の動作確認を行います。

東京リージョンのS3にテストデータを配置

  • 東京リージョンのS3にtest.txt をアップロードします。

DataSyncタスクを実行

  • DataSyncタスクの右上に開始 > デフォルトから開始する を押下します。

大阪リージョンのS3を確認

  • 大阪リージョンのS3に test.txt が転送されたことが確認できました。

まとめ

AWS DataSyncを利用したクロスリージョン間のS3のデータ転送の設定方法をご紹介しました。
容易に、データ転送が実現できるため、災害対策としてのバックアップの用途で利用することも可能です。