カナリア・インスタンス・グループ・デプロイメント

インスタンス・グループ・デプロイメントのカナリア・リリース戦略を使用して、デプロイメント・パイプラインを作成します。

前提条件

前提条件を次に示します。

  • デプロイメント・パイプライン、共通インスタンスのないデプロイ先インスタンス・グループ環境(カナリアおよび本番)およびアーティファクトが必要です。アーティファクトは、アーティファクト・レジストリに配置する必要があります。

    アーティファクトは、デプロイメント構成ファイルまたは一般的なアーティファクトです。デプロイメント構成ファイルは、指定されたアーティファクト・レジストリからアプリケーション・パッケージ・アーティファクトをダウンロードし、ターゲット・コンピュート・インスタンスのファイル・システムに配置するコマンドおよびステップを定義します。

  • トラフィックをルーティングするためにロード・バランサおよびリスナーをコンソールで構成します。テスト用のロード・バランサおよびリスナーを使用して、本番トラフィックをシフトする前に新しいバージョンのアプリケーションを検証することもできます。
  • 「コンピュート・インスタンスの実行コマンド」プラグインがインスタンスで有効になっており、プラグインが実行されている必要があります。プラグインを有効にするには、次のステップに従います:
    1. コンソールでナビゲーション・メニューを開き、「コンピュート」をクリックします。「コンピュート」で、「インスタンス」をクリックします。
    2. デプロイ先のインスタンス・グループからインスタンスを選択します。
      ノート

      DevOpsは、Oracle LinuxおよびCentOSへのインスタンス・グループ・デプロイメントのみをサポートしています。
    3. 「Oracle Cloudエージェント」タブをクリックします。
    4. 「コンピュート・インスタンスの実行コマンド」プラグインで、「プラグインの有効化」スイッチを「有効」に切り替えます。

      この変更が有効になるには最大10分かかります。

      注意

      プラグインが無効になっている場合、モニタリング、自動スケーリング、デプロイメント、OS管理などのプラグインに依存する機能は動作しません。
      注意

      「コンピュート・インスタンスの実行コマンド」プラグインを使用してアプリケーションをデプロイするには、最小権限ポリシーを適切に構成および維持する必要があります。詳細は、インスタンスでのコマンドの実行を参照してください。

      プラグインの管理の詳細は、Oracle Cloud Agentを使用したプラグインの管理を参照してください。トラブルシューティングについては、Oracle Cloud Agentのトラブルシューティングを参照してください。

  • インスタンスでコマンドを実行する権限が必要です。必要なIdentity and Access Management (IAM)ポリシーを参照してください

デプロイメント・パイプラインの動的グループおよびポリシーの作成については、デプロイメント・パイプライン・ポリシーを参照してください。詳細は、DevOps IAMポリシーを参照してください。

