このドキュメントでは、Cloud Run サービスや Cloud Run ジョブなど、アプリケーションのデプロイ方法について説明します。
Cloud Deploy では、コンテナベースのワークロードを任意の Cloud Run サービスまたはジョブにデプロイできます。Cloud Run サービスの Cloud Run ターゲットにデプロイする場合、Cloud Deploy のすべての機能はサポートされますが、Cloud Run ジョブのカナリア デプロイはサポートされません。
このドキュメントでは、Cloud Run にデプロイするために完了する必要がある 3 つの主な構成について説明します。
- ターゲット構成を作成する
- Skaffold 構成を作成する
- Cloud Run のサービス定義またはジョブ定義を作成する
制限事項
1 つのターゲットに 1 つの Cloud Run サービスまたはジョブしかデプロイできません。
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 Deploy の実行環境について学習する。
Cloud Run に対する Skaffold のサポートの詳細を確認する
Cloud Run の詳細を確認する