全部产品
Search
文档中心

云服务器 ECS:创建抢占式实例

更新时间:Nov 16, 2023

您可以通过ECS控制台、API或Terraform创建抢占式实例。

使用须知

在使用抢占式实例时,您需要考虑如下内容:

  • 选择合理的出价。

    出价要充分考虑到市场价格的波动,合理的出价可以提升抢占式实例创建成功的概率,而且创建后才不容易因为价格因素被释放。另外,出价还必须符合您根据自身业务评估后的预期。

    说明

    如果您暂时不能决定出价,建议使用自动出价,即接受实时的市场价格作为实例规格的计费价格 。

  • 使用的镜像必须包含所需软件的配置,确保实例在创建完成后可以随时启动。您还能使用实例自定义数据在启动时运行命令。详情请参见ECS实例自定义数据概述

  • 建议您使用不受抢占式实例释放影响的存储介质来保存您的重要数据。

    例如,您可以使用独立创建的云盘(不能设置为随实例一起释放)、OSS、RDS等存储数据。

  • 将工作拆分为小的任务(使用网格、Hadoop或基于队列的架构)或者使用检查点,便于您经常保存计算结果。

  • 使用抢占式实例释放通知来监控抢占式实例的状态。

    您可以通过实例元数据每分钟获取一次实例的状态,阿里云ECS释放抢占式实例时,会提前5分钟更新元数据信息。详情请参见ECS实例元数据概述

  • 测试您的应用程序,确保它能很好地处理意外释放的实例。

    您可以使用按量付费实例来运行该应用程序,然后自行释放这台实例,从而确认应用程序是否能处理自动释放的实例。

操作步骤

通过ECS控制台创建

  1. 前往实例创建页

  2. 选择自定义购买页签。

  3. 根据实际需求和页面提示,设置ECS资源配置信息。

    需注意以下参数(其他配置项说明,请参考自定义购买实例):

    • 付费模式:选择抢占式实例

    • 抢占式实例使用时长

      • 设定实例使用1小时:实例稳定运行1小时不会被自动释放,超过1小时后,系统每5分钟监测库存、您出价的变化,进而判断您是否能够继续使用资源。

      • 无确定使用时长:基于实际业务需求,不进行资源使用时长的设定,优势在于相较设定实例使用时长可获得更优成本。

    • 单台实例规格上限价

      • 使用自动出价:选择跟随当前市场价格的模式,即表示始终接受实时的市场价格作为实例规格的计费价格 。

      • 设置单台上限价:您必须为指定的实例规格设置一个价格上限,即您愿意为这个实例规格支付的最高价格 。

  4. 在最终创建实例前,请在页面检查实例的整体配置并配置使用时长等选项,确保各项配置符合您的要求。

  5. 阅读并确认《云服务器ECS服务条款》 《通用服务条款》单击确认下单

通过API创建

您可以通过阿里云CLI、OpenAPI Explorer和阿里云SDK等开发者工具调用RunInstances接口创建抢占式实例。 具体操作,请参见RunInstances

说明

如果需要跟随当前市场实际价格,将SpotStrategy参数设为SpotAsPriceGo。如果需要设置能接受的最高价,将 SpotStrategy参数设为SpotWithPriceLimit

通过Terraform创建

前提条件

操作步骤

  1. 打开浏览器,访问Cloud Shell的地址https://shell.aliyun.com

    更多Cloud Shell入口及使用,请参见使用云命令行

  2. 登录Cloud Shell。

  3. 执行vim terraform.tf命令,创建terraform.tf文件。

  4. terraform.tf文件中,输入如下内容,然后输入wq保存配置。

    说明

    更多参数信息,请参见alicloud参数说明

    provider "alicloud" {}
    
    resource "alicloud_vpc" "vpc" {
      name       = "tf_test_foo"
      cidr_block = "172.16.0.0/12"
    }
    
    resource "alicloud_vswitch" "vsw" {
      vpc_id            = alicloud_vpc.vpc.id
      cidr_block        = "172.16.0.0/21"
      availability_zone = "cn-hangzhou-b"
    }
    
    
    resource "alicloud_security_group" "default" {
      name = "default"
      vpc_id = alicloud_vpc.vpc.id
    }
    
    resource "alicloud_instance" "instance" {
      # 可用区
      availability_zone = "cn-hangzhou-b"
      # 绑定安全组
      security_groups = alicloud_security_group.default.*.id
    
      # 实例规格
      instance_type        = "ecs.n2.small"
      # 系统盘类型
      system_disk_category = "cloud_efficiency"
      # 操作系统镜像
      image_id             = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"
      # 实例名称
      instance_name        = "test_foo"
      # 实例所在交换机
      vswitch_id = alicloud_vswitch.vsw.id
      # 公网带宽
      internet_max_bandwidth_out = 10
      # 付费类型
      instance_charge_type = "PostPaid"
      # 抢占式实例出价策略
      spot_strategy = "SpotAsPriceGo"
      # 抢占式实例的保留时长
      spot_duration = 0
    }
    
    resource "alicloud_security_group_rule" "allow_all_tcp" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "1/65535"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
  5. 执行terraform init命令,初始化配置。初始化配置

  6. 执行terraform plan命令,预览配置。预览配置

  7. 执行terraform apply命令,创建抢占式实例。创建ECS实例

  8. 执行terraform show命令,查看已创建的抢占式实例。

    回显示例如下,表示抢占式实例创建成功。

    查看已创建的实例