このトピックでは、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 操作を呼び出して、次のフェーズのリリースを手動で確認する必要があります。
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 は、手動で確認する必要があるフェーズを示します。
ContinuePipeline 操作を呼び出して、次のフェーズのリリースを手動で確認します。
ContinuePipeline 操作を呼び出した後のサンプルの戻り値のレスポンス:
{ "Message": "success", "RequestId": "B8ECF6F7-672D-40E9-91DD-1C33F06D4FD8", "Code": 200 }説明この例では、アプリケーションは 2 段階で手動でリリースされます。確認する必要があるフェーズは 1 つだけです。アプリケーションが 2 つ以上のフェーズでリリースされる場合は、正しいパイプライン ID に基づいてこの手順を繰り返して、フェーズを 1 つずつ確認します。
この手順を繰り返す前に、2 つのフェーズの間隔に注意してください。次のフェーズは、間隔が経過した後でのみ手動で確認できます。デフォルトでは、2 つのフェーズの間隔は 10 秒です。