🍕

Storage Transfer Service のイベントドリブン転送を試してみた

2023/09/08に公開

はじめに

こんにちは、クラウドエース データML ディビジョン所属の寺内です。

データML ディビジョンでは、Google Cloud が提供しているデータ領域のプロダクトについて、新規リリースをキャッチアップするための調査報告会を毎週実施しています。
新規リリースの中でも、特に重要と考えるリリースを記事としてまとめ、本ページのように公開しています。

今回紹介するリリースでは、Storage Transfer Serviceにイベントドリブン転送という機能が追加されました。
本記事では、この機能の紹介と、実際にこの機能を使ってAWS S3 から Cloud Storage(以下、GCS と呼ぶ)へのイベントドリブン転送を試してみます。

1. リリース概要

今回ご紹介するリリースは2023年7月25日付で発表された Storage Transfer Serviceにおけるイベントドリブン転送という追加機能についてです。
この機能では、GCS、 AWS S3 等のファイル更新を検知して、自動的にGCS にファイルをコピーすることが可能です。

実際のリリースノートについては下記をご確認ください。

https://cloud.google.com/storage-transfer/docs/release-notes?hl=ja#July_25_2023

2. 前提知識 Storage Transfer Service とは

Storage Transfer Service は、オブジェクトやファイルのストレージ システム間で自動的にデータ転送を行うサービスです。AWS S3・Azure Storage 等、各種のストレージサービスからGCSにファイルを転送することが可能です。

GCS上のファイル操作は gsutil コマンドでも可能ですが、特に大容量のファイル転送をする際に適したサービスです。

Storage Transfer Service で使用可能なソース一覧

  • Google Cloud Storage
  • Amazon Simple Storage Service(Amazon S3)
  • S3 互換ストレージ
  • Azure Blob Storage(Azure Data Lake Storage Gen2 を含む)
  • 一般公開または署名付きの HTTP および HTTPS URL
  • ファイルシステム

3. Storage Transfer イベントドリブン転送の概要

下記の公式ドキュメントに沿って説明します。

https://cloud.google.com/storage-transfer/docs/event-driven-transfers

この機能では、ソースとなるバケットへのファイル追加・更新されたタイミングで、自動的にGCSにファイルを転送することができます。

AWS S3・GCS から GCS へのイベントドリブン転送がサポートされています。

4. 検証

検証概要
今回の検証では、AWS S3 から GCS へのファイル転送を実際に試し、設定の手順をご説明します。

4.1 事前準備

下記のリソースを作成します。

  • Google Cloud
    • GCS
      • バケット作成
    • Storage Transfer Service
      • 転送設定
  • AWS
    • S3
      • バケット作成
      • イベント通知設定
    • SQS
      • キュー作成

4.1.1 AWS S3 バケットの作成と設定

[step1]
AWS コンソールの検索バーでS3と検索し、S3を選択します。

s3_prepare_1

[step2]
バケットの画面で、作成のボタンを選択します。

s3_prepare_2

[step3]
今回はバケット名とAWSリージョン(ap-northeast-1)のみを指定します。

s3_prepare_3

4.1.2 AWS SQS キューの作成

[step1]
AWS コンソールの検索バーでSQSと検索し、SQSを選択します。

sqs_prepare_1

[step2]
キューの画面で、キューを作成を選択します。

sqs_prepare_2

[step3]
キューの名前を指定します。

sqs_prepare_3

[step4]
アクセスポリシーでアドバンストを選択します。
AWS, Resource の値は次のstep5で使用します。
sqs_prepare_4

[step5]
下記の JSON の AWS、Resource、S3_BUCKET_ARN の値を置き換えます。
S3_BUCKET_ARNの値はAWS コンソールのバケットの詳細ページの [プロパティ] タブで確認できます。

