[アップデート] AWS DataSync で送信元に Microsoft Azure Blob Storage が指定出来るようになりました

2023.04.03

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

いわさです。

AWS DataSync を使うと、異なるストレージ間でデータやコンテンツの移動を自動化することが出来ます。

DataSync では送信元と送信先のストレージをロケーションとして定義することで管理するのですが、これまではロケーションでオンプレミスや他のパブリッククラウドと連携するための汎用的なプロトコルや、AWS 上のいくつかのストレージサービスがサポートされていました。

そのロケーションで、本日のアップデートで Microsoft Azure の Azure Blob Storage がサポートされました。

これによって、例えば Azure Blob Storage と Amazon S3 間のデータ移動タスクなどを作成することが出来るようになりました。

利用にあたって注意点がいくつかあります。

  • 本日時点ではパブリックプレビュー。今後変更されるかも
  • 送信元ロケーションとしてのみ指定が可能で、送信先には指定出来ない
  • エージェントは必須
  • データが 5 TB 以上、あるいはメタデータが 2KB 以上のオブジェクトは転送されない

本日は Azure Blob Storage から Amazon S3 への転送タスクを作成してみましたので構成例などを紹介します。

Azure Blob Storage で必要な準備

Azure Blob Storage 側では、データ移行元コンテナーの URL と、DataSync からアクセスさせるための SAS トークンを発行する必要があります。

ストレージアカウント自体は通常の Blob コンテナーをオンラインアクセス層(ホット)で用意して適当なオブジェクトを格納しました。

コンテナー URL を以下から取得

コンテナーの URL はプロパティから確認が出来ます。

SAS トークンを以下から発行

SAS トークンはいくつかパターンがありますが、今回は次の方法で発行しました。

発行方法や種類について、詳しくはこのあたりは次の公式ドキュメントをご確認ください。

SAS トークンですが、一点注意事項があります。
長過ぎる場合は DataSync ロケーション構成時に次のエラーとなりました。

通常どおり適切な権限や IP アドレスを割り当てただけではあったのですが...プレビュー後は修正される可能性もあります。
本日時点ではトークンの長さに気をつける必要があるという点を覚えておきましょう。

AWS DataSync を構成する

Azure 側はストレージと、アクセスに必要な情報が用意出来ればそれで OK です。
実際にはエージェントから、例えば仮想プライベートネットワーク経路でアクセスさせる場合などはもう少し追加の設定が必要になると思います。今回はパブリックアクセスを想定しているので、次に DataSync の設定を行っていきましょう。

DataSync エージェントをセットアップ

Azure Blob Storage をロケーションに指定する場合、DataSync エージェントが必要になります。
DataSync では一部サービス間のデータ転送の場合はエージェントレス構成を採用することが出来ます。

これが出来れば最高だったのですが、残念ながら Azure Blob Storage の場合はエージェントが必須です。
ということで DataSync エージェントを用意するのですが、様々な環境にセットアップすることが出来ます。

EC2 にセットアップする場合は公式 AMI を使って構築し、DataSync コンソールから IP アドレスを指定するだけなので非常に簡単です。
今回は特殊なネットワークは想定しておらず、最もシンプルな構成で検証を行いたかったので EC2 をデプロイする方式にしました。

公式 AMI の最新版を選択します。

DataSync コンソールからアクティベーションを行う際にパブリック IP アドレスを指定して HTTP でクライアントブラウザからアクセスさせることで簡単にアクティベーションさせることが出来ます。
そのため、ローカルクライアントからの HTTP アクセスを許可しておきます。

EC2 がセットアップ出来たら、DataSync コンソールで新規エージェントを作成します。
EC2 のパブリック IP アドレスを指定してアクティベーションさせてエージェントとして登録すると、ステータスがオンラインになります。

Azure Blob Storage ロケーションを作成する

続いて DataSync コンソールのロケーションメニューから新規ロケーションを作成します。
送信元と送信先の 2 つのロケーションを作成する必要がありますが、今回は送信元に Azure Blob Storage を、送信先に Amazon S3 を指定します。

DataSync タスクを作成する際にもロケーションは作成することが出来ます。
特に理由はないですが、ここでは送信元のみ事前作成しました。

ロケーションタイプに「Microsoft Azure Blob Storage」を選択します。
エージェントは先程作成したエージェントを指定します。
コンテナー URL と SAS トークンは Azure ポータルで取得したものを設定しましょう。取り込み階層にあわせてフォルダパスは任意で指定してください。今回はデフォルトでいきます。

DataSync タスクの作成と実行

これで下準備は全て完了しました。
最後にデータ転送タスクを作成して開始しましょう。

送信元のロケーションには事前に構成した Azure Blob Storage 用のものを選択しました。

送信先ロケーションには Amazon S3 の適当なバケットを指定します。

作成後、タスク一覧からも次のように Azure と AWS の間のデータ転送であることが確認出来ますね。

このタスクを選択して開始しましょう。
ファイルが少ないこともあって、1 分ほどで終了しました。
1 ファイルなのでもう少し速いのかと思ってましたが、(たぶん)転送前の起動などに時間がかかっているようです。

タスク完了後に送信先で指定した S3 バケットを確認してみると、指定したプレフィックスにファイルが転送されていることが確認出来ました。

さいごに

本日は AWS DataSync が送信元に Microsoft Azure Blob Storage をサポートしたので使ってみました。

プレビューではありますが、正式に Azure Blob Storage からデータを取得する経路が AWS で用意されたのは嬉しいです。
Athena 用の Azure Data Lake Storage Gen2 向けのデータソースコネクタが以前登場していましたが、JDBC 接続が必要で実体としては Azure Synapse 経路でのクエリでした。

そういったこともあって結局 Rclone を使って取得などしていたのですが、エージェントのホスティングが可能な状況であれば DataSync 使うのが一番良さそうですね。