🐥

Storage Transfer Serviceを試してみた

はじめに

データ・エージェンシーの高橋です。

データパイプラインを作成するなかで、AWS S3からGoogle Cloud StorageへCSVファイルを転送するといったような、ストレージサービス間のファイル転送を必要とすることがあります。

このような場面で利用するのがStorage Transfer Serviceです。

今回の検証では、転送元ファイルの更新を検知して、それをトリガーとしてイベント駆動でデータを転送する方法を確認します。また、便宜的にGoogle Cloud Storageのバケットから別プロジェクトのGoogle Cloud Storageのバケットへ転送するというアーキテクチャで進めます。

作業にあたり、以下の公式ドキュメントを参考にしました。

https://cloud.google.com/storage-transfer/docs/event-driven-transfers?hl=ja

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との連携部分は知らないとなかなか難しい感じがしますが、一度理解できると意外と簡単に利用できそうです。

株式会社データ・エージェンシー

弊社では、エンジニア経験を活かしてデータエンジニアリングにチャレンジしたい方を募集しています。採用情報や社員インタビューについては以下をご参照ください。

https://open.talentio.com/r/1/c/dataagency/pages/66768

dataAgency Tech Blog

Discussion