🔄 Storage Transfer Service

大規模データ転送のためのマネージドサービス

📖 Storage Transfer Serviceとは

🎯 概要

Storage Transfer Serviceは、大規模なデータをGoogle Cloud Storageに、またはCloud Storage間で効率的に転送するためのマネージドサービスです。 オンプレミス、AWS S3、Azure Blob Storage、別のCloud Storageバケットなど、様々なソースからデータを移行できます。

データ転送の流れ

📦
転送元(Source)
• AWS S3
• Azure Blob Storage
• オンプレミス
• Cloud Storage(別バケット)
• HTTP/HTTPSエンドポイント
⚙️
Storage Transfer Service
自動スケーリング
並列転送
エラーハンドリング
スケジューリング
☁️
転送先(Destination)
Google Cloud Storage
バケット

✨ 主な機能

🔄

複数のソースに対応

  • AWS S3: S3バケットから直接転送
  • Azure Blob Storage: Azureからの移行
  • オンプレミス: ファイルシステムから転送
  • Cloud Storage: バケット間のコピー
  • HTTP/HTTPS: URLリストから取得

高速・大規模転送

  • 自動的に並列転送でスループット最大化
  • 数PB規模のデータ転送に対応
  • ネットワーク帯域幅を効率的に活用
  • 転送の進捗状況をリアルタイムで確認
📅

スケジューリング

  • 定期的な転送ジョブを自動実行
  • 日次、週次、月次などの設定可能
  • 特定の時刻に実行をスケジュール
  • 増分転送(新規・変更ファイルのみ)
🛡️

信頼性とセキュリティ

  • 自動リトライとエラーハンドリング
  • データ整合性の検証(チェックサム)
  • 暗号化転送(TLS/SSL)
  • IAMによるアクセス制御
  • 監査ログの記録
🎯

柔軟なフィルタリング

  • プレフィックスによるファイル選択
  • 作成日時・更新日時によるフィルタ
  • 特定の拡張子のみを転送
  • 除外パターンの設定
🔧

転送オプション

  • 転送後にソースファイルを削除
  • 既存ファイルの上書き設定
  • メタデータの保持
  • ストレージクラスの指定
  • 通知設定(Pub/Sub連携)

🔄 転送タイプ

📤 Cloud → Cloud

AWS S3やAzure Blob StorageからCloud Storageへの転送

ユースケース:
  • クラウド移行
  • マルチクラウド戦略
  • データバックアップ

☁️ GCS → GCS

Cloud Storageバケット間でのデータ移動

ユースケース:
  • リージョン間のコピー
  • データの再編成
  • 環境間のコピー

🏢 オンプレミス → Cloud

Transfer Service for on-premises dataを使用

ユースケース:
  • データセンター移行
  • NASからの移行
  • 大規模ファイル共有

📋 設定手順

基本的な転送ジョブの作成

1
ソースの設定
転送元(AWS S3、Azure、GCS等)を選択し、認証情報を設定
2
宛先の設定
Cloud Storageのバケットとパスを指定
3
転送オプションの設定
フィルタリング、上書き設定、スケジュール等を構成
4
ジョブの実行
即座に実行するか、スケジュール設定で定期実行
5
モニタリング
進捗状況、エラー、完了状態を確認

コンソールでの作成例

# Google Cloud Consoleでの手順 1. Cloud Console → Storage Transfer Service 2. [転送ジョブを作成] 3. ソースの選択: - Amazon S3 bucket - Bucket name: my-s3-bucket - AWS Access Key ID: [入力] - AWS Secret Access Key: [入力] 4. 宛先の選択: - GCS bucket: gs://my-destination-bucket/ - Path: data/imported/ 5. オプション設定: - ☑ 転送後にソースからファイルを削除 - ☑ 既存ファイルを上書き - フィルタ: prefix = "logs/" 6. スケジュール: - 毎日午前2時に実行 7. [作成]

gcloudコマンドでの作成

# AWS S3からGCSへの転送ジョブを作成 gcloud transfer jobs create \ s3://my-s3-bucket/data/ \ gs://my-gcs-bucket/imported-data/ \ --source-creds-file=aws-credentials.json \ --schedule-starts="2024-11-26T02:00:00Z" \ --schedule-repeats-every="1d" \ --delete-from-source-after-transfer \ --overwrite-when="different" # GCS間の転送ジョブを作成 gcloud transfer jobs create \ gs://source-bucket/path/ \ gs://destination-bucket/path/ \ --schedule-starts="2024-11-26T00:00:00Z" \ --schedule-repeats-every="7d" # 転送ジョブの一覧表示 gcloud transfer jobs list # 転送オペレーションの確認 gcloud transfer operations list \ --job-names="transferJobs/12345678901234567890"

APIでの作成(Python)

from google.cloud import storage_transfer def create_s3_transfer_job( project_id: str, s3_bucket: str, gcs_bucket: str, aws_access_key_id: str, aws_secret_access_key: str ): client = storage_transfer.StorageTransferServiceClient() # 転送ジョブの設定 transfer_job = { "project_id": project_id, "description": "S3 to GCS daily transfer", "status": "ENABLED", "schedule": { "schedule_start_date": { "year": 2024, "month": 11, "day": 26 }, "start_time_of_day": { "hours": 2, "minutes": 0 } }, "transfer_spec": { "aws_s3_data_source": { "bucket_name": s3_bucket, "aws_access_key": { "access_key_id": aws_access_key_id, "secret_access_key": aws_secret_access_key } }, "gcs_data_sink": { "bucket_name": gcs_bucket, "path": "imported/" }, "object_conditions": { "include_prefixes": ["logs/"] }, "transfer_options": { "delete_objects_from_source_after_transfer": False, "overwrite_objects_already_existing_in_sink": True } } } result = client.create_transfer_job(request={"transfer_job": transfer_job}) print(f"Created transfer job: {result.name}") return result

🎯 主なユースケース

1️⃣ クラウド移行(Cloud Migration)

シナリオ: AWS S3からGoogle Cloudへの移行

具体例:
  • AWSからGCPへのプラットフォーム移行
  • 数TB〜数PBの大規模データ移行
  • 段階的な移行(特定のデータセットから順次)
メリット: 自動化された大規模転送、進捗の可視化、エラーハンドリング

2️⃣ データバックアップ・DR

シナリオ: マルチクラウドでのディザスタリカバリ

具体例:
  • AWS S3のデータをGCSに定期バックアップ
  • 日次・週次でのスケジュール実行
  • 増分バックアップ(変更分のみ転送)
メリット: クラウド間の冗長化、自動スケジューリング

3️⃣ データレイク構築

シナリオ: 複数ソースからGCSへのデータ集約

具体例:
  • 各部門のS3バケットからGCSに集約
  • オンプレミスNASからクラウドへ移行
  • 分析基盤への定期データ取り込み
メリット: 中央集約、BigQueryでの分析準備

4️⃣ ログ・アーカイブ管理

シナリオ: ログファイルの長期保管

具体例:
  • アプリケーションログの日次転送
  • 古いログをArchiveストレージクラスへ移動
  • コンプライアンス要件のための長期保管
メリット: 自動化、コスト最適化(ストレージクラス選択)

5️⃣ メディア・コンテンツ配信

シナリオ: 動画・画像コンテンツの配信準備

具体例:
  • 制作環境からCDN用ストレージへ転送
  • マルチリージョンへのコンテンツ配布
  • レンダリング完了後の自動転送
メリット: 高速転送、グローバル配信の準備

6️⃣ データ再編成・クリーンアップ

シナリオ: バケット間でのデータ整理

具体例:
  • プロジェクト別にデータを再編成
  • リージョンの最適化(データローカリティ)
  • 古いバケット構造から新構造へ移行
メリット: 一括処理、メタデータ保持

⚖️ 他のツールとの比較

特徴 Storage Transfer Service gsutil Transfer Appliance
データサイズ TB〜PB規模 GB〜TB規模 PB規模(数十〜数百TB)
転送方法 ネットワーク経由 ネットワーク経由 物理デバイス(オフライン)
自動スケーリング ✓ 自動 ✗ 手動設定 N/A
スケジューリング ✓ 組み込み ✗ cronなど別途必要 N/A
エラーハンドリング ✓ 自動リトライ ✗ スクリプトで実装 N/A
進捗モニタリング ✓ UI/API ✗ ログのみ 配送追跡
対応ソース AWS S3, Azure, GCS, on-prem ローカル, GCS, S3 オンプレミスのみ
コスト 転送・ストレージコスト 転送・ストレージコスト デバイスレンタル料 + 配送
セットアップ 簡単(UI/API) 簡単(CLI) 複雑(物理デバイス)
適用場面 定期的・大規模転送 小規模・単発転送 帯域幅制約のある大規模移行

🎯 選択基準

💰 料金

💵 料金体系

⚠️ コスト最適化のヒント:

⚙️ 高度な機能

フィルタリングオプション

📁
プレフィックスフィルタ
特定のフォルダやパスのファイルのみを転送
include_prefixes = ["logs/", "data/2024/"]
📅
日時フィルタ
特定の日時以降/以前に作成・変更されたファイルのみ
min_time_elapsed_since_last_modification = "86400s" # 1日以上前 max_time_elapsed_since_last_modification = "604800s" # 7日以内
🚫
除外パターン
特定のファイルやパターンを転送から除外
exclude_prefixes = ["temp/", "*.tmp"]

スケジューリングパターン

🔄
日次転送
毎日午前2時に実行して、前日分のログを転送
schedule_repeats_every = "1d" start_time_of_day = {"hours": 2, "minutes": 0}
📅
週次転送
毎週月曜日にバックアップを実行
schedule_repeats_every = "7d" schedule_start_date = {"day_of_week": "MONDAY"}
🌙
月次転送
毎月1日に前月分のデータをアーカイブ
schedule_repeats_every = "30d" schedule_start_date = {"day": 1}

✅ ベストプラクティス

1️⃣ 転送前の計画

2️⃣ セキュリティ設定

3️⃣ モニタリングとエラー対応

4️⃣ コスト最適化

5️⃣ パフォーマンス最適化

⚠️ 制限事項と注意点

項目 制限 対処法
同時実行ジョブ数 プロジェクトあたり1000個まで 不要なジョブを削除、ジョブを統合
ファイルサイズ 個々のファイルは5TBまで 大きなファイルは分割
プレフィックス数 include/excludeは各1000個まで プレフィックスを整理、複数ジョブに分割
転送速度 ネットワーク帯域幅に依存 ピーク時間を避ける、並列転送
メタデータ保持 一部のメタデータは転送されない 重要なメタデータは別途管理
🔍 よくある問題と対策:

📚 まとめ

🎓 Storage Transfer Serviceの要点

💡 Storage Transfer Serviceを選ぶべき場面:
  • 数TB以上の大規模データ転送
  • 定期的・継続的な転送が必要
  • AWS S3やAzureからの移行
  • 自動化とエラーハンドリングが重要
  • 進捗の可視化とモニタリングが必要