オブジェクト変更通知から Pub/Sub 通知に移行する

このガイドは、Cloud Storage の非推奨となったオブジェクト変更通知機能のユーザーを対象としています。Cloud Storage の Pub/Sub 通知は、Cloud Storage バケット内のオブジェクトに対する変更を追跡できる通知を生成するための、おすすめのツールです。Pub/Sub 通知は、速度、柔軟性、設定、費用対効果が向上しています。このガイドでは、Cloud Storage のオブジェクト変更通知と Pub/Sub 通知の違いについて説明し、オブジェクト変更通知から Pub/Sub 通知への移行手順を示します。

オブジェクト変更通知の概要

オブジェクト変更通知は、バケット内のオブジェクトの変更をアプリケーションに通知する、Cloud Storage の従来型のメカニズムです。オブジェクト変更通知が設定されると、オブジェクトが追加、更新、削除されるたびに、Cloud Storage は指定されたアプリケーション URL に HTTP POST リクエスト(Webhook)を送信します。JSON API、クライアント ライブラリ、または gsutil 通知 watchbucket コマンドを使用して Cloud Storage に watchAll リクエストを送信することで、オブジェクト変更通知が確立します。pull メカニズムはありません。Webhook メッセージを受信するには、HTTP サーバーで支えられている一般公開のドメイン名が必要です。信頼性、スケーラビリティ、柔軟性の面から、新しい実装には Cloud Storage の Pub/Sub 通知を使用することをおすすめします。

詳細については、オブジェクト変更通知をご覧ください。

Pub/Sub 通知の概要

Cloud Storage の Pub/Sub 通知は、イベント情報を Pub/Sub トピックに送信することで Cloud Storage バケット内の変更に応じてアクションをトリガーする、スケーラブルで信頼性の高い最新の方法です。Pub/Sub は、Webhook への HTTP POST リクエストとしてメッセージの push ベースの配信を行います。オブジェクトが作成、更新、削除されると、Cloud Storage はオブジェクト メタデータを含むメッセージを指定された Pub/Sub トピックにパブリッシュします。このメッセージは、Cloud Run functions、データ パイプライン、マイクロサービスなどのさまざまなサブスクライバーで使用できます。これにより、1 回以上の配信と堅牢なエラー処理機能を備えた柔軟なイベント ドリブン アーキテクチャを実現できます。

詳細については、Cloud Storage の Pub/Sub 通知をご覧ください。

オブジェクト変更通知と Pub/Sub 通知の比較

次の表に、オブジェクト変更通知と Pub/Sub 通知の機能の比較を示します。

機能 オブジェクト変更通知 Pub/Sub 通知
目的 バケット内のオブジェクトが変更されたときに、HTTP POST リクエスト(Webhook)を介してアプリケーションに直接通知します。 Cloud Storage バケット内のオブジェクトの変更に関する情報を Pub/Sub トピックに送信します。
配信メカニズム 指定されたアプリケーション URL に HTTP POST(Webhook)を送信します。 Pub/Sub トピックにパブリッシュされたメッセージは、Cloud Run functions、他のアプリケーション、データ パイプラインなどのさまざまなサブスクライバーで使用できます。
信頼性 信頼性の高い配信を試みますが、適時性は保証されません。通知は無期限に遅れる可能性があります。 1 回以上の配信を行います。つまり、メッセージが複数回配信される可能性がありますが、失われることはありません。Pub/Sub はメッセージの永続性と再試行を処理します。
スケーラビリティ アプリケーションで処理する必要のある直接 Webhook に依存するため、スケーラビリティが低くなります。 スケーラビリティが高く、大規模なイベント処理用に設計されています。
柔軟性 直接 Webhook 統合に限定されます。 柔軟性に優れます。Pub/Sub メッセージは、Cloud Run functions をトリガーしたり、データ パイプライン(Dataflow)にフィードしたり、他のマイクロサービスで使用したりできます。
フィルタリング なし Pub/Sub サブスクリプション単位で利用できる堅牢なフィルタリング オプション。サブスクライバーは、特定の条件を満たすメッセージのみを受信できます。
セキュリティ アプリケーション エンドポイントが一般公開されている(HTTPS)必要があります。 Pub/Sub は、トピックとサブスクリプションに対するきめ細かいアクセス制御を行うための IAM を提供します。通知を直接 pull する場合でも、パブリック エンドポイントに push する場合でも、安全なメッセージ配信に役立ちます。
複雑さ 基本的なユースケースでは設定が簡単な場合もありますが、信頼性の高い配信とスケーリングの管理が複雑になる可能性があります。 Pub/Sub のコンセプト(トピック、サブスクリプション)を理解する必要がありますが、イベント ドリブン アーキテクチャ向けの堅牢で管理しやすいソリューションが提供されます。
非推奨かどうか 非推奨です。新しい実装では、Pub/Sub 通知を使用することをおすすめします。 アクティブ。Cloud Storage 通知の主要な方法であり、開発が進められています。
推奨される使い方 新しいプロジェクトにはおすすめしません。主に、移行できない複雑性の低い従来型の統合に使用します。 Cloud Storage の変更に対応する、堅牢でスケーラブルなイベント ドリブン アーキテクチャを構築する場合に強く推奨されます。

