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 Deploy の実行サービス アカウントIdentity and Access Management のロールと権限をご覧ください。

次のステップ