在之前的博客中我们介绍了如何通过资源编排服务(ROS)创建 按量付费
的ECS, RDS等资源。今天这篇文章将介绍怎样通过资源编排服务(ROS)创建 包年包月
类型的资源。
目前我们开放了 ECS 和 RDS 两种资源的包年包月资源,详细的属性配置请参考 ALIYUN::ECS::PrepayInstance 和 ALIYUN::RDS::PrepayDBInstance。更多的包年包月类型资源我们将陆续开放,敬请关注。
下面我们通过示例介绍一下,如何使用ROS的Python SDK来创建包年包月的 ECS 实例。
注: 示例中的命令行都使用Linux的shell,Windows/DOS用户需要根据情况修改。
环境准备
- 首先您需要安装Python SDK的依赖环境,同时您还需要了解如何通过Python SDK调用阿里云资源编排服务(ROS),详细攻略请参阅阿里云资源编排服务Python SDK使用入门
- 如果您之前已经安装了ROS SDK,那么请您更新到最新版本
sudo pip install upgrade aliyun-python-sdk-ros
ALIYUN::ECS::PrepayInstance 资源简介
相对于ALIYUN::ECS::Instance, ALIYUN::ECS::PrepayInstance 新增了几个参数:
PeriodType, 包年包月的计价单位,和 Period 属性配合起作用
- Monthly,按月
- Yearly, 按年
Period, 包年包月时长,不同的计价单位对应的时长可选值不同
- 如果是按月,Period可选值1-9.
- 如果是按年,Period可选值1-3
注: 按照官网的优惠策略,购买10-12个月的话,只需要支付10个月的费用. 您在下单的时候,直接选择1年({Period: 1,PeriodType: Yearly}
)即可, 请稍后在费用中心对支付金额进行确认。
AutoRenew, 当前订单到期后,是否自动续费。如果设置为True,那么
- 如果PeriodType为Monthly, 则自动续费1个月
- 如果PeriodType为Yearly,则自动续费1年
ALIYUN::ECS::PrepayInstance 还提供了属性
OrderId
获取订单id. ECS创建成功后,您可以到费用中心控制台 查看您的订单详情,并完成支付。
模板
我们使用下面的模板来创建资源栈:
{
"ROSTemplateFormatVersion" : "2015-09-01",
"Resources" : {
"WebServer": {
"Type": "ALIYUN::ECS::PrepayInstance",
"Properties": {
"ImageId" : "ubuntu1404_64_40G_aliaegis_20160222.vhd",
"InstanceType": "ecs.s3.large",
"SecurityGroupId": {
"Fn::GetAtt": [
"mySecurityGroup",
"SecurityGroupId"
]
},
"Password": "RTYU567*&%dkiss",
"PeriodType": "Monthly",
"Period": 1,
"MaxAmount": 1
}
},
"mySecurityGroup": {
"Type": "ALIYUN::ECS::SecurityGroup",
"Properties": {
"SecurityGroupName": "mySecurityGroup"
}
}
},
"Outputs": {
"InstanceId": {
"Value" : {"Fn::GetAtt": ["WebServer","InstanceIds"]}
},
"OrderId": {
"Value" : {"Fn::GetAtt": ["WebServer","OrderId"]}
}
}
}
模板中定义了包年包月的ECS实例,购买时长为1个月
下单
1 创建请求对象
req = CreateStacksRequest.CreateStacksRequest()
2 通过HTTP头设置资源栈所在的Region:
req.set_headers({'x-acs-region-id': 'cn-beijing'})
3 构造请求的消息体内容:
create_stack_body = '''
{
"Name": "%s",
"TimeoutMins": %d,
"Template": %s
}
''' % ('create_ecs_prepay', 60, template)
req.set_content(create_stack_body)
4 提交请求,创建资源栈
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))
5 返回结果
当请求成功时,将会打印如下结果:
{u'Id': u'ac2411c8-9f16-4c8f-901b-4960c6f1d1ed', u'Name': u'create_ecs_prepay'}
创建资源栈的请求会同步返回,订单已提交。我们可以通过ROS的web控制台或者API来查询订单号。
支付
- 在费用中心, 您可以看到刚刚创建的订单,如下图:
可以看到订单价格和我们询价一致!
- 您可以查看订单详情,如下图:
实例规格符合我们的配置。
- 当您支付订单之后,就可以到ROS控制台查看资源的创建进度。
本文实例代码可在附件中下载。