进阶接口:查询ECS变配的可用资源实践

简介: 升级或者降配云服务ECS配置时,在指定条件下有哪些资源是可用的?如何更好的选择所需的资源?ECS实例可以升级及降配的规格是哪些,利用API DescribeResourcesModification 查询ECS变配时哪些规格可用的。

  • 接口名称(查询变更ECS实例时的可用规格资源列表)

DescribeResourcesModification

  • 背景:

升级或者降配云服务ECS配置时,在指定条件下有哪些资源是可用的?如何更好的选择所需的资源?介绍如何利用查DescribeResourcesModification接口查询变更ECS实例时的可用规格资源列表

  • 针对变配场景做相应的查询

场景1. ecs可以升级实例规格列表
场景2. ecs可以升级系统盘类型列表

除了您现在看到的这文章,您还可以前往:

API文档:DescribeResourcesModification


下文以Python为示例,其他的版本SDK都需要大于4.6.3即可。

安装ECS Python SDK

首先确保您已经具备Python的Runtime,本文中使用的Python版本为2.7+。

pip install aliyun-python-sdk-ecs
如果提示您没有权限,请切换sudo 继续执行。

sudo pip install aliyun-python-sdk-ecs
本文使用的sdk版本为4.6.3, 如果您使用是旧版本的sdk,需要你更新下。

使用场景事例

# your access key Id
ak_id = "YOU_ACCESS_KEY_ID"

# your access key secret
ak_secret = "YOU_ACCESS_SECRET"

region_id = "cn-hangzhou"

# 选择的资源id
resource_id = "i-xxxx"

#目标资源 可选值: InstanceType| SystemDisk
destination_instance_type ='InstanceType'
destination_system_disk ='SystemDisk'

#更改配置的操作类型 Upgrade | Downgrade
operation_type = 'Upgrade'

# 目标实例规格 DescribeInstanceTypes 获得最新的规格列表。当参数 DestinationResource 取值为 SystemDisk,必须同时指定该参数 InstanceType。
instance_type = "ecs.n1.large"

#慎用这个参数
#  跨系列更改配置 默认值:False , 有校值: True | False
#参数 MigrateAcrossZone 取值为 True 时,
# MigrateAcrossZone = true, 如果实例为经典网络 系列 I 变配到非 I/O 优化实例变配到 I/O 优化实例 :
# 1. 实例内网 IP 地址、磁盘识别名称和软件授权码会发生变化。
# 2. Linux 实例的普通云盘(cloud)会被识别为 xvda 或者 xvdb 等,高效云盘(cloud_efficiency) 和 SSD 云盘(cloud_ssd)会被识别为 vda 或者 vdb 等。
# MigrateAcrossZone = true,如果实例为经典网络  不是 系列 I 变配到非 I/O 优化实例变配到 I/O 优化实例 :
# 1. 实例内网 IP 地址可能会发生变化。
# MigrateAcrossZone = true, 如果实例为VPC 系列 I 变配到非 I/O 优化实例变配到 I/O 优化实例 :
# 1. 磁盘识别名称和软件授权码会发生变化。
# 2. Linux 实例的普通云盘(cloud)会被识别为 xvda 或者 xvdb 等,高效云盘(cloud_efficiency) 和 SSD 云盘(cloud_ssd)会被识别为 vda 或者 vdb 等。
#
migrate_across_zone = False

clt = client.AcsClient(ak_id, ak_secret, region_id)

def _execute_request(request):
    response = _send_request(request)
    if response is None:
        print 'response is None'
        return
    if response.get('Code') is None:
        availableZones = response.get('AvailableZones').get('AvailableZone')
        if availableZones is None:
            print 'availableZones is None'
            return
        for availableZone in availableZones:
            zoneId = availableZone.get('ZoneId')
            values = []
            availableResources = availableZone.get('AvailableResources').get('AvailableResource')
            if availableResources is None:
                print 'availableResources is None'
                return
            for availableResource in availableResources:
                supportedResources = availableResource.get('SupportedResources').get('SupportedResource')
                if supportedResources is None:
                    print 'supportedResource is None'
                    return
                for supportedResource in supportedResources:
                    status = supportedResource.get('Status')
                    if status == "Available":
                        value = supportedResource.get('Value')
                        values.append(value)
            print "ecs in zone %s resource value list is %s"%(zoneId, values)

