DataSyncとEventBridgeルールを使用してS3バケット間のデータ移行を同期してみた。

2021.12.08

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

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時間未満の少量のデータに良いです。