デプロイメント戦略の理解

この記事で説明するアーキテクチャは、Blue-GreenおよびCanaryデプロイメント戦略を使用して最新のアプリケーションを構築およびデプロイする方法を示しています。デプロイメント戦略は、アプリケーションの変更またはアップグレードを可能にするモデルおよびプラクティスです。デプロイメント戦略により、DevOpsチームはアプリケーションを本番環境にデプロイする方法を定義できます。

様々なデプロイメント戦略の選択により、管理者は、新しいリリースをデプロイするリスク、新しいリリースがユーザーに与える影響、戦略の実装に必要なインフラストラクチャ・オーバーヘッドの間での適切なトレードオフを行うことができます。お客様に、アプリケーションのニーズに応じて適切なトレードオフを行うためのさらなるオプションを提供したいと考えています。

青緑色のデプロイメントについて

ブルーグリーン・デプロイメント戦略では、DevOpsチームは、2つの同一環境を使用して新しいバージョンのアプリケーションをリリースし、そのうちの1つが同時にアクティブになります。アプリケーションの現在のバージョンはアクティブな環境にプロビジョニングされますが、新しいバージョンはスタンバイ環境にデプロイされます。

スタンバイ環境にデプロイしても、アクティブな環境やユーザー・トラフィックには影響しません。DevOpsリリース・パイプラインは、新しいバージョンに対して検証テストを実行でき、承認されると、ユーザー・トラフィックをスタンバイ環境に切り替えるだけで本番に進めることができます。このプロセスは、アプリケーションの新しいリリースごとに繰り返されます。

この戦略の主な利点は、ほぼゼロのダウンタイムと即時ロールバック機能を提供することです。新しいバージョンの問題が発生した場合、トラフィックは直ちに以前の安定したバージョンに戻すことができます。また、アプリケーション・リリースで問題が発生したものをデバッグするために、スタンバイ環境を使用できます。

次の図は、青緑色のデプロイメント・アーキテクチャを示しています。

blue-green-deployment.pngの説明が続きます
図blue-green-deployment.pngの説明

ブルーグリーン導入コンポーネントの理解

前述のアーキテクチャには、次のコンポーネントがあります。

  • リージョン

    OCIリージョンは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含む、ローカライズされた地理的な領域です。リージョンは他のリージョンから独立しており、巨大な距離は(国全体または大陸にわたって)分離できます。アーキテクチャでは単一のリージョンが使用されます。

  • DevOpsプロジェクト

    CI/CDワークフローの実装に必要なDevOpsリソースの論理グループ。DevOpsリソースは、アーティファクト、ビルド・パイプライン、デプロイメント・パイプライン、外部接続、トリガーおよび環境です。DevOpsプロジェクトを使用すると、すべてのDevOpsリソースのロギング、監視および通知を簡単に有効にできます。

  • パイプラインのビルド

    ビルド・パイプラインでは、ソース・コード・リポジトリからコミットIDを受け取り、そのソース・コードを使用してビルド手順を実行します。ビルド・パイプラインでは、ソフトウェア・アーティファクトの作成、テストおよびコンパイル、OCIリポジトリへのアーティファクトの提供、およびオプションでデプロイメントのトリガーなど、ビルド・プロセスの一連のステージを定義します。ビルド実行のフローおよび指示はビルド仕様ファイルで定義します。

  • ビルド・ステージ

    ステージは、パイプラインの実行中に実行される個々のアクションです。ここで説明する様々なビルド・ステージは次のとおりです:管理対象ビルド・ステージ:ソース・コードを構築およびテストする管理対象ビルド・ステージ。デリバリ・アーティファクト・ステージ:ビルド・ステージの出力を様々なリポジトリにプッシュするステージ。コンテナ・イメージはコンテナ・リポジトリに、デプロイメント・マニフェストはアーティファクト・レジストリに類似しています。デプロイメントの起動:ビルド・ステージの完了後にデプロイメント・パイプラインを起動するステージであり、管理対象ビルド・ステージからデプロイメント・パイプライン・ステージへのエクスポートされた変数の解析も含まれます。

  • コード・リポジトリ

    DevOpsサービスによってホストされるプライベートGitリポジトリ。DevOpsコード・リポジトリを使用してソース・コードを格納、管理、開発できます。デプロイメント・パイプライン:一連のアーティファクトをターゲット環境に提供およびデプロイするための一連のステップ。ソフトウェアリリースのフローおよびロジックは、シリアルまたはパラレルで実行できるステージを定義することで制御できます。

  • デプロイメント・ステージ

    ステージは、パイプラインの実行中に実行される個々のアクションです。ここで説明する様々なビルド・ステージは次のとおりです。
    • 青/緑色のOKEデプロイメントまたは青/緑色のインスタンス・グループ・デプロイメント:更新したコードをターゲット環境にデプロイするステージ。
    • デプロイメントの検証:デプロイメントを検証するオプションのステージ(関数経由)
    • 制御:承認:ターゲット本番環境へのデプロイメントを承認するステージを制御します。
    • 青/緑のOKEトラフィック・シフトまたは青/緑のインスタンス・グループ・トラフィック・シフト:本番トラフィックが最新のデプロイ済環境に切り替わる最終ステージ。
  • DevOpsアーティファクト

    DevOpsアーティファクトは、アプリケーションを構成するファイル、バイナリ、パッケージ、マニフェストまたはイメージへの参照またはポインタです。アーティファクトの作成時に、実際のアーティファクトのソースの場所をOracle DevOpsに通知します。DevOpsでは、OCIコンテナ・イメージ・レジストリおよびOCIアーティファクト・レジストリ・リポジトリがサポートされます。

  • アーティファクト・リポジトリ

    アーティファクト・リポジトリは、類似したアーティファクトをグループ化するリポジトリを作成します。リポジトリの作成時に、アーティファクトをアップロードできます。これらのアーティファクトは、ターゲット・デプロイメント環境に配信されるテキスト・ファイル、バイナリおよびデプロイメント・マニフェストのコレクションです。各アーティファクトには、パス: versionで構成される名前があります。パスは、アーティファクトを編成するための文字列です。

  • OCIロギングおよび通知サービス

    OCIロギング・サービスは、デプロイメントに関連するログを格納します。デプロイメント・ランタイム出力およびデプロイメントの最終結果は、ログ・エントリとして表示されます。OCI Notificationsサービスでは、デプロイメント・プロジェクトとそのリソースの最新状態を可視化し、必要なアクションを実行できます。たとえば、承認を待機しているデプロイ・パイプラインのステージなどの重要なイベントが発生すると通知されます。通知メッセージを受信したら、DevOpsデプロイメント・パイプラインに移動し、ステージを承認できます。

  • 環境の配置

    環境とは、アーティファクトがデプロイされる顧客のコンピューティング・リソースの集合です。環境は、ファンクション、コンピュート仮想マシン(VM)またはベア・メタル・インスタンス、OKEクラスタのいずれかです。Blue Greenデプロイメントは、OKEクラスタおよびコンピュート仮想マシンでのみ使用できます。

青緑色の導入の長所と短所を理解する

最新のアプリケーションのデプロイ時に、青緑の戦略を使用するメリットと短所があります。

Blue-Green展開のメリットは次のとおりです。
  • Blue Greenのデプロイメントにより、迅速でリスクのないデプロイメントが可能になります。
  • 効果的な単純なロールバック・メカニズムを使用可能にします。
  • A/Bソフトウェア・テストを編成する効果的な方法です。
  • 本番は常にアクティブな環境の1つを介して提供されるため、ゼロまたはほぼゼロのダウンタイム(ロード・バランサを検出します)。
Blue-Greenデプロイメントのメリットは次のとおりです。
  • Blue-Greenデプロイメントの環境を維持するには、同一の環境とリソースに多大なコストがかかります。
  • 2つの同一環境間でリリースを管理するには、両方の環境を緊密に監視する必要があります。
  • デプロイメント間のデータベース依存関係の管理は複雑です。

Canaryデプロイメントについて

Canaryデプロイメント戦略では、アプリケーションのリリースは、ユーザーのサブセットに対して増分的に行われます。最初は、新しいバージョンが、ユーザー・トラフィックのない運河環境にデプロイされます。DevOpsリリース・パイプラインでは、新しいバージョンに対して検証テストを実行し、準備が整ったら、ユーザーのサブセットのみを運河環境にルーティングできます。

この方法により、DevOpsチームは、実際のユーザー・トラフィックに対して新しいアプリケーションのバージョンを評価できます。新しいバージョンを大きなユーザー・ベースにロールアウトする前に、2つのアプリケーションのバージョンを並べて比較できます。また、新しいバージョンが少数のユーザーに対してのみ有効になっているため、リスクの軽減も実現します。これらのユーザーは、問題が発生した場合に以前のバージョンに簡単に切り替えることができます。

次の図は、Canaryデプロイメント戦略を示しています。

canary-deployment.pngの説明が続きます
図canary-deployment.pngの説明

Canaryデプロイメント・コンポーネントの理解

