通过阿里云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
查看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。更多信息,请参见配置环境变量方案。安装系统运维管理 OOS(CloudOps Orchestration Service)的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。 |
- 本页导读 (1)