Google Cloud Deploy の概要

Google Cloud Deploy は、定義したプロモーション シーケンスでの一連のターゲット環境へのアプリケーションの配信を自動化する、マネージド サービスです。更新したアプリケーションをデプロイする場合は、リリースを作成します。リリースのライフサイクルは、デリバリー パイプラインによって管理されます。

Google Cloud Deploy パイプラインの仕組み

Google Cloud Deploy デリバリー パイプラインには次の情報が含まれます。

  • デリバリー パイプラインを参照する際に使用する名前。

  • プロモーション シーケンス。構成したターゲットへのデプロイ順序を記述します。

  • ターゲット自体(省略可)。

ターゲットは、同じデリバリー パイプライン構成ファイルまたは 1 つ以上の個別のファイルで定義できます。複数のデリバリー パイプラインで同じターゲットを使用できますが、特定のターゲットを使用できるのは 1 つのデリバリー パイプラインで 1 回だけです。

Google Cloud Deploy の配信プロセス

以下では、単純な Google Cloud Deploy の継続的デリバリー シナリオで起こることを説明します。

  1. デリバリー パイプラインYAML 構成ファイルで定義します。

    この構成ファイルでは、一連のターゲットにアプリケーションをデプロイするプロモーション シーケンスを定義します。

    また、Google Cloud Deploy でレンダリングとデプロイのオペレーションを行うために必要な Skaffold 構成も必要です。

  2. ターゲットは、パイプライン構成ファイルまたは別のファイルで定義します。

  3. Google Cloud Deploy サービスにパイプラインを登録します。

    アプリケーションがアプリケーションを認識したので、定義したプロモーション シーケンスに従ってターゲットへのデプロイを管理します。

  4. CI プロセスの出力には、デリバリー パイプラインを開始するための Google Cloud Deploy の呼び出しが含まれます。

    この呼び出しによって、各ターゲットのレンダリングされたマニフェストを表す release リソースが作成されます。各リソースは、指定されたレンダリング ソース(skaffold.yaml)とデプロイする特定のコンテナ イメージへの参照を使用して生成されます。 リリースを作成するこの最初の呼び出しでは、Google Cloud Deploy は自動的に rollout リソースを作成します。これにより、リリースを最初のターゲット環境に関連付けます。 このロールアウトに基づいて、アプリケーションが最初のターゲットにデプロイされます。

    1 つ以上のコンテナ イメージを出力し、Google Cloud Deploy デリバリー パイプラインに提供する場合は、任意の CI ツールを使用できます。

    さらに、リリースを作成してデリバリー パイプラインを呼び出す呼び出しを CI ツールから行う必要はありません。これは、スクリプトまたは CI プロセスの完了に応答する任意のシステムから取得できます。

  5. アプリケーションを次のターゲットにデプロイする準備ができたら、Google Cloud Deploy を呼び出してアプリケーションを昇格させます。

    いずれの場合も、プロモーションを呼び出すと、Google Cloud Deploy は新しいロールアウトを作成します。

  6. プロモーションは、プロモーション シーケンス内のすべてのターゲットを介して継続します。最後のものは prod です(または、アプリケーションをターゲットにするための最終的なターゲットに使用する名前)。

    リリースの作成とプロモーションのプロセスの詳細については、Google Cloud Deploy のサービス アーキテクチャをご覧ください。

Google Cloud Deploy では、パイプラインの実行中に指標を収集し、詳細を監査します。

プロモーション

リリースをプロモートするには、パイプラインで定義されたプロモーション シーケンスの次のターゲットにデプロイします。Google Cloud Deploy への最初の呼び出しでは、release という rollout リソースが作成されます。これは、プロモーション シーケンスの最初のターゲットへのデプロイに使用されます。その後のリリース呼び出しのたびに、リリースが次のターゲットにロールアウトされます。

承認

ターゲットへのプロモーションには承認が必要であると指定できます。たとえば、本番環境ターゲットへのプロモーションの承認が必要な場合などです。ターゲットに対して承認を義務付けるには、ターゲット定義requireApproval プロパティを設定します。

