进阶接口:查询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()
相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
弹性计算 运维 Kubernetes
使用ACK Edge统一管理多地域的ECS资源
本文介绍如何使用ACK Edge来管理分布在多个地域的ECS资源。
|
17天前
|
人工智能 监控 测试技术
阿里云磐久服务器稳定性实践之路
阿里云服务器质量智能管理体系聚焦自研服务器硬件层面的极致优化,应对高并发交付、短稳定性周期、早问题发现和快修复四大挑战。通过“三个重构”(质量标准、开发流程、交付模式)、“六个归一”(架构、硬件、软件、测试、部件、制造)策略,实现芯片、整机和云同步发布,确保快速稳定上量。此外,全场景测试体系与智能预警、分析、修复系统协同工作,保障服务器在萌芽阶段发现问题并及时解决,提升整体质量水平。未来,阿里云将继续深化大数据驱动的质量管理,推动服务器行业硬件质量的持续进步。
|
19天前
|
存储 人工智能 运维
面向AI的服务器计算软硬件架构实践和创新
阿里云在新一代通用计算服务器设计中,针对处理器核心数迅速增长(2024年超100核)、超多核心带来的业务和硬件挑战、网络IO与CPU性能增速不匹配、服务器物理机型复杂等问题,推出了磐久F系列通用计算服务器。该系列服务器采用单路设计减少爆炸半径,优化散热支持600瓦TDP,并实现CIPU节点比例灵活配比及部件模块化可插拔设计,提升运维效率和客户响应速度。此外,还介绍了面向AI的服务器架构挑战与软硬件结合创新,包括内存墙问题、板级工程能力挑战以及AI Infra 2.0服务器的开放架构特点。最后,探讨了大模型高效推理中的显存优化和量化压缩技术,旨在降低部署成本并提高系统效率。
|
1月前
|
安全 云计算
服务器系统资源不足怎么办
服务器系统资源不足怎么办
43 4
|
2月前
|
存储 人工智能 弹性计算
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理。通过合理优化资源分配、利用自动伸缩及高效数据管理,ECS能显著提升AI系统的性能与效率,降低运营成本,助力科研与企业用户在AI领域取得突破。
82 6
|
2月前
|
弹性计算
阿里云2核16G服务器多少钱一年?亲测价格查询1个月和1小时收费标准
阿里云2核16G服务器提供多种ECS实例规格,内存型r8i实例1年6折优惠价为1901元,按月收费334.19元,按小时收费0.696221元。更多规格及详细报价请访问阿里云ECS页面。
90 9
|
2月前
|
弹性计算 异构计算
2024年阿里云GPU服务器多少钱1小时?亲测价格查询方法
2024年阿里云GPU服务器每小时收费因实例规格不同而异。可通过阿里云GPU服务器页面选择“按量付费”查看具体价格。例如,NVIDIA A100的gn7e实例为34.742元/小时,NVIDIA A10的gn7i实例为12.710156元/小时。更多详情请访问阿里云官网。
295 2
|
2月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
1004 2
|
2月前
|
弹性计算 应用服务中间件 异构计算
阿里云服务器多少钱一小时?在哪查询1小时价格表?
阿里云服务器按量付费模式下,2核2G配置的ECS经济型e实例每小时费用为0.094元。不同配置的实例价格各异,如2核4G配置的ECS经济型e实例每小时0.225元,4核8G配置的ECS通用算力型u1实例每小时0.702元。用户可通过阿里云官网查询具体价格。包年包月模式下,2核2G3M服务器99元/年,更加经济实惠。
131 0
|
11天前
|
弹性计算 数据挖掘 应用服务中间件
阿里云轻量应用服务器68元与云服务器99元和199元区别及选择参考
目前阿里云有三款特惠云服务器,第一款轻量云服务器2核2G68元一年,第二款经济型云服务器2核2G3M带宽99元1年,第三款通用算力型2核4G5M带宽199元一年。有的新手用户并不是很清楚他们之间的区别,因此不知道如何选择。本文来介绍一下它们之间的区别以及选择参考。
239 87

相关产品

  • 云服务器 ECS