Cloud Deploy サービス アーキテクチャ

このドキュメントでは、Cloud Deploy と、アプリケーションのデプロイに使用される外部システムの関係について説明します。これらのシステムは、他の Google Cloud サービスとサードパーティ ツールです。

概要

次の図は、Cloud Deploy と、Cloud Deploy が依存する個別のシステムの関係を示しています。

Cloud Deploy コンポーネント間の関係

この図に示すように、Cloud Deploy は次のシステムとやり取りします。

  • CI システム

    Cloud Deploy は、CI プロセスからの 1 つの出力が、リリースを作成するための Cloud Deploy API または CLI の呼び出しである限り、ほとんどの CI ツールをサポートしています。

  • Cloud Build

    Cloud Deploy は、Cloud Build を呼び出してマニフェストをレンダリングし、ターゲット ランタイムにデプロイします。

  • Skaffold

    Cloud Deploy は Cloud Build を介して Skaffold を使用し、マニフェストをレンダリングしてデプロイすることで、アプリケーションをデプロイします。

  • Cloud Storage

    Cloud Deploy は、レンダリング ソースとレンダリングされたマニフェストを Cloud Storage バケットに保存します。

  • Google Cloud ObservabilityCloud Audit Logs

    Google Cloud Observability はロギングデータを収集し、Cloud Deploy で利用できるようにします。

    監査ロギングもご覧ください。

  • Pub/Sub

    Cloud Deploy は、複数の Pub/Sub トピックにメッセージを公開します。このサービスを使用して、外部ワークフロー、テスト、その他の関連システムと統合できます。

    詳細については、Cloud Deploy 通知のサブスクライブ をご覧ください。

  • ターゲット ランタイム

    Cloud Deploy は Cloud Build を介して skaffold apply を使用し、アプリケーションをターゲット ランタイム(GKE または GKE Enterprise)にデプロイします。

Cloud Deploy リソース

次の図は、Cloud Deploy がアプリケーションのデプロイに使用するリソースと、それらのリソース間の関係を示しています。

Cloud Deploy リソース間の関係

上の図に示すように、リソース間の関係は次のとおりです。

  • デリバリー パイプラインでは、0 個以上のリリースを生成できます。また、マルチターゲットや、それに関連付けられた 子ターゲットなど、その 1 つ以上のターゲットを参照できます。

  • デリバリー パイプラインは、1 つ以上の自動化を参照することもできます。これにより、Cloud Deploy リソースに対するアクションが自動化されます。

  • リリースには、パイプライン インスタンス(リリースの作成時に構成されたデリバリー パイプラインとターゲットの「スナップショット」)が含まれます。

  • 各リリースは 0 個以上のロールアウトを生成し、0 個以上のアーティファクトを参照できます。

    各ロールアウトには、論理的にグループ化されたロールアウト内のオペレーション(ジョブ)のコレクションを表すフェーズが 1 つ以上含まれています(デプロイ、デプロイと検証など)。

    各フェーズには、ロールアウトで行う処理(デプロイまたは検証)を表す 1 つ以上のジョブが含まれます。各ジョブには、デプロイの試行など、ジョブのインスタンスである 1 つ以上のジョブ実行を含めることができます。ジョブ実行は、ロールアウトの子リソースです。

    並行デプロイに使用されるマルチターゲットは、コントローラのロールアウトを作成します。コントローラのロールアウトは、子ロールアウトを作成し、それは子ターゲットに対応します。

  • 各ロールアウトは 1 つのターゲットに関連付けられます。

    並列デプロイの場合、各子ターゲットは 1 つの子ロールアウトに関連付けられます。

  • 各ターゲットは、1 つの GKE クラスタまたは Anthos クラスタ、アプリケーションのその他のランタイムの宛先に関連付けられます。

  • ターゲットは、1 つ以上のデリバリー パイプラインに関連付けることができます。

  • アーティファクトは、ロールアウトの一部としてターゲット ランタイムにデプロイされる CI プロセスからの出力(コンテナ イメージなど)です。

また、ロールアウトには 1 つ以上のフェーズがあり、フェーズには 1 つ以上のジョブと 1 つ以上のジョブ実行があります。

ロールアウト リソース

この図に示すように、ロールアウトには次のものが含まれます。

  • フェーズ

    フェーズには 1 つ以上のジョブ(デプロイ、デプロイと検証など)が含まれます。 各ロールアウトには 1 つ以上のフェーズがあります。フェーズは、ロールアウトのサブメッセージです。

  • Jobs

    ロールアウト時に実行される特定のオペレーション(デプロイ、検証など)。ジョブはロールアウトのサブメッセージです。

  • JobRun

    ジョブのインスタンス(検証の試行など)。各ジョブには 0 個以上の JobRun があります。JobRun はロールアウトの子リソースです。

自動化には自動化ルールが含まれ、0 個以上の AutomationRun リソースによって参照される場合があります。AutomationRuns は、実行された自動化ルールのインスタンスです(ターゲット間の自動昇格など)。Automation リソースと AutomationRun リソースは、デリバリー パイプラインのピア子リソースです。

自動化のリソース

組み合わせてリリースを配信する仕組み

