Storage Transfer Serviceを試してみた
はじめに
データ・エージェンシーの高橋です。
データパイプラインを作成するなかで、AWS S3からGoogle Cloud StorageへCSVファイルを転送するといったような、ストレージサービス間のファイル転送を必要とすることがあります。
このような場面で利用するのがStorage Transfer Serviceです。
今回の検証では、転送元ファイルの更新を検知して、それをトリガーとしてイベント駆動でデータを転送する方法を確認します。また、便宜的にGoogle Cloud Storageのバケットから別プロジェクトのGoogle Cloud Storageのバケットへ転送するというアーキテクチャで進めます。
作業にあたり、以下の公式ドキュメントを参考にしました。
STEP1:転送元、転送先のGoogle Cloud Storageバケットを作成
転送元とするプロジェクトのGoogle Cloud Storageで、[ test_transfer_from ] という名前でバケットを作成します。
転送先とするプロジェクトのGoogle Cloud Storageで、[ test_transfer_to ] という名前でバケットを作成します。
STEP2:Storage Transfer Serviceサービス エージェントの名前を確認
転送元ファイルの更新を検知するために、Cloud Pub/Subというメッセージングサービスを利用します。
Cloud Pub/Subは、パブリッシャーがトピックにメッセージを送信、トピックがサブスクリプションにメッセージを送信、サブスクリプションからサブスクライバーがメッセージを受信、という3ステップを経て非同期な連携を実現するものです。
ここでは、サブスクライバーとしての権限をサービスエージェントに付与します。
まず、サービスエージェントの確認ページを表示し、[ projectId ] に転送元プロジェクトのプロジェクトIDを入力して [ Execute ] をクリックします。
表示された [ accountEmail ] の値を控えておきます。
STEP3:サービスエージェントにPub/Sub Subscriberロールを付与
ここからの作業は全て転送元プロジェクトのコンソール、Cloud Shellで行います。転送先プロジェクトではありませんのでご注意ください。
Google Cloudコンソールを開き、ナビゲーションメニューから [ IAMと管理 ] > [ IAM ] を選択し、[ アクセス権を付与 ] をクリックします。
先ほど控えた [ accountEmail ] の値を [ 新しいプリンシパル ] 欄に入力し、[ Pub/Sub サブスクライバー ] ロールを割り当てたのち [ 保存 ] をクリックします。
STEP4:Cloud Pub/Subのトピックとサブスクリプションを作成
Cloud Shellで以下のコマンドを実行し、トピックを作成します。
gcloud storage buckets notifications create gs://test_transfer_from --topic=test_topic
Cloud Shellで以下のコマンドを実行し、サブスクリプションを作成します。
gcloud pubsub subscriptions create test_subscription --topic=test_topic --ack-deadline=300
Cloud Pub/Subのコンソールを開くと、作成したトピックとサブスクリプションを確認できます。表示されたサブスクリプションの登録名を控えておきます。
STEP5:Storage Transfer Serviceの転送ジョブを作成
ナビゲーションメニューから [ Storage Transfer ] を選択し、[ 転送ジョブを作成 ] をクリックします。
[ 開始 ] の項目では、[ スケジュールモード ] を [ イベントドリブン ] に変更します。
[ ソースの選択 ] の項目では、[ バケットまたはフォルダ ] 欄に [ test_transfer_from ] を指定します。
[ Pub/Subサブスクリプション名 ] 欄に先ほど控えた [ サブスクリプションの登録名 ] を入力します。
[ 転送先 ] の項目では、[ バケットまたはフォルダ ] 欄に [ test_transfer_to ] を指定したのち [ 作成 ] をクリックします。ここでは転送先プロジェクトのGoogle Cloud Storageバケットを指定する点に注意してください。
これで設定は完了です。
STEP6:動作確認
転送元プロジェクトのGoogle Cloud Storageバケット [ test_transfer_from ] に [ test.csv ] を保存します。ファイルの中身は空で構いません。
転送先プロジェクトのGoogle Cloud Storageバケット [ test_transfer_to ] を開くと、ファイル [ test.csv ] が転送されていることが確認できます。表示されない場合は画面の更新を試してください。
最後に、無用な課金を避けるために今回作成したリソースを全て削除します。
まとめ
以上のように、イベント駆動によるストレージサービス間のファイル転送を試すことができました。Cloud Pub/Subとの連携部分は知らないとなかなか難しい感じがしますが、一度理解できると意外と簡単に利用できそうです。
株式会社データ・エージェンシー
弊社では、エンジニア経験を活かしてデータエンジニアリングにチャレンジしたい方を募集しています。採用情報や社員インタビューについては以下をご参照ください。
Discussion