Oracle Cloudコンソール、REST APIおよびCLIを使用したDevOpsへのアクセスについては、DevOpsへのアクセスを参照してください。

    1. ナビゲーション・メニューを開き、「開発者サービス」をクリックします。「DevOps」で、「プロジェクト」をクリックします。
    2. プロジェクトおよびデプロイメント・パイプラインを選択します。
    3. パイプラインにステージを追加するには、「+」アイコンをクリックし、「ステージの追加」を選択します。
    4. ステージ・タイプとして「カナリア戦略」を選択し、「次」をクリックします。
    5. デプロイメント・タイプとして「インスタンス・グループ」を選択します。
    6. ステージの名前と説明を入力します。説明の追加はオプションです。
    7. 「カナリア環境」で、既存のインスタンス・グループ環境を選択します。
    8. 「アーティファクトの選択」をクリックし、デプロイする使用可能なインスタンス・グループ・デプロイメント構成アーティファクトを選択します。

      デプロイメント構成ファイルは、インスタンスにダウンロードするアーティファクトと、アーティファクトをコピーする必要がある場所を定義します。詳細は、デプロイメント構成ファイルを参照してください。

    9. (オプション)「アーティファクトの選択」をクリックして、デプロイメント中にコンピュート・インスタンスにダウンロードする別のアーティファクトを追加します。

      これらの追加アーティファクトは、インラインで定義できません。

    10. 「ロード・バランサの選択」をクリックします。
      1. ロード・バランサのリージョンとコンパートメントを選択します。
      2. 使用可能なリストからロード・バランサを選択します。

      ロード・バランサは、デプロイメント中に本番トラフィックの一部をカナリア環境にシフトします。詳細は、ロード・バランサ管理を参照してください。

    11. リスナーをロード・バランサに追加するには、「リスナーの選択」をクリックします。

      リスナーは、ロード・バランサのIPアドレスとリスナー・ポートで受信トラフィックをチェックします。詳細は、リスナー管理を参照してください。

    12. バックエンド・ポートの値を入力します。

      これは、アプリケーションが実行されているインスタンスのポートです。

    13. (オプション)本番トラフィックをシフトする前にアプリケーションをテストするロード・バランサ、リスナーおよびバックエンド・ポートを選択します。

      これにより、本番時のデプロイメント失敗のリスクを回避できます。

    14. ロールアウト・ポリシーは、ターゲット環境全体におけるインスタンス・ロールアウトの割合および動作を制御します。次のいずれかのオプションを選択します:
      • ロールアウト(パーセント別): 1から100の間のパーセント値を入力します。この値は、一度にデプロイされるインスタンスまたは実行されていないインスタンスの最大パーセンテージを制御します。
      • ロールアウト(件数): 件数値を入力します。この値は、一度にデプロイされるインスタンスまたは実行されていないインスタンスの最大数を制御します。
    15. (オプション)「バッチ間の遅延」に、期間(秒)を入力します。
    16. (オプション)パイプラインにタグを追加するには、「タグ付けオプションの表示」をクリックします。タグ付けとは、テナンシ内のリソースを整理およびトラッキングできるメタデータ・システムです。

      リソースを作成する権限がある場合、それにフリーフォーム・タグを追加する権限もあります。

      定義済タグを追加するには、タグ・ネームスペースを使用する権限が必要です。

      詳細は、リソース・タグを参照してください。

    17. 次へ」をクリックします。
    18. 配置実行を検証します。パイプラインにカスタム・ファンクションが追加されます。「関数を使用してカスタム・ロジックを実行します」を選択し、次の値を入力します:
      1. ステージの名前と説明を入力します。説明の追加はオプションです。
      2. 「環境」で、呼び出す既存のファンクションを選択します。

        読取り専用の「ファンクション名」フィールドに、パイプラインでコールされるファンクションが表示されます。

      3. (オプション)アーティファクトを選択してステージに追加するには、「アーティファクトの選択」をクリックします。

        DevOpsプロジェクトから既存のアーティファクト・リソースを選択します。アーティファクトは、汎用(ユニバーサル)ファイル・タイプである必要があります。アーティファクトのパラメータは、JSON形式である必要があり、プレースホルダを持つことができます。DevOpsアーティファクト・リソースの構成中に、「パラメータ化の許可」を選択します。このチェック・ボックスを選択すると、配置時にプレースホルダが引数値で置換されます。詳細は、パラメータの構成を参照してください。

        次に、2つのユーザー定義パラメータとその値を渡すための汎用アーティファクト・コンテンツの例を示します:
        • パラメータ: test_nameapp_version
        • 値: {"test_name":"verify_production", "app_version":"${app_version}"}
      4. 「ステージ実行モード」で、非同期実行または同期実行を選択します。

        「非同期実行」を選択した場合、サービスはファンクションを呼び出しますが、ファンクションの完了を待機しません。「同期実行」を選択した場合、サービスはファンクションを呼び出し、ファンクションの完了を待機します。

      5. 検証を無効にするか有効にするかを選択します。

        検証が有効な場合、サービスはファンクションの戻り値を検証します。戻り値は、UTF-8文字列リテラルのtrueまたはfalseです。戻り値がtrueの場合、ステージは「成功」としてマークされ、「失敗」としてマークされます。

        検証が無効な場合、サービスは戻り値を検証しません。

        検証は、ステージ実行モードとして「同期実行」オプションを選択した場合にのみ実行されます。

      6. (オプション)パイプラインにタグを追加するには、「タグ付けオプションの表示」をクリックします。タグ付けとは、テナンシ内のリソースを整理およびトラッキングできるメタデータ・システムです。

        タグ・ネームスペースを選択できます。選択しなければ、フリーフォーム・タグが追加されます。対応するタグ・キーおよびタグ値を入力します。複数のタグを追加できます。

      ノート

      デプロイメント実行を検証しない場合は、「なし」を選択します。
    19. 次へ」をクリックします。
    20. トラフィックの一部をカナリア環境にシフトする「シフト・トラフィック」ステージの名前とオプションの説明を入力します。
    21. ランプアップ制限をパーセンテージで入力して、シフトする最大トラフィックを指定します。値は1から25である必要があります。

      たとえば、ランプアップ制限が20の場合、トラフィックの20%がカナリア環境にシフトされます。

    22. 次へ」をクリックします。
    23. 手動の「承認」ステージの名前と説明を入力します。説明の追加はオプションです。
    24. 承認者数を入力し、「次」をクリックします。
    25. 「本番カナリア」ステージの名前と説明を入力します。説明の追加はオプションです。
    26. 「本番環境」で、カナリア環境で検証されたアプリケーションのデプロイに使用される既存のインスタンス・グループ環境を選択します。
    27. 本番ネームスペースを入力します。
    28. ステージが失敗した場合に、デプロイメントを最後に成功したバージョンに自動的にロールバックするには、「自動ロールバック」チェック・ボックスを選択します。
    29. ロールアウト・ポリシーは、ターゲット環境全体におけるインスタンス・ロールアウトの割合および動作を制御します。次のいずれかのオプションを選択します:
      • ロールアウト(パーセント別): 1から100の間のパーセント値を入力します。この値は、一度にデプロイされるインスタンスまたは実行されていないインスタンスの最大パーセンテージを制御します。
      • ロールアウト(件数): 件数値を入力します。この値は、一度にデプロイされるインスタンスまたは実行されていないインスタンスの最大数を制御します。
    30. (オプション)「バッチ間の遅延」に、期間(秒)を入力します。
    31. (オプション)失敗ポリシーは、ステージの失敗基準を定義します。これは、インスタンス・グループで失敗したコンピュート・ホストの数に基づいて定義できます。次のいずれかのオプションを選択します:
      • None (なし)
      • Fail by percent: 1から100の間のパーセント値を入力します。この値は、コンピュート・ホストが失敗し、その後ステージが失敗する場合のホストのパーセンテージを定義します。
      • 失敗(件数): 件数値を入力します。この値は、コンピュート・ホストが失敗し、その後ステージが失敗する場合のホストの数を定義します。
    32. ステージをパイプラインに追加するには、「追加」をクリックします。

      モーダル・ウィンドウが開き、カナリア・インスタンス・グループ・デプロイメント戦略の一部である様々なステージ構成のステータスが表示されます。これには、インスタンス・グループのカナリア・デプロイメント、トラフィック・シフト、手動承認および本番ローリング・デプロイメントのステージが含まれます。検証が成功しなかった場合は、失敗した各ステージに固有のエラー・メッセージを確認し、修正処理を実行できます。

      検証が成功した場合は、必要に応じて、デプロイメント・パイプラインを実行するか、パイプラインに順次またはパラレルにステージを追加できます。

  • インスタンス・グループのカナリア・ステージを作成するには、create-deploy-compute-instance-group-canary-stageコマンドを実行します:

    oci devops deploy-stage create-deploy-compute-instance-group-canary-stage

    必須パラメータ:

    • --compute-instance-group-environment-id
    • --deployment-spec-artifact-id
    • --rollout-policy
    • --pipeline-id
    • --production-load-balancer-config
    • --stage-predecessor-collection

    このコマンドのヘルプを表示するには:

    oci devops deploy-stage create-compute-instance-group-canary-stage -h

    インスタンス・グループのカナリア・トラフィック・シフト・ステージを作成するには、create-compute-instance-group-canary-traffic-shift-stageコマンドを実行します:

    oci devops deploy-stage create-compute-instance-group-canary-traffic-shift-stage

    必須パラメータ:

    • --compute-instance-group-canary-stage-id
    • --pipeline-id
    • --stage-predecessor-collection

    このコマンドのヘルプを表示するには:

    oci devops deploy-stage create-compute-instance-group-canary-traffic-shift-stage -h

    ファンクションの呼出しステージを作成するには、create-invoke-function-stageコマンドを実行します:

    oci devops deploy-stage create-invoke-function-stage

    必須パラメータ:

    • --function-environment-id
    • --is-async
    • --is-validation-enabled
    • --pipeline-id
    • --stage-predecessor-collection

    このコマンドのヘルプを表示するには:

    oci devops deploy-stage create-invoke-function-stage -h

    手動承認ステージを作成するには、create-manual-approval-stageコマンドを実行します:

    oci devops deploy-stage create-manual-approval-stage

    必須パラメータ:

    • --approval-policy
    • --pipeline-id
    • --stage-predecessor-collection

    このコマンドのヘルプを表示するには:

    oci devops deploy-stage create-manual-approval-stage -h

    deploy-stageのすべてのコマンドを取得するには:

    oci devops deploy-stage -h
  • ステージを作成するには、CreateDeployStage操作を使用します。パイプラインに追加するステージに応じて、次の値をステージ・タイプとして選択します:

    • コンピュート・インスタンス・グループのカナリア・デプロイメント・ステージ: COMPUTE_INSTANCE_GROUP_CANARY_DEPLOYMENT
    • ファンクションの呼出しステージ: INVOKE_FUNCTION
    • コンピュート・インスタンス・グループのカナリア・トラフィック・シフト・ステージ: COMPUTE_INSTANCE_GROUP_CANARY_TRAFFIC_SHIFT
    • コンピュート・インスタンス・グループのカナリア承認ステージ: COMPUTE_INSTANCE_GROUP_CANARY_APPROVAL