全部產品
Search
文件中心

:使用Python SDK執行滾動升級任務

更新時間:Jun 30, 2024

通過阿里雲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

  1. 查看Python版本。

    python --version

    返回Python版本表明已安裝Python,樣本如下圖所示。python-version

  2. 安裝SDK核心庫。

    pip install aliyun-python-sdk-core
  3. 安裝阿里雲SDK Credentials工具。

    pip install alibabacloud_credentials
    說明

    通過配置環境變數(ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET)的方式配置Alibaba Cloud Credentials工具的身分識別驗證,可以實現以非AK硬式編碼方式訪問阿里雲OpenAPI。更多資訊,請參見配置環境變數方案

  4. 安裝CloudOps Orchestration Service (OOS)的SDK。

    pip install aliyun-python-sdk-oos

步驟二:執行滾動升級任務

本步驟提供範例程式碼,示範在ECS執行個體中執行指令碼。

  1. 建立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)
  2. 運行Python指令碼並查看返回資訊。

    您可以在命令的返回資訊中找到滾動升級任務的執行ID等資訊,樣本如下圖所示。

    說明

    執行復原任務時需要填入源滾動升級任務的執行ID。

    rollingupdate-py

(可選)執行復原任務

如果滾動升級過程中出現異常,或者滾動升級後又需要使用歷史配置,您可以執行復原任務為伸縮組內ECS執行個體恢複配置。本步驟提供範例程式碼,示範如何復原已經執行的滾動升級任務。

  1. 建立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)
  2. 運行Python指令碼並查看返回資訊。

    樣本如下圖所示。rollingupdate-rollback-py

模板參數說明

本教程中使用了公用模板ACS-ESS-RollingUpdateByRunCommandInScalingGroup,參數說明如下表所示。

參數

說明

invokeType

任務類型。取值範圍:

  • invoke:滾動升級任務。

  • rollback:復原任務。

scalingGroupId

待執行任務的伸縮組。

commandType

待執行的指令碼類型,取值RunShellScript代表Shell指令碼。

invokeScript

執行滾動升級任務時,在ECS執行個體中執行的指令碼。

rollbackScript

執行復原任務時,在ECS執行個體中執行的指令碼。

OOSAssumeRole

執行任務時使用的RAM角色,預設為OOSServiceRole。

enterProcess

開始執行任務時暫停伸縮組流程。

exitProcess

結束任務時需要恢複的伸縮組流程。

batchNumber

執行任務時,將伸縮組內ECS執行個體分成幾個批次,每批次至少包括一台ECS執行個體。

batchPauseOption

執行任務時的暫停設定。取值範圍:

  • Automatic:不暫停,一次性執行完成。

  • FirstBatchPause:第一批次執行完成後,暫停執行任務。

  • EveryBatchPause:每批次執行完成後,都暫停執行任務。

sourceExecutionId

執行復原任務時,源滾動升級任務的執行ID。