このセクションでは、Cloud Deploy がこのドキュメントに記載されているコンポーネントとやり取りして、リリースとしてのアプリケーションの配信を自動化する方法について説明します。

  1. CI システムが Cloud Deploy デリバリー パイプラインを呼び出します。

    CI プロセスは、CLI または API を使用して Cloud Deploy を呼び出し、ビルド アーティファクトまたはイメージへの参照を渡して新しいリリースを作成します。

    CI システムの統合の詳細については、Cloud Deploy と他のシステムの統合をご覧ください。

  2. 新しいリリースが作成されると、Cloud Deploy は次の処理を行います。

    1. リリースの一部としてデリバリー パイプラインのインスタンスを保存します。

      このパイプライン インスタンスは、デリバリー パイプラインの構成が変更されても、このリリースでは変更されません。詳細については、リリースあたりのパイプライン インスタンスをご覧ください。

      また、Skaffold のバージョンもリリースの一部として保存されます。ほとんどの場合、これはデフォルトの Skaffold バージョンになりますが、他のバージョンを指定できるため、その情報が保存されます。

    2. Cloud Build を呼び出し、Cloud Storage から Skaffold レンダリング ソースを取得します。

      Cloud Deploy は、レンダリング ソースをデフォルトまたは代替の Cloud Storage バケットに保存します。

    3. skaffold diagnose(リリースの作成時に保存された Skaffold バージョンを使用)を呼び出して、有効なマニフェストを 1 つ生成します。

    4. render オペレーションを呼び出します。

      組み込みターゲットを使用している場合、Cloud Deploy は skaffold render を呼び出し、指定されたイメージまたはビルド アーティファクトを使用してマニフェストをレンダリングします。Cloud Deploy では、spec.templates.spec.containers.image のイメージ名を、gcloud deploy releases create コマンドで指定された、またはこのコマンドで参照されるビルド アーティファクト ファイル内の完全なイメージパス(ダイジェストまたはタグを含む)に置き換えます。

      カスタム ターゲットを使用している場合、Cloud Deploy はカスタム ターゲット タイプに対して定義された render オペレーションを呼び出します。

      Cloud Deploy は、レンダリングされたマニフェストをデフォルトまたは代替の Cloud Storage バケットに保存します。

      Cloud Deploy は、デフォルトまたは代替の実行環境を使用してこれらのアクションを実行します。

  3. (リリースの作成後に自動的に、または後でオンデマンドで)ロールアウトが作成されると、Cloud Deploy は次の処理を行います。

    1. デプロイ前フックが指定されている場合は、そのフックを呼び出します。

      カナリア デプロイ戦略を使用している場合、デプロイ前フックは最初のフェーズの開始時に呼び出されます。

    2. deploy オペレーションを呼び出します。

      組み込みターゲットを使用している場合、Cloud Deploy は skaffold apply を呼び出して、最初のターゲットにロールアウトを自動的に作成してデプロイします。組み込みターゲットを使用している場合、最初のロールアウトはリリースの作成時に自動的に作成されます。

      カスタム ターゲットを使用している場合、Cloud Deploy は自動的に最初のターゲットへのロールアウトを作成し、カスタム ターゲット タイプに対して定義された deploy オペレーションを呼び出します。

      組み込みターゲットとカスタム ターゲットの場合、コマンドラインを使用してリリースを作成する場合にのみ、最初のターゲットへのロールアウトが自動的に行われます。

      最初のターゲットにデプロイするプロセスは、次のステップで説明する昇格と同じです。

    3. verify がデリバリー パイプライン構成内のターゲット用の true で、検証が Skaffold 構成で指定されている場合、skaffold verify を呼び出します。

    4. verify が指定されている場合、デプロイ後フックが指定されていれば、verify の後に呼び出します。それ以外の場合は、デプロイ後フックは deploy の後に呼び出されます。

      カナリア デプロイ戦略を使用している場合、デプロイ後フックは最終ロールアウト フェーズの最後のジョブとして実行されます。

  4. リリースを次のターゲットにプロモートするときに、Cloud Build は Cloud Storage からターゲット固有のマニフェストを取得します。次に、Cloud Build は skaffold apply を呼び出して、レンダリングされたマニフェストを指定されたターゲット ランタイムに適用します。

    ターゲットで承認が必要な場合は、CLI またはコンソールを使用して承認または拒否できます。

    また、Cloud Deploy は Pub/Sub メッセージを生成します。このメッセージをサブスクライブして、承認ワークフローを自動的に開始できます。

    Cloud Deploy は、このリリースに関連付けられている Skaffold バージョンとパイプライン インスタンスを使用し、デフォルトまたはカスタムの実行環境でこのステップを実行します。

    このプロセスは、昇格だけでなく、ロールバックや再デプロイにも適用されます。

  5. このサービスは、Cloud Deploy オペレーション全体を通して、複数の Pub/Sub トピックに通知を送信します(たとえば、ロールアウトが承認を必要とする場合)。

    この統合やその他の統合については、Cloud Deploy と外部システムの統合で詳しく説明されています。

  6. 自動化を指定して、デリバリー パイプライン内でさまざまなオペレーションを自動的に実行できます。これらは指定した時間に実行できます。automationRun は、自動化ルールの実行を表します。

  7. このサービスは、Cloud Deploy オペレーションを通して、プラットフォーム ログと監査ログを Google Cloud Observability と Cloud Audit Logs に書き込みます。

これらすべての手順を通して、Identity and Access Management を使用して、フロー制御とリソースへのアクセスが制限されます。

次のステップ