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

Enterprise Distributed Application Service:EDAS Java SDK を使用した ECS アプリケーションのインスタンスグループ管理

最終更新日:Mar 11, 2026

Elastic Compute Service (ECS) インスタンスでアプリケーションの複数バージョンを実行する場合、フリート全体を再デプロイすることなく、バージョンを分離し、トラフィックを選択的にルーティングし、カナリアリリースを実行する方法が必要です。Enterprise Distributed Application Service (EDAS) のインスタンスグループを使用すると、ECS インスタンスをパーティション分割して、各グループが異なるアプリケーションバージョンを実行できるようになります。その後、グループ間でトラフィックをシフトさせ、小規模なグループで新しいバージョンを検証し、残りのグループにプロモートすることができます。

このトピックでは、EDAS Java SDK を使用した 5 つの操作について説明します。

クイックスタート

次の例では、Beta という名前のインスタンスグループを作成し、それをアプリケーションバージョンに関連付け、結果として得られるグループ ID を出力します。プレースホルダー ID はご自身の値に置き換えてください。

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.edas.model.v20170801.InsertDeployGroupRequest;
import com.aliyuncs.edas.model.v20170801.InsertDeployGroupResponse;

public class QuickStart {
    public static void main(String[] args) throws Exception {
        String regionId = "cn-hangzhou";
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);

        InsertDeployGroupRequest request = new InsertDeployGroupRequest();
        request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
        request.setGroupName("Beta");
        request.setInitPackageVersionId("3fc52328-8746-4422-a742-94e0cfc7****");

        InsertDeployGroupResponse response = client.getAcsResponse(request);
        System.out.println("GroupName=" + response.getDeployGroupEntity().getGroupName()
            + "\nId=" + response.getDeployGroupEntity().getId());
    }
}

期待される出力:

GroupName=Beta
Id=941be68c-4aac-48a1-88fe-c9ad1502****

インスタンスのグループ間移動、JVM および Tomcat の設定、グループの削除などの詳細な操作については、以降のセクションをご参照ください。

インスタンスグループの仕組み

EDAS コンソールでアプリケーションを作成すると、EDAS は自動的にデフォルトグループ (_DEFAULT_GROUP) を作成します。このデフォルトグループは削除できず、単一バージョンのデプロイメントには十分です。

複数バージョンのデプロイメントの場合は、バージョンを分離するために追加のグループを作成します。たとえば、itemcenter という名前のアプリケーションが 10 台の ECS インスタンスで実行されているとします。6 台のインスタンスはデフォルトグループに属し、4 台はベータグループに属します。各グループは、独自の JVM、Tomcat、起動テンプレート、および Server Load Balancer (SLB) 設定を持つことができます。

事前準備

このトピックのいずれかの操作を呼び出す前に、次のものが揃っていることを確認してください。

  • EDAS SDK for Java がインストール済みです。詳しくは、「EDAS SDK for Java を使用して EDAS API を呼び出す」をご参照ください。

  • アプリケーションが実行されているリージョン ID (例:cn-hangzhou)

  • (条件付き) インスタンスグループを作成する場合、アプリケーションバージョン ID。ListHistoryDeployVersion を呼び出し、PackageVersion.Id の値を使用します。

  • (条件付き) ECS インスタンスをグループ間で移動する場合、Elastic Compute Container (ECC) ID。ListApplicationEcc を呼び出し、EccId の値を使用します。

  • ECS インスタンスが作成されていること (例:i-bp13o01lzmbsvhsl****)

  • ECS クラスターが作成されていること。詳細については、「API オペレーションを呼び出して ECS クラスターを作成する」をご参照ください。すでにクラスターがある場合は、ListCluster を呼び出し、ClusterId の値 (例:369d06d7-450b-4f3d-bf75-9536fcd9****) を使用します。

共通のクライアント設定

このトピックのすべての例は、同じクライアント初期化を共有します。いずれかの操作を実行する前に、一度だけ設定してください。

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;

// アプリケーションが実行されているリージョン ID に置き換えます
String regionId = "cn-hangzhou";

// 環境変数から AccessKey 認証情報を取得します
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);

