阿里云资源编排服务Python SDK使用入门

本文涉及的产品
资源编排,不限时长
简介: 阿里云资源编排服务(ROS)为我们维护云计算资源提供了一个低成本、可靠、标准化的方案。基于ROS提供的能力,我们只要编写和维护资源模板文件,就可以达到维护云计算资源的目的。 ROS同时提供RESTful API和SDK,这使得我们可以很容易的把ROS对于资源的操作能力集成到我们的应用中。

阿里云资源编排服务(ROS)为我们维护云计算资源提供了一个低成本、可靠、标准化的方案。基于ROS提供的能力,我们只要编写和维护资源模板文件,就可以达到维护云计算资源的目的,而不再需要花费很多的时间通过控制台来人肉配置。ROS为一些场景下的资源维护提供了不同的思路和可能性,比如很多需要大量临时计算资源的场景,使用ROS将使整个资源申请、应用构建、资源释放过程非常简单。

ROS同时提供RESTful API和SDK,这使得我们可以很容易的把ROS对于资源的操作能力集成到我们的应用中。下面我们通过示例介绍一下,如何使用ROS的Python SDK来使用ROS的资源编排功能。

: 示例中的命令行都使用Linux的shell,Windows/DOS用户需要根据情况修改。

1. 安装Python SDK

ROS Python SDK依赖Python 2.7以上版本。首先,使用pip安装aliyun-python-sdk-core:

pip install aliyun-python-sdk-core

aliyun-python-sdk-core是所有阿里云官方Python SDK的公共组件。如果安装过程提示权限错误,可能是因为当前用户没有Python安装路径的写权限,上面的命令可以改成下面这样,后面的例子类似:

sudo pip install aliyun-python-sdk-core

接下来,安装ROS SDK:

pip install aliyun-python-sdk-ros

2. 初始化SDK

我们首先创建一个文件来存放我们的示例代码:

touch ros_sdk_sample.py

import必要的库:

from aliyunsdkcore.client import AcsClient
from aliyunsdkros.request.v20150901 import DescribeRegionsRequest, CreateStacksRequest

import json

初始化SDK客户端对象:

client = AcsClient('你的AccessKeyId', '你的AccessKeySecret', 'cn-beijing')
  • 其中AccessKeyId和AccessKeySecure是用户访问阿里云Open API时的认证信息,可以登陆阿里云官方站后获得: https://ak-console.aliyun.com/
  • 第三个参数是用户访问的资源所在的默认Region,此处为了演示,选择cn-beijing

3. 基本请求过程

我们通过一个简单的列出Region列表的请求来说明ROS请求的基本过程:

3.1 构造请求对象

构造一个表示列出Region列表的请求对象:

req = DescribeRegionsRequest.DescribeRegionsRequest()
3.2 发起请求
status, headers, body = client.get_response(req)
  • status表示请求的返回状态,与HTTP状态码对应,一般2xx表示成功,4xx和5xx表示出错。
  • header表示请求的返回头信息,与HTTP头对应
  • body表示请求的返回内容,与HTTP请求返回的body对应
3.3 处理请求结果

ROS API返回的内容为JSON格式,所以我们把内容通过JSON反序列化后直接打印到屏幕:

if status == 200:
    regions = json.loads(body)
    print(regions)
else:
    print('Unexpected errors: status=%d, error=%s' % (status, body))

当请求成功执行时,会在屏幕上打印支持ROS的Region列表,当请求出错时,屏幕上会打印出错的状态代码和出错信息。

4. 创建资源栈

接下来,我们用一个更有用的例子来说明如何通过ROS的SDK创建一个包含ECS实例的资源栈。

4.1 模板

我们使用下面的模板来创建资源栈:

template = '''

{
    "ROSTemplateFormatVersion": "2015-09-01",
    "Resources": {
        "My_ECS_Instance": {
            "Type": "ALIYUN::ECS::Instance",
            "Description": "Create a ECS instance for demo.",
            "Properties": {
                "ImageId": "m-25qoptbjn",
                "InstanceType": "ecs.s2.large",
                "InternetChargeType": "PayByTraffic",
                "IoOptimized": "none",
                "SystemDisk_Category": "cloud",
                "SecurityGroupId": {
                    "Fn::GetAtt": [
                        "mySecurityGroup",
                        "SecurityGroupId"
                    ]
                }
            }
        },

        "mySecurityGroup": {
            "Type": "ALIYUN::ECS::SecurityGroup",
            "Properties": {
                "SecurityGroupName": "mySecurityGroup"
            }
        }
    }
}

'''

模板中定义了一个ECS实例和一个安全组,ECS实例使用自定义镜像m-25qoptbjn初始化。

4.2 构造请求

创建请求对象

req = CreateStacksRequest.CreateStacksRequest()

