このページでは、コンテナ イメージを新しい Cloud Run サービスにデプロイする方法、または既存の Cloud Run サービスの新しいリビジョンにデプロイする方法について説明します。
コンテナ イメージは、デプロイ時に Cloud Run によってインポートされます。Cloud Run は、サービス提供リビジョンによって使用されている限り、コンテナ イメージのコピーを保持します。新しい Cloud Run インスタンスが起動されたときに、コンテナ イメージがコンテナ リポジトリから pull されることはありません。
新しいサービスをデプロイするチュートリアルの例については、クイックスタート: サンプル コンテナをデプロイするをご覧ください。
始める前に
ドメイン制限の組織のポリシーでプロジェクトの未認証呼び出しが制限されている場合は、限定公開サービスのテストの説明に従って、デプロイされたサービスにアクセスする必要があります。
必要なロール
Cloud Run サービスのデプロイに必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
Cloud Run サービスに対する Cloud Run デベロッパー(
roles/run.developer) -
サービス ID に対するサービス アカウント ユーザー(
roles/iam.serviceAccountUser) -
デプロイされたコンテナ イメージの Artifact Registry リポジトリに対する Artifact Registry 読み取り(
roles/artifactregistry.reader) -
プロジェクト間のサービス アカウントを使用してサービスをデプロイする場合: サービス ID に対するサービス アカウント トークン作成者(
roles/iam.serviceAccountTokenCreator)
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...)でコンテナ イメージを指定できます。
サービスに初めてデプロイすると、最初のリビジョンが作成されます。リビジョンは変更されません。コンテナ イメージタグからデプロイすると、ダイジェストに解決され、リビジョンは常にこの特定のダイジェストを処理します。
タブをクリックして、使用するツールでの手順を確認してください。
コンソール
コンテナ イメージをデプロイするには:
Google Cloud コンソールで、[Cloud Run] ページに移動します。
[コンテナのデプロイ] をクリックして、[サービスの作成] フォームを表示します。
フォームで、デプロイ オプションを選択します。
コンテナを手動でデプロイする場合は、[既存のコンテナ イメージから 1 つのリビジョンをデプロイする] を選択し、コンテナ イメージを指定します。
継続的デプロイを自動化する場合は、[ソース リポジトリから新しいリビジョンを継続的にデプロイする] を選択し、継続的デプロイの手順の説明に従ってください。
必要なサービス名を入力します。サービス名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。サービス名は後から変更することはできません。この名前は一般公開されます。
サービスのリージョンを選択します。リージョン セレクタには、料金階層とドメイン マッピングの可用性が示され、カーボン フットプリントの影響が最も低いリージョンがハイライト表示されます。
必要に応じてお支払い情報を設定します。
[サービスのスケーリング] で、デフォルトの Cloud Run 自動スケーリングを使用する場合は、必要に応じて最小インスタンス数を指定します。手動スケーリングを使用する場合は、サービスのインスタンス数を指定します。
フォームの Ingress 設定を必要に応じて設定します。
[認証] で、次の構成を行います。
- 公開 API またはウェブサイトを作成する場合は、[公開アクセスを許可する] を選択します。これをオンにすると、
allUserという特別な ID に IAM 起動元ロールが割り当てられます。サービスの作成後に、IAM を使用してこの設定を編集できます。 - 認証で保護された安全なサービスが必要な場合は、[認証が必要] を選択します。
- 公開 API またはウェブサイトを作成する場合は、[公開アクセスを許可する] を選択します。これをオンにすると、
[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックして、該当するタブでその他のオプション設定を指定します。
サービスの構成が完了したら、[作成] をクリックしてイメージを Cloud Run にデプロイし、デプロイの完了を待ちます。
表示された URL リンクをクリックして、デプロイしたサービスで一意の安定したエンドポイントを開きます。
gcloud
-
In the Google Cloud console, 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.
コンテナ イメージをデプロイするには:
次のコマンドを実行します。
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コマンドの実行時に確認のプロンプトが表示されます。デプロイが完了するまで待ちます。正常に完了すると、デプロイされたサービスの URL が成功のメッセージと一緒に表示されます。
run/regiongcloudプロパティで設定した場所とは異なる場所にデプロイする場合は、次のようにします。gcloud run deploy SERVICE --region REGION次の内容の新しいファイルを
service.yamlという名前で作成します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - image: IMAGE
次のように置き換えます。
- SERVICE: Cloud Run サービスの名前。サービス名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。
- IMAGE: コンテナ イメージの URL。
環境変数やメモリ上限など他の構成を指定することもできます。
次のコマンドを使用して新しいサービスをデプロイします。
gcloud run services replace service.yaml(省略可能)サービスへの未認証アクセスを許可したい場合は、サービスを一般公開にします。
- 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の形式です。 プロジェクト ディレクトリに、サービス定義を含む
compose.yamlファイルを作成します。services: web: image: IMAGE ports: - "8080:8080"
IMAGE は、コンテナ イメージの URL に置き換えます。
環境変数、シークレット、ボリューム マウントなど、他の構成オプションを指定することもできます。
サービスをデプロイするには、
gcloud beta run compose upコマンドを実行します。gcloud beta run compose up compose.yaml必要なコンポーネントをインストールするプロンプトや API を有効にするプロンプトが表示されたら、「
y」と応答します。省略可: サービスへの未認証アクセスを許可したい場合は、サービスを一般公開にします。
- 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。
YAML
サービス仕様を YAML ファイルに保管してから、gcloud CLI を使用してデプロイできます。
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"
}
次のように置き換えます。
この構成では公開アクセスが可能になります(--allow-unauthenticated と同等)。サービスを非公開にするには、google_cloud_run_v2_service_iam_member スタンザを削除します。
Compose
Compose 仕様を YAML ファイルに保存し、単一の gcloud コマンドを使用して Cloud Run サービスとしてデプロイできます。
compose.yaml ファイルを Cloud Run サービスとしてデプロイする手順は次のとおりです。
デプロイが完了すると、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
次のように置き換えます。
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 は、サービス提供リビジョンによって使用されている限り、コンテナ イメージのコピーを保持します。
タブをクリックして、使用するツールでの手順を確認してください。
コンソール
既存のサービスの新しいリビジョンをデプロイするには:
Google Cloud コンソールで、Cloud Run の [サービス] ページに移動します。
サービスリストで更新したいサービスをクリックして、サービスの詳細を表示します。
[新しいリビジョンの編集とデプロイ] をクリックして、リビジョンのデプロイ フォームを表示します。
必要に応じて、デプロイする新しいコンテナ イメージの URL を入力します。
必要に応じてコンテナを構成します。
必要に応じてお支払い情報を設定します。
必要に応じて、リクエスト タイムアウトと同時実行を指定します。
必要に応じて実行環境を指定します。
他のタブを使用して、必要に応じて構成します。
すべてのトラフィックを新しいリビジョンに送信するには、[このリビジョンをすぐに利用する] を選択します。新しいリビジョンを段階的にロールアウトする場合は、そのチェックボックスをオフにします。これにより、新しいリビジョンにトラフィックが送信されないデプロイになります。デプロイ後、段階的なロールアウトの説明に従って操作します。
[デプロイ] をクリックして、デプロイが完了するまで待ちます。
gcloud
-
In the Google Cloud console, 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.
コンテナ イメージをデプロイするには:
次のコマンドを実行します。
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 を使用します。
デプロイが完了するまで待ちます。正常に完了すると、デプロイされたサービスの URL が成功のメッセージと一緒に表示されます。
構成ファイルに変更を行います。
Terraform 構成を適用します。
terraform apply「
yes」と入力して、記述されている操作を適用することを確認します。プロジェクト ディレクトリに、サービス定義を含む
compose.yamlファイルを作成します。services: web: image: IMAGE ports: - "8080:8080"
IMAGE は、コンテナ イメージの URL に置き換えます。
環境変数、シークレット、ボリューム マウントなど、他の構成オプションを指定することもできます。
サービスをデプロイするには、
gcloud beta run compose upコマンドを実行します。gcloud beta run compose up compose.yaml必要なコンポーネントをインストールするプロンプトや API を有効にするプロンプトが表示されたら、「
y」と応答します。省略可: サービスへの未認証アクセスを許可したい場合は、サービスを一般公開にします。
- 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。
YAML
既存のサービスの構成をダウンロードや表示する場合は、次のコマンドを使用して結果を YAML ファイルに保存します。
gcloud run services describe SERVICE --format export > service.yamlサービス構成 YAML ファイルで、任意の spec.template 子属性を変更してリビジョン設定を更新してから、新しいリビジョンをデプロイします。
gcloud run services replace service.yamlCloud Code
Cloud Code を使用して既存のサービスの新しいリビジョンをデプロイする方法については、IntelliJ と Visual Studio Code のガイドをご覧ください。
Terraform
新しいサービスのデプロイの例で説明されているように Terraform を設定していることを確認します。
Compose
Compose 仕様を YAML ファイルに保存し、1 つの gcloud コマンドを使用して Cloud Run サービス リビジョンとしてデプロイできます。
compose.yaml ファイルを Cloud Run サービス リビジョンとしてデプロイする手順は次のとおりです。
デプロイが完了すると、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
次のように置き換えます。
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(アイオワ)