全部产品
Search
文档中心

弹性伸缩:使用Python SDK执行滚动升级任务

更新时间:Dec 28, 2023

通过阿里云Python SDK,您不用复杂编程即可访问阿里云服务。本教程以运行Linux系统的电脑为例,介绍如何使用阿里云Python SDK调用系统运维管理 OOS(CloudOps Orchestration Service)的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. 安装系统运维管理 OOS(CloudOps Orchestration Service)的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。