通过HTTP头设置资源栈所在的Region:

req.set_headers({'x-acs-region-id': 'cn-beijing'})

构造请求的消息体内容:

create_stack_body = '''
{
    "Name": "%s",
    "TimeoutMins": %d,
    "Template": %s
}
''' % ('my_demo_stack', 60, template)
  • Name是我们将要创建的资源栈的命名,每个用户空间下的资源栈名称不能重复
  • TimeoutMins是指创建过程如果在指定的时间后不能完成则超时失败,单位分钟
  • Template表示创建的资源栈使用的模板内容
req.set_content(create_stack_body);
4.3 提交请求
status, headers, body = client.get_response(req)
if status == 201:
    result = json.loads(body)
    print(result)
else:
    print('Unexpected errors: status=%d, error=%s' % (status, body))
  • 创建资源栈的请求根据RESTful的习惯使用HTTP POST方式提交,当成功时返回状态为201

5. 资源栈

当创建资源栈的请求成功时,返回的body中包含被创建资源栈的的ID, Name,如下:

{u'Id': u'61167738-e128-4840-9a37-e568f70aa894', u'Name': u'my_demo_stack'}

创建资源栈的请求会同步返回,但资源栈内的资源创建是由资源编排服务在后台异步执行的。所以到创建请求返回,并不表示所有资源已经创建完成。我们可以通过ROS的web控制台或者API来查询堆栈的创建状态、创建过程中的事件等等。

5.1 使用控制台管理资源栈

登陆ROS控制台(https://ros.console.aliyun.com) 我们可以看到刚刚通过python代码提交创建的资源栈:

资源栈列表

资源栈的状态为创建中,表示我们的ECS实例还没有创建完成。我们可以查看事件列表来监控资源栈创建过程:

ROS事件列表

如图所示,ROS首先创建了ECS依赖的安全组,然后创建了ECS实例,ROS会妥善的安排资源间的依赖关系。

最后,资源栈创建完成,我们可以在资源列表中看到所有资源:

lALOCIdLOcyNzQNy_882_141

5.2 使用SDK管理资源栈

通过前面对SDK使用的介绍,我们已经熟悉向发送ROS请求和处理返回的细节。同时,ROS的Open API和SDK提供完整的资源栈生命周期管理功能,用户可以通过API和SDK使用ROS提供的所有功能,这些功能包括:

Action 说明
AbandonStackRequest 废弃资源栈
CreateStacksRequest 创建资源栈
DeleteStackRequest 删除资源栈
DescribeEventsRequest 查询事件列表
DescribeRegionsRequest 查询Region列表
DescribeResourceDetailRequest 查询资源详情
DescribeResourceTypeDetailRequest 查询资源类型详情
DescribeResourceTypeTemplateRequest 查询资源模板示例
DescribeResourceTypesRequest 查询资源类型列表
DescribeResourcesRequest 查询资源列表
DescribeStackDetailRequest 查询资源栈详情
DescribeStacksRequest 查询资源栈列表
DescribeTemplateRequest 查询模板
ValidateTemplateRequest 验证模板合法性

ROS的功能还在不断增加中
本文示例代码可在附件中下载。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
2月前
|
存储 人工智能 开发工具
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1436 4
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
|
2月前
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
59 7
|
3月前
|
Kubernetes API 开发工具
【Azure Developer】通过SDK(for python)获取Azure服务生命周期信息
需要通过Python SDK获取Azure服务的一些通知信息,如:K8S版本需要更新到指定的版本,Azure服务的维护通知,服务处于不健康状态时的通知,及相关的操作建议等内容。
48 18
|
4月前
|
Java 开发工具
通过Java SDK调用阿里云模型服务
在阿里云平台上,可以通过创建应用并使用模型服务完成特定任务,如生成文章内容。本示例展示了一段简化的Java代码,演示了如何调用阿里云模型服务生成关于“春秋战国经济与文化”的简短文章。示例代码通过设置系统角色为历史学家,并提出文章生成需求,最终处理并输出生成的文章内容。在实际部署前,请确保正确配置环境变量中的密钥和ID,并根据需要调整SDK导入语句及类名。更多详情和示例,请参考相关链接。
|
4月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
226 1
|
4月前
|
网络安全 开发工具 Python
【Azure事件中心】使用Python SDK(Confluent)相关方法获取offset或lag时提示SSL相关错误
【Azure事件中心】使用Python SDK(Confluent)相关方法获取offset或lag时提示SSL相关错误
|
4月前
|
API 开发工具 网络架构
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
|
4月前
|
机器学习/深度学习 开发工具 Python
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
【Azure 应用服务】使用Python Azure SDK 来获取 App Service的访问限制信息(Access Restrictions)
|
4月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
99 0
|
25天前
|
Java Linux API
Android SDK
【10月更文挑战第21天】
65 1