阿里云服务器ECS按量付费转包年包月的计费方式

2023-10-06 18:12:02 百科 悟空
  阿里云服务器ECS按量付费转包年包月的计费方式 当您创建一台按量付费的ECS实例之后,您可以将阿里云服务器ECS实例的计费方式转换为包年包月的方式,提前预留资源,同时可以享受阿里云这边给出的更大的价格优惠。
  
  筋斗云本文介绍到,请您一定要确认待转换的按量付费ECS实例,必须满足以下几个条件才行。
  1、不是已经停售的实例规格。(实例规格在中国站已全部停售,其中,sn2、sn1、n1、n2和e3在国际站(International)仍然在售。)
  2、不是抢占式的ECS实例。
  3、没有未支付的订单。如果阿里云服务器ECS实例有未支付的订单,您一定要先支付或者作废未支付的订单,然后才能在执行转换操作。
  4、没有设置自动释放时间。如果您为了ECS实例设置了自动释放时间,您必须先关闭自动的设置--释放功能。(实例释放后数据无法恢复,建议您在释放之前先创建快照备份数据。)
  5、处于运行中或已经停止的状态。如果您在阿里云服务器ECS实例处于上述状态时下单成功,但是在支付完成前进入了其他状态,会导致支付失败,其转换也会失败。您可以根据在ECS实力重新处于上述状态时前往订单中心,接着重新支付该转换订单。
  
  阿里云服务器ECS按量付费转包年包月的计费方式
  操作的流程

  1、先登录ECS管理控制台。进入实例列表页,选择地域,并选择实例的付费类型为按量付费,如下图所示:

阿里云服务器ECS按量付费转包年包月的计费方式

  2、在左侧导航栏,单击实例与镜像 > 实例。
  3、在顶部菜单栏左上角处,选择地域。
  4、选择一种方式,将按量付费实例转换为包年包月实例。
  Q 单个转换:找到待转换的ECS实例,在操作列,单击更多 > 资源变配 > 按量付费转包年包月。
  Q 批量转换:选中一台或多台待转换的ECS实例,在页面下方单击按量付费转包年包月。

  筋斗云提醒您每次最多只能批量转换20台实例。选中需要转换的按量实例(一次最多支持转换 20 台按量实例),点击按量付费转包年包月,如下图所示:

阿里云服务器ECS按量付费转包年包月的计费方式1

  5、单击批量更改,在弹出的对话框中完成计费转换相关的设置。点击按量付费转包年包月以后,弹出按量付费转包年包月操作界面,如下图所示:

阿里云服务器ECS按量付费转包年包月的计费方式2

  Q 设置购买的时长。
  如果您一次转换多台ECS实例,那么就只能设置相同的购买时长。

  Q 选择是否将实例上挂载的按量付费云盘转换为包年包月云盘。

  然后点击批量更改,弹出修改实例生命周期对话框,设置实例将要转换成的包年包月实例时长,如果实例挂载着数据盘,可同时将数据盘转为包年包月数据盘,如下图所示:

阿里云服务器ECS按量付费转包年包月的计费方式3

  6、最后请单击去下单,并按照页面提示完成支付。

  按量实例转包年包月实例(ModifyInstanceChargeType)
  阿里云云服务器ECS提供了 ModifyInstanceChargeType 接口,供您将按量实例转换为包年包月实例。本文将以 Python 代码为例,向您介绍如何将按量实例转换为包年包月实例,代码如下:

  1. #coding=utf-8
  2. # if the python sdk is not install using 'sudo pip install aliyun-python-sdk-ecs'
  3. # if the python sdk is install using 'sudo pip install --upgrade aliyun-python-sdk-ecs'
  4. # make sure the sdk version is 4.1, you can use command 'pip show aliyun-python-sdk-ecs' to check
  5. import logging
  6. from aliyunsdkcore import client
  7. from aliyunsdkecs.request.v20140526.ModifyInstanceChargeTypeRequest import ModifyInstanceChargeTypeRequest
  8. # configuration the log output formatter, if you want to save the output to file,
  9. # append ",filename='ecs_invoke.log'" after datefmt.
  10. # https://yq.aliyun.com/articles/69135
  11. logging.basicConfig(level=logging.INFO,
  12. format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
  13. datefmt='%a, %d %b %Y %H:%M:%S')
  14. import json
  15. clt = client.AcsClient('AK', 'AK-PWD', 'cn-hangzhou')
  16. instance_ids = ['instance-1', 'instance-2', 'instance-3']
  1. def modify_instance_charge_type():
  2. logging.info("instance ids : " + str(instance_ids))
  3. request = ModifyInstanceChargeTypeRequest()
  4. request.set_InstanceIds(json.dumps(instance_ids))
  5. # only generate data disk
  6. request.set_AutoPay(True)
  7. # include data disk
  8. request.set_IncludeDataDisks(True)
  9. request.set_Period(1)
  10. request.set_PeriodUnit('Month')
  11. response = _send_request(request)
  12. print response
  1. # send open api request
  2. def _send_request(request):
  3. request.set_accept_format('json')
  4. try:
  5. response_str = clt.do_action(request)
  6. logging.info(response_str)
  7. response_detail = json.loads(response_str)
  8. return response_detail
  9. except Exception as e:
  10. logging.error(e)
  1. if __name__ == '__main__':
  2. logging.info("Modify instance spec by OpenApi!")
  3. modify_instance_charge_type()
  在使用以上代码前,您可以参考 [使用OpenApi弹性管理云服务器ECS (https://yq.aliyun.com/articles/69135) 来安装 ECS Python SDK,然后使用上面的代码将按量实例转换为包年包月实例。在使用上面的代码前,您需要补充自己的 AK信息、实例ID 信息,以及您期望转换的包年包月实例时长信息。如果需要了解更多参数的意义,您可以参考 ModifyInstanceChargeType 接口说明文档。  批量操作按量实例转包年包月实例  如果您希望将某个地域下的所有按量实例快速地转换为包年包月实例,此时通过 ECS控制台 或者直接调用接口的时间成本可能会较大,针对这种场景,您可以参考以下代码快速地将某个地域下的所有按量实例转换为包年包月实例:
  1. #coding=utf-8
  2. # if the python sdk is not install using 'sudo pip install aliyun-python-sdk-ecs'
  3. # if the python sdk is install using 'sudo pip install --upgrade aliyun-python-sdk-ecs'
  4. # make sure the sdk version is 4.1, you can use command 'pip show aliyun-python-sdk-ecs' to check
  5. import logging
  6. from aliyunsdkcore import client
  7. from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
  8. from aliyunsdkecs.request.v20140526.ModifyInstanceChargeTypeRequest import ModifyInstanceChargeTypeRequest
  9. # configuration the log output formatter, if you want to save the output to file,
  10. # append ",filename='ecs_invoke.log'" after datefmt.
  11. # https://yq.aliyun.com/articles/69135
  12. logging.basicConfig(level=logging.INFO,
  13. format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
  14. datefmt='%a, %d %b %Y %H:%M:%S')
  15. import json
  16. AK = 'ak'
  17. AK_SECRET = 'ak-secret'
  18. REGION_ID = 'region-id'
  19. clt = client.AcsClient(AK, AK_SECRET, REGION_ID)
  20. # every order support max 20 instances to convert.
  21. ORDER_PER_PAGE = 20
  22. PAGE_SIZE = 100
  23. INSTANCE_CHARGE_TYPE = "PostPaid"
  24. PERIOD = 1
  25. PERIOD_UNIT = 'Month'
  1. # 每页查询100个,每20个一个订单。
  2. def modify_instance_batch():
  3. request = DescribeInstancesRequest()
  4. request.set_PageSize(PAGE_SIZE)
  5. request.set_InstanceChargeType(INSTANCE_CHARGE_TYPE)
  6. response = _send_request(request)
  7. instances_list = response.get('Instances').get('Instance')
  8. instance_ids = []
  9. index = 0
  10. for item in instances_list:
  11. index += 1
  12. instance_id = item.get('InstanceId')
  13. instance_ids.append(instance_id)
  14. if len(instance_ids) == ORDER_PER_PAGE or len(instances_list) == index:
  15. modify_instance_charge_type(instance_ids)
  16. instance_ids = []
  1. def modify_instance_charge_type(instance_ids):
  2. logging.info("instance ids : " + str(instance_ids))
  3. request = ModifyInstanceChargeTypeRequest()
  4. request.set_InstanceIds(json.dumps(instance_ids))
  5. # only generate data disk
  6. request.set_AutoPay(True)
  7. # include data disk
  8. request.set_IncludeDataDisks(True)
  9. request.set_Period(PERIOD)
  10. request.set_PeriodUnit(PERIOD_UNIT)
  11. response = _send_request(request)
  12. print response
  1. # send open api request
  2. def _send_request(request):
  3. request.set_accept_format('json')
  4. try:
  5. response_str = clt.do_action(request)
  6. logging.info(response_str)
  7. response_detail = json.loads(response_str)
  8. return response_detail
  9. except Exception as e:
  10. logging.error(e)
  1. def check_instance_count():
  2. request = DescribeInstancesRequest()
  3. request.set_PageSize(1)
  4. request.set_InstanceChargeType(INSTANCE_CHARGE_TYPE)
  5. request.set_PageNumber(1)
  6. response = _send_request(request)
  7. total_count = response.get('TotalCount')
  8. return total_count
  1. if __name__ == '__main__':
  2. logging.info("Modify instance spec by OpenApi!")
  3. count = check_instance_count()
  4. total_number = 0
  5. if count != 0:
  6. if count % PAGE_SIZE == 0:
  7. total_number = count / PAGE_SIZE
  8. else:
  9. total_number = count / PAGE_SIZE + 1
  10. for item in xrange(0, total_number):
  11. logging.info("Current Page is " + str(item))
  12. modify_instance_batch()

  在使用上述 Python 代码进行按量实例转换为包年包月实例前,您需要配置自己的 AK 信息、Region 信息以及您期望转换的包年包月实例时长信息。更多参数的详细信息,您可以参考 ModifyInstanceChargeType 接口说明文档。

  阿里云服务器ECS按量付费转包年包月的计费方式,根据您的需要,筋斗云为您提供最佳方案。

发表评论: