このドキュメントでは、Cloud Deploy におけるカスタム ターゲットの仕組みについて説明します。
Cloud Deploy には、さまざまなランタイム環境のサポートがターゲットとして組み込まれています。ただし、サポート対象のターゲット タイプのリストには上限があります。カスタム ターゲットを使用すると、サポート対象のランタイム以外のシステムにもデプロイできます。
カスタム ターゲットとは、Cloud Deploy でサポートされるランタイム以外の任意の出力環境を表すターゲットです。
カスタム ターゲット タイプを定義し、デリバリー パイプラインでターゲットとして実装するプロセスは、カスタム ターゲットを作成するページで説明されています。
カスタム ターゲットの内容
各カスタム ターゲットは、以下のコンポーネントで構成されています。
skaffold.yamlで定義されたカスタム アクションこれらは、デプロイフックの定義方法と似ています。
skaffold.yamlファイルではcustomActionsを定義します。そこで、各カスタム アクションで使用するコンテナ イメージとそのコンテナ上で実行するコマンドが特定されます。このように、カスタム ターゲットは単にカスタム定義されたアクション(アクションのセット)です。
どのカスタム ターゲット タイプでも、カスタム レンダリング アクションとカスタム デプロイ アクションを構成します。これらのアクションは Cloud Deploy で指定された値を使用して、必要な出力のセットを完了する必要があります。
カスタム レンダリング アクションはオプションですが、Cloud Deploy のデフォルトである
skaffold renderによってレンダリングされた場合は、カスタム ターゲットが正しく機能する場合を除いて、カスタム レンダリング アクションを作成する必要があります。-
CustomTargetTypeは、このタイプのターゲットがリリース レンダリングとロールアウト デプロイ アクティビティに使用するカスタム アクション(skaffold.yamlで個別に定義)を識別する Cloud Deploy リソースです。 -
カスタム ターゲットのターゲット定義は、値が
CustomTargetTypeの名前であるcustomTargetプロパティを含むことを除いて、どのターゲット タイプでも同じです。
これらのコンポーネントを適正に配置すると他のターゲットと同じようにそのターゲットを使用し、デリバリー パイプラインの進行に応じてターゲットを参照して、プロモーションと承認、ロールバックなどの Cloud Deploy 機能を最大限に活用できます。
例
クイックスタートのカスタム ターゲット タイプを定義して使用するでは、コンテナ イメージで実行する簡単なコマンドを含むカスタム ターゲット タイプを作成します。レンダリング用のコマンドとデプロイ用のコマンドが 1 つずつ含まれています。この場合のコマンドは、レンダリングとデプロイに必要な出力ファイルにテキストを追加するだけです。
その他の例については、カスタム ターゲットの例をご覧ください。
必要な入力と出力
Cloud Deploy で定義されたカスタム ターゲット タイプは、レンダリングとデプロイの両方で入力と出力の要件を満たす必要があります。このセクションでは、必要となる入出力とその指定方法を示します。
Cloud Deploy では、レンダリングとデプロイの両方で必要な入力が環境変数として提供されます。この後のセクションでは、これらの入力と、カスタム レンダリングとデプロイのアクションで返される必要がある出力を示します。
パラメータを環境変数としてデプロイする
このセクションに記載されている環境変数に加えて、設定したデプロイ パラメータが Cloud Deploy からカスタム コンテナに渡されます。
詳細。
レンダリング アクションの入力
カスタム レンダリング アクションの場合、Cloud Deploy では次の入力が環境変数として提供されます。マルチフェーズ ロールアウト(カナリア デプロイ)の場合、Cloud Deploy では以下の変数が各フェーズで提供されます。
CLOUD_DEPLOY_PROJECTカスタム ターゲットが作成されるプロジェクトの Google Cloud プロジェクト番号。
CLOUD_DEPLOY_PROJECT_IDプロジェクトの Google Cloud プロジェクト ID。
CLOUD_DEPLOY_LOCATIONカスタム ターゲット タイプの Google Cloud リージョン。
CLOUD_DEPLOY_DELIVERY_PIPELINEカスタム ターゲット タイプを参照する Cloud Deploy のデリバリー パイプラインの名前。
CLOUD_DEPLOY_RELEASEレンダリング オペレーションが呼び出されるリリースの名前。
CLOUD_DEPLOY_TARGETカスタム ターゲット タイプを使用する Cloud Deploy ターゲットの名前。
CLOUD_DEPLOY_PHASEレンダリングが対応するロールアウト フェーズ。
CLOUD_DEPLOY_REQUEST_TYPEカスタム レンダリング アクションの場合、これは常に
RENDERです。CLOUD_DEPLOY_FEATURESカスタム コンテナがサポートする必要がある Cloud Deploy 機能のカンマ区切りのリスト。この変数には、配信パイプラインで構成された機能に基づいて値が設定されます。
実装上このリストの機能がサポートされていない場合は、レンダリングでエラーにすることをおすすめします。
標準デプロイの場合、これは空です。カナリア デプロイの場合、値は
CANARYです。Cloud Deploy で指定された値がCANARYの場合、カナリアの各フェーズでレンダリング アクションが呼び出されます。各フェーズのカナリア パーセンテージはCLOUD_DEPLOY_PERCENTAGE_DEPLOY環境変数で指定されます。CLOUD_DEPLOY_PERCENTAGE_DEPLOYこのレンダリング オペレーションに関連するデプロイの割合。
CLOUD_DEPLOY_FEATURES環境変数がCANARYに設定されている場合、フェーズごとにカスタム レンダリング アクションが呼び出され、この変数が各フェーズのカナリア パーセンテージに設定されます。標準デプロイとstableフェーズに到達したカナリア デプロイの場合、これは100です。CLOUD_DEPLOY_STORAGE_TYPEストレージ プロバイダ常に
GCSです。CLOUD_DEPLOY_INPUT_GCS_PATHリリースの作成時に書き込まれたレンダーファイル アーカイブの Cloud Storage パス。
CLOUD_DEPLOY_OUTPUT_GCS_PATHカスタム レンダリング コンテナがデプロイで使用されるアーティファクトをアップロードする際に想定される Cloud Storage のパス。レンダリング アクションでは、このレンダリング オペレーションの結果を含む
results.jsonという名前のファイルをアップロードする必要があります。詳細については、レンダリング アクションの出力をご覧ください。
レンダリング アクションの出力
カスタム レンダリング アクションでは、このセクションで説明する情報が提供される必要があります。その情報は、Cloud Deploy で提供される Cloud Storage バケットにある results.json という名前の結果ファイルに含める必要があります。
レンダリングされた構成ファイル
以下の情報が含まれている
results.jsonファイル。カスタム アクションの成功または失敗の状態を示す表示。
有効な値は
SUCCEEDEDとFAILEDです。(省略可)カスタム アクションによって生成されたエラー メッセージ。
レンダリングされた構成ファイルまたはファイルの Cloud Storage パス。
レンダリングされたすべての構成ファイルのパスは完全 URI です。Cloud Deploy によって提供される
CLOUD_DEPLOY_OUTPUT_GCS_PATHの値を部分的に使用して入力します。レンダリングされた構成ファイルは、空であっても指定する必要があります。ファイルの内容は、カスタム デプロイ アクションで使用できるものであれば、どのような形式でもかまいません。このファイルは、お客様や組織内の別のユーザーがリリース インスペクタでこのファイルを表示できるように、人が読める形式にすることをおすすめします。
(省略可)含めるメタデータのマップ
このメタデータはカスタム ターゲットによって作成されます。このメタデータは、本リリースの
custom_metadataフィールドに保存されます。
デバッグなどのために results.json ファイルを調べる必要がある場合は、Cloud Build ログでそのファイルの Cloud Storage URI を確認できます。
レンダリング結果ファイルの例
カスタム レンダリング アクションから出力される results.json ファイルの例を次に示します。
{
"resultStatus": "SUCCEEDED",
"manifestFile": "gs://bucket/my-pipeline/release-001/rollout-a/01234/custom-output/manifest.yaml",
"failureMessage": "",
"metadata": {
"key1": "val",
"key2": "val"
}
}
デプロイ アクションの入力
カスタム デプロイ アクションの場合、Cloud Deploy では次の入力が環境変数として提供されます。
CLOUD_DEPLOY_PROJECTカスタム ターゲットが作成されるプロジェクトの Google Cloud プロジェクト番号。
CLOUD_DEPLOY_PROJECT_IDプロジェクトの Google Cloud プロジェクト ID。
CLOUD_DEPLOY_LOCATIONカスタム ターゲット タイプの Google Cloud リージョン。
CLOUD_DEPLOY_DELIVERY_PIPELINEカスタム ターゲット タイプを使用するターゲットを参照する Cloud Deploy のデリバリー パイプラインの名前。
CLOUD_DEPLOY_RELEASEデプロイ オペレーションが呼び出されるリリースの名前。
CLOUD_DEPLOY_ROLLOUTこのデプロイの対象となる Cloud Deploy のロールアウトの名前。
CLOUD_DEPLOY_TARGETカスタム ターゲット タイプを使用する Cloud Deploy ターゲットの名前。
CLOUD_DEPLOY_PHASEデプロイに対応するロールアウト フェーズ。
CLOUD_DEPLOY_REQUEST_TYPEカスタム デプロイ アクションの場合、これは常に
DEPLOYです。CLOUD_DEPLOY_FEATURESカスタム コンテナがサポートする必要がある Cloud Deploy 機能のカンマ区切りのリスト。この変数には、配信パイプラインで構成された機能に基づいて値が設定されます。
実装上このリストの機能がサポートされていない場合は、レンダリングでエラーにすることをおすすめします。
標準デプロイの場合、これは空です。カナリア デプロイの場合、値は
CANARYです。Cloud Deploy で指定された値がCANARYの場合、カナリアの各フェーズでレンダリング アクションが呼び出されます。各フェーズのカナリア パーセンテージはCLOUD_DEPLOY_PERCENTAGE_DEPLOY環境変数で指定されます。CLOUD_DEPLOY_PERCENTAGE_DEPLOYこのデプロイ オペレーションに関連するデプロイの割合。
CLOUD_DEPLOY_FEATURES環境変数がCANARYに設定されている場合、フェーズごとにカスタム デプロイ アクションが呼び出され、この変数が各フェーズのカナリア パーセンテージに設定されます。デプロイ アクションは各フェーズで実行する必要があります。CLOUD_DEPLOY_STORAGE_TYPEストレージ プロバイダ常に
GCSです。CLOUD_DEPLOY_INPUT_GCS_PATHカスタム レンダラがレンダリング構成ファイルを書き込んだ Cloud Storage パス。
CLOUD_DEPLOY_SKAFFOLD_GCS_PATHレンダリングされた Skaffold 構成の Cloud Storage パス。
CLOUD_DEPLOY_MANIFEST_GCS_PATHレンダリングされたマニフェスト ファイルの Cloud Storage パス。
CLOUD_DEPLOY_OUTPUT_GCS_PATHカスタム デプロイ コンテナがデプロイ アーティファクトをアップロードすると予想される Cloud Storage ディレクトリのパス。詳細については、デプロイ アクションの出力をご覧ください。
デプロイ アクションの出力
カスタム デプロイ アクションは、results.json 出力ファイルを書き込む必要があります。このファイルは、Cloud Deploy(CLOUD_DEPLOY_OUTPUT_GCS_PATH)で提供される Cloud Storage バケットに配置する必要があります。
このファイルには、以下のものが含まれている必要があります。
カスタム デプロイ アクションの成功または失敗の状態を示す表示。
有効なステータスは次のとおりです。
SUCCEEDEDFAILEDSKIPPED
これは、カナリア フェーズがスキップされ、そのまま
stableに進むカナリア デプロイの場合です。(省略可)デプロイ アーティファクト ファイルのリスト(Cloud Storage パスの形式)
パスは完全 URI です。Cloud Deploy によって提供される
CLOUD_DEPLOY_OUTPUT_GCS_PATHの値を部分的に使用して入力します。ここに一覧表示されたファイルは、デプロイ アーティファクトとしてジョブ実行リソースに入力されます。
(省略可)カスタム デプロイ アクションが成功しなかった場合(
FAILED状態を返した場合)は失敗メッセージこのメッセージは、このデプロイ アクションのジョブ実行時に
failure_messageを入力するために使用されます。(省略可)アクションによって
SKIPPEDステータスが返された場合に、追加情報を提供するスキップ メッセージ。(省略可)含めるメタデータのマップ
このメタデータはカスタム ターゲットによって作成されます。このメタデータは、ジョブ実行時とロールアウト時に
custom_metadataフィールドに格納されます。
デバッグなどのために results.json ファイルを調べる必要がある場合は、Cloud Build リリース レンダリング ログでそのファイルの Cloud Storage URI を確認できます。
デプロイ結果ファイルの例
カスタム デプロイ アクションから出力される results.json ファイルの例を次に示します。
{
"resultStatus": "SUCCEEDED",
"artifactFiles": [
"gs://bucket/my-pipeline/release-001/rollout-a/01234/custom-output/file1.yaml",
"gs://bucket/my-pipeline/release-001/rollout-a/01234/custom-output/file2.yaml"
],
"failureMessage": "",
"skipMessage": "",
"metadata": {
"key1": "val",
"key2": "val"
}
}
カスタム アクションの詳細
カスタム ターゲット タイプを設定して使用する際は、次の点に留意してください。
カスタム操作の実行
カスタム レンダリング アクションとデプロイ アクションは、Cloud Deploy の実行環境で実行されます。Google Kubernetes Engine クラスタで実行するようにカスタム アクションを構成することはできません。
リモートの再利用可能な Skaffold 構成を使用する
このドキュメントで説明するように、カスタム アクションはリリース作成時に提供される skaffold.yaml ファイルで構成します。ただし、Skaffold 構成ファイルを Git リポジトリまたは Cloud Storage バケットに保存して、カスタム ターゲット タイプ定義から参照することもできます。これにより、各リリースの skaffold.yaml ファイルにカスタム アクションを含めるのではなく、単一の共有ロケーションに定義して保存したカスタム アクションを使用できます。
カスタム ターゲットとデプロイの戦略
カスタム ターゲットは、標準デプロイで完全にサポートされています。
カスタム レンダラとデプロイツールがカナリア機能をサポートしている限り、Cloud Deploy はカナリア デプロイをサポートします。
カスタム カナリア構成を使用する必要があります。自動カナリアおよびカスタム自動カナリアは、カスタム ターゲットではサポートされていません。
カスタム ターゲットとデプロイ パラメータ
カスタム ターゲットでデプロイ パラメータを使用できます。デプロイ パラメータは、デリバリー パイプライン ステージ、カスタム ターゲット タイプを使用するターゲット、リリースで設定できます。
デプロイ パラメータは、すでに提供された環境変数に加えて、カスタム レンダリングおよびデプロイ コンテナに環境変数として渡されます。
カスタム ターゲットの例
cloud-deploy-samples リポジトリには、カスタム ターゲット実装のサンプルセットが含まれています。次のサンプルを利用できます。
GitOps
Vertex AI
Terraform
Infrastructure Manager
Helm
各サンプルにはクイックスタートが含まれています。
これらのサンプルは、サポート対象の Google Cloud プロダクトではなく、 Google Cloud サポート契約の対象外です。 Google Cloud プロダクトのバグを報告したり、機能をリクエストしたりするには、 Google Cloudサポートにお問い合わせください。
次のステップ
カスタム ターゲットがわかったところで、カスタム ターゲットの構成と使用の方法を確認する。
Cloud Deploy ターゲットの構成について詳細を確認する。
Cloud Deploy の実行環境について学習する。