pull キューの Cloud Pub/Sub への移行

このページでは、タスクキューから Cloud Pub/Sub に pull キューコードを移行する方法について説明します。App Engine で pull キューの処理を実行する場合、Cloud Pub/Sub が現時点ではおすすめの方法です。

アプリで pull キューと push キューの両方を使用する場合は、このガイドに従って、pull キューを Cloud Pub/Sub に移行してから push キューを新しい pull キューサービス Cloud Tasks に移行します。push キューを Cloud Tasks に移行した後に pull キューを移行することはおすすめしません。queue.yaml ファイルを使用することにより Cloud Tasks で予期しない動作が発生する可能性があるためです。

Cloud Pub/Sub で現在利用できない機能

次のタスクキューの機能は、現在、Cloud Pub/Sub で使用できません。

  • タグによるバッチ処理
  • 自動重複除去

料金と割り当て

pull キューを Cloud Pub/Sub に移行すると、アプリの料金と割り当てに影響する場合があります。

料金

Cloud Pub/Sub には独自の料金が適用されます。タスクキューと同様に、App Engine アプリに Cloud Pub/Sub を使用してリクエストを送信するとアプリに費用がかかることがあります。

割り当て

Cloud Pub/Sub の割り当ては、タスクキューの割り当てとは異なります。タスクキューと同様に、Cloud Pub/Sub から App Engine アプリにリクエストを送信すると、App Engine リクエストの割り当てに影響する場合があります。

移行前

このセクションでは、pull キューを Cloud Pub/Sub に移行する前に確認する必要があるトピックについて説明します。

Cloud Pub/Sub API の有効化

Cloud Pub/Sub API を有効にするには、API ライブラリの [Cloud Pub/Sub API] で [有効にする] をクリックします。[有効にする] ボタンの代わりに [管理] ボタンが表示されている場合は、以前にプロジェクトの Cloud Pub/Sub API を有効にしているため、再び有効にする必要はありません。

Cloud Pub/Sub API に対するアプリの認証

Cloud Pub/Sub API に対してアプリを認証する必要があります。このセクションでは、2 つの異なるユースケースの認証について説明します。

アプリをローカルで開発またはテストするには、サービス アカウントを使用することをおすすめします。サービス アカウントを設定してアプリに接続する手順については、サービス アカウントの資格情報を手動で取得して提供するをご覧ください。

アプリを App Engine にデプロイする場合、新しい認証を行う必要はありません。アプリケーションのデフォルト認証情報(ADC)では、App Engine アプリの認証の詳細が推測されます。

Cloud SDK のダウンロード

Cloud SDK をダウンロードしてインストールし、以前にインストールしていない場合、Cloud Pub/Sub API で gcloud ツールを使用します。Cloud SDK がすでにインストールされている場合は、ターミナルから次のコマンドを実行します。

gcloud components update

Python クライアント ライブラリのインポート

App Engine アプリで Cloud Pub/Sub Python クライアント ライブラリを使用するには、次の手順を行います。

  1. サードパーティ ライブラリの保存先ディレクトリ(例: lib/)を作成します。

    mkdir lib
  2. 必要なライブラリをコピーします。

    コマンドラインからライブラリを 1 つずつインストールするのではなく、pip 要件ファイルを使用することをおすすめします。まだ requirements.txt ファイルが作成されていない場合は、app.yaml ファイルと同じフォルダに requirements.txt ファイルを作成します。次の行を追加します。

    google-cloud-pubsub
    

    -t <directory> フラグを付けて pip(バージョン 6 以降)を使用することにより、requirements.txt ファイルで指定した Cloud Pub/Sub ライブラリが前の手順で作成したフォルダにコピーされます。次に例を示します。

    pip install -t lib -r requirements.txt
    
  3. app.yaml ファイルの libraries セクションで RPC ライブラリを指定します。

    libraries:
    - name: grpcio
      version: 1.0.0
    
  4. pkg_resources モジュールを使用して、アプリが Cloud Pub/Sub Python クライアント ライブラリの適切なディストリビューションを使用するようにします。

    まだ作成されていない場合は、app.yaml ファイルと同じフォルダに appengine_config.py ファイルを作成します。次のコードを appengine_config.py ファイルに追加します。

    # appengine_config.py
    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set path to your libraries folder.
    path = 'lib'
    # Add libraries installed in the path folder.
    vendor.add(path)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(path)
    

    この例の appengine_config.py ファイルでは、現在の作業ディレクトリが lib フォルダの置かれているディレクトリであるものと想定しています。単体テストなどの一部のケースでは、現在の作業ディレクトリはこれとは異なる場合があります。エラーが発生しないようにするために、lib フォルダのフルパスを次のようにして明示的に指定できます。

    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
    
  5. タスクキュー API から pull キューを使用するファイルに Cloud Pub/Sub Python クライアント ライブラリをインポートします。

    from google.cloud import pubsub_v1