前述のアーキテクチャには、次のコンポーネントがあります。

  • リージョン

    OCIリージョンは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含む、ローカライズされた地理的な領域です。リージョンは他のリージョンから独立しており、巨大な距離は(国全体または大陸にわたって)分離できます。アーキテクチャでは単一のリージョンが使用されます。

  • DevOpsプロジェクト

    CI/CDワークフローの実装に必要なDevOpsリソースの論理グループ。DevOpsリソースは、アーティファクト、ビルド・パイプライン、デプロイメント・パイプライン、外部接続、トリガーおよび環境です。DevOpsプロジェクトを使用すると、すべてのDevOpsリソースのロギング、監視および通知を簡単に有効にできます。

  • パイプラインのビルド

    ビルド・パイプラインでは、ソース・コード・リポジトリからコミットIDを受け取り、そのソース・コードを使用してビルド手順を実行します。ビルド・パイプラインは、ソフトウェア・アーティファクトの作成、テストおよびコンパイル、OCIリポジトリへのアーティファクトの送信、およびオプションでデプロイメントのトリガーなど、ビルド・プロセスのステージのセットを定義します。ビルド実行のフローおよび指示はビルド仕様ファイルで定義します。

  • ビルド・ステージ

    ステージは、パイプラインの実行中に実行される個々のアクションです。ここで説明する様々なビルド・ステージは次のとおりです。
    • 管理対象ビルド・ステージ:ソース・コードを構築およびテストするための管理対象ビルド・ステージ。
    • アーティファクト・ステージの配信:ビルド・ステージの出力を様々なリポジトリにプッシュするステージ。コンテナ・イメージがコンテナ・リポジトリに、デプロイメント・マニフェストがアーティファクト・レジストリに類似しています。
    • デプロイメントの起動:ビルド・ステージの完了後にデプロイメント・パイプラインを起動するステージであり、管理対象ビルド・ステージからデプロイメント・パイプライン・ステージへのエクスポートされた変数の解析も含まれます。
  • コード・リポジトリ

    DevOpsサービスによってホストされるプライベートGitリポジトリ。DevOpsコード・リポジトリを使用してソース・コードを格納、管理、開発できます。

  • デプロイメント・パイプライン

    一連のアーティファクトをターゲット環境に提供およびデプロイするための一連のステップ。ソフトウェアリリースのフローおよびロジックは、シリアルまたはパラレルで実行できるステージを定義することで制御できます。

  • デプロイメント・ステージ

    ステージは、パイプラインの実行中に実行される個々のアクションです。ここで説明する様々なビルド・ステージは次のとおりです。
    • Canary OKE DeploymentまたはCanary Instance Group Deployment:更新されたコードをターゲット・カナリー環境にデプロイするステージ。
    • デプロイメントの検証:デプロイメントを検証するオプションのステージ(関数経由)
    • Canary OKE Traffic ShiftまたはCanary Instance Group Traffic Shift:ランプ制限(%シフトするトラフィックの%)に基づいて、トラフィックを運河環境に切り替えるステージ。
    • 制御:承認:ターゲット本番環境へのデプロイメントを承認するステージを制御します。
    • インスタンス・グループ・プロダクションのカナダデプロイまたはOKEデプロイ:本番トラフィックが最新のデプロイ済環境に切り替わる最終ステージ。
  • DevOpsアーティファクト

    DevOpsアーティファクトは、アプリケーションを構成するファイル、バイナリ、パッケージ、マニフェストまたはイメージへの参照またはポインタです。アーティファクトの作成時に、実際のアーティファクトのソースの場所をOracle DevOpsに通知します。DevOpsでは、OCIコンテナ・イメージ・レジストリおよびOCIアーティファクト・レジストリ・リポジトリがサポートされます。

  • アーティファクト・リポジトリ

    アーティファクト・リポジトリは、類似したアーティファクトをグループ化するリポジトリを作成します。リポジトリの作成時に、アーティファクトをアップロードできます。これらのアーティファクトは、ターゲット・デプロイメント環境に配信されるテキスト・ファイル、バイナリおよびデプロイメント・マニフェストのコレクションです。各アーティファクトには、パス: versionで構成される名前があります。パスは、アーティファクトを編成するための文字列です。

  • OCIロギングおよび通知サービス

    OCIロギング・サービスは、デプロイメントに関連するログを格納します。デプロイメント・ランタイム出力およびデプロイメントの最終結果は、ログ・エントリとして表示されます。OCI Notificationsサービスでは、デプロイメント・プロジェクトとそのリソースの最新状態を可視化し、必要なアクションを実行できます。たとえば、承認を待機しているデプロイ・パイプラインのステージなどの重要なイベントが発生すると通知されます。通知メッセージを受信したら、DevOpsデプロイメント・パイプラインに移動し、ステージを承認できます。

  • 環境の配置

    環境とは、アーティファクトがデプロイされる顧客のコンピューティング・リソースの集合です。環境は、ファンクション、コンピュート仮想マシン(VM)またはベア・メタル・インスタンス、OKEクラスタのいずれかです。Blue Greenデプロイメントは、OKEクラスタおよびコンピュート仮想マシンでのみ使用できます。

Canaryの導入のメリットと合意の理解

最新のアプリケーションのデプロイ時に、カナリア戦略を使用するメリットと短所があります。

Canaryデプロイメントの利点は次のとおりです。
  • これにより、実ユーザーとともに2つのアプリケーション・バージョンを並べてテストできます。
  • 新しいバージョン・リリースのダウンタイムはゼロです。
  • 以前のバージョンへのロールバックは非常に簡単で、リスクを最小限に抑えます。
Canaryデプロイメントのメリットは次のとおりです。
  • 新しいリリースのテストと検証は、大規模に複雑になる可能性があります。
  • 新しいリリースに対するユーザー・テストからフィードバックをフェッチするのは、時間がかかる作業です。