通過阿里雲Python SDK,您不用複雜編程即可訪問阿里雲服務。本教程以運行Linux系統的電腦為例,介紹如何使用阿里雲Python SDK調用CloudOps Orchestration Service (OOS)的API執行滾動升級任務。
前提條件
已建立伸縮組並添加ECS執行個體。
已在本地電腦中安裝Python。
已建立RAM使用者並擷取AccessKey。具體操作,請參見建立RAM使用者的AccessKey。
重要RAM使用者的AccessKey Secret只能在建立AccessKey時顯示,建立完成後不支援查看。請在建立好AccessKey後,及時並妥善儲存AccessKey Secret。
背景資訊
滾動升級是指通過任務形式批次更新ECS執行個體配置。通過滾動升級,您可以為伸縮組內處於服務中狀態的ECS執行個體批次更新鏡像、執行指令碼或者安裝OOS軟體包。
步驟一:安裝阿里雲Python SDK
查看Python版本。
python --version
返回Python版本表明已安裝Python,樣本如下圖所示。
安裝SDK核心庫。
pip install aliyun-python-sdk-core
安裝阿里雲SDK Credentials工具。
pip install alibabacloud_credentials
說明通過配置環境變數(
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
)的方式配置Alibaba Cloud Credentials工具的身分識別驗證,可以實現以非AK硬式編碼方式訪問阿里雲OpenAPI。更多資訊,請參見配置環境變數方案。安裝CloudOps Orchestration Service (OOS)的SDK。
pip install aliyun-python-sdk-oos
步驟二:執行滾動升級任務
本步驟提供範例程式碼,示範在ECS執行個體中執行指令碼。
建立Python指令碼並輸入執行滾動升級任務的代碼。
範例程式碼中涉及的OOS模板參數說明,請參見模板參數說明。範例程式碼如下:
# -*- coding: UTF-8 -*- from aliyunsdkcore.client import AcsClient from alibabacloud_credentials.client import Client as CredClient from aliyunsdkoos.request.v20190601 import StartExecutionRequest import json cred=CredClient() accesskeyid = cred.get_access_key_id() accesskeysecret = cred.get_access_key_secret() # 建立AcsClient執行個體 client = AcsClient(accesskeyid, accesskeysecret) # 建立request,並設定JSON資料格式 request = StartExecutionRequest.StartExecutionRequest() request.set_accept_format('json') # 模板名稱根據所選升級方式替換 request.set_TemplateName("ACS-ESS-RollingUpdateByRunCommandInScalingGroup") # 關聯滾動升級任務和伸縮組,用於在伸縮組中查詢任務執行情況 request.set_Tags("{\"scaling_group\":\"asg-xxxxxxxx\"}") # 參數根據所選模板替換 parameters = {"invokeType": "invoke", "scalingGroupId": "asg-xxxxxxxxx", "commandType": "RunShellScript", "invokeScript": "df -h\nifconfig", "rollbackScript": "df -h\nifconfig", "OOSAssumeRole": "", "exitProcess": [ "ScaleIn", "ScaleOut", "HealthCheck", "AlarmNotification", "ScheduledAction" ], "enterProcess": [ "ScaleIn", "ScaleOut", "HealthCheck", "AlarmNotification", "ScheduledAction" ], "batchNumber": 2, "batchPauseOption": "Automatic"} request.set_Parameters(json.dumps(parameters)) # 發起API請求並顯示傳回值 response = client.do_action_with_exception(request) print(response)
運行Python指令碼並查看返回資訊。
您可以在命令的返回資訊中找到滾動升級任務的執行ID等資訊,樣本如下圖所示。
說明執行復原任務時需要填入源滾動升級任務的執行ID。
(可選)執行復原任務
如果滾動升級過程中出現異常,或者滾動升級後又需要使用歷史配置,您可以執行復原任務為伸縮組內ECS執行個體恢複配置。本步驟提供範例程式碼,示範如何復原已經執行的滾動升級任務。
建立Python指令碼並輸入執行復原任務的代碼。
範例程式碼中涉及的OOS模板參數說明,請參見模板參數說明。範例程式碼如下:
# -*- coding: UTF-8 -*- from aliyunsdkcore.client import AcsClient from alibabacloud_credentials.client import Client as CredClient from aliyunsdkoos.request.v20190601 import StartExecutionRequest import json cred=CredClient() accesskeyid = cred.get_access_key_id() accesskeysecret = cred.get_access_key_secret() # 建立AcsClient執行個體 client = AcsClient(accesskeyid, accesskeysecret) # 建立request,並設定JSON資料格式 request = StartExecutionRequest.StartExecutionRequest() request.set_accept_format('json') # 模板名稱根據所選升級方式替換 request.set_TemplateName("ACS-ESS-RollingUpdateByRunCommandInScalingGroup") # 關聯滾動升級任務和伸縮組,用於在伸縮組中查詢任務執行情況 request.set_Tags("{\"scaling_group\":\"asg-xxxxxxxxxx\"}") # 復原操作對應的參數 parameters = {"invokeType": "rollback", "scalingGroupId": "asg-xxxxxxxxx", "commandType": "RunShellScript", "rollbackScript": "df -h\nifconfig", "OOSAssumeRole": "", "sourceExecutionId": "exec-xxxxxxxx", "batchNumber": 2, "batchPauseOption": "Automatic"} request.set_Parameters(json.dumps(parameters)) # 發起API請求並顯示傳回值 response = client.do_action_with_exception(request) print(response)
運行Python指令碼並查看返回資訊。
樣本如下圖所示。
模板參數說明
本教程中使用了公用模板ACS-ESS-RollingUpdateByRunCommandInScalingGroup,參數說明如下表所示。
參數 | 說明 |
invokeType | 任務類型。取值範圍:
|
scalingGroupId | 待執行任務的伸縮組。 |
commandType | 待執行的指令碼類型,取值RunShellScript代表Shell指令碼。 |
invokeScript | 執行滾動升級任務時,在ECS執行個體中執行的指令碼。 |
rollbackScript | 執行復原任務時,在ECS執行個體中執行的指令碼。 |
OOSAssumeRole | 執行任務時使用的RAM角色,預設為OOSServiceRole。 |
enterProcess | 開始執行任務時暫停伸縮組流程。 |
exitProcess | 結束任務時需要恢複的伸縮組流程。 |
batchNumber | 執行任務時,將伸縮組內ECS執行個體分成幾個批次,每批次至少包括一台ECS執行個體。 |
batchPauseOption | 執行任務時的暫停設定。取值範圍:
|
sourceExecutionId | 執行復原任務時,源滾動升級任務的執行ID。 |