{
  "Version": "2012-10-17",
  "Id": "example-ID",
  "Statement": [
    {
      "Sid": "example-statement-ID",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "SQS:SendMessage",
      "Resource": "$(RESOURCE)",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "$(AWS)"
        },
        "ArnLike": {
          "aws:SourceArn": "$(S3_BUCKET_ARN)"
        }
      }
    }
  ]
}

[step6]
[アクセスポリシー] セクションに表示された JSON を、 step5 で作成した JSON で置き換えます。

[step7]
キューを作成を選択します。
sqs_prepare_7

作業が完了すると、キューの Amazon Resource Name(ARN)が表示されます。
後で使用するのでメモしておきます。

sqs_prepare_8

4.1.3 S3 バケットで通知を有効にする

[step1]
AWS コンソールでS3バケットのページを開き、プロパティタブを選択します。

[step2]
イベント通知を作成を選択します。

s3_notification_1

[step3]
イベントの名前を指定します。

s3_notification_2

[step4]
イベントタイプセクションで、すべてのオブジェクト作成イベントを選択します。

s3_notification_3

[step5]
送信先を指定します。
SQS キューを選択し、ARN を指定してください。
s3_notification_4

[step6]
最後に、変更の保存を選択します。

4.1.4 GCS バケットの作成

[step1]
Google Cloud コンソールのナビゲーションメニューで Cloud Storage バケットを選択します。

gcs_prepare_1

[step2]
バケットの画面で、作成のボタンを選択します。

gcs_prepare_2

[step3]
今回はバケット名とロケーション(asia-northeast1)のみを指定します。

gcs_prepare_3

詳細はこちらの公式ドキュメントをご覧ください。

https://cloud.google.com/storage/docs/creating-buckets?hl=ja#create_a_new_bucket

4.1.5 storage transfer service の設定

[step1]
Google Cloud コンソールのナビゲーションメニューで Storage Transfer 転送ジョブを選択します。

storage_transfer_1

[step2]
転送ジョブの画面で、転送ジョブを作成を選択します。

storage_transfer_2

[step3]
転送元の種類としてAmazon S3、宛先の種類として Google Cloud Storage をそれぞれ選択します。
スケジュールモードとしてイベントドリブンを選択し、次のステップを選択します。

storage_transfer_3

[step4]
認証方法を選択し、必要な情報を入力します。

前の手順で作成した Amazon SQS のキューの ARN を入力します。

storage_transfer_4

[step5]
転送先のGCSバケット名を指定します。

storage_transfer_5

[step6]
今回は他の設定はデフォルトのままとして、作成を選択します。

storage_transfer_6

4.2 検証

ここまでで、イベントドリブン転送を行うための準備が完了しました。
続いて、実際にS3 にファイルを配置して、GCSに転送されるまでにどの程度時間がかかるのか検証してみます。

今回の検証では、5B, 100MB, 1GB の3種類の容量のファイルを使用して、GCSへのコピーが完了するまでの時間を測定してみました。

AWS S3 コンソール
result_s3_console

GCS コンソール
result_gcs_console

下記の表に検証結果をまとめました。

なお、容量 5B のファイルについては、所要時間のほとんどが転送処理の起動にかかる時間と考えられるため、転送速度は計算していません。

ファイル名 容量 所要時間 転送速度
hoge.txt 5B 10s程度 -
100mb.txt 100MB 41s 2.4MB/s
1gb.txt 1GB 4m13s 3.9MB/s

1GB 程度のファイルサイズでも転送速度は10MB/s 以下で、速度としてはそこまで早くはありませんでした。

容量が小さいファイルであれば、数秒のタイムラグで転送が完了したので、
この程度ならほぼリアルタイムにファイルを共有できると言えそうです。

5. まとめ

この記事では、Storage Transfer Service に追加されたイベントドリブン転送機能の概要をご紹介し、実際に使ってみました。

転送速度はそこまで早くないようですが、AWS S3 をGCS にレプリケーションしたい際等にはとても便利な機能だと思うので、ぜひご活用ください。

Discussion