Cloud Pub/Sub と pull キュー

機能の比較

Cloud Pub/Sub は、パブリッシャー / サブスクライバーの関係を通じてワーカーに作業を送信します。Cloud Pub/Sub の pull サブスクリプションは、サブスクライバーがトピックからメッセージを pull するため、タスクキューの pull キューと似ています。タスクキューの pull キューのコア機能と、Cloud Pub/Sub の pull サブスクリプションの関連機能を次の表に示します。

タスクキューの機能 Cloud Pub/Sub の機能
キュー トピック
タスク メッセージ
ワーカー サブスクライバー

Cloud Pub/Sub アーキテクチャの詳細については、Cloud Pub/Sub: Google 規模のメッセージ サービスをご覧ください。

ワークフローの比較

タスクキューの pull キューと Cloud Pub/Sub の pull サブスクリプションの一般的なワークフローの比較を次の表に示します。

タスクキューのワークフロー Cloud Pub/Sub のワークフロー
pull キューを作成する トピックを作成し、サブスクライバー(ワーカー)をトピックに登録する
タスクを作成してキューに追加する メッセージを作成してトピックに公開する
ワーカーがタスクをリースする サブスクライバーがトピックからメッセージを pull する
ワーカーがタスクを処理する サブスクライバーがメッセージを処理する
ワーカーがタスクをキューから削除する サブスクライバーがメッセージを確認応答します
リースが期限切れになる すべてのサブスクライバーがメッセージを確認応答すると、トピックでメッセージが削除される

Cloud Pub/Sub での pull サブスクリプションの作成

Cloud Pub/Sub の pull サブスクリプションは、タスクキューの pull キューのように使用できます。トピックのサブスクリプションには有効期限がなく、複数のワーカーに同時に存在することもあります。これは、複数のワーカーが 1 つのメッセージを処理できることを意味します。これは、Cloud Pub/Sub の主なユースケースの 1 つです。タスクキューの pull キューを Cloud Pub/Sub の pull サブスクリプションとして再作成するには、各ワーカーにトピックを作成し、関連するワーカーのみをトピックに登録します。これにより、タスクキューのように各メッセージが 1 名のワーカーによってのみ処理されるようになります。pull サブスクリプションの作成と管理の詳細については、トピックとサブスクリプションの管理をご覧ください。

pull キューの削除

タスクキューの pull キューを Cloud Pub/Sub の pull サブスクリプションに移行した後に、queue.yaml ファイルを使用してタスクキューから pull キューを削除します。各 pull キューを削除してから、次のキューを移行することをおすすめします。これにより、他の pull キューの移行時に、アプリが新しい Cloud Pub/Sub の pull サブスクリプションから受け取った作業を複製しなくなります。タスクキューの pull キューを単一のデプロイで削除せずに 1 つずつ削除すると、App Engine ののデプロイ割り当てに大きな影響を与える可能性があるので注意してください。

タスクキューからすべての pull キューを削除した後は、アプリの今後のデプロイで queue.yaml ファイルを省略できます。

アプリで pull キューのみを使用する場合は、コード内のタスクキュー API への参照をすべて削除します。アプリで pull キューと push キューの両方を使用する場合は、pull キューのみを使用するファイルで発生するタスクキュー API への参照を削除するか、push キューを移行するまで待機して、すべてのファイルからタスクキュー API への参照を削除します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Python 2 の App Engine スタンダード環境