Pub/Sub 通知に移行する理由

以前のオブジェクト変更通知から Cloud Storage の Pub/Sub 通知に移行することは、堅牢なイベント管理を行ううえで重要なステップです。Pub/Sub は、 Trusted Cloud内のイベント ドリブン アーキテクチャに推奨されます。技術面でも運用面でもオブジェクト変更通知より大きな利点があります。

Pub/Sub 通知に移行する利点は次のとおりです。

  • 信頼性の高い配信: Pub/Sub は、すべてのサブスクリプションについて、パブリッシュされたメッセージを 1 回以上配信し、イベントがコンシューマーに届くことを確認します。信頼性の高い配信により、データ損失が最小限に抑えられ、堅牢性の低いオブジェクト変更通知の配信モデルと比較してワークフローの信頼性が向上します。
  • スケーラビリティ: 高スループット向けに設計された Pub/Sub 通知は、大量のイベントを自動的に処理できます。Pub/Sub 通知を使用すると、オブジェクト変更通知でデータやイベントの頻度が増加したときに発生する可能性のあるパフォーマンスのボトルネックを解消できます。
  • Trusted Cloud サービスとの統合: Pub/Sub は複数の Trusted Cloud サービスとシームレスに統合し、Cloud Run functions、Cloud Run、Dataflow を使用した自動ワークフローの構築に柔軟性をもたらします。また、Cloud Logging と Cloud Monitoring を通じてオブザーバビリティを強化します。
  • きめ細かい制御: Pub/Sub を使用すると、サブスクリプション単位でメッセージをフィルタできます。これにより、コンシューマーは関連するイベントのみを受信できるため、不要な処理やネットワーク トラフィックを削減できます。
  • プラットフォームのサポート: Pub/Sub 通知は、サポートされているメッセージ サービスです。このテクノロジーに移行すると、非推奨のオブジェクト変更通知とは異なり、継続的な機能強化、セキュリティ アップデート、包括的なドキュメントを利用できます。

移行手順

オブジェクト変更通知と Cloud Storage の Pub/Sub 通知はどちらも、重複するメッセージを送信することがあります。そのため、使用するコードは、重複するメッセージを安全に処理するように設計する必要があります。

オブジェクト変更通知から Pub/Sub 通知に移行する手順は次のとおりです。

  1. 既存のオブジェクト変更通知の設定に加えて、Cloud Storage の Pub/Sub 通知の使用を開始します。Pub/Sub 通知の構成方法については、Cloud Storage の Pub/Sub 通知を構成するをご覧ください。

  2. テストを行い、アプリケーションの Pub/Sub 通知処理ワークフローが正しく機能していることを確認します。Pub/Sub サブスクリプションをモニタリングする方法については、Pub/Sub 内のサブスクリプションをモニタリングするをご覧ください。

  3. オブジェクト変更通知チャンネルから受信したメッセージの処理を停止します。通知チャンネルを停止するには、停止リクエストを行います。

Pub/Sub push サブスクリプションに関する考慮事項

