AWS CLIを使用してS3でDataSyncをしてみた。

2022.04.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

概要

DataSyncでAWSストレージサービス間、およびオンプレミスストレージシステムとAWSストレージサービス間でデータを移動できます。この記事では、AWS CLIを使用してS3でDataSyncをしてみました。ここでは、AWS CLIでDataSyncを使用して、ソースS3バケットから別のリージョンのデスティネーションS3バケットにデータを移動してみました。

 

 

やってみた

S3バケットの作成

  • 2つのS3バケットを作成しておきます。
    • ソースS3バケット : us-east-1 リージョン
    • デスティネーションS3バケット :  us-east-2  リージョン
  • 次のコマンドを使用して、us-east-1リージョンにS3バケットを作成しておきます。

 

//create a S3 bucket in us-east-1 region
aws s3api create-bucket \
    --bucket datasync-source-data-bucket \
    --region us-east-1

//Output
{
    "Location": "/datasync-source-data-bucket"
}

 

  • 次のコマンドを使用して、「us-east-1」リージョンの外側にバケットを作成しておきます。
//create a S3 bucket outside of the 'us-east-1' region
aws s3api create-bucket \
    --bucket datasync-destination-data-bucket \
   --region us-east-2 \
    --create-bucket-configuration LocationConstraint=us-east-2 

//Output
{
    "Location": "http://datasync-destination-data-bucket.s3.amazonaws.com/"
}

 

  • ソースS3バケットにファイルをアップロードしておきます。

 

  • 初期状態では、デスティネーションバケットは空です。

 

IAMロールの作成

  • DataSyncがS3バケットへのアクセスに必要なIAMロールを引き受けることを許可するIAMポリシーを作成します。
  • 以下のポリシーを含むjsonファイルを作成しておきます。

 

//create assumeRole.json file
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "datasync.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

 

  • 次のコマンドを使用して、上記のポリシーでIAMロールを作成しておきます。
//create IAM role
aws iam create-role --role-name "s3accessRole" --assume-role-policy-document file://assumeRole.json

//Output
{
    "Role": {
        "Path": "/",
        "RoleName": "s3accessRole",
        "RoleId": "......",
        "Arn": "arn:aws:iam::xxxxxxxxxxx:role/s3accessRole",
        "CreateDate": "2022-04-24T03:45:15+00:00",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "datasync.amazonaws.com"
                    },
                    "Action": "sts:AssumeRole"
                }
            ]
        }
    }
}

 

  • [AmazonS3FullAccess]ポリシーをIAMロールにアタッチしておきます。
aws iam attach-role-policy \ 
    --role-name s3accessRole \
    --policy-arn 'arn:aws:iam::aws:policy/AmazonS3FullAccess'

 

DataSyncロケーションの作成

  • 次の設定でソースバケットのDataSyncロケーションを作成しておきます。
    • s3-bucket-arn : ソースバケットArnを指定します。
    • s3-storage-class : STANDARD
    • s3-config : 前に作成したIAMロールのArn。
    • region : us-east-1

 

//create S3 location
aws datasync create-location-s3 \
    --s3-bucket-arn 'arn:aws:s3:::datasync-source-data-bucket' \
    --s3-storage-class 'STANDARD' \
    --s3-config 'BucketAccessRoleArn=arn:aws:iam::xxxxxxxxxxx:role/s3accessRole' \
    --region us-east-1

//Output
{
    "LocationArn": "arn:aws:datasync:us-east-1:xxxxxxxxxxxxx:location/loc-000000000000001"
}

 

 

  • 次の設定でデスティネーションバケットのDataSyncロケーションを作成しておきます。
    • s3-bucket-arn : デスティネーションバケットArnを指定します。
    • s3-storage-class : STANDARD
    • s3-config : 前に作成したIAMロールのArn。
    • region : us-east-2

 

//create S3 location
aws datasync create-location-s3 \
    --s3-bucket-arn 'arn:aws:s3:::datasync-destination-data-bucket' \
    --s3-storage-class 'STANDARD' \
    --s3-config 'BucketAccessRoleArn=arn:aws:iam::xxxxxxxxxx:role/s3accessRole' \
    --region us-east-2

//Output
{
    "LocationArn": "arn:aws:datasync:us-east-2:xxxxxxxxxxxx:location/loc-000000000000002"
}

 

 

DataSyncタスクの作成

  • 次のコマンドを使用してタスクを作成しておきます。コマンドでソースとデスティネーションのロケーションArnを指定します。

 

aws datasync create-task \
    --source-location-arn 'arn:aws:datasync:us-east-1:xxxxxxxxxxxx:location/loc-000000000000001' \
    --destination-location-arn 'arn:aws:datasync:us-east-2:xxxxxxxxxxxx:location/loc-000000000000002' \
    --name datasync-task \
    --region us-east-1

 

 

タスク実行を開始する

  • 次のコマンドを使用して、タスクの実行を開始します。タスクの実行が開始されると、データはソースバケットからデスティネーションバケットにコピーされます。

 

aws datasync start-task-execution \
    --task-arn 'arn:aws:datasync:us-east-1:xxxxxxxxxxxx:task/task-00000000001' \
    --region us-east-1

 

 

  • コンソールで、データがデスティネーションバケットに移動されていることを見ることができます。

 

まとめ

AWS CLIを使用してS3でDataSyncをしてみました。サポートされている他のAWSサービスでDataSyncを試すことができます。

Reference :

DataSync using CLI