すべてのプロダクト
Search
ドキュメントセンター

Enterprise Distributed Application Service:Kubernetesクラスターでの段階的リリースデプロイメントを実装するためのAPI操作の呼び出し

最終更新日:Jan 07, 2025

このトピックでは、Enterprise Distributed Application Service (EDAS) SDK for Javaを使用してAPI操作を呼び出し、JARファイル、WARファイル、またはイメージを使用してKubernetesクラスターにアプリケーションを段階的にデプロイする方法について説明します。

前提条件

    背景情報

    アプリケーションを段階的にリリースする操作を呼び出す場合は、自動段階的リリース機能を使用することをお勧めします。手動段階的リリース機能を使用する場合は、ContinuePipeline 操作を呼び出して、次のフェーズのリリースを手動で確認する必要があります。詳細については、次のフェーズを手動で確認するをご参照ください。

    段階的リリースのサンプルポリシーを2つ示します。ビジネス要件に基づいてポリシーを選択および変更できます。

    • アプリケーションを2段階で手動でリリースする

      {"type":"BatchUpdate","batchUpdate":{"batch":2,"releaseType":"manual"}}
    • アプリケーションを2分間隔で2段階で自動的にリリースする

      {"type":"BatchUpdate","batchUpdate":{"batch":2,"releaseType":"auto","batchWaitTime":2}}

    JARファイルまたはWARファイルを使用してアプリケーションを段階的にリリースする

    次のサンプルコードは、EDASでKubernetesクラスターにJARファイルを使用してアプリケーションを段階的にリリースする方法の例を示しています。スケジューリングルール、起動コマンド、および環境変数に関連する高度なパラメーターは、コードに含まれていません。 APIパラメーターの詳細については、DeployK8sApplicationをご参照ください。

    説明

    WARファイルを使用してアプリケーションをリリースする場合は、ビジネス要件に基づいて次のパラメーターをサンプルコードに追加します。

    // アプリケーションのデプロイメントパッケージが依存する Tomcat のバージョン。このパラメーターは、WAR ファイルを使用してデプロイされる Spring Cloud および Apache Dubbo アプリケーションに適用されます。
    request.setWebContainer("apache-tomcat-7.0.91");  
    // アプリケーションのデプロイメントパッケージが依存する EDAS Container のバージョン。このパラメーターは、WAR ファイルを使用してデプロイされる High-speed Service Framework (HSF) アプリケーションに適用されます。      
    request.setEdasContainerVersion("3.5.9");
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.edas.model.v20170801.DeployK8sApplicationRequest;
    import com.aliyuncs.edas.model.v20170801.DeployK8sApplicationResponse;
    
    public class DeployK8sApplication {
    
        public static void main(String[] args)  {
            // Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの資格情報を使用して EDAS で操作を実行することは、リスクの高い操作です。API 操作の呼び出しや日常の O&M の実行には、Resource Access Management (RAM) ユーザーを使用することをお勧めします。RAM ユーザーを作成するには、RAM コンソールにログインします。
            // このサンプルコードでは、AccessKey ID と AccessKey シークレットは環境変数に含まれています。AccessKey ID と AccessKey シークレットは構成ファイルに保存できます。
            // キーの漏洩を防ぐため、AccessKey ID と AccessKey シークレットをコードファイルに保存しないことをお勧めします。
            String aliyun_user_ak = System.getenv("ACCESS_KEY_ID");
            String aliyun_user_sk = System.getenv("ACCESS_KEY_SECRET");
            // アプリケーションが存在するリージョンの ID。
            String region_id = "cn-hangzhou";
    
            DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
            DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
    
            // API リクエストを開始し、関連パラメーターを構成します。
            DeployK8sApplicationRequest request = new DeployK8sApplicationRequest();
            // アプリケーションの ID。
            request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
            // JAR ファイルまたは WAR ファイルの URL とバージョン。
            request.setPackageUrl("https:doc***.oss-cn-hangzhou.aliyuncs.com/sc-****-D-0.0.2-SNAPSHOT.jar");
            request.setPackageVersion("2021-04-15 14:01:12");
            // アプリケーションのデプロイメントパッケージが依存する Java Development Kit (JDK) のバージョン。有効な値: Open JDK 7 および Open JDK 8。
            request.setJDK("Open JDK 8");
            // 段階的リリースのカスタムポリシー。この例では、アプリケーションは 2 分間隔で 2 段階で自動的にリリースされます。
            request.setUpdateStrategy("{\"type\":\"BatchUpdate\",\"batchUpdate\":{\"batch\":2,\"releaseType\":\"auto\",\"batchWaitTime\":2}}");
            // ポッドの数。
            request.setReplicas(3);
            // ポッドの CPU クォータとメモリクォータ。値 0 は、制限が指定されていないことを示します。
            request.setCpuLimit(0);
            request.setMemoryLimit(0);
            request.setCpuRequest(0);
            request.setMemoryRequest(0);
            // 必要な CPU コア数の最小値。単位: コア。値 0 は、CPU コア数の最小値に制限がないことを示します。
            request.setMcpuRequest(0);
            // 許可される CPU コア数の最大値。単位: コア。値 0 は、CPU コア数の最大値に制限がないことを示します。
            request.setMcpuLimit(0);
            // 変更レコードの説明。
            request.setChangeOrderDesc("段階的リリース (JAR ファイル)");
    
            try {
                DeployK8sApplicationResponse response = client.getAcsResponse(request);
                System.out.println("ChangeOrderId=" + response.getChangeOrderId() + "\nMessage=" + response.getMessage());
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
    }

    サンプルレスポンス:

    ChangeOrderId=e16bdf30-00c9-4b12-87b5-0ad35f3f****
    Message=success

    イメージを使用してアプリケーションを段階的にリリースする

    次のサンプルコードは、EDASでKubernetesクラスターにイメージを使用してアプリケーションを段階的にリリースする方法の例を示しています。スケジューリングルール、起動コマンド、および環境変数に関連する高度なパラメーターは、コードに含まれていません。 APIパラメーターの詳細については、DeployK8sApplicationをご参照ください。

    説明

    この例では、手動段階的リリースモードが使用されています。ビジネス要件に基づいて、自動段階的リリースモードに変更できます。

    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.edas.model.v20170801.DeployK8sApplicationRequest;
    import com.aliyuncs.edas.model.v20170801.DeployK8sApplicationResponse;
    
    public class DeployK8sApplication {
    
        public static void main(String[] args)  {
            // Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの資格情報を使用して EDAS で操作を実行することは、リスクの高い操作です。API 操作の呼び出しや日常の O&M の実行には、RAM ユーザーを使用することをお勧めします。RAM ユーザーを作成するには、RAM コンソールにログインします。
            // このサンプルコードでは、AccessKey ID と AccessKey シークレットは環境変数に含まれています。 AccessKey ID と AccessKey シークレットは構成ファイルに保存できます。
            // キーの漏洩を防ぐため、AccessKey ID と AccessKey シークレットをコードに含めないことをお勧めします。
            String aliyun_user_ak = System.getenv("ACCESS_KEY_ID");
            String aliyun_user_sk = System.getenv("ACCESS_KEY_SECRET");
            // アプリケーションが存在するリージョンの ID。
            String region_id = "cn-hangzhou";
    
            DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
            DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
    
            // API リクエストを開始し、関連パラメーターを構成します。
            DeployK8sApplicationRequest request = new DeployK8sApplicationRequest();
            // アプリケーションの ID。
            request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
            // イメージのアドレス。
            request.setImage("registry-vpc.cn-hangzhou.aliyuncs.com/edas-demo-project/provider:2.0");
            // 段階的リリースのカスタムポリシー。この例では、アプリケーションは 2 段階で手動でリリースされます。ビジネス要件に基づいて、自動段階的リリースモードに変更できます。
            request.setUpdateStrategy("{\"type\":\"BatchUpdate\",\"batchUpdate\":{\"batch\":2,\"releaseType\":\"manual\"}}");
            // ポッドの数。
            request.setReplicas(3);
            // ポッドの CPU クォータとメモリクォータ。値 0 は、制限が指定されていないことを示します。
            request.setCpuLimit(0);
            request.setMemoryLimit(0);
            request.setCpuRequest(0);
            request.setMemoryRequest(0);
            // 必要な CPU コア数の最小値。単位: コア。値 0 は、CPU コア数の最小値に制限がないことを示します。
            request.setMcpuRequest(0);
            // 許可される CPU コア数の最大値。単位: コア。値 0 は、CPU コア数の最大値に制限がないことを示します。
            request.setMcpuLimit(0);
            // 変更レコードの説明。
            request.setChangeOrderDesc("段階的リリース (イメージ)");
    
            try {
                DeployK8sApplicationResponse response = client.getAcsResponse(request);
                System.out.println("ChangeOrderId=" + response.getChangeOrderId() + "\nMessage=" + response.getMessage());
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
    }

    サンプルレスポンス:

    ChangeOrderId=7ed96c93-cbd5-4614-a304-861ede6c****
    Message=success

    結果を確認する

    アプリケーションを段階的にリリースした後、GetChangeOrderInfo 操作を呼び出して、アプリケーションの変更の詳細と変更ステータスを表示できます。特定の API パラメーターの詳細については、GetChangeOrderInfoをご参照ください。

    GetChangeOrderInfo 操作を呼び出した後のサンプルの戻り値のレスポンス:

    • JAR ファイルまたは WAR ファイルを使用して段階的にリリースされたアプリケーションの変更の詳細

      {
        "Message": "success",
        "RequestId": "DA4E96FA-4C75-486A-A4F4-30F62C9EA53C",
        "Code": 200,
        "changeOrderInfo": {
          "Status": 2,
          "Desc": "段階的リリース (JAR ファイル)",
          "PipelineInfoList": {
            "PipelineInfo": [
              {
                ......
                "TaskMessage": "適用に成功しました。<br>アプリケーションは目的の状態で準備完了です。バージョン: 22"
                ......
                // サンプルレスポンスは不完全であり、参考用です。

    • イメージを使用して段階的にリリースされたアプリケーションの変更の詳細

      {
        "Message": "success",
        "RequestId": "FE1722D2-4B81-467C-9828-EFFBA3B3F565",
        "Code": 200,
        "changeOrderInfo": {
          "Status": 8,
          "Desc": "段階的リリース (イメージ)",
          "PipelineInfoList": {
            "PipelineInfo": [
              {
                ......
               "PipelineId": "4ff02b63-e14d-4124-86ff-22239f80****"
                ......
                "PipelineId": "6dbbfff8-bcf7-4300-aa59-ccb06909****"
                 .......
                 "TaskMessage": "適用に成功しました。<br>アプリケーションは目的の状態で準備完了です。バージョン: 22"
                 ......
                // サンプルレスポンスは不完全であり、参考用です。

    changeOrderInfo.Status パラメーターの値に基づいて、アプリケーションが段階的にリリースされたかどうかを確認できます。changeOrderInfo.Status パラメーターの有効な値:

    • 0: 準備完了

    • 1: 処理中

    • 2: 成功

    • 3: 失敗

    • 6: 終了

    • 8: 手動段階的リリース中に、次のフェーズをトリガーするための手動確認を待機中

    • 9: 自動段階的リリース中に、次のフェーズをトリガーするのを待機中

    • 10: システム例外により失敗

    説明

    3changeOrderInfo.Status パラメーターに値 タスクメッセージ が返された場合、アプリケーションは段階的にリリースされません。失敗の原因を見つけるには、 パラメーターの値を確認します。問題が修正されたら、アプリケーションを再度段階的にリリースします。

    次のフェーズを手動で確認する

    アプリケーションを手動段階的リリースモードでリリースする場合は、ContinuePipeline 操作を呼び出して、次のフェーズのリリースを手動で確認する必要があります。

    1. GetChangeOrderInfo 操作を呼び出して、各フェーズのパイプライン ID(PipelineId)をクエリします。

      GetChangeOrderInfo 操作を呼び出した後のサンプルの戻り値のレスポンス:

      {
        "Message": "success",
        "RequestId": "FE1722D2-4B81-467C-9828-EFFBA3B3F565",
        "Code": 200,
        "changeOrderInfo": {
          "Status": 8,
          "Desc": "段階的リリース (イメージ)",
          "PipelineInfoList": {
            "PipelineInfo": [
              {
                ......
               "PipelineId": "4ff02b63-e14d-4124-86ff-22239f80****"
                ......
                "PipelineId": "6dbbfff8-bcf7-4300-aa59-ccb06909****"
                 .......
                 "TaskMessage": "適用に成功しました。<br>アプリケーションは目的の状態で準備完了です。バージョン: 22"
                 ......
                // サンプルレスポンスは不完全であり、参考用です。

      説明

      この例では、アプリケーションは 2 段階で手動でリリースされます。GetChangeOrderInfo 操作を呼び出した後、2 つのパイプライン ID が返されます。2 番目のパイプライン ID は、手動で確認する必要があるフェーズを示します。

      同様に、アプリケーションを 3 段階で手動でリリースする場合、3 つのパイプライン ID が返されます。2 番目と 3 番目のパイプライン ID は、手動で確認する必要があるフェーズを示します。

    2. ContinuePipeline 操作を呼び出して、次のフェーズのリリースを手動で確認します。

      ContinuePipeline 操作を呼び出した後のサンプルの戻り値のレスポンス:

      {
        "Message": "success",
        "RequestId": "B8ECF6F7-672D-40E9-91DD-1C33F06D4FD8",
        "Code": 200
      }
      説明

      この例では、アプリケーションは 2 段階で手動でリリースされます。確認する必要があるフェーズは 1 つだけです。アプリケーションが 2 つ以上のフェーズでリリースされる場合は、正しいパイプライン ID に基づいてこの手順を繰り返して、フェーズを 1 つずつ確認します。

      この手順を繰り返す前に、2 つのフェーズの間隔に注意してください。次のフェーズは、間隔が経過した後でのみ手動で確認できます。デフォルトでは、2 つのフェーズの間隔は 10 秒です。