def build_request():
    request = DescribeResourcesModificationRequest()
    request.set_ResourceId(resource_id)
    request.set_MigrateAcrossZone(migrate_across_zone)
    request.set_OperationType(operation_type)
    return request

# send open api request
def _send_request(request):
    request.set_accept_format('json')
    try:
        response_str = clt.do_action(request)
        logging.info(response_str)
        response_detail = json.loads(response_str)
        return response_detail
    except Exception as e:
        logging.error(e)

场景1. ecs可以升级实例规格列表

# describe instanceType resource.
def describe_resource_instance_type():
    request = build_request()
    request.set_DestinationResource(destination_instance_type)
    _execute_request(request)

场景2. ecs可以升级系统盘类型列表

# describe systemDisk resource.  
def describe_resource_system_disk():
    request = build_request()
    request.set_DestinationResource(destination_system_disk)
    request.set_InstanceType(instance_type)
    _execute_request(request)

完整代码

#  coding=utf-8

# if the python sdk is not install using 'sudo pip install aliyun-python-sdk-ecs'
# if the python sdk is install using 'sudo pip install --upgrade aliyun-python-sdk-ecs'
# make sure the sdk version is 4.6.3, you can use command 'pip show aliyun-python-sdk-ecs' to check

import json
import logging

from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.DescribeResourcesModificationRequest import DescribeResourcesModificationRequest

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S')

# your access key Id
ak_id = "YOU_ACCESS_KEY_ID"

# your access key secret
ak_secret = "YOU_ACCESS_SECRET"

region_id = "cn-hangzhou"

# 选择的资源id
resource_id = "i-xxxx"

#目标资源 可选值: InstanceType| SystemDisk
destination_instance_type ='InstanceType'
destination_system_disk ='SystemDisk'

#更改配置的操作类型 Upgrade | Downgrade
operation_type = 'Upgrade'

# 目标实例规格 DescribeInstanceTypes 获得最新的规格列表。当参数 DestinationResource 取值为 SystemDisk,必须同时指定该参数 InstanceType。
instance_type = "ecs.n1.large"

#慎用这个参数
#  跨系列更改配置 默认值:False , 有校值: True | False
#参数 MigrateAcrossZone 取值为 True 时,
# MigrateAcrossZone = true, 如果实例为经典网络 系列 I 变配到非 I/O 优化实例变配到 I/O 优化实例 :
# 1. 实例内网 IP 地址、磁盘识别名称和软件授权码会发生变化。
# 2. Linux 实例的普通云盘(cloud)会被识别为 xvda 或者 xvdb 等,高效云盘(cloud_efficiency) 和 SSD 云盘(cloud_ssd)会被识别为 vda 或者 vdb 等。
# MigrateAcrossZone = true,如果实例为经典网络  不是 系列 I 变配到非 I/O 优化实例变配到 I/O 优化实例 :
# 1. 实例内网 IP 地址可能会发生变化。
# MigrateAcrossZone = true, 如果实例为VPC 系列 I 变配到非 I/O 优化实例变配到 I/O 优化实例 :
# 1. 磁盘识别名称和软件授权码会发生变化。
# 2. Linux 实例的普通云盘(cloud)会被识别为 xvda 或者 xvdb 等,高效云盘(cloud_efficiency) 和 SSD 云盘(cloud_ssd)会被识别为 vda 或者 vdb 等。
#
migrate_across_zone = False

clt = client.AcsClient(ak_id, ak_secret, region_id)

# describe instanceType resource.
def describe_resource_instance_type():
    request = build_request()
    request.set_DestinationResource(destination_instance_type)
    _execute_request(request)

