コンテナを構成する

このページでは、Cloud Run サービスのコンテナポート、エントリポイント コマンド、引数を構成する方法について説明します。

Cloud Run がコンテナを起動すると、イメージのデフォルトのエントリポイント コマンドとデフォルトのコマンド引数が実行されます。イメージのデフォルトのエントリポイントとコマンド引数をオーバーライドする場合は、コンテナ構成の command フィールドと args フィールドを使用できます。command フィールドは、コンテナによって実行される実際のコマンドを指定します。args フィールドは、そのコマンドに渡される引数を指定します。

必要なロール

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

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

コンテナポートを構成する

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。

Cloud Run サービスの場合、Cloud Run によってコンテナに PORT 環境変数が挿入されます。1 つのサービスに複数のコンテナをデプロイする場合、これは Ingress コンテナになります。コンテナは、特定のハードコードされたポートではなく、PORT 環境変数で定義されたポートをリッスンします。それができない場合は、コンテナにリクエストを送信するポートでリッスンするように構成します。ポート設定は Cloud Run ジョブに適用されません。

コンソール

  1. Google Cloud コンソールで、[Cloud Run] に移動します。

    Cloud Run に移動

  2. [コンテナをデプロイ] をクリックし、[サービス] を選択して、新しいサービスを構成します。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. 新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。

  4. [コンテナ] タブをクリックします。

    画像

    • リクエストを送信するポートを指定します(デフォルト値 8080 でない場合)。これにより、PORT 環境変数も設定されます。
  5. [作成] または [デプロイ] をクリックします。

gcloud

次のコマンドを使用して、サービスのポート構成を更新できます。

gcloud run services update SERVICE --port PORT

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

  • SERVICE は、サービスの名前に置き換えます。
  • PORT は、リクエストを送信するポートに置き換えます。デフォルトのポートは 8080 です。

デプロイの間に、次のコマンドを使用してポートを構成することもできます。

gcloud run deploy --image IMAGE_URL --port PORT

IMAGE_URL は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)に置き換えます。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. containerPort: 属性を更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            ports:
            - containerPort: PORT
    

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

    • SERVICE: Cloud Run サービスの名前。
    • IMAGE_URL は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)に置き換えます。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
    • PORT は、リクエストを送信するポートに置き換えます。
    • REVISION を新しいリビジョン名に置き換えるか、削除(存在する場合)します。新しいリビジョン名を指定する場合は、次の条件を満たす必要があります
      • SERVICE- で始まる
      • 小文字、数字、- のみが使用されている
      • 末尾が - ではない
      • 63 文字以内である
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

エントリポイントと引数を構成する

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。

指定されたコンテナ コマンドと引数によって、デフォルトのイメージ ENTRYPOINTCMD がオーバーライドされます。

新しいサービスを作成するとき、または新しいリビジョンをデプロイするときに、Google Cloud コンソール、Google Cloud CLI、または .yaml ファイルを使用して、エントリポイント コマンドと引数を設定できます。

コンソール

  1. Google Cloud コンソールで、[Cloud Run] に移動します。

    Cloud Run に移動

  2. [コンテナをデプロイ] をクリックし、[サービス] を選択して、新しいサービスを構成します。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. 新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。

  4. [コンテナ] タブをクリックします。

    画像

    • コンテナで実行するコマンドを指定します(コンテナでコマンドが定義されていない場合)。オプションで、エントリポイント コマンドへの引数を指定します。
  5. [作成] または [デプロイ] をクリックします。

gcloud

既存のサービスの start コマンドと引数を更新するには:

gcloud run services update SERVICE --command COMMAND --args ARG1,ARG-N

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

  • COMMAND は、デフォルトのコマンドを使用していない場合に、コンテナを起動するコマンドに置き換えます。
  • ARG1 は、コンテナ コマンドに送信する引数に置き換えます。引数が複数の場合はカンマ区切りのリストを使用します。

新しいサービスまたは既存のサービスのデプロイ中にエントリ ポイントと引数を指定するには:

gcloud run deploy --image IMAGE_URL --command COMMAND --args ARG1,ARG-N

IMAGE_URL は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)に置き換えます。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。

設定したエントリポイント コマンドと引数をクリアするには(コンテナのデフォルトに戻すには)、次のように空の文字列を指定します。

gcloud run deploy --image IMAGE_URL --command "" --args ""

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. command 属性と args 属性を更新します。

    spec:
      containers:
      - image: IMAGE_URL
        command:
        - COMMAND
        args:
        - "ARG1"
        - "ARG-N"
    

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

    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形式は LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG です。
    • COMMAND は、デフォルトのコマンドを使用していない場合に、コンテナを起動するコマンドに置き換えます。
    • ARG1 は、コンテナ コマンドに送信する引数に置き換えます。複数の引数を使用する場合は、それぞれを 1 行に 1 つずつ指定します。たとえば、上述の ARG-N のようにします。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

次の google_cloud_run_v2_service リソースは、コマンドと引数を指定します。/server は、コンテナの起動に使用するコマンドに置き換え、必要な引数を args 配列に追加します。

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-containers"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      # Container "entry-point" command
      command = ["/server"]

      # Container "entry-point" args
      args = []
    }
  }
}

引数に等号またはカンマを使用する

引数で等号を使用する場合は、次の形式を使用して指定します。

gcloud run deploy  \
  --args="--repo-allowlist=github.com/example/example_demo"

