
# 创建ECS高频场景示例
#### 操作场景
本节内容介绍了使用API购买ECS过程中的一些高频场景。
表1使用API创建ECS的高频场景 
| 场景                                                           | 说明                                                                                                                                                                                  |
|:---|:---|
| [购买包年/包月ECS]              | 为您介绍购买包年/包月资源的参数设置。                                                                                                                                                                 |
| [删除包年/包月ECS/退订包年/包月ECS] | 包年/包月资源需要通过退订的方式才可以被删除。                                                                                                                                                             |
| [查询可用的公共镜像]                | 购买ECS时候前查询公共镜像信息可以通过在GET请求后通过'?'和'\&'添加不同的查询条件组合。                                                                                                                                   |
| [包年/包月资源续费]               | 包年/包月资源即将到期时，可进行包年/包月资源的续订。指定资源ID，续费方式，续费时间，订单支付方式。                                                                                                                                 |
| [创建订单后资源未开通]                | 创建完成后查不到资源信息可能是订单尚未支付，查看订单的状态并完成订单支付。                                                                                                                                               |
| [查询规格资源是否可购买/资源是否售罄]      | 查询某一具体的云服务器规格在某可用区是否资源充足，通过响应信息中的cond:operation:status和cond:operation:az字段的取值判断在区域和可用区的取值。                                                                                          |
| [付费方式]                    | 创建包年/包月的云服务器时（chargingMode为prePaid），通过extendparam.isAutoPay字段控制订单的支付方式。                                                                                                             |
| [查询资源的可用配额]                | 调用[查询租户配额](https://support.huaweicloud.com/api-ecs/ecs_02_0801.html)接口，通过maxTotalInstances可以查看云服务器的最大申请数量，通过totalInstancesUsed可以查看当前云服务器使用个数。                                       |
| [查询资源价格]                   | 使用[查询按需产品价格](https://support.huaweicloud.com/api-oce/bcloud_01001.html)和[查询包年/包月产品价格](https://support.huaweicloud.com/api-oce/bcloud_01002.html)，根据云服务类型、资源类型、云服务区和资源规格四个条件来查询产品价格。 |
   
 #### 购买包年/包月ECS
购买包年/包月ECS可以使用[创建弹性云服务](https://support.huaweicloud.com/api-ecs/ecs_02_0101.html)接口，相对于创建按需的ECS，只需要在请求body中指定extendparam.chargingMode参数值为"prePaid"，即包年包月，指定订购的周期等。extendparam的详细参数解释请参见[创建云服务器的extendparam字段数据结构说明](https://support.huaweicloud.com/api-ecs/zh-cn_topic_0167957246.html#ZH-CN_TOPIC_0167957246__table7721122141311)。
如下所示，在cn-north-1区域购买一台包年/包月ECS，时长为一个月，且下单后自动支付，自动续订。
```
{
    "server": {
        "name": "newserver",
        "availability_zone": "cn-north-1a",
        "flavorRef": "s3.small.1",
        "imageRef": "8da46d6d-6079-4e31-ad6d-a7167efff892",
        "root_volume": {
            "volumetype": "SATA"
        },
        "vpcid": "7e1a7e70-3f3e-4581-955e-26a4848d8f31",
        "nics": [
        {
 "subnet_id": "04548cde-4067-48b0-9323-5c7b67ac13fc"
        }
        ],
        "data_volumes": [
   {
                "volumetype": "SSD", 
                "size": 50
            }
        ],
        "publicip": {
            "eip": {
                "iptype": "5_bgp",
                "bandwidth": {
                    "size": 10, 
                    "sharetype": "PER"
                }
            }
        },
        "extendparam": {
            "chargingMode": "prePaid",
            "periodType": "month",
            "periodNum": 1,
            "isAutoRenew": "true",
            "isAutoPay": "true",
            "regionID": "cn-north-1"
        }
    }
}
```
包年/包月ECS创建后会返回一个order_id，即订单ID。
```
{
    "job_id": "ff808082739334d80173943ec9b42130",
    "order_id": "CS2007281506xxxxx",
    "serverIds": [
        "fe0528f0-5b1c-4c8c-9adf-e5d5047b8c17"
    ] 
}
```
上面请求体中extendparam.isAutoPay取值为true，表示自动支付，如果不填该字段或取值为false，则需要手动去支付，手动支付可以填写优惠券和折扣券等信息。手动支付需要调用[支付包年/包月产品订单](https://support.huaweicloud.com/api-oce/api_order_00016.html)支付，示例如下。
```
POST https://bss.myhuaweicloud.com/v2/orders/customer-orders/pay
{
    "order_id": "CS20052715001E4CR"
}
```
 #### 删除包年/包月ECS/退订包年/包月ECS
包年/包月ECS无法直接调用ECS接口删除，需要调用[退订包年/包月资源](https://support.huaweicloud.com/api-oce/api_order_00019.html)接口进行退订。
```
POST https://bss.myhuaweicloud.com/v2/orders/subscriptions/resources/unsubscribe
{
  "resource_ids": [
    "21e09f37c5c9420c8746ad5c71fb3aab"
  ],
  "unsubscribe_type": 1
}
```
其中resource_ids表示资源ID，对退订ECS来说，就是购买包年/包月ECS时返回的serverIds。
 #### 查询可用的公共镜像
使用镜像服务的[查询镜像列表](https://support.huaweicloud.com/api-ims/ims_03_0602.html)的API可以根据不同条件查询镜像列表信息，在GET请求后通过'?'和'\&'添加不同的查询条件组合。
如需查询公共镜像列表。
```
GET /v2/cloudimages?__imagetype=gold&visibility=public&protected=true
```
请注意调用镜像服务接口注意替换镜像服务的Endpoint信息。
查询镜像列表时，建议使用分页查询才能返回全部的镜像列表。通过指定marker和limit实现镜像列表的分页查询。
marker表示从哪个镜像开始查询，取值为镜像ID。limit表示查询几条镜像记录，取值为整数，默认取值为500。
```
GET /v2/cloudimages?__imagetype=gold&visibility=public&protected=true&marker=af92bb51-ec9d-4b02-912f-da0b3f0f7635&limit=5
```
如需查询其他的镜像类型
- 公共镜像列表查询 GET /v2/cloudimages?__imagetype=gold\&visibility=public\&protected=true
  
- 私有镜像列表查询 GET /v2/cloudimages?owner={project_id}
  
- 可以使用的共享镜像列表 GET /v2/cloudimages?member_status=accepted\&visibility=shared\&__imagetype=shared
  
- 被拒绝的共享镜像列表 GET /v2/cloudimages?member_status=rejected\&visibility=shared\&__imagetype=shared
  
- 未接受的共享镜像列表 GET /v2/cloudimages?member_status=pending\&visibility=shared\&__imagetype=shared
  
- 裸金属服务器某规格支持的公共镜像列表 GET /v2/cloudimages?__imagetype=gold\&__support_xxx=true\&virtual_env_type=Ironic
  
如果未指定镜像类型，那么可以通过响应信息中的__imagetype字段判断镜像类型。
 #### 包年/包月资源续费
包年/包月资源即将到期时，可进行包年/包月资源的续订。通过调用[续订包年/包月资源](https://support.huaweicloud.com/api-oce/api_order_00018.html)接口进行续费。
如下所示，指定资源ID，按月续费，续费1个月，到期后转按需，并自动支付订单。
```
POST https://bss.myhuaweicloud.com/v2/orders/subscriptions/resources/renew
{
    "resource_ids": [
        "96308d5efd7841b9a4dac673d84d0e14"
    ],
    "period_type": 2,
    "period_num": 1,
    "expire_policy": 1,
    "is_auto_pay": 1
}
```
续费成功后会返回一个order_id，即订单ID。
```
{
  "order_ids": [
    "CS190401192xxxxxx"
  ]
}
```
上面请求体中isAutoPay取值为1，表示自动支付，如果不填该字段或取值为0，则需要手动去支付，手动支付可以填写优惠券和折扣券等信息。手动支付需要调用[支付包年/包月产品订单](https://support.huaweicloud.com/api-oce/api_order_00016.html)支付，以下示例是使用一张优惠券，优惠券类型为代金券的请求示例。
```
POST https://bss.myhuaweicloud.com/v2/orders/customer-orders/pay
{
    "coupon_infos": [
        {
            "id": "CP2005270256xxxxxx",
            "type": 301
        }
    ],
    "order_id": "CS190401192xxxxxx"
}
```
 #### 创建订单后资源未开通
订单创建后未查询到服务器信息，可能是由于指定了自动支付：请求体中extendparam.isAutoPay取值为false或续费时isAutoPay取值为0。
通常服务器创建后会返回一个order_id，即订单ID。
```
{
    "job_id": "ff808082739334d80173943ec9b42130",
    "order_id": "CS2007281506xxxxx",
    "serverIds": [
        "fe0528f0-5b1c-4c8c-9adf-e5d5047b8c17"
    ] 
}
```
通过调用[查询订单详情](https://support.huaweicloud.com/api-oce/api_order_00014.html)接口查看订单的状态
请求示例
```
GET 
https://bss.myhuaweicloud.com/v2/orders/customer-orders/details/CS2007281506xxxxx
```
响应示例
```
{
    "total_count": 1,
    "order_info": {
        "order_id": "CS2007281506xxxxx",
        "customer_id": "982f05775ec94da390c3f174xxxxxxxx",
        "service_type_code": "hws.service.type.ecs",
        "source_type": 1,
        "status": 6,
         ……
}
```
响应示例中"status": 6说明订单状态为待付款。此时需要手动支付该订单
手动支付可以填写优惠券和折扣券等信息。
手动支付需要调用[支付包年/包月产品订单](https://support.huaweicloud.com/api-oce/api_order_00016.html)支付，以下示例是使用一张优惠券，优惠券类型为代金券的请求示例。
```
POST https://bss.myhuaweicloud.com/v2/orders/customer-orders/pay
{
    "coupon_infos": [
        {
            "id": "CP2005270256xxxxxx",
            "type": 301
        }
    ],
    "order_id": "CS2007281506xxxxx"
}
```
 #### 查询规格资源是否可购买/资源是否售罄
如需查询某一具体的云服务器规格在某可用区是否资源充足，可以通过调用[查询规格详情和规格扩展信息列表](https://support.huaweicloud.com/api-ecs/zh-cn_topic_0020212656.html)查看该规格的详细信息。并通过响应信息中的cond:operation:status和cond:operation:az字段的取值判断在区域和可用区的取值。
例如查询华东上海二可用区一的资源情况，请求URI如下。
```
GET https://ecs.cn-east-2.myhuaweicloud.com/v1/05041fea8a8025662f4ac00927982f3e/cloudservers/flavors?availability_zone=cn-east-2a
```
响应信息
```
{
    "id": "c3.3xlarge.2", 
    "name": "c3.3xlarge.2", 
     ...
    "os_extra_specs": {
        "cond:spot_block:operation:az": "cn-east-2a(sellout),cn-east-2b(normal),cn-east-2c(normal),cn-east-2d(normal)",
        "cond:operation:az": "cn-east-2d(sellout),cn-east-2a(normal),cn-east-2b(normal)"
        ...
        "cond:operation:status": "abandon", 
        "cond:spot_block:operation:interrupt_policy":  "cn-east-2d(immediate),cn-east-2a(immediate),cn-east-2b(immediate),cn-east-2c(immediate)", 
        "resource_type": "IOoptimizedC3_2"
    }
}
```
响应信息中通过cond:operation:status和cond:operation:az字段的取值判断资源是否可用。
优先查看cond:operation:az的取值，如果某个可用区没有在cond:operation:az参数中配置时默认使用cond:operation:status的取值。
例如本例中，c3.3xlarge.2在华东上海二的可用区一、可用区二正常商用，可用区四售罄，可用区三在在cond:operation:az中无配置信息，则以cond:operation:status的取值为准，即c3.3xlarge.2在华东上海二的可用区三下线。
 #### 付费方式
创建包年/包月的云服务器时（chargingMode为prePaid），通过extendparam.isAutoPay字段控制订单的支付方式。
取值为true在订单创建完成后自动支付。
取值为false订单需要用户手动支付。手动支付可以填写优惠券和折扣券等信息。
手动支付需要调用[支付包年/包月产品订单](https://support.huaweicloud.com/api-oce/api_order_00016.html)接口进行支付，以下示例是使用一张优惠券，优惠券类型为代金券的请求示例。
```
POST https://bss.myhuaweicloud.com/v2/orders/customer-orders/pay
{
    "coupon_infos": [
        {
            "id": "CP2005270256xxxxxx",
            "type": 301
        }
    ],
    "order_id": "CS190401192xxxxxx"
}
```
 #### 查询资源的可用配额
如需查询当前账号的资源配额信息，包括已使用的配额，可以通过调用[查询租户配额](https://support.huaweicloud.com/api-ecs/ecs_02_0801.html)接口。
```
GET https://ecs.cn-east-2.myhuaweicloud.com/v1/05041fea8a8025662f4ac00927982f3e/cloudservers/limits
```
响应信息如下，例如通过maxTotalInstances可以查看云服务器的最大申请数量，通过totalInstancesUsed可以查看当前云服务器使用个数。
```
{
"absolute": {
"maxServerMeta": 128,
"maxPersonality": 5,
"maxImageMeta": 128,
"maxPersonalitySize": 10240,
"maxSecurityGroupRules": 20,
"maxTotalKeypairs": 1000,
"totalRAMUsed": 22528,
"totalInstancesUsed": 4,
"maxSecurityGroups": 10,
"totalFloatingIpsUsed": 0,
"maxTotalCores": 8000,
"totalSecurityGroupsUsed": 1,
"maxTotalFloatingIps": 10,
"maxTotalInstances": 1000,
"totalCoresUsed": 11,
"maxTotalRAMSize": 16384000,
"maxServerGroups": 32,
"maxServerGroupMembers": 16,
"totalServerGroupsUsed": 0,
"maxTotalSpotInstances": 20,
"maxTotalSpotCores": 320,
"maxTotalSpotRAMSize": 655360,
"totalSpotInstancesUsed": 0,
"totalSpotCoresUsed": 0,
"totalSpotRAMUsed": 0,
"maxFaultDomainMembers": 200,
"limit_by_flavor": []
}
}
```
 #### 查询资源价格
使用[查询按需产品价格](https://support.huaweicloud.com/api-oce/bcloud_01001.html)和[查询包年/包月产品价格](https://support.huaweicloud.com/api-oce/bcloud_01002.html)，根据云服务类型、资源类型、云服务区和资源规格四个条件来查询产品价格。
例如查询华东上海二可用区、通用计算型、Linux操作系统、s6.small.1规格的包月，一个月的价格。
```
POST https://bss.myhuaweicloud.com/v2/bills/ratings/period-resources/subscribe-rate
```
```
{
"product_infos": [
{
   "id": "1",
"cloud_service_type": "hws.service.type.ec2",
"resource_type": "hws.resource.type.vm",
"resource_spec": "s6.small.1.linux",
"region": "cn-east-2",
"available_zone": "cn-east-2a",
"period_type": 2,
"period_num": 1,
"subscription_num": 1
}
],
"project_id": "05041fea8a8025662f4ac00927982f3e"
}
```
响应信息如下所示，其中official_website_amount字段的取值即为包年/包月产品价格。
```
{
"official_website_rating_result": {
"official_website_amount": 32.2,
"measure_id": 1,
-"product_rating_results": [-{
"id": "1",
"product_id": "00301-233164-0--0",
"official_website_amount": 32.2,
"measure_id": 1
}]
},
"optional_discount_rating_results": [],
"currency": "CNY"
}
```
