ワーカープールを Cloud Run にデプロイする

このページでは、コンテナ イメージを新しい Cloud Run ワーカープールまたは既存の Cloud Run ワーカープールの新しいリビジョンにデプロイする方法について説明します。

ワーカープールは、リクエスト以外のワークロード用に特別に設計された Cloud Run リソースです。Cloud Run サービスとは対照的に、ワーカープールには次の機能がありません。

  • パブリック エンドポイント / URL
  • 上り(内向き)ポートを公開する要件
  • リクエスト ドリブンの自動スケーリング

新しいワーカープールをデプロイするチュートリアルの例については、クイックスタート: サンプル ワーカープールをデプロイするをご覧ください。

必要なロール

Cloud Run ワーカープールのデプロイに必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールCloud Run IAM 権限をご覧ください。Cloud Run ワーカープールがGoogle Cloud API(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限アクセスの管理をご覧ください。

サポートされているコンテナ レジストリとイメージ

Artifact Registry または Docker Hub に保存されているコンテナ イメージを直接使用できます。Google では Artifact Registry の使用をおすすめします。Docker Hub イメージは最大 1 時間キャッシュに保存されます。

Artifact Registry リモート リポジトリを設定することで、他の公開または限定公開のレジストリ(JFrog Artifactory、Nexus、GitHub Container Registry など)のコンテナ イメージを使用できます。

Docker の公式イメージDocker が提供する OSS イメージなど、一般的なコンテナ イメージをデプロイする場合にのみ、Docker Hub の使用を検討してください。可用性を高めるには、これらの Docker Hub イメージを Artifact Registry リモート リポジトリ経由でデプロイすることをおすすめします。

Cloud Run は、Docker Hub または外部レジストリを使用する Artifact Registry リモート リポジトリからデプロイする場合について、9.9 GB を超えるコンテナ イメージ レイヤをサポートしていません。

ワーカープールをデプロイする

ワーカープールは次の方法でデプロイできます。

新しいワーカープールをデプロイする

タグ(たとえば、us-docker.pkg.dev/my-project/container/my-image:latest)または正確なダイジェスト(たとえば、us-docker.pkg.dev/my-project/container/my-image@sha256:41f34ab970ee...)でコンテナ イメージを指定できます。

ワーカープールを初めてデプロイすると、最初のリビジョンが作成されます。リビジョンは変更されません。コンテナ イメージタグからデプロイすると、ダイジェストに解決され、リビジョンは常にこの特定のダイジェストを処理します。

Google Cloud CLI を使用して操作を行います。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. ワーカープールのコンテナ イメージをデプロイするには:

    1. 次のコマンドを実行します。

      gcloud beta run worker-pools deploy WORKER_POOL --image IMAGE_URL 

      次のように置き換えます。

      • WORKER_POOL は、デプロイ先のワーカープールの名前に置き換えます。ワーカープールがまだ存在しない場合、このコマンドはデプロイ中にワーカープールを作成します。このパラメータは省略できますが、省略するとワーカープールの名前を入力するよう求められます。ワーカープール名は 49 文字以下で、リージョンとプロジェクトごとに一意の名前を使用する必要があります。また、プロジェクトの既存のサービス名と同じ名前は使用できません。
      • IMAGE_URL は、ワーカープールを含むコンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/worker-pool:latest など)に置き換えます。--image フラグを指定しないと、deploy コマンドはソースコードからのデプロイを試行します。
    2. デプロイが完了するまで待ちます。正常に完了すると、Cloud Run に成功メッセージと、デプロイされたワーカープールのリビジョン情報が表示されます。

      run/region gcloud プロパティで設定した場所とは異なる場所にデプロイする場合は、次のようにします。

      gcloud beta run worker-pools deploy WORKER_POOL --region REGION

既存のワーカープールの新しいリビジョンをデプロイする

ワーカープールの構成設定を変更すると、コンテナ イメージに変更がない場合でも、新しいリビジョンが作成されます。作成されたリビジョンは変更できません。

コンテナ イメージは、デプロイ時に Cloud Run によってインポートされます。Cloud Run は、リビジョンによって使用されている限り、コンテナ イメージのコピーを保持します。

Google Cloud CLI を使用して、次の操作を行います。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. コンテナ イメージをデプロイするには:

    1. 次のコマンドを実行します。

      gcloud beta run worker-pools deploy WORKER_POOL --image IMAGE_URL 

      次のように置き換えます。

      • WORKER_POOL は、デプロイ先のワーカープールの名前に置き換えます。ワーカープールがまだ存在しない場合、このコマンドはデプロイ中にワーカープールを作成します。このパラメータは省略できますが、省略するとワーカープールの名前を入力するよう求められます。ワーカープール名は 49 文字以下で、リージョンとプロジェクトごとに一意の名前を使用する必要があります。また、プロジェクトの既存のサービス名と同じ名前は使用できません。
      • IMAGE_URL は、ワーカープールを含むコンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/worker-pool:latest など)に置き換えます。--image フラグを指定しないと、deploy コマンドはソースコードからのデプロイを試行します。

      リビジョン サフィックスは、新しいリビジョンに自動的に割り当てられます。独自のリビジョン サフィックスを指定する場合は、gcloud CLI パラメータ --revision-suffix を使用します。

    2. デプロイが完了するまで待ちます。正常に完了すると、Cloud Run に成功メッセージと、デプロイされたワーカープールのリビジョン情報が表示されます。

他の Google Cloud プロジェクトからイメージをデプロイする

他の Google Cloud プロジェクトからイメージをデプロイするには、ご自身または管理者がデプロイ担当者アカウントと Cloud Run サービス エージェントに必要な IAM ロールを付与する必要があります。