引数にカンマが含まれる場合、カンマをエスケープする方法については、環境変数の構成をご覧ください。

サイドカー デプロイでコンテナの起動順序を構成する

サイドカー デプロイでコンテナの起動順序を指定するには、コンテナの依存関係の特性を利用します。依存関係のあるコンテナを指定し、それらが依存するコンテナをリストします。これらのコンテナが最初に開始されます。依存関係のないコンテナは常に最初に同時実行として起動されます。

この機能を正常に使用するには、起動ヘルスチェック プローブを使用する必要があります。起動プローブにより、Cloud Run は依存コンテナの状態を検査し、次のコンテナを起動する前に合格したことを確認します。ヘルスチェックを使用しない場合、コンテナが起動に失敗した場合でも、コンテナは指定された順序で起動します。

Ingress コンテナには、デフォルトの起動ヘルスチェック プローブがあります。

起動順序は、Google Cloud コンソール、Google Cloud CLI、または YAML で指定できます。

コンソール

  1. Google Cloud コンソールで [Cloud Run] ページに移動します。

    Cloud Run に移動

    • 既存のサービスの場合は、リスト内のサービスをクリックし、[新しいリビジョンの編集とデプロイ] を選択して、リビジョン デプロイ フォームを表示します。
    • 新しいサービスを作成する場合は、[コンテナをデプロイ] をクリックし、[サービス] を選択して [サービスの作成] フォームを表示します。
  2. 新しいサービスの場合は、サービス名、上り(内向き)コンテナ URL、CPU 割り当て、上り(内向き)制御、認証を指定します。[コンテナ、ボリューム、ネットワーキング、セキュリティ] タブで、次の操作を行います。

    1. Ingress コンテナを構成します。
    2. デプロイする他のコンテナを追加するには、[コンテナを追加] をクリックします。
    3. Ingress コンテナを除くすべてのコンテナで、起動ヘルスチェックを構成します。Ingress コンテナには、デフォルトの起動ヘルスチェックがあります。
    4. コンテナを起動する前に他のコンテナを起動する必要がある場合は、[コンテナの起動順序] メニューで、最初に起動するコンテナを選択します。
  3. 既存のサービスの場合は、次の操作を行います。

    1. Ingress コンテナを除くすべてのコンテナで、起動ヘルスチェックを構成します。Ingress コンテナには、デフォルトの起動ヘルスチェックがあります。
    2. 各コンテナには、独自の [コンテナの起動順序] メニューが表示されます。コンテナを起動する前に他のコンテナを起動する必要がある場合は、[コンテナの起動順序] メニューで、最初に起動するコンテナを選択します。
  4. その他の必要な構成を完了し、新しいサービスの場合は [作成]、既存のサービスの場合は [デプロイ] をクリックします。デプロイが完了するまで待ちます。

gcloud

Google Cloud CLI を使用して起動順序を指定する前に、Ingress コンテナを除くすべてのコンテナに対して起動ヘルスチェックを構成する必要があります。Ingress コンテナには、デフォルトの起動ヘルスチェックがあります。Google Cloud CLI を使用してヘルスチェックを構成することはできません。

  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 run deploy SERVICE \
     --container CONTAINER_1_NAME --image='INGRESS_IMAGE' --port='CONTAINER_PORT' \
     --container CONTAINER_2_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAME \
     --container CONTAINER_3_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAMECONTAINER_2_NAME
  • SERVICE は、デプロイ先のサービスの名前に置き換えます。このパラメータは省略できますが、省略するとサービス名の入力を求められます。
  • CONTAINER_PORT は、Ingress コンテナが受信リクエストをリッスンするポートに置き換えます。単一コンテナのサービスとは異なり、サイドカーを含むサービスには、Ingress コンテナのデフォルト ポートがありません。Ingress コンテナのコンテナポートを明示的に構成する必要があります。ポートを公開できるのは 1 つのコンテナのみです。
  • INGRESS_IMAGE は、リクエストを受け取るコンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)に置き換えます。
  • SIDECAR_IMAGE は、サイドカー コンテナ イメージへの参照に置き換えます。

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

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. container-dependencies 属性を更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/container-dependencies: '{"CONTAINER1":["CONTAINER2"], "CONTAINER3":["CONTAINER1","CONTAINER2"]}'
    

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

    • CONTAINER1 は、1 つ以上のコンテナに依存する最初のコンテナの名前に置き換えます。コンテナ名は YAML で設定できます。名前を指定しなかった場合、Cloud Run は自動的に名前を生成します。
    • CONTAINER2 は、CONTAINER1 の前に起動する必要があるコンテナの名前に置き換えます。
    • CONTAINER3 は、1 つ以上のコンテナに依存する 2 番目のコンテナの名前に置き換えます。

    YAML スニペットの例では、CONTAINER2 が最初に起動し、次に CONTAINER1 が起動して、最後に CONTAINER3 が起動しています。

  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

コンテナ設定を表示する

Cloud Run サービスの現在のコンテナ設定を表示するには:

コンソール

  1. Google Cloud コンソールで、[Cloud Run] に移動します。

    Cloud Run に移動

  2. 目的のサービスをクリックして、[サービスの詳細] ページを開きます。

  3. [変更内容] タブをクリックします。

  4. 右側の詳細パネルで、コンテナ設定が [コンテナ] タブに表示されます。

gcloud

  1. 次のコマンドを使用します。

    gcloud run services describe SERVICE
  2. 返された構成で、コンテナ設定を見つけます。