Pub/Sub pull サブスクリプションは柔軟性と制御性が向上しますが、Pub/Sub push サブスクリプションはオブジェクト変更通知メッセージに似ています。そのため push サブスクリプションは、既存のオブジェクト変更通知のユーザーにとって迅速な移行パスとなります。push サブスクリプションと pull サブスクリプションの詳細な比較については、サブスクリプション タイプを選択するをご覧ください。

push サブスクリプションを使用する場合や、同様に既存の通知処理コードを再利用する場合は、オブジェクト変更通知と Pub/Sub 通知における push リクエスト形式とレスポンス コードの解釈の違いを考慮する必要があります。違いについては、以降のセクションで説明します。

push リクエストの形式

このセクションでは、オブジェクト変更通知と Pub/Sub 通知における push リクエスト形式の違いについて説明します。

  • オブジェクト変更通知: オブジェクト変更通知は、アプリケーション URL への HTTP POST リクエストとして次の形式で配信されます。

    POST /ApplicationUrlPath
    Accept: * / *
    Content-Length: 1097
    Content-Type: application/json; charset="utf-8"
    Host: ApplicationUrlHost
    X-Goog-Channel-Id: ChannelId
    X-Goog-Channel-Token: ClientToken
    X-Goog-Resource-Id: ResourceId
    X-Goog-Resource-State: ResourceState
    X-Goog-Resource-Uri: https://storage.googleapis.com/storage/v1/b/BucketName/o?alt=json
    
    {
    "kind": "storage#object",
    "id": "BucketName/ObjectName",
    "selfLink": "https://www.googleapis.com/storage/v1/b/BucketName/o/ObjectName",
    "name": "ObjectName",
    "bucket": "BucketName",
    "generation": "1367014943964000",
    "metageneration": "1",
    "contentType": "application/octet-stream",
    "updated": "2013-04-26T22:22:23.832Z",
    "size": "10",
    "md5Hash": "xHZY0QLVuYng2gnOQD90Yw==",
    "mediaLink": "https://content-storage.googleapis.com/storage/v1/b/BucketName/o/ObjectName?generation=1367014943964000&alt=media",
    "owner": {
      "entity": "user-jeffersonloveshiking@gmail.com"
    },
    "crc32c": "C7+82w==",
    "etag": "COD2jMGv6bYCEAE="
    }
    
  • Pub/Sub 通知: push 配信用に構成された Pub/Sub 通知は、HTTP POST リクエストとして配信されます。data フィールドには、base64 エンコードされた Cloud Storage イベント ペイロードが含まれています。データ フィールドがデコードされると、オブジェクト変更通知のメッセージ本文と一致します。

    POST /YourSpecifiedURL
    Accept: * / *
    Content-Length: 1097
    Content-Type: application/json; charset="utf-8"
    Host: ApplicationUrlHost
    {
      "deliveryAttempt": 5,
      "message":
        {"attributes":
          {"notificationConfig":"projects/_/buckets/foo/notificationConfigs/3",
            "eventType": "OBJECT_FINALIZE",
            "payloadFormat": "JSON_API_V1",
            "bucketId": "foo",
            "objectId": "bar",
            "objectGeneration": 123456,
            "eventTime": "2021-01-15T01:30:15.01Z"
          },
        "data": "ewogImtpbm",
        "messageId": "2070443601311540",
        "message_id": "2070443601311540",
        "orderingKey": "key",
        "publishTime": "2021-02-26T19:13:55.749Z",
        "publish_time": "2021-02-26T19:13:55.749Z"
        },
      "subscription": "projects/myproject/subscriptions/mysubscription"
    }
    

レスポンス コード

次の表に、オブジェクト変更通知と Pub/Sub 通知におけるレスポンス コードの解釈の違いを示します。

機能 レスポンス コード 解釈 アクション
オブジェクト変更通知
102200201202204 成功 メッセージが処理されました
500502503504 処理できませんでした 後で再試行してください
タイムアウト、接続の失敗、応答なし 処理できませんでした 後で再試行してください
その他の HTTP コード(404 など) 永続的なエラー メッセージを再試行しないでください
Pub/Sub 通知
102200201202204 成功 メッセージが確認されました
その他のすべてのレスポンス コード、タイムアウト、接続エラー 失敗 後で再試行してください

次のステップ