# describe systemDisk resource.
def describe_resource_system_disk():
    request = build_request()
    request.set_DestinationResource(destination_system_disk)
    request.set_InstanceType(instance_type)
    _execute_request(request)

def _execute_request(request):
    response = _send_request(request)
    if response is None:
        print 'response is None'
        return
    if response.get('Code') is None:
        availableZones = response.get('AvailableZones').get('AvailableZone')
        if availableZones is None:
            print 'availableZones is None'
            return
        for availableZone in availableZones:
            zoneId = availableZone.get('ZoneId')
            values = []
            availableResources = availableZone.get('AvailableResources').get('AvailableResource')
            if availableResources is None:
                print 'availableResources is None'
                return
            for availableResource in availableResources:
                supportedResources = availableResource.get('SupportedResources').get('SupportedResource')
                if supportedResources is None:
                    print 'supportedResource is None'
                    return
                for supportedResource in supportedResources:
                    status = supportedResource.get('Status')
                    if status == "Available":
                        value = supportedResource.get('Value')
                        values.append(value)
             print "ecs in zone %s resource value list is %s"%(zoneId, values)

def build_request():
    request = DescribeResourcesModificationRequest()
    request.set_ResourceId(resource_id)
    request.set_MigrateAcrossZone(migrate_across_zone)
    request.set_OperationType(operation_type)
    return request

# send open api request
def _send_request(request):
    request.set_accept_format('json')
    try:
        response_str = clt.do_action(request)
        logging.info(response_str)
        response_detail = json.loads(response_str)
        return response_detail
    except Exception as e:
        logging.error(e)


if __name__ == '__main__':
    print "hello ecs describe resources"
    # describe_resource_instance_type()
    # describe_resource_system_disk()
相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
JSON 监控 API
在线网络PING接口检测服务器连通状态免费API教程
接口盒子提供免费PING检测API,可测试域名或IP的连通性与响应速度,支持指定地域节点,适用于服务器运维和网络监控。
544 0
|
4月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
861 1
|
4月前
|
存储 安全 数据管理
服务器违规资源被删,数据定时备份OSS 云存储才是 “救命稻草”
在数字化时代,数据已成为企业与个人的核心资产。然而,服务器违规、硬件故障等问题频发,导致数据丢失、业务中断,甚至造成不可挽回的损失。为保障数据安全与业务连续性,定时备份至关重要。阿里云国际站OSS提供高效、可靠的云存储解决方案,支持自动定时备份,帮助用户轻松应对数据风险。本文详解OSS备份操作步骤与注意事项,助你为数据穿上“防护甲”,实现安全无忧存储。
|
5月前
|
机器学习/深度学习 人工智能 运维
“服务器老是爆?资源老是浪费?试试用 AI 来规划容量!”
“服务器老是爆?资源老是浪费?试试用 AI 来规划容量!”
158 4
|
8月前
|
缓存 人工智能 架构师
释放数据潜力:利用 MCP 资源让大模型读懂你的服务器
MCP(Model Control Protocol)资源系统是将服务器数据暴露给客户端的核心机制,支持文本和二进制两种类型资源。资源通过唯一URI标识,客户端可通过资源列表或模板发现资源,并使用`resources/read`接口读取内容。MCP还支持资源实时更新通知及订阅机制,确保动态数据的及时性。实现时需遵循最佳实践,如清晰命名、设置MIME类型和缓存策略,同时注重安全性,包括访问控制、路径清理和速率限制等。提供的示例代码展示了如何用JavaScript和Python实现资源支持。
937 80
|
6月前
|
C# 图形学 开发者
Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
315 18
|
2月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
273 10
|
2月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
|
2月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
416 8
|
2月前
|
存储 监控 安全
阿里云渠道商:云服务器价格有什么变动?
阿里云带宽与存储费用呈基础资源降价、增值服务差异化趋势。企业应结合业务特点,通过阶梯计价、智能分层、弹性带宽等策略优化成本,借助云监控与预算预警机制,实现高效、可控的云资源管理。

热门文章

最新文章

相关产品

  • 云服务器 ECS