このトピックでは、Enterprise Distributed Application Service (EDAS) SDK for Java を使用して、更新中の Kubernetes クラスター内のアプリケーションをロールバックするための API 操作を呼び出す方法について説明します。
前提条件
アプリケーションが更新中であること。ビジネス要件に基づいてアプリケーションを更新する方法の詳細については、以下のトピックを参照してください。
(オプション) アプリケーションの変更レコードと変更オーダー ID が取得されていること。ListRecentChangeOrder 操作を呼び出すことで、更新中のアプリケーションの変更レコードと変更オーダー ID (ChangeOrderId) をクエリできます。
変更オーダー ID の例: 47e2b863-adc8-4a0e-ac23-8361b95a****
更新を開始したときに ChangeOrderId パラメーターの値を保存した場合は、ListRecentChangeOrder オペレーションを呼び出す必要はありません。
サンプルコード
次のサンプルコードは、更新中に EDAS Kubernetes クラスター内のアプリケーションをロールバックする方法の例を示しています。
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.AbortAndRollbackChangeOrderRequest;
import com.aliyuncs.edas.model.v20170801.AbortAndRollbackChangeOrderResponse;
public class AbortAndRollbackChangeOrder {
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 リクエストを開始し、関連パラメーターを構成します。
AbortAndRollbackChangeOrderRequest request = new AbortAndRollbackChangeOrderRequest();
// 更新中のアプリケーションの変更オーダー ID。
request.setChangeOrderId("47e2b863-adc8-4a0e-ac23-8361b95a****");
try {
AbortAndRollbackChangeOrderResponse response = client.getAcsResponse(request);
System.out.println("ChangeOrderId=" + response.getData().getChangeOrderId() + "\nMessage=" + response.getMessage() + "\nTraceId=" + response.getTraceId());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}サンプルレスポンス:
ChangeOrderId=aef94ee3-3142-4abc-9d7c-57249686****
Message=success
TraceId=210e815316184954351417778d****サンプルコード
アプリケーションの更新中にロールバックした後、GetChangeOrderInfo オペレーションを呼び出して、アプリケーションの変更の詳細と変更ステータスをクエリできます。特定の API パラメーターについては、GetChangeOrderInfo をご参照ください。
GetChangeOrderInfo オペレーション呼び出し後のサンプルレスポンス:
{
"Message": "success",
"RequestId": "92C41E0B-949F-44A2-A386-AECA8909225E",
"Code": 200,
"changeOrderInfo": {
"Status": 2,
"Desc": "Deployment Method: Phased Release | Version: 2021-04-15 14:01:12 | Package Name: sc-consumer-D-0.0.1-SNAPSHOT.jar",
"PipelineInfoList": {
"PipelineInfo": [
{
"PipelineStatus": 2,
"PipelineName": "Batch 1 Change",
......
"TaskMessage": "Apply success. <br>application is ready at desired state, version: 22"
......
// サンプルレスポンスは不完全であり、参照用にのみ提供されています。
アプリケーションがロールバックされたかどうかを確認するには、changeOrderInfo.Status パラメーターの値を確認します。
changeOrderInfo.Status パラメーターの有効な値:
0: 準備完了
1: 実行中
2: 成功
3: 失敗
6: 終了
8: 手動段階的リリース中に次のフェーズの手動確認を待機中
9: 自動段階的リリース中に次のフェーズの自動確認を待機中
10: システム例外により失敗
3changeOrderInfo.Status パラメーターで タスクメッセージ の値が返された場合、更新中にアプリケーションのロールバックは失敗します。失敗の原因を特定するには、 パラメーターの値を確認します。問題を解決した後、アプリケーションを再度更新します。