DataSyncとEventBridgeルールを使用してS3バケット間のデータ移行を同期してみた。
DataSyncとは?
AWS DataSyncはオンラインデータ転送サービスです。AWS DataSyncを使用すると、AWSストレージサービス間、およびオンプレミスストレージシステムとAWSストレージサービス間でデータを移動できます。DataSync には自動暗号化やデータの整合性検証が含まれ。
DataSyncでサポートされるストレージサービスは次のとおりです:
- ネットワークファイルシステム (NFS)
- S3 バケット
- FSx for Windows ファイルシステム
- Hadoop Distributed ファイルシステム (HDFS)
- EFS ファイルシステム
- Object storage
- Server Message Block(SMB)
この記事では、DataSyncとEventBridgeルールを使用して、10分ごとにS3バケット間でデータを移行してみます。移行はDataSyncスケジュールを使用してスケジュールすることもできますが、2つのスケジュール間の最小間隔は1時間以上にする必要があります。内部移行を1時間未満にするために、EventBridgeを使用することができます。
やってみた
S3バケットの作成
2つの異なるリージョンに2つのバケットを作成しておきます。
- ソースバケットを作成してファイルをアップロードしておきます。
- バケット名 : datasync-s3-source-bucket
- リージョン ; us-east-1
- ファイルなしでデスティネーションバケットを作成しておきます。
- バケット名 : datasync-destination-s3-bucket
- リージョン ; us-east-2
DataSyncタスクの作成
- AWS DataSyncコンソールで、Taskを選択して、Create taskを選択します。
- 次の設定でSource Locationを構成しておきます。
- Location type : Amazon S3
- リージョン : us-east-1
- S3バケット : 前の手順で作成したソースバケットを選択しておきます[datasync-s3-source-bucket]。
- S3ストレージクラス : Standard
- IAM ロール : Autogenerateをクリックします。
- [Next]をクリックしておきます。
- Destination Locationを構成しておきます。
- Location type : Amazon S3
- リージョン : us-east-2
- S3バケット : 前の手順で作成したソースバケットを選択しておきます[datasync-destination-s3-bucket]。
- S3ストレージクラス : Standard
- IAM ロール : Autogenerateをクリックします。
- [Next]をクリックしておきます。
- タスク名とCloudWatchロググループを入力してタスクを作成しておきます。
ラムダ関数の作成
- LambdaがDataSyncタスクを開始できるようにするIAMロールを作成しておきます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "datasync:StartTaskExecution" ], "Resource": "arn:aws:datasync:us-east-1:account-id:task/task-id" }, }
- 前の手順で作成したIAMロールとPythonランタイムを使用してLambda関数を作成しておきます。
- lambda_function.pyファイルのコードを次のコードに置き換えます。コードはDataSyncタスクの実行を開始します。
import boto3 client = boto3.client('datasync', region_name='your-region') def lambda_handler(event,context): response = client.start_task_execution( TaskArn='arn:aws:datasync:your-region:account-id:task/task-id' )
EventBridgeルールの作成
- EventBridge コンソールで、Create ruleを選択して、ルールの名前を入力しておきます。
- Define pattern で、Scheduleを選択します。Fixed rate everyで10分を選択しておきます。
- Select targetsで、以前に作成したLambda関数を選択して、EventBridgeルールを作成しておきます。このルールは10分ごとにLambda関数を呼び出します 。
- 10分後、ソースバケットからのデータがデスティネーションバケットに移行されていることを見ることができます。
まとめ
DataSyncとEventBridgeルールを使用して、10分ごとにS3バケット間でデータを移行してみました。ストレージサービス間で大量のデータを移行する場合は、2つのスケジュールの間に最低1時間の間隔でDataSyncスケジュールを使用できます。EventBridgeルールは、間隔が1時間未満の少量のデータに良いです。