コードを実行する前に、次の環境変数を設定してください。

変数説明
ALIBABA_CLOUD_ACCESS_KEY_IDご利用の Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID
ALIBABA_CLOUD_ACCESS_KEY_SECRETご利用の Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret

インスタンスグループの作成

InsertDeployGroup を呼び出してインスタンスグループを作成し、アプリケーションバージョンに関連付けます。

パラメーター

パラメーター必須説明
AppIdStringはいアプリケーション ID。
GroupNameStringはいグループ名。英字、数字、アンダースコア (_)、ピリオド (.) を使用できます。最大 64 文字です。
InitPackageVersionIdStringはいグループを初期化するためのデプロイパッケージバージョン ID。ListHistoryDeployVersion を呼び出して取得します。

サンプルコード

import com.aliyuncs.edas.model.v20170801.InsertDeployGroupRequest;
import com.aliyuncs.edas.model.v20170801.InsertDeployGroupResponse;

InsertDeployGroupRequest request = new InsertDeployGroupRequest();
request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
request.setGroupName("Beta");
request.setInitPackageVersionId("3fc52328-8746-4422-a742-94e0cfc7****");

try {
    InsertDeployGroupResponse response = client.getAcsResponse(request);
    System.out.println("GroupName=" + response.getDeployGroupEntity().getGroupName()
        + "\nId=" + response.getDeployGroupEntity().getId());
} catch (com.aliyuncs.exceptions.ClientException e) {
    // 一般的なエラー:
    // - Invalid AppId:指定されたアプリケーションが存在しません。
    // - Duplicate GroupName:この名前のグループはすでに存在します。
    e.printStackTrace();
}

サンプルレスポンス

GroupName=Beta
Id=941be68c-4aac-48a1-88fe-c9ad1502****

結果の確認

ListDeployGroup を呼び出し、新しいグループ名がレスポンスに含まれているかどうかを確認します。

{
  "DeployGroupList": {
    "DeployGroup": [
      {
        "GroupName": "Beta",
        "AppId": "6bbc57a2-a017-4bec-b521-49a15bd3****",
        "GroupId": "941be68c-4aac-48a1-88fe-c9ad1502****"
      }
    ]
  },
  "Message": "success",
  "Code": 200
}

ECS インスタンスの別グループへの移動

ChangeDeployGroup を呼び出して、ECS インスタンスをあるインスタンスグループから別のインスタンスグループに移動します。

説明

API 呼び出しごとに移動できる ECS インスタンスは 1 つだけです。

パラメーター

パラメーター必須説明
AppIdStringはいアプリケーション ID。
EccInfoStringはいECS インスタンスの ECC ID。ListApplicationEcc を呼び出して取得します。
GroupNameStringはいターゲットグループ名。_DEFAULT_GROUP を使用して、インスタンスをデフォルトグループに戻します。
ForceStatusBooleanいいえECC のデプロイパッケージバージョンがターゲットグループと異なる場合に移動を強制します。デフォルト:false

サンプルコード

import com.aliyuncs.edas.model.v20170801.ChangeDeployGroupRequest;
import com.aliyuncs.edas.model.v20170801.ChangeDeployGroupResponse;

ChangeDeployGroupRequest request = new ChangeDeployGroupRequest();
request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
request.setEccInfo("4009a824-ce33-4ba0-9ca2-346249a9****");
request.setGroupName("Beta");
request.setForceStatus(true);

try {
    ChangeDeployGroupResponse response = client.getAcsResponse(request);
    System.out.println("Message=" + response.getMessage()
        + "\nChangeOrderId=" + response.getChangeOrderId());
} catch (com.aliyuncs.exceptions.ClientException e) {
    // 一般的なエラー:
    // - Invalid EccInfo:指定された ECC が存在しません。
    // - Version mismatch:移動を強制するには、ForceStatus を true に設定します。
    e.printStackTrace();
}

サンプルレスポンス

Message=success

結果の確認

ListApplicationEcc を呼び出し、ECS インスタンスの GroupId がターゲットグループと一致することを確認します。

