このドキュメントでは、Cloud Run サービス、Cloud Run ジョブ、Cloud Run ワーカープールなど、アプリケーションをデプロイする方法について説明します (Cloud Run ワーカープールは プレビュー版です)。
Cloud Deploy を使用すると、コンテナベースのワークロードを任意の Cloud Run サービス、 ジョブ、または ワーカープールにデプロイできます。 Cloud Run サービスの Cloud Run ターゲットまたはワーカープールにデプロイする場合、Cloud Deploy のすべての機能がサポートされますが、Cloud Run ジョブのカナリア デプロイはサポートされません。
このドキュメントでは、Cloud Run にデプロイするために完了する必要がある 3 つの主要な構成について説明します。
- ターゲット構成を作成する
- Skaffold 構成を作成する
- Cloud Run の サービス定義、 ジョブ定義、または ワーカープール定義を作成する
制限事項
ターゲットごとにデプロイできる Cloud Run サービス、ジョブ、ワーカープールは 1 つのみです。
Cloud Run ジョブに対して カナリア デプロイ を実行することはできません。
ただし、Cloud Run サービスとワーカープールではカナリア デプロイを使用できます。
Cloud Deploy を使用して Cloud Run 関数 をデプロイするには、CI ワークフローを変更して、関数をコンテナにビルドし、Cloud Run サービスとしてデプロイする必要があります。
Cloud Run ワーカープールは プレビュー版です。
始める前に
ターゲット構成を作成する
ターゲットは、デリバリー パイプライン YAML で構成することも、別のファイルで構成することもできます。また、同じファイルで複数のターゲットを構成することもできます。
ターゲットは、デリバリー パイプラインと同じプロジェクトおよびリージョンで定義する必要がありますが、 サービス アカウントがそれらのプロジェクトにアクセスできる限り、ターゲットがデプロイされるサービス、ジョブ、ワーカープールは異なるプロジェクトやリージョンに存在していてもかまいません。
ターゲット定義で、Cloud Run サービスが作成される場所を識別する run スタンザを作成します。
ターゲット定義で Cloud Run サービス、ジョブ、ワーカープールを指定する構文は次のとおりです。
run:
location: projects/[project_name]/locations/[region_name]
このリソース ID では、次の要素を使用します。
project_nameは、Cloud Run サービス、ジョブ、ワーカープールが作成される Google Cloud プロジェクトの名前です。ターゲットごとにこれを行います。Cloud Run のサービス、ジョブ、ワーカープールごとに異なるプロジェクトを指定することをおすすめします。同じプロジェクトに複数のサービス、 ジョブ、ワーカープールが必要な場合は、 Skaffold プロファイル を
skaffold.yaml構成ファイルで使用する必要があります。region_nameは、サービス、ジョブ、ワーカープールが作成されるリージョンです。 サービス、ジョブ、ワーカープールは、Cloud Run がサポートする任意の リージョンに配置できます。
以下は、作成する Cloud Run サービス、ジョブ、ワーカープールを定義するターゲット構成の例です。
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev
description: development service
run:
location: projects/my-app/locations/us-central1
このターゲットは、Cloud Deploy デリバリー パイプライン定義内または個別に定義できます。いずれにしても、リリースを作成して Cloud Run サービス、 ジョブ、ワーカープールをデプロイする前に、ターゲットを 登録 する必要があります。
Skaffold 構成を作成する
Cloud Run デプロイの skaffold.yaml ファイルの例を次に示します。
apiVersion: skaffold/v4beta7
kind: Config
metadata:
name: cloud-run-application
manifests:
rawYaml:
- service.yaml
deploy:
cloudrun: {}
この skaffold.yaml ファイルの内容は以下のとおりです。
manifests.rawYamlには、Cloud Run サービス定義の名前が指定されています。この例では、
service.yamlは、Skaffold がデプロイする Cloud Run サービスを定義するファイルです。このファイル名は任意ですが、慣例として、サービスの場合はservice.yaml、ジョブの場合はjob.yaml、ワーカープールの場合はworkerpool.yamlとします。deployスタンザは、マニフェストのデプロイ方法(プロジェクトとロケーション)を指定します。deployは必須です。空の
{}のままにしておくことをおすすめします。Cloud Deploy は、レンダリング時にターゲット定義のプロジェクトとロケーションに基づいてこの値を入力します。ただし、ローカル開発の場合はここで値を指定できます。ただし、Cloud Deploy は、ここで値が指定されているかどうかに関係なく、常にターゲット定義のプロジェクトとロケーションを使用します。
Cloud Run のサービス定義を作成する
Cloud Run サービス定義を作成するには、手動で作成するか、既存のサービスから定義をコピーします。このセクションでは、両方の手順について説明します。
オプション 1: 新しい Cloud Run service.yaml を作成する
service.yaml は、Cloud Run サービスを定義します。リリースを作成すると、Skaffold はこの定義を使用してサービスをデプロイします。
簡単な例を次に示します。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: [SERVICE_NAME]
spec:
template:
spec:
containers:
- image: [IMAGE_PATH]
ここで
[SERVICE_NAME]は、この Cloud Run サービスの名前です。[IMAGE_PATH]は、このサービスでデプロイするコンテナ イメージを指します。
オプション 2: コンソールを使用して既存のサービスから service.yaml をコピーする Google Cloud
コンソールを使用してサービスを作成するか、既存のサービスを使用し、
そこから service.yaml をコピーできます。 Google Cloud
Google Cloud CLI を使用して service.yaml を取得するには:
gcloud run services describe [service_name] --format=export
service.yaml を Google Cloud コンソールから取得するには:
コンソールで、Cloud Run の [サービス] ページに移動します。 Google Cloud
使用する定義を持つ既存のサービスを選択します。
または、新しく作成して選択します。サービスを選択すると、[サービスの詳細] ページが表示されます。
![[YAML] タブを表示するサービスの詳細ページのGoogle Cloud コンソール](https://docs.cloud.google.com/static/deploy/images/service-details.png?authuser=6&hl=ja)
[YAML] タブを選択します。
[編集] をクリックし、YAML の内容をファイル システム内の
service.yamlという新しいファイルにコピーします。これにより、リリースを作成するときに Skaffold によって使用できるようになります。
Cloud Run のジョブ定義を作成する
Cloud Run ジョブ定義をデプロイするには、手動で作成するか、既存のジョブから定義をコピーします。このセクションでは、両方の手順について説明します。
ジョブは、Cloud Deploy によってデプロイされたときに必ずしも実行されるわけではありません。これは、デプロイ後にアプリケーションを実行するサービスとは異なります。ジョブの呼び出し方法は、ジョブ自体によって異なります。
オプション 1: 新しい Cloud Run job.yaml を作成する
job.yaml は、 Cloud Run ジョブを定義します。リリースを作成すると、Skaffold はこの定義を使用してジョブをデプロイします。
簡単な例を次に示します。
apiVersion: run.googleapis.com/v1
kind: Job
metadata:
name: [JOB_NAME]
spec:
template:
spec:
containers:
- image: [IMAGE_PATH]
ここで
[JOB_NAME]は、この Cloud Run ジョブの名前です。[IMAGE_PATH]は、このジョブ用にデプロイするコンテナ イメージを指します。
オプション 2: コンソールを使用して既存のジョブから job.yaml をコピーする Google Cloud
コンソールを使用してジョブを作成するか、既存のジョブを使用し、
そこから job.yaml をコピーできます。 Google Cloud
Google Cloud CLI を使用して job.yaml を取得するには:
gcloud run jobs describe [job_name] --format=export
コンソールから job.yaml を取得するには: Google Cloud
コンソールで、Cloud Run の [ジョ 0/}ブ] ページに移動します。 Google Cloud
使用する定義を持つ既存のジョブを選択します。
または、新しく作成して選択します。ジョブを選択すると、[ジョブの詳細] ページが表示されます。
![[YAML] タブを表示しているGoogle Cloud コンソールのジョブの詳細ページ](https://docs.cloud.google.com/static/deploy/images/job-details.png?authuser=6&hl=ja)
[YAML] タブを選択します。
[編集] をクリックし、YAML の内容をファイル システム内の
job.yamlという新しいファイルにコピーします。これにより、Skaffold によって リリースを作成するときに使用できるようになります。
Cloud Run ワーカープール定義を作成する(プレビュー)
Cloud Run ワーカープール定義をデプロイするには、手動で作成するか、既存のワーカープールから定義をコピーします。このセクションでは、両方の手順について説明します。
オプション 1: 新しい Cloud Run workerpool.yaml を作成する
workerpool.yaml は、 Cloud Run ワーカープールを定義します。リリースを作成すると、Skaffold はこの定義を使用してワーカープールをデプロイします。
簡単な例を次に示します。
apiVersion: run.googleapis.com/v1
kind: WorkerPool
metadata:
name: [WORKERPOOL_NAME]
annotations:
run.googleapis.com/launch-stage: BETA
spec:
template:
spec:
containers:
- image: [IMAGE_PATH]
ここで
[WORKERPOOL_NAME]は、この Cloud Run ワーカープールの名前です。[IMAGE_PATH]は、このワーカープール用にデプロイするコンテナ イメージを指します。
オプション 2: コンソールを使用して既存のワーカープールから workerpool.yaml をコピーする Google Cloud
コンソールを使用してワーカープールを作成するか、既存のワーカープールを使用し、
そこから workerpool.yaml をコピーできます。 Google Cloud
Google Cloud CLI を使用して workerpool.yaml を取得するには:
gcloud beta run worker-pools describe [workerpool_name] --format=export
workerpool.yaml を Google Cloud コンソールから取得するには:
コンソールで、Cloud Run のワーカープール ページに移動します。 Google Cloud
使用する定義を持つ既存のワーカープールを選択します。
または、新しく作成して選択します。ワーカープールを選択すると、[ワーカープールの詳細] ページが表示されます。
![[YAML] タブを表示しているGoogle Cloud コンソールのワーカープールの詳細ページ](https://docs.cloud.google.com/static/deploy/images/workerpool-details.png?authuser=6&hl=ja)
[YAML] タブを選択します。
YAML の内容をファイル システム内の
workerpool.yamlという新しいファイルにコピーします。これにより、 リリースを作成するときに Skaffold によって使用できるようになります。
すべてを組み合わせる
Cloud Run のサービス、ジョブ、ワーカープールの定義、
skaffold.yaml構成、Cloud Deploy ターゲット
定義が設定され、ターゲットを Cloud Deploy リソースとして登録したため、デリバリー パイプラインを呼び出して、リリースを作成し、パイプラインで定義されたターゲットの進行状況に沿って進めることができます。
Cloud Deploy を使用してアプリを Cloud Run にデプロイするのクイックスタートに、これらすべての動作が示されています。
リビジョン間のサービスの動作
サービスを再デプロイすると、新しいリビジョンは新しくデプロイされた service.yaml に基づきます。新しくデプロイされた YAML で同じでない限り、以前のリビジョンに関する情報は保持されません。たとえば、以前のリビジョンに構成設定やラベルがあり、新しい YAML にない場合、それらの設定やラベルは新しいリビジョンにはありません。
Cloud Run ジョブをトリガーする
ジョブをデプロイしたら、Cloud Run のドキュメントの説明に従ってトリガーできます 。
複数のプロジェクトに Cloud Run サービス、ジョブ、ワーカープールをデプロイする
異なるプロジェクトにあるサービス、ジョブ、ワーカープールをデプロイする必要がある場合、 実行サービス アカウントには、 それらのサービス、ジョブ、ワーカープールが定義されているプロジェクトにアクセスする権限が必要です。
詳細については、Cloud Deploy 実行サービス アカウント と Identity and Access Management のロールと権限 をご覧ください。
Cloud Run functions をデプロイする
Cloud Run functions は、関数がデプロイされるたびにソースコードをビルドします。 そのため、パイプライン内のターゲット ランタイムごとにアーティファクトが若干異なる場合があります。 これは、Cloud Deploy のベスト プラクティスに反します。代わりに、Cloud Run サービスを直接使用することをおすすめします。これにより、単一のアーティファクトをビルドして、環境間で昇格させることができます。
Cloud Run functions の
service.yamlをチェックインします。これは、次のコマンドを実行して取得できます。
gcloud run services describe FUNCTION_NAME \ --format=export \ --region=REGION \ --project=PROJECT次のアノテーションが存在する場合は削除します。
run.googleapis.com/build-base-imagerun.googleapis.com/build-namerun.googleapis.com/build-source-locationrun.googleapis.com/build-enable-automatic-updates
spec.spec.containers.imageの値をIMAGE_TAGに置き換えます。Cloud Run サービスをターゲットとして、 デリバリー パイプラインとターゲット、 を作成します。
CI プロセスでビルドステップをデプロイステップから分離します。Google Cloud CLI を使用して関数をデプロイする代わりに、次の手順を行います。
関数 を Cloud Build を使用してコンテナにビルドします。
gcloud builds submit --pack image=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME \ --project=PROJECT \ --region=REGIONリリースを作成するには、 Cloud Deploy を使用します。
gcloud deploy releases create RELEASE_NAME \ --project=DEPLOY_PROJECT \ --region=REGION \ --delivery-pipeline=DELIVERY_PIPELINE \ --images=IMAGE_TAG=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAMEコマンドの内容:
RELEASE_NAMEは、このリリースに付ける名前です。 名前は、このデリバリー パイプラインのすべてのリリース間で一意である必要があります。DEPLOY_PROJECTは、デプロイ パイプラインを作成したプロジェクトのプロジェクト ID です。DELIVERY_PIPELINEは、ターゲットの進行状況を通じて、このリリースのデプロイを管理するデリバリー パイプラインの名前です。この名前は、パイプライン定義のnameフィールドと一致する必要があります。REGIONは、リリースを作成するリージョンの名前です(例:us-central1)。必須入力項目です。IMAGE_NAMEは、関数のビルド時に前の手順でイメージに付けた名前です。
次のステップ
Cloud Deploy の実行環境について学習する。
Cloud Run に対する Skaffold のサポートの詳細を確認する
Cloud Run の詳細を確認する