ターゲットで承認が必要な場合、Google Cloud Deploy は、そのメッセージを登録する統合システム(チケット発行システムなど)によって使用できる Pub/Sub メッセージを生成します。

承認のリクエストとプロモーションの承認について詳しくは、デリバリー パイプラインの管理をご覧ください。

通知

Google Cloud Deploy では、次のイベントの Pub/Sub 通知が提供されます。

  • レンダリング: 開始、成功、失敗
  • デプロイ: 開始、成功、失敗
  • 承認が必要です
  • Approval で承認済み
  • 承認リクエストが拒否されました

Google Cloud Deploy は、Pub/Sub トピックを使用してこれらの通知を送信します。

詳細については、パイプラインでの通知の使用をご覧ください。

ロールバック

Google Cloud Deploy では、どのターゲットでも、デプロイされたアプリケーションをロールバックできます。Google Cloud Deploy におけるロールバックは、正常にデプロイされたときに使用されたのと同じパラメータを使用して、最後に正常にデプロイされたリリースに対してロールアウトをトリガーすることで構成されます。

詳細については、デプロイのロールバックをご覧ください。

Skaffold と Google Cloud Deploy について

Google Cloud Deploy は Skaffold を使用して、レンダリング パイプラインをデリバリー パイプラインから分離します。これにより、デリバリー パイプラインの定義方法に影響を与えずに、マニフェストのレンダリングを柔軟に行うことができます。Skaffold を使用すると、Google Cloud Deploy の継続的デリバリー パイプラインで使用するローカル開発ワークスペースを簡単に構成できます。

基礎知識については、Skaffold のクイックスタートをご覧ください。

他の Google Cloud ツールを使用した Google Cloud Deploy

Google Cloud Deploy は、CI/CD パイプラインのアップストリームのほぼすべてのツールをサポートしています。 つまり、任意の開発環境とソースコード リポジトリ、任意の継続的インテグレーション(CI)システム、任意のアーティファクト リポジトリを使用できます。

ダウンストリームでは、Google Cloud Deploy は Google Kubernetes Engine にのみデプロイします。

ほとんどの Google Cloud ツールを使用する場合は、ソースから本番環境へのフローは次のようになります。

  1. Cloud Code を使用して、アプリケーションのソースを作成します。

    Cloud Code は、よく利用されているいくつかの IDE(VS Code、IntelliJ、Cloud Shell)を拡張し、Google Cloud でデプロイして実行するアプリケーションを簡単に構築できるようにします。

  2. Skaffold を使用してローカル開発ループを管理します。

    Google Cloud Deploy は、Cloud Build を介して Skaffold を使用し、マニフェストをレンダリングおよびデプロイします。これは、skaffold.yaml ファイルを保持する必要があることを意味しますが、それ以外の場合、Skaffold をローカル開発フローの一部にする必要はありません。ただし、継続的な開発には活用できます。

  3. Cloud Build を使用してアプリケーションをビルドします。

    Cloud Build を使用すると、ソースコード リポジトリへの commit からトリガーできる CI パイプラインを設定できます。Cloud Build からの出力は、デプロイ可能なコンテナ イメージを含むアーティファクトになります。Google Cloud Deploy への呼び出しを追加して、リリースを作成し、デリバリー パイプラインを呼び出すことができます。

  4. アーティファクトを Artifact Registry に保存します。

    Google Cloud Deploy は、Artifact Registry からコンテナ イメージを取得します。これにより、アーティファクトと依存関係を一元的に保存できます。

  5. コンテナ イメージを取得し、n 個のターゲットを順にデプロイするように、Google Cloud Deploy でデリバリー パイプラインを構成します。

    デリバリー パイプラインで識別されたこれらのターゲットは、それぞれアプリケーションをデプロイする GKE クラスタを表します。

  6. GKE でアプリケーションを管理します。

    GKE は、Kubernetes でコンテナ化されたアプリケーションを実行するための Google Cloud マネージド環境です。

  7. Google Cloud のオペレーション スイートを使用してアプリケーションのパフォーマンスをモニタリングします。

    Google Cloud のオペレーション スイートは、アプリケーションのモニタリングとロギングの統合を提供します。

次のステップ