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

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

概要

次の図は、Google Cloud Deploy とそれに依存する個々のシステムの関係を示しています。

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

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

  • CI システム

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

  • Cloud Build

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

  • Skaffold

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

  • Cloud Storage

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

  • Google Cloud のオペレーション スイートCloud Audit Logs

    Google Cloud のオペレーション スイートにより、Google Cloud Deploy のログデータが収集され、利用可能になります。

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

  • Pub/Sub

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

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

  • ターゲット ランタイム

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

リリースの提供に向けた連携の仕組み

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

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

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

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

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

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

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

      また、Skaffold バージョンはリリースの一部として保存されます。

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

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

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

    4. skaffold render を呼び出し、提供されたイメージまたはビルド アーティファクトを使用してマニフェストをレンダリングします。

      Google Cloud Deploy では、spec.templates.spec.containers.image のイメージ名を、gcloud deploy releases create コマンドで指定された、またはこのコマンドで参照されるビルド アーティファクト ファイル内の完全なイメージパス(ダイジェストまたはタグを含む)に置き換えます。

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

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

    5. CLI から Google Cloud Deploy が呼び出されてリリースが作成されると、skaffold apply を呼び出して自動的にロールアウトを作成し、最初のターゲットにデプロイします。

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

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

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

    また、Google Cloud Deploy は Pub/Sub メッセージを生成し、承認ワークフローを自動的に開始するために登録できます。

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

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

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

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

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

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

次のステップ