{
  "EccInfoList": {
    "EccInfo": [
      {
        "EcuId": "8287bcf6-cde3-4377-8906-086d2c32****",
        "GroupId": "941be68c-4aac-48a1-88fe-c9ad1502****",
        "AppId": "6bbc57a2-a017-4bec-b521-49a15bd3****",
        "EccId": "02cdcdfa-f22b-45e6-8a0f-a738c766****"
      }
    ]
  },
  "Message": "success",
  "Code": 200
}

グループの JVM パラメーター設定

UpdateJvmConfiguration を呼び出して、特定のインスタンスグループの Java 仮想マシン (JVM) パラメーターを設定します。

パラメーター

パラメーター必須説明
AppIdStringはいアプリケーション ID。
GroupIdStringはいインスタンスグループ ID。ListDeployGroup を呼び出して取得します。
MinHeapSizeIntegerいいえ初期ヒープサイズ (MB)。
MaxHeapSizeIntegerいいえ最大ヒープサイズ (MB)。
MaxPermSizeIntegerいいえPermanent 世代サイズ (MB)。
OptionsStringいいえカスタム JVM オプション (例:-Dproperty=value)。

サンプルコード

import com.aliyuncs.edas.model.v20170801.UpdateJvmConfigurationRequest;
import com.aliyuncs.edas.model.v20170801.UpdateJvmConfigurationResponse;

UpdateJvmConfigurationRequest request = new UpdateJvmConfigurationRequest();
request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
request.setGroupId("941be68c-4aac-48a1-88fe-c9ad1502****");
request.setMinHeapSize(500);
request.setMaxHeapSize(500);
request.setMaxPermSize(500);
request.setOptions("-Dproperty=value");

try {
    UpdateJvmConfigurationResponse response = client.getAcsResponse(request);
    System.out.println("Message=" + response.getMessage());
} catch (com.aliyuncs.exceptions.ClientException e) {
    // 一般的なエラー:
    // - Invalid GroupId:指定されたインスタンスグループが存在しません。
    e.printStackTrace();
}

サンプルレスポンス

Message=success

結果の確認

GetJvmConfiguration を呼び出して、更新された JVM 設定を確認します。

{
  "Message": "success",
  "JvmConfiguration": {
    "Options": "-Dproperty=value",
    "MaxPermSize": 500,
    "MaxHeapSize": 500,
    "MinHeapSize": 500
  },
  "Code": 200
}

グループの Tomcat パラメーター設定

UpdateContainerConfiguration を呼び出して、特定のインスタンスグループの Tomcat コンテナパラメーターを設定します。

パラメーター

パラメーター必須説明
AppIdStringはいアプリケーション ID。
GroupIdStringはいインスタンスグループ ID。ListDeployGroup を呼び出して取得します。
ContextPathStringいいえTomcat コンテキストパス。有効な値:空の文字列、null、WAR パッケージ名、ROOT (ルートディレクトリ)、またはカスタム文字列。
HttpPortIntegerいいえアプリケーションポート (例:8080)。
MaxThreadsIntegerいいえ最大スレッド数。
URIEncodingStringいいえURI エンコーディングスキーム。有効な値:ISO-8859-1GBKGB2312UTF-8
UseBodyEncodingBooleanいいえURI クエリパラメーターにリクエストボディのエンコーディングスキームを使用するかどうか。デフォルト:false

サンプルコード

import com.aliyuncs.edas.model.v20170801.UpdateContainerConfigurationRequest;
import com.aliyuncs.edas.model.v20170801.UpdateContainerConfigurationResponse;

UpdateContainerConfigurationRequest request = new UpdateContainerConfigurationRequest();
request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
request.setGroupId("941be68c-4aac-48a1-88fe-c9ad1502****");
request.setContextPath("");
request.setHttpPort(8080);
request.setMaxThreads(20);
request.setURIEncoding("ISO-8859-1");
request.setUseBodyEncoding(true);

try {
    UpdateContainerConfigurationResponse response = client.getAcsResponse(request);
    System.out.println("Message=" + response.getMessage());
} catch (com.aliyuncs.exceptions.ClientException e) {
    // 一般的なエラー:
    // - Invalid GroupId:指定されたインスタンスグループが存在しません。
    e.printStackTrace();
}

