このドキュメントでは、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 Deploy の実行サービス アカウントと Identity and Access Management のロールと権限をご覧ください。
次のステップ
Cloud Deploy ターゲットの構成について学習する
Cloud Deploy の実行環境について学習する。
Cloud Run に対する Skaffold のサポートの詳細を確認する
Cloud Run の詳細を確認する