Cloud Run のサービスまたはジョブをデプロイする

このドキュメントでは、Cloud Run サービスや Cloud Run ジョブなどのアプリケーションをデプロイする方法について説明します。

Cloud Deploy を使用すると、コンテナベースのワークロードを任意の Cloud Run サービスまたはジョブにデプロイできます。Cloud Run サービスの Cloud Run ターゲットにデプロイする場合、Cloud Deploy のすべての機能はサポートされますが、Cloud Run ジョブのカナリア デプロイはサポートされません。

このドキュメントでは、Cloud Run にデプロイするために完了する必要がある 3 つの主要な構成について説明します。

制限事項

  • ターゲットごとにデプロイできる Cloud Run サービスまたはジョブは 1 つだけです。

  • Cloud Run ジョブに対してカナリア デプロイを実行することはできません。

    ただし、Cloud Run サービスではカナリア デプロイを使用できます。

準備

ターゲット構成を作成する

ターゲットは、デリバリー パイプライン 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 を取得するには:

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

  2. 定義を使用する既存のサービスを選択します。

または、新しく作成して選択します。サービスを選択すると、[サービスの詳細] ページが表示されます。

[YAML] タブを表示するサービスの詳細ページの Google Cloud コンソール

  1. [YAML] タブを選択します。

  2. [編集] をクリックし、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 を取得するには:

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

  2. 定義を使用する既存のジョブを選択します。

または、新しく作成して選択します。ジョブを選択すると、[ジョブの詳細] ページが表示されます。

[YAML] タブを表示している Google Cloud コンソールの [サービスの詳細] ページ

  1. [YAML] タブを選択します。

  2. [編集] をクリックし、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 のロールおよび権限をご覧ください。

次のステップ