このドキュメントでは、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 サービスではカナリア デプロイを使用できます。
準備
gcloud CLI バージョン
401.0.0
以降を使用していることを確認します。
ターゲット構成を作成する
ターゲットは、デリバリー パイプライン YAML で構成することも、別のファイルで構成することもできます。また、同じファイルで複数のターゲットを構成することもできます。
ターゲットは、配信パイプラインと同じプロジェクトとリージョンで定義する必要があります。ただし、サービス アカウントがそれらのプロジェクトにアクセスできる限り、ターゲットがデプロイするサービスまたはジョブは、異なるプロジェクトとリージョンに配置できます。
ターゲット定義で run
スタンザを作成し、Cloud Run サービスが作成されるロケーションを指定します。
ターゲット定義で Cloud Run サービスまたはジョブを指定する構文は次のとおりです。
run:
location: projects/[project_name]/locations/[region_name]
このリソース ID には、次の要素が使用されます。
[
project_name
] は、Cloud Run サービスまたはジョブが作成される Google Cloud プロジェクトの名前です。ターゲットごとにこれを行います。Cloud Run のサービスまたはジョブごとに異なるプロジェクトを指定することをおすすめします。同じプロジェクトに複数のサービスまたはジョブが必要な場合は、
skaffold.yaml
構成ファイルで Skaffold プロファイルを使用する必要があります。[
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
です。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: Google Cloud コンソールを使用して既存のサービスから service.yaml
をコピーする
Google Cloud コンソールを使用してサービスを作成するか、既存のサービスを使用し、そこから service.yaml
をコピーできます。
Google Cloud CLI を使用して service.yaml
を取得するには:
gcloud run services describe [service_name] --format=export
Google Cloud コンソールから service.yaml
を取得するには:
Google Cloud コンソールで、[Cloud Run サービス] ページに移動します。
定義を使用する既存のサービスを選択します。
または、新しく作成して選択します。サービスを選択すると、[サービスの詳細] ページが表示されます。
[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: Google Cloud コンソールを使用して既存のジョブから job.yaml
をコピーする
Google Cloud コンソールを使用してジョブを作成するか、既存のサービスを使用し、そこから job.yaml
をコピーできます。
Google Cloud CLI を使用して job.yaml
を取得するには:
gcloud run jobs describe [job_name] --format=export
Google Cloud コンソールから job.yaml
を取得するには:
Google Cloud コンソールで Cloud Run の [ジョブ] ページに移動します。
定義を使用する既存のジョブを選択します。
または、新しく作成して選択します。ジョブを選択すると、[ジョブの詳細] ページが表示されます。
[YAML] タブを選択します。
[編集] をクリックし、YAML の内容をファイル システム内の
job.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 Deploy の実行環境について学習する。
Cloud Run に対する Skaffold のサポートの詳細を確認する
Cloud Run の詳細を確認する