この記事は公開されてから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 :