創(chuàng)建搶占式實例
您可以通過ECS控制臺、API或Terraform創(chuàng)建搶占式實例。
使用須知
在使用搶占式實例時,您需要考慮如下內(nèi)容:
選擇合理的出價。
出價要充分考慮到市場價格的波動,合理的出價可以提升搶占式實例創(chuàng)建成功的概率,并降低后續(xù)使用中由于出價低于市場價格導(dǎo)致實例被釋放的概率。另外,出價還必須符合您根據(jù)自身業(yè)務(wù)評估后的預(yù)期。
說明如果您暫時不能決定出價,建議使用自動出價,即接受實時的市場價格作為實例規(guī)格的計費價格 。
使用的鏡像必須包含所需軟件的配置,確保實例在創(chuàng)建完成后可以隨時啟動。您還能使用實例自定義數(shù)據(jù)在啟動時運行命令。詳情請參見自定義實例初始化配置。
建議您使用不受搶占式實例釋放影響的存儲介質(zhì)來保存您的重要數(shù)據(jù)。
例如,您可以使用獨立創(chuàng)建的云盤(不能設(shè)置為隨實例一起釋放)、OSS、RDS等存儲數(shù)據(jù)。
將工作拆分為小的任務(wù)(使用網(wǎng)格、Hadoop或基于隊列的架構(gòu))或者使用檢查點,便于您經(jīng)常保存計算結(jié)果。
使用搶占式實例釋放通知來監(jiān)控?fù)屨际綄嵗臓顟B(tài)。
您可以通過實例元數(shù)據(jù)每分鐘獲取一次實例的狀態(tài),阿里云ECS釋放搶占式實例時,會提前5分鐘更新元數(shù)據(jù)信息。詳情請參見ECS實例元數(shù)據(jù)概述。
測試您的應(yīng)用程序,確保它能很好地處理意外釋放的實例。
您可以使用按量付費實例來運行該應(yīng)用程序,然后自行釋放這臺實例,從而確認(rèn)應(yīng)用程序是否能處理自動釋放的實例。
操作步驟
通過ECS控制臺創(chuàng)建
選擇自定義購買頁簽。
根據(jù)實際需求和頁面提示,設(shè)置ECS資源配置信息。
需注意以下參數(shù)(其他配置項說明,請參考自定義購買實例):
付費類型:選擇搶占式實例。
實例使用時長:
設(shè)定實例使用1小時:實例穩(wěn)定運行1小時不會被自動釋放,超過1小時后,系統(tǒng)每5分鐘監(jiān)測庫存、您出價的變化,進(jìn)而判斷您是否能夠繼續(xù)使用資源。
無確定使用時長:基于實際業(yè)務(wù)需求,不進(jìn)行資源使用時長的設(shè)定,優(yōu)勢在于相較設(shè)定實例使用時長可獲得更優(yōu)成本。
單臺實例上限價格:
使用自動出價:選擇跟隨當(dāng)前市場價格的模式,即表示始終接受實時的市場價格作為實例規(guī)格的計費價格 。
設(shè)置單臺上限價:您必須為指定的實例規(guī)格設(shè)置一個價格上限,即您愿意為這個實例規(guī)格支付的最高價格 。
在最終創(chuàng)建實例前,請在頁面檢查實例的整體配置并配置使用時長等選項,確保各項配置符合您的要求。
閱讀并確認(rèn)《云服務(wù)器ECS服務(wù)條款》 和《通用服務(wù)條款》,單擊確認(rèn)下單。
通過API創(chuàng)建
您可以通過阿里云CLI、OpenAPI Explorer和阿里云SDK等開發(fā)者工具調(diào)用RunInstances接口創(chuàng)建搶占式實例。 具體操作,請參見RunInstances。
如果需要跟隨當(dāng)前市場實際價格,將SpotStrategy參數(shù)設(shè)為SpotAsPriceGo。如果需要設(shè)置能接受的最高價,將 SpotStrategy參數(shù)設(shè)為SpotWithPriceLimit。
您可以調(diào)用DescribeSpotPriceHistory接口查詢搶占式實例的歷史價格,通過歷史價格數(shù)據(jù)可以幫助您合理的設(shè)置搶占式實例的單臺實例上限價格。
通過Terraform創(chuàng)建
以下操作步驟示例代碼支持一鍵運行,您可以直接運行代碼。一鍵運行
前提條件
由于阿里云賬號(主賬號)具有資源的所有權(quán)限,防止AK泄露后被任意利用。建議您使用擁有最小化權(quán)限的RAM用戶的AccessKey進(jìn)行操作,具體操作方式請參見創(chuàng)建RAM用戶和創(chuàng)建AccessKey。
請參考以下示例為RAM用戶創(chuàng)建自定義權(quán)限策略:允許啟動ECS實例、查看ECS實例的詳細(xì)信息以及查看ECS現(xiàn)貨實例的價格歷史。具體操作方式請參見創(chuàng)建自定義權(quán)限策略。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:RunInstances",
"ecs:DescribeInstances",
"ecs:DescribeSpotPriceHistory"
],
"Resource": "*"
}
]
}
準(zhǔn)備Terraform運行環(huán)境,您可以選擇以下任一方式來使用Terraform。
在Terraform Explorer中使用Terraform:阿里云提供了Terraform的在線運行環(huán)境,您無需安裝Terraform,登錄后即可在線使用和體驗Terraform。適用于零成本、快速、便捷地體驗和調(diào)試Terraform的場景。
Cloud Shell:阿里云Cloud Shell中預(yù)裝了Terraform的組件,并已配置好身份憑證,您可直接在Cloud Shell中運行Terraform的命令。適用于低成本、快速、便捷地訪問和使用Terraform的場景。
在本地安裝和配置Terraform:適用于網(wǎng)絡(luò)連接較差或需要自定義開發(fā)環(huán)境的場景。
使用的資源
alicloud_vpc:創(chuàng)建VPC。
alicloud_vswitch:在VPC內(nèi)部創(chuàng)建一個vSwitch,vSwitch用于為VPC內(nèi)的實例提供子網(wǎng)劃分功能。
alicloud_security_group:創(chuàng)建一個名為default的安全組,并關(guān)聯(lián)到前面創(chuàng)建的VPC。
alicloud_instance:創(chuàng)建一個ECS實例。
alicloud_security_group_rule:定義安全組規(guī)則。
操作步驟
打開瀏覽器,訪問Cloud Shell的地址https://shell.aliyun.com。
更多Cloud Shell入口及使用,請參見使用云命令行。
登錄Cloud Shell。
創(chuàng)建一個用于存放Terraform資源的項目文件夾,命名為terraform。
執(zhí)行以下命令,進(jìn)入項目目錄。
cd terraform
執(zhí)行以下命令,創(chuàng)建名為main.tf的配置文件。
provider "alicloud" {
region = var.region
}
# 區(qū)域
variable "region" {
type = string
default = "cn-beijing"
}
# VPC 名稱
variable "vpc_name" {
type = string
default = "tf_test_fofo"
}
# VPC CIDR 塊
variable "vpc_cidr_block" {
type = string
default = "172.16.0.0/12"
}
# vSwitch CIDR 塊
variable "vswitch_cidr_block" {
type = string
default = "172.16.0.0/21"
}
# 可用區(qū)
variable "availability_zone" {
type = string
default = "cn-beijing-b"
}
# 安全組名稱
variable "security_group_name" {
type = string
default = "default"
}
# 實例規(guī)格
variable "instance_type" {
type = string
default = "ecs.n2.small"
}
# 系統(tǒng)盤類型
variable "system_disk_category" {
type = string
default = "cloud_efficiency"
}
# 操作系統(tǒng)鏡像
variable "image_id" {
type = string
default = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"
}
# 實例名稱
variable "instance_name" {
type = string
default = "test_fofo"
}
# 公網(wǎng)帶寬
variable "internet_max_bandwidth_out" {
type = number
default = 10
}
# 付費類型
variable "instance_charge_type" {
type = string
default = "PostPaid"
}
# 搶占式實例出價策略
variable "spot_strategy" {
type = string
default = "SpotAsPriceGo"
}
# 搶占式實例的保留時長
variable "spot_duration" {
type = number
default = 0
}
# 入站規(guī)則端口范圍
variable "port_range" {
type = string
default = "1/65535"
}
# 入站規(guī)則優(yōu)先級
variable "priority" {
type = number
default = 1
}
# 入站規(guī)則CIDR
variable "cidr_ip" {
type = string
default = "0.0.0.0/0"
}
resource "alicloud_vpc" "vpc" {
name = var.vpc_name
cidr_block = var.vpc_cidr_block
}
resource "alicloud_vswitch" "vsw" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = var.vswitch_cidr_block
availability_zone = var.availability_zone
}
resource "alicloud_security_group" "default" {
name = var.security_group_name
vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_instance" "instance" {
availability_zone = var.availability_zone
security_groups = [alicloud_security_group.default.id]
instance_type = var.instance_type
system_disk_category = var.system_disk_category
image_id = var.image_id
instance_name = var.instance_name
vswitch_id = alicloud_vswitch.vsw.id
internet_max_bandwidth_out = var.internet_max_bandwidth_out
instance_charge_type = var.instance_charge_type
spot_strategy = var.spot_strategy
spot_duration = var.spot_duration
}
resource "alicloud_security_group_rule" "allow_all_tcp" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = var.port_range
priority = var.priority
security_group_id = alicloud_security_group.default.id
cidr_ip = var.cidr_ip
}
執(zhí)行
terraform init
命令,初始化配置。
預(yù)期結(jié)果:
執(zhí)行
terraform apply
命令,在執(zhí)行過程中,根據(jù)提示輸入yes
并按下Enter鍵,等待命令執(zhí)行完成,若出現(xiàn)以下信息,則表示創(chuàng)建搶占式實例完成。
預(yù)期結(jié)果:
操作驗證
執(zhí)行terraform show命令
您可以使用以下命令查詢Terraform已創(chuàng)建的資源詳細(xì)信息:
terraform show
云服務(wù)器 ECS控制臺驗證
登錄云服務(wù)器ECS控制臺,查看您創(chuàng)建的搶占式實例。
清理資源
當(dāng)您不再需要上述通過Terraform創(chuàng)建或管理的資源時,請運行以下命令以釋放資源。關(guān)于terraform destroy
的更多信息,請參見Terraform常用命令。
terraform destroy
完整示例
當(dāng)前示例代碼支持一鍵運行,您可以直接運行代碼。一鍵運行
示例代碼
provider "alicloud" {
region = var.region
}
# 區(qū)域
variable "region" {
type = string
default = "cn-beijing"
}
# VPC 名稱
variable "vpc_name" {
type = string
default = "tf_test_fofo"
}
# VPC CIDR 塊
variable "vpc_cidr_block" {
type = string
default = "172.16.0.0/12"
}
# vSwitch CIDR 塊
variable "vswitch_cidr_block" {
type = string
default = "172.16.0.0/21"
}
# 可用區(qū)
variable "availability_zone" {
type = string
default = "cn-beijing-b"
}
# 安全組名稱
variable "security_group_name" {
type = string
default = "default"
}
# 實例規(guī)格
variable "instance_type" {
type = string
default = "ecs.n2.small"
}
# 系統(tǒng)盤類型
variable "system_disk_category" {
type = string
default = "cloud_efficiency"
}
# 操作系統(tǒng)鏡像
variable "image_id" {
type = string
default = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"
}
# 實例名稱
variable "instance_name" {
type = string
default = "test_fofo"
}
# 公網(wǎng)帶寬
variable "internet_max_bandwidth_out" {
type = number
default = 10
}
# 付費類型
variable "instance_charge_type" {
type = string
default = "PostPaid"
}
# 搶占式實例出價策略
variable "spot_strategy" {
type = string
default = "SpotAsPriceGo"
}
# 搶占式實例的保留時長
variable "spot_duration" {
type = number
default = 0
}
# 入站規(guī)則端口范圍
variable "port_range" {
type = string
default = "1/65535"
}
# 入站規(guī)則優(yōu)先級
variable "priority" {
type = number
default = 1
}
# 入站規(guī)則CIDR
variable "cidr_ip" {
type = string
default = "0.0.0.0/0"
}
resource "alicloud_vpc" "vpc" {
name = var.vpc_name
cidr_block = var.vpc_cidr_block
}
resource "alicloud_vswitch" "vsw" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = var.vswitch_cidr_block
availability_zone = var.availability_zone
}
resource "alicloud_security_group" "default" {
name = var.security_group_name
vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_instance" "instance" {
availability_zone = var.availability_zone
security_groups = [alicloud_security_group.default.id]
instance_type = var.instance_type
system_disk_category = var.system_disk_category
image_id = var.image_id
instance_name = var.instance_name
vswitch_id = alicloud_vswitch.vsw.id
internet_max_bandwidth_out = var.internet_max_bandwidth_out
instance_charge_type = var.instance_charge_type
spot_strategy = var.spot_strategy
spot_duration = var.spot_duration
}
resource "alicloud_security_group_rule" "allow_all_tcp" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = var.port_range
priority = var.priority
security_group_id = alicloud_security_group.default.id
cidr_ip = var.cidr_ip
}
相關(guān)文檔
Terrafrom介紹,請參見Terraform產(chǎn)品介紹。
當(dāng)您遇到由于網(wǎng)絡(luò)延遲等原因造成的 terraform init 超時,導(dǎo)致無法正常下載 Provider 等情況時,請參見Terraform Init 加速方案配置。