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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
云服务器(按量付费),48vCPU 186GiB
简介: 升级或者降配云服务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()
相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
运维 监控 Linux
提升系统稳定性:Linux服务器性能监控与故障排查实践深入理解与实践:持续集成在软件测试中的应用
【5月更文挑战第27天】在互联网服务日益增长的今天,保障Linux服务器的性能和稳定性对于企业运维至关重要。本文将详细探讨Linux服务器性能监控的工具选择、故障排查流程以及优化策略,旨在帮助运维人员快速定位问题并提升系统的整体运行效率。通过实际案例分析,我们将展示如何利用系统资源监控、日志分析和性能调优等手段,有效预防和解决服务器性能瓶颈。
|
2天前
|
弹性计算 运维 监控
【阿里云弹性计算】云上自动化运维实践:基于阿里云ECS的自动化部署与管理
【5月更文挑战第27天】阿里云ECS自动化运维实践:借助ECS API和SDK实现自动化部署,通过Python示例展示实例创建。利用Ansible、Docker等工具进行配置管理和容器化,结合CloudMonitor和Auto Scaling实现监控告警及资源动态调整,提升运维效率和系统稳定性。
15 0
|
5天前
|
存储 弹性计算 大数据
【阿里云弹性计算】阿里云ECS在大数据处理中的应用:高效存储与计算实践
【5月更文挑战第23天】阿里云ECS在大数据处理中发挥关键作用,提供多样化实例规格适应不同需求,尤其大数据型实例适合离线计算。通过集成分布式文件系统如OSS,实现大规模存储,而本地存储优化提升I/O性能。弹性扩容和计算优化实例确保高效运行,案例显示使用ECS能提升处理速度并降低成本。结合阿里云服务,ECS构建起强大的数据处理生态,推动企业创新和数字化转型。
25 0
|
6天前
|
弹性计算 前端开发 JavaScript
高校学生在家实践ECS弹性云服务器
简单谈谈我这几周使用ECS弹性云服务器的体验感
|
7天前
|
存储 弹性计算 监控
【阿里云弹性计算】阿里云 ECS 性能优化秘籍:提升应用响应速度与资源利用率
【5月更文挑战第22天】阿里云ECS优化涉及实例规格选择、OS与应用配置、网络配置、存储优化及数据库连接池管理。合理挑选CPU和内存,关闭无关服务,利用EIP和负载均衡优化网络,选择合适存储类型,并通过监控工具进行性能分析和压力测试,以提升响应速度,优化资源利用率,降低成本,增强企业竞争力。示例展示了Java数据库连接池配置优化。通过持续探索和实践,可最大化发挥ECS潜力。
84 7
|
8天前
|
网络协议 数据格式 Python
Python进阶---HTTP协议和Web服务器
Python进阶---HTTP协议和Web服务器
19 4
|
8天前
|
弹性计算 关系型数据库 MySQL
【阿里云弹性计算】从零搭建:基于阿里云ECS的高性能Web服务部署实践
【5月更文挑战第21天】本文介绍了如何使用阿里云ECS搭建高性能Web服务。首先,注册阿里云账号购买ECS实例,选择合适配置。接着,通过SSH连接实例,更新系统并安装Apache、PHP和MySQL。创建网站目录,上传代码,配置数据库和PHP。然后,启用Gzip压缩和KeepAlive,调整Apache并发连接数以优化性能。此教程为在阿里云上构建高效Web服务提供了基础指南。
113 5
|
8天前
|
运维 Linux 程序员
最全查看Linux系统状态脚本_linux查询所有服务器信息的脚本,墙都不扶就服你
最全查看Linux系统状态脚本_linux查询所有服务器信息的脚本,墙都不扶就服你
最全查看Linux系统状态脚本_linux查询所有服务器信息的脚本,墙都不扶就服你
|
10天前
|
关系型数据库 MySQL Linux
查询服务器中有没有mysql - 蓝易云
同样,如果MySQL已经安装,这个命令将会显示MySQL的版本信息。如果没有安装,系统将会显示一个错误消息。
63 0
|
11天前
|
弹性计算 前端开发 JavaScript
高校学生在家实践ECS弹性云服务器
简单谈谈我这几周使用ECS弹性云服务器的体验感

相关产品

  • 云服务器 ECS