[Update] AWS DataSyncによるストレージサービス間のデータ転送にエージェントが不要となりました!

こんにちは。サービスグループの武田です。AWS DataSyncによるAmazon S3、Amazon EFS、Amazon FSx for Windows File Server間のデータ転送がエージェントを立てずに実行できるようになりました。
2020.11.10

[Update] AWS DataSyncによるストレージサービス間のデータ転送にエージェントが不要となりました!

こんにちは。サービスグループの武田です。

AWS DataSyncというサービスをご存じでしょうか?オンプレミスのストレージ、Amazon S3、Amazon EFS、Amazon FSx for Windows File Serverとの間でデータ転送をするためのサービスです。これまではデータ転送に、仲介するDataSyncエージェントが必須でした。今回のアップデートで、ストレージサービス間であればエージェントが不要になりました!素敵!

ドキュメントに比較できるわかりやすい図がありましたので引用します。

日本語のドキュメントから。アップデート前はS3-EFS間でもエージェントが必要でした。

引用元:How AWS DataSync Works(日本語)

こちらは英語のドキュメントから。アップデート後はストレージサービス間ではエージェントが不要に。

引用元:How AWS DataSync Works(英語)

やってみた

それではさっそく試してみましょう。今回はS3にアップロードしたデータをEFSにコピーするというシナリオで進めます。

S3バケットの作成とデータアップロード

まずはコピー元となるデータを用意しましょう。マネジメントコンソールを開いてS3バケットを作成します。今回はdata-sync-s3-to-efs-test-xxxとしました。

作成したバケットのファイルをアップロードします。手元にあったRustのプロジェクトをアップしてみました。

ちなみにこんな構造です。

$ tree hello/
hello/
├── 404.html
├── Cargo.lock
├── Cargo.toml
├── hello.html
└── src
    ├── lib.rs
    └── main.rs

EFSファイルシステムの作成

続いてコピー先となるEFSファイルシステムを用意します。マネジメントコンソールからEFSのページで作成します。今回はfrom-s3-syncとしました。VPCは適当に選びます。

確認用のEC2インスタンス作成

ここでEFSの中身を確認するためのEC2インスタンスを起動しておきます。次の点だけ注意しておけば、特段おかしなことにはならないはずです。セッションマネージャーを使う場合はそれ用の設定を用いてください。

  • 先ほどEFSを作成したVPCと同じVPCを指定
  • パブリックIPが振られるようにパブリックサブネットを指定
  • SSH接続できるようにセキュリティグループを指定

あとはウィザードの途中でEFSの自動マウントの設定ができます。めっちゃ楽なので設定しておきましょう。

EC2インスタンスが起動したら接続してEFSの中を確認しておきます。もちろん空っぽです。

[ec2-user@ip-192-168-10-10 ~]$ cd /mnt/efs/fs1/
[ec2-user@ip-192-168-10-10 fs1]$ ls
[ec2-user@ip-192-168-10-10 fs1]$

DataSyncタスクの作成

これで準備完了です。それでは本題のDataSyncを使っていきましょう。マネジメントコンソールにアクセスしてDataSyncタスクを作成していきます。DataSyncのページにアクセスするとデータ転送のタイプがプルダウンで選択できます。今回は Between AWS Storage services を選び「Get started」をクリックします。

コピー元ロケーションの設定です。今回は新規で作成します。

Location typeに「Amazon S3」を選択し、S3 bucketに先ほど作成したバケットを指定します。バケット全体ではなく特定のフォルダーをコピーする場合はFolderにパスを指定しますが、今回は全体コピーなので無指定です。一番下でDataSyncが利用するIAM roleを指定します。はじめての場合は[Autogenerate]ボタンをクリックすることでロールが作成できるので便利です。指定できたら[Next]をクリックします。

続いてコピー先ロケーションの設定です。こちらも新規で作成します。

Location typeに「Amazon EFS file system」を選択し、EFS File systemに先ほど作成したEFSファイルシステムを指定します。コピー先をサブディレクトリに指定したい場合はMount pathにそのパスを指定します。その場合は事前にサブディレクトリをEFSに作成しておく必要がありました。今回は無指定とします。内容に問題なければ[Next]をクリックします。

次の画面で細かいオプションなどの設定ができます。たとえばバックアップ用途ではなく同期用途であればKeep deleted filesのチェックを外すと、コピー元で削除されたファイルはコピー先からも削除されます(後からでも変更できます)。

ログの出力先としてCloudWatch Logsが指定できます。こちらも運用する上では有効にしておいた方がよいでしょう。そのほか問題なければ[Next]をクリックします。

確認画面に遷移します。内容に問題なければ[Create task]をクリックします。

無事に作成できました。

DataSyncタスクの実行

タスクの実行は、タスク画面右上にある[Start]ボタンから実行できます。

先ほどのタスク画面で[Start]ボタンを押すと、実行オプションの指定画面に遷移します。先ほどKeep deleted filesのチェックを外しましたが、ここでチェックを入れたり他の項目も変更したりできます。問題なければ右下の[Start]ボタンをクリックしましょう。

タスクが実行されます。しばらく待ちましょう。

待っているとタスクが終わりました。成功のようです。

EC2インスタンス上で中身を確認してみます。

[ec2-user@ip-192-168-10-10 fs1]$ ls
hello
[ec2-user@ip-192-168-10-10 fs1]$ ls *
404.html  Cargo.lock  Cargo.toml  hello.html  src

ちゃんとコピーされています!

まとめ

ストレージサービス間のデータ転送であればエージェント不要でDatasSyncが利用可能となりました。コスト削減にもつながりますし、何より手軽に利用できるようになったのはうれしい限りですね。ぜひ活用していきましょう!