サンプルレスポンス

Message=success

結果の確認

GetContainerConfiguration を呼び出して、更新された Tomcat 設定を確認します。

{
  "Message": "success",
  "ContainerConfiguration": {
    "HttpPort": 8080,
    "ContextPath": "ROOT",
    "UseBodyEncoding": true,
    "URIEncoding": "ISO-8859-1",
    "MaxThreads": 20
  },
  "Code": 200
}

インスタンスグループの削除

DeleteDeployGroup を呼び出してインスタンスグループを削除します。

重要

ECS インスタンスを含むインスタンスグループは削除できません。まず、すべてのインスタンスを別のグループに移動してください。詳細については、「ECS インスタンスの別グループへの移動」をご参照ください。

パラメーター

パラメーター必須説明
AppIdStringはいアプリケーション ID。
GroupNameStringはい削除するインスタンスグループの名前。

サンプルコード

import com.aliyuncs.edas.model.v20170801.DeleteDeployGroupRequest;
import com.aliyuncs.edas.model.v20170801.DeleteDeployGroupResponse;

DeleteDeployGroupRequest request = new DeleteDeployGroupRequest();
request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
request.setGroupName("Beta");

try {
    DeleteDeployGroupResponse response = client.getAcsResponse(request);
    System.out.println("Message=" + response.getMessage()
        + "\nData=" + response.getData());
} catch (com.aliyuncs.exceptions.ClientException e) {
    // 一般的なエラー:
    // - Group not empty:削除する前に、すべてのインスタンスを別のグループに移動してください。
    // - Invalid GroupName:指定されたグループが存在しません。
    e.printStackTrace();
}

サンプルレスポンス

Message=success
Data=1

結果の確認

ListDeployGroup を呼び出し、削除されたグループがレスポンスに表示されなくなったことを確認します。

{
  "DeployGroupList": {
    "DeployGroup": [
      {
        "GroupName": "_DEFAULT_GROUP",
        "AppId": "6bbc57a2-a017-4bec-b521-49a15bd3****",
        "GroupId": "941be68c-4aac-48a1-88fe-c9ad1502****"
      }
    ]
  },
  "Message": "success",
  "Code": 200
}

エラー処理

すべての EDAS SDK オペレーションは、ClientException (無効なパラメーターやネットワークの問題などのクライアント側エラー) または ServerException (サーバー側エラー) をスローします。次の表に、一般的なエラーシナリオとソリューションを示します。

操作エラーシナリオソリューション
InsertDeployGroupグループ名の重複別のグループ名を選択するか、ListDeployGroup を使用して既存のグループをクエリします。
InsertDeployGroup無効な InitPackageVersionIdListHistoryDeployVersion を呼び出して、有効なバージョン ID を取得します。
ChangeDeployGroupECC とターゲットグループ間のバージョン不一致ForceStatustrue に設定して、移動を強制します。
ChangeDeployGroup無効な EccInfoListApplicationEcc を呼び出して、有効な ECC ID を取得します。
DeleteDeployGroupグループに ECS インスタンスが含まれている削除する前に、すべてのインスタンスを別のグループに移動します。
すべての操作無効な AppIdアプリケーションが存在し、アクセス権があることを確認してください。

関連 API

操作説明
InsertDeployGroupインスタンスグループを作成します。
ChangeDeployGroupECS インスタンスを別のグループに移動します。
UpdateJvmConfigurationインスタンスグループの JVM パラメーターを設定します。
UpdateContainerConfigurationインスタンスグループの Tomcat パラメーターを設定します。
デプロイグループの削除インスタンスグループを削除します。
ListDeployGroupアプリケーションのインスタンスグループをクエリします。
ListHistoryDeployVersion過去のデプロイメントバージョンをクエリします。
ListApplicationEccアプリケーションの ECC 情報をクエリします。
GetJvmConfigurationインスタンスグループの JVM 設定をクエリします。
GetContainerConfigurationインスタンスグループの Tomcat 設定をクエリします。
ListClusterECS クラスターをクエリします。