Cloud Run へのコンテナ イメージのデプロイ

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

コンテナ イメージは、デプロイ時に Cloud Run によってインポートされます。Cloud Run は、サービス提供リビジョンによって使用されている限り、コンテナ イメージのコピーを保持します。新しい Cloud Run インスタンスが起動されたときに、コンテナ イメージがコンテナ リポジトリから pull されることはありません。

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

始める前に

ドメイン制限の組織のポリシーでプロジェクトの未認証呼び出しが制限されている場合は、限定公開サービスのテストの説明に従って、デプロイされたサービスにアクセスする必要があります。

必要なロール

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

Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールCloud Run IAM 権限をご覧ください。Cloud Run サービスがGoogle Cloud APIs(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...)でコンテナ イメージを指定できます。

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

タブをクリックして、使用するツールでの手順を確認してください。

コンソール

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

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

    Cloud Run に移動

  2. [コンテナのデプロイ] をクリックして、[サービスの作成] フォームを表示します。

    1. フォームで、デプロイ オプションを選択します。

      1. コンテナを手動でデプロイする場合は、[既存のコンテナ イメージから 1 つのリビジョンをデプロイする] を選択し、コンテナ イメージを指定します。

      2. 継続的デプロイを自動化する場合は、[ソース リポジトリから新しいリビジョンを継続的にデプロイする] を選択し、継続的デプロイの手順の説明に従ってください。

    2. 必要なサービス名を入力します。サービス名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。サービス名は後から変更することはできません。この名前は一般公開されます。

    3. サービスのリージョンを選択します。リージョン セレクタには、料金階層ドメイン マッピングの可用性が示され、カーボン フットプリントの影響が最も低いリージョンがハイライト表示されます。

    4. 必要に応じてお支払い情報を設定します。

    5. [サービスのスケーリング] で、デフォルトの Cloud Run 自動スケーリングを使用する場合は、必要に応じて最小インスタンス数を指定します。手動スケーリングを使用する場合は、サービスのインスタンス数を指定します。

    6. フォームの Ingress 設定を必要に応じて設定します。

    7. [認証] で、次の構成を行います。

      • 公開 API またはウェブサイトを作成する場合は、[公開アクセスを許可する] を選択します。これをオンにすると、allUser という特別な ID に IAM 起動元ロールが割り当てられます。サービスの作成後に、IAM を使用してこの設定を編集できます。
      • 認証で保護された安全なサービスが必要な場合は、[認証が必要] を選択します。
  3. [コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックして、該当するタブでその他のオプション設定を指定します。

  4. サービスの構成が完了したら、[作成] をクリックしてイメージを Cloud Run にデプロイし、デプロイの完了を待ちます。

  5. 表示された URL リンクをクリックして、デプロイしたサービスで一意の安定したエンドポイントを開きます。

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 run deploy SERVICE --image IMAGE_URL

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

      • SERVICE: デプロイ先のサービスの名前。サービス名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。サービスがまだ存在しない場合、デプロイ中にこのコマンドによってサービスが作成されます。このパラメータは省略できますが、省略するとサービス名の入力を求められます。
      • 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 の形式です。--image フラグを指定しないと、deploy コマンドでソースコードからのデプロイが試行されます。

      公開 API またはウェブサイトを作成する場合は、--allow-unauthenticated フラグを使用してサービスへの公開アクセスを許可します。これにより、Cloud Run 呼び出し元の IAM ロールallUsers に割り当てられます。--no-allow-unauthenticated を指定して公開アクセスを禁止することもできます。いずれかのフラグを省略すると、deploy コマンドの実行時に確認のプロンプトが表示されます。

    2. デプロイが完了するまで待ちます。正常に完了すると、デプロイされたサービスの URL が成功のメッセージと一緒に表示されます。

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

    gcloud run deploy SERVICE --region REGION

  3. YAML

    サービス仕様を YAML ファイルに保管してから、gcloud CLI を使用してデプロイできます。

    1. 次の内容の新しいファイルを service.yaml という名前で作成します。

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: SERVICE
      spec:
        template:
          spec:
            containers:
            - image: IMAGE

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

      • SERVICE: Cloud Run サービスの名前。サービス名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。
      • IMAGE: コンテナ イメージの URL。

      環境変数やメモリ上限など他の構成を指定することもできます。

    2. 次のコマンドを使用して新しいサービスをデプロイします。

      gcloud run services replace service.yaml
    3. (省略可能)サービスへの未認証アクセスを許可したい場合は、サービスを一般公開にします

    Terraform

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

    Terraform 構成の google_cloud_run_v2_service リソースに次の内容を追加します。
      provider "google" {
        project = "PROJECT-ID"
      }
    
      resource "google_cloud_run_v2_service" "default" {
        name     = "SERVICE"
        location = "REGION"
        client   = "terraform"
    
        template {
          containers {
            image = "IMAGE_URL"
          }
        }
      }
    
      resource "google_cloud_run_v2_service_iam_member" "noauth" {
        location = google_cloud_run_v2_service.default.location
        name     = google_cloud_run_v2_service.default.name
        role     = "roles/run.invoker"
        member   = "allUsers"
      }
    

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

    • PROJECT-ID: Google Cloud プロジェクト ID。
    • REGION: Google Cloud リージョン
    • SERVICE: Cloud Run サービスの名前。サービス名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。
    • 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 の形式です。

    この構成では公開アクセスが可能になります(--allow-unauthenticated と同等)。サービスを非公開にするには、google_cloud_run_v2_service_iam_member スタンザを削除します。

    Compose

    Compose 仕様YAML ファイルに保存し、単一の gcloud コマンドを使用して Cloud Run サービスとしてデプロイできます。

    compose.yaml ファイルを Cloud Run サービスとしてデプロイする手順は次のとおりです。

    1. プロジェクト ディレクトリに、サービス定義を含む compose.yaml ファイルを作成します。

      services:
        web:
          image: IMAGE
          ports:
            - "8080:8080"

      IMAGE は、コンテナ イメージの URL に置き換えます。

      環境変数、シークレット、ボリューム マウントなど、他の構成オプションを指定することもできます。

    2. サービスをデプロイするには、gcloud beta run compose up コマンドを実行します。

      gcloud beta run compose up compose.yaml
    3. 必要なコンポーネントをインストールするプロンプトや API を有効にするプロンプトが表示されたら、「y」と応答します。

    4. 省略可: サービスへの未認証アクセスを許可したい場合は、サービスを一般公開にします

    デプロイが完了すると、Cloud Run サービスの URL が表示されます。この URL をコピーしてブラウザに貼り付けると、実行中のコンテナが表示されます。 Google Cloud コンソールからデフォルトの認証を無効にできます。

    クライアント ライブラリ

    コードから新しいサービスをデプロイするには:

    REST API

    新しいサービスをデプロイするには、Cloud Run Admin API の service エンドポイントPOST HTTP リクエストを送信します。

    curl の使用例を次に示します。

    curl -H "Content-Type: application/json" \
      -H "Authorization: Bearer ACCESS_TOKEN" \
      -X POST \
      -d '{template: {containers: [{image: "IMAGE_URL"}]}}' \
      https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services?serviceId=SERVICE

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

    • ACCESS_TOKEN: サービスをデプロイする IAM 権限を持つアカウントの有効なアクセス トークン。たとえば、gcloud にログインしている場合は、gcloud auth print-access-token を使用してアクセス トークンを取得できます。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 の形式です。
    • SERVICE: デプロイ先のサービスの名前。サービス名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。
    • REGION: サービスの Google Cloud リージョン。
    • PROJECT-ID: Google Cloud プロジェクト ID。

Cloud Run のロケーション

Cloud Run はリージョナルです。つまり、Cloud Run サービスを実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるように Google によって管理されます。

レイテンシ、可用性、耐久性の要件を満たしていることが、Cloud Run サービスを実行するリージョンを選択する際の主な判断材料になります。一般的には、ユーザーに最も近いリージョンを選択できますが、Cloud Run サービスで使用されている他の Google Cloudプロダクトのロケーションも考慮する必要があります。 Google Cloud プロダクトを複数のロケーションで使用すると、サービスのレイテンシだけでなく、コストにも影響を及ぼす可能性があります。

Cloud Run は、次のリージョンで利用できます。

ティア 1 料金を適用

  • asia-east1(台湾)
  • asia-northeast1(東京)
  • asia-northeast2(大阪)
  • asia-south1(ムンバイ、インド)
  • europe-north1(フィンランド) リーフアイコン 低 CO2
  • europe-north2(ストックホルム) リーフアイコン 低 CO2
  • europe-southwest1(マドリッド) リーフアイコン 低 CO2
  • europe-west1(ベルギー) リーフアイコン 低 CO2
  • europe-west4(オランダ) リーフアイコン 低 CO2
  • europe-west8(ミラノ)
  • europe-west9(パリ) リーフアイコン 低 CO2
  • me-west1(テルアビブ)
  • northamerica-south1(メキシコ)
  • us-central1(アイオワ) リーフアイコン 低 CO2
  • us-east1(サウスカロライナ)
  • us-east4(北バージニア)
  • us-east5(コロンバス)
  • us-south1(ダラス) リーフアイコン 低 CO2
  • us-west1(オレゴン) リーフアイコン 低 CO2

ティア 2 料金を適用

  • africa-south1(ヨハネスブルグ)
  • asia-east2(香港)
  • asia-northeast3(ソウル、韓国)
  • asia-southeast1(シンガポール)
  • asia-southeast2 (ジャカルタ)
  • asia-south2(デリー、インド)
  • australia-southeast1(シドニー)
  • australia-southeast2(メルボルン)
  • europe-central2(ワルシャワ、ポーランド)
  • europe-west10(ベルリン)
  • europe-west12(トリノ)
  • europe-west2(ロンドン、イギリス) リーフアイコン 低 CO2
  • europe-west3(フランクフルト、ドイツ)
  • europe-west6(チューリッヒ、スイス) リーフアイコン 低 CO2
  • me-central1(ドーハ)
  • me-central2(ダンマーム)
  • northamerica-northeast1(モントリオール) リーフアイコン 低 CO2
  • northamerica-northeast2(トロント) リーフアイコン 低 CO2
  • southamerica-east1(サンパウロ、ブラジル) リーフアイコン 低 CO2
  • southamerica-west1(サンティアゴ、チリ) リーフアイコン 低 CO2
  • us-west2(ロサンゼルス)
  • us-west3(ソルトレイクシティ)
  • us-west4(ラスベガス)

Cloud Run サービスをすでに作成している場合は、Google Cloud コンソールの Cloud Run ダッシュボードにリージョンが表示されます。

既存のサービスの新しいリビジョンをデプロイする

Google Cloud コンソール、gcloud コマンドライン、または YAML 構成ファイルを使用して、新しいリビジョンをデプロイできます。

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

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

タブをクリックして、使用するツールでの手順を確認してください。

コンソール

既存のサービスの新しいリビジョンをデプロイするには:

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

    Cloud Run に移動

  2. サービスリストで更新したいサービスをクリックして、サービスの詳細を表示します。

  3. [新しいリビジョンの編集とデプロイ] をクリックして、リビジョンのデプロイ フォームを表示します。

    1. 必要に応じて、デプロイする新しいコンテナ イメージの URL を入力します。

    2. 必要に応じてコンテナを構成します。

    3. 必要に応じてお支払い情報を設定します。

    4. [容量] で、メモリ上限CPU 上限を指定します。

    5. 必要に応じて、リクエスト タイムアウト同時実行を指定します。

    6. 必要に応じて実行環境を指定します。

    7. [自動スケーリング] で、最小インスタンスと最大インスタンスを指定します。

    8. 他のタブを使用して、必要に応じて構成します。

  4. すべてのトラフィックを新しいリビジョンに送信するには、[このリビジョンをすぐに利用する] を選択します。新しいリビジョンを段階的にロールアウトする場合は、そのチェックボックスをオフにします。これにより、新しいリビジョンにトラフィックが送信されないデプロイになります。デプロイ後、段階的なロールアウトの説明に従って操作します。

  5. [デプロイ] をクリックして、デプロイが完了するまで待ちます。

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 run deploy SERVICE --image IMAGE_URL

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

      • SERVICE: デプロイ先のサービスの名前。このパラメータは省略できますが、省略するとサービス名の入力を求められます。
      • 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 CLI パラメータ --revision-suffix を使用します。

    2. デプロイが完了するまで待ちます。正常に完了すると、デプロイされたサービスの URL が成功のメッセージと一緒に表示されます。

  3. YAML

    既存のサービスの構成をダウンロードや表示する場合は、次のコマンドを使用して結果を YAML ファイルに保存します。

    gcloud run services describe SERVICE --format export > service.yaml

    サービス構成 YAML ファイルで、任意の spec.template 子属性を変更してリビジョン設定を更新してから、新しいリビジョンをデプロイします。

    gcloud run services replace service.yaml

    Cloud Code

    Cloud Code を使用して既存のサービスの新しいリビジョンをデプロイする方法については、IntelliJVisual Studio Code のガイドをご覧ください。

    Terraform

    新しいサービスのデプロイの例で説明されているように Terraform を設定していることを確認します。

    1. 構成ファイルに変更を行います。

    2. Terraform 構成を適用します。

      terraform apply

      yes」と入力して、記述されている操作を適用することを確認します。

    Compose

    Compose 仕様YAML ファイルに保存し、1 つの gcloud コマンドを使用して Cloud Run サービス リビジョンとしてデプロイできます。

    compose.yaml ファイルを Cloud Run サービス リビジョンとしてデプロイする手順は次のとおりです。

    1. プロジェクト ディレクトリに、サービス定義を含む compose.yaml ファイルを作成します。

      services:
        web:
          image: IMAGE
          ports:
            - "8080:8080"

      IMAGE は、コンテナ イメージの URL に置き換えます。

      環境変数、シークレット、ボリューム マウントなど、他の構成オプションを指定することもできます。

    2. サービスをデプロイするには、gcloud beta run compose up コマンドを実行します。

      gcloud beta run compose up compose.yaml
    3. 必要なコンポーネントをインストールするプロンプトや API を有効にするプロンプトが表示されたら、「y」と応答します。

    4. 省略可: サービスへの未認証アクセスを許可したい場合は、サービスを一般公開にします

    デプロイが完了すると、Cloud Run サービスの URL が表示されます。この URL をコピーしてブラウザに貼り付けると、実行中のコンテナが表示されます。 Google Cloud コンソールからデフォルトの認証を無効にできます。

    クライアント ライブラリ

    コードから新しいリビジョンをデプロイするには:

    REST API

    新しいリビジョンをデプロイするには、Cloud Run Admin API の service エンドポイントPATCH HTTP リクエストを送信します。

    curl の使用例を次に示します。

    curl -H "Content-Type: application/json" \
      -H "Authorization: Bearer ACCESS_TOKEN" \
      -X PATCH \
      -d '{template: {containers: [{image: "IMAGE_URL"}]}}' \
      https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE

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

    • ACCESS_TOKEN: リビジョンをデプロイする IAM 権限を持つアカウントの有効なアクセス トークン。たとえば、gcloud にログインしている場合は、gcloud auth print-access-token を使用してアクセス トークンを取得できます。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 の形式です。
    • SERVICE: デプロイ先のサービスの名前。
    • REGION: サービスの Google Cloud リージョン。
    • PROJECT-ID: Google Cloud プロジェクト ID。

Cloud Run のロケーション

Cloud Run はリージョナルです。つまり、Cloud Run サービスを実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるように Google によって管理されます。

レイテンシ、可用性、耐久性の要件を満たしていることが、Cloud Run サービスを実行するリージョンを選択する際の主な判断材料になります。一般的には、ユーザーに最も近いリージョンを選択できますが、Cloud Run サービスで使用されている他の Google Cloudプロダクトのロケーションも考慮する必要があります。 Google Cloud プロダクトを複数のロケーションで使用すると、サービスのレイテンシだけでなく、コストにも影響を及ぼす可能性があります。

Cloud Run は、次のリージョンで利用できます。

ティア 1 料金を適用

  • asia-east1(台湾)
  • asia-northeast1(東京)
  • asia-northeast2(大阪)
  • asia-south1(ムンバイ、インド)
  • europe-north1(フィンランド) リーフアイコン 低 CO2
  • europe-north2(ストックホルム) リーフアイコン 低 CO2
  • europe-southwest1(マドリッド) リーフアイコン 低 CO2
  • europe-west1(ベルギー) リーフアイコン 低 CO2
  • europe-west4(オランダ) リーフアイコン 低 CO2
  • europe-west8(ミラノ)
  • europe-west9(パリ) リーフアイコン 低 CO2
  • me-west1(テルアビブ)
  • northamerica-south1(メキシコ)
  • us-central1(アイオワ)