デプロイ担当者アカウントに必要なロールについては、必要なロールをご覧ください。

Cloud Run サービス エージェントに必要なロールを付与するには、次の手順をご覧ください。

  1. Google Cloud コンソールで、Cloud Run ワーカープールのプロジェクトを開きます。

    IAM ページに移動

  2. [Google 提供のロール付与を含む] を選択します。

  3. Cloud Run サービス エージェントのメールアドレスをコピーします。このアドレスには、@serverless-robot-prod.iam.gserviceaccount.com という接尾辞が付いています。

  4. 使用するコンテナ レジストリを所有するプロジェクトを開きます。

    [IAM] ページに移動

  5. [追加] をクリックして、新しいプリンシパルを追加します。

  6. [新しいプリンシパル] フィールドに、先ほどコピーしたサービス アカウントのメールアドレスを貼り付けます。

  7. Container Registry を使用している場合は、[ロールを選択] プルダウン メニューで、[ストレージ] -> [Storage オブジェクト閲覧者] を選択します。Artifact Registry を使用している場合は、[Artifact Registry] -> [Artifact Registry 読み取り] のロールを選択します。

  8. Cloud Run ワーカープールを含むプロジェクトにコンテナ イメージをデプロイします。

他のレジストリからイメージをデプロイする

Artifact Registry または Docker Hub に保存されていない公開コンテナ イメージまたは限定公開コンテナ イメージをデプロイするには、Artifact Registry のリモート リポジトリ設定します。

Artifact Registry リモート リポジトリを使用すると、次のことが可能になります。

  • 公開コンテナ イメージをデプロイします(例: GitHub Container Registry(ghcr.io))。
  • 認証を必要とする限定公開リポジトリ(JFrog Artifactory や Nexus など)からコンテナ イメージをデプロイします。

Artifact Registry リモート リポジトリを使用できない場合は、docker push を使用して Cloud Run にデプロイすることで、コンテナ イメージを一時的に pull して Artifact Registry に push できます。Cloud Run はデプロイ時にコンテナ イメージをインポートします。その後、Artifact Registry からイメージを削除できます。

ワーカープールに複数のコンテナ(サイドカー)をデプロイする

サイドカーを使用した Cloud Run のデプロイでは、メインのワーカープール コンテナと 1 つ以上のサイドカー コンテナがあります。サイドカーは、localhost ポートを使用して相互に通信し、ワーカープール コンテナと通信できます。localhost ポートは、使用しているコンテナによって異なります。

ワーカープール コンテナを含め、インスタンスごとに最大 10 個のコンテナをデプロイできます。インスタンス内のすべてのコンテナは同じネットワーク名前空間を共有し、メモリ内共有ボリュームを使用してファイルを共有できます。

カスタムの組織のポリシーを作成して、すべてのデプロイで特定のサイドカーの使用を必須にできます。

サイドカー コンテナを使用してサービスをデプロイする

Google Cloud CLI を使用して複数のコンテナを Cloud Run ワーカープールにデプロイするには、次の操作を行います。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 複数のコンテナをワーカープールにデプロイするには、次のコマンドを実行します。

    gcloud beta run worker-pools deploy WORKER_POOL \
     --container WORKER_POOL_CONTAINER_NAME \
     --image='WORKER_POOL_IMAGE' \
     --container SIDECAR_CONTAINER_NAME \
     --image='SIDECAR_IMAGE'

    次のように置き換えます。

    • WORKER_POOL は、デプロイ先のワーカープールの名前に置き換えます。このパラメータを省略すると、ワーカープール名の入力を求められます。
    • WORKER_POOL_CONTAINER_NAME は、ワーカープール コンテナの名前に置き換えます。
    • IMAGE_URL は、ワーカープールを含むコンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/worker-pool:latest など)に置き換えます。
    • SIDECAR_CONTAINER_NAME は、サイドカー コンテナの名前(sidecar など)に置き換えます。
    • SIDECAR_IMAGE は、サイドカー コンテナ イメージへの参照に置き換えます。

    deploy コマンドで各コンテナを構成するには、次のように、container パラメータの後に各コンテナの構成を指定します。

    gcloud beta run worker-pools deploy WORKER_POOL \
      --container CONTAINER_1_NAME \
      --image='WORKER_POOL_IMAGE' \
      --set-env-vars=KEY=VALUE \
      --container SIDECAR_CONTAINER_NAME \
      --image='SIDECAR_IMAGE' \
      --set-env-vars=KEY_N=VALUE_N
  3. デプロイが完了するまで待ちます。正常に完了すると、Cloud Run に成功メッセージが表示されます。

サイドカーを使用したデプロイで使用できる注目の機能

一部のコンテナが Deployment の他のコンテナよりも先に起動しなければならない依存関係がある場合は、複数のコンテナを含む Deployment にコンテナの起動順序を指定できます。

他のコンテナに依存するコンテナがある場合は、Deployment でヘルスチェックを使用する必要があります。ヘルスチェックを使用すると、Cloud Run はコンテナの起動順序に従い、次のコンテナを起動する前に各コンテナの健全性を確認します。ヘルスチェックがない場合、Cloud Run は、依存しているコンテナがまだ実行されていない場合や起動に失敗した場合でも、すべてのコンテナを起動しようとします。

1 つのインスタンス内の複数のコンテナが、共有するメモリ内ボリュームにアクセスできます。このボリュームは、作成したマウント ポイントを介して各コンテナからアクセスできます。

次のステップ

新しいワーカープールをデプロイしたら、次の操作を行うことができます。