您可以通過ECS控制台、API或Terraform建立搶佔式執行個體。
使用須知
在使用搶佔式執行個體時,您需要考慮如下內容:
選擇合理的出價。
出價要充分考慮到市場價格的波動,合理的出價可以提升搶佔式執行個體建立成功的機率,並降低後續使用中由於出價低於市場價格導致執行個體被釋放的機率。另外,出價還必須符合您根據自身業務評估後的預期。
說明如果您暫時不能決定出價,建議使用自動出價,即接受即時的市場價格作為執行個體規格的計費價格 。
使用的鏡像必須包含所需軟體的配置,確保執行個體在建立完成後可以隨時啟動。您還能使用執行個體自訂資料在啟動時運行命令。詳情請參見自訂執行個體初始化配置。
建議您使用不受搶佔式執行個體釋放影響的儲存介質來儲存您的重要資料。
例如,您可以使用獨立建立的雲端硬碟(不能設定為隨執行個體一起釋放)、OSS、RDS等儲存資料。
將工作拆分為小的任務(使用網格、Hadoop或基於隊列的架構)或者使用檢查點,便於您經常儲存計算結果。
使用搶佔式執行個體釋放通知來監控搶佔式執行個體的狀態。
您可以通過執行個體中繼資料每分鐘擷取一次執行個體的狀態,阿里雲ECS釋放搶佔式執行個體時,會提前5分鐘更新中繼資料資訊。詳情請參見ECS執行個體中繼資料概述。
測試您的應用程式,確保它能很好地處理意外釋放的執行個體。
您可以使用隨用隨付執行個體來運行該應用程式,然後自行釋放這台執行個體,從而確認應用程式是否能處理自動釋放的執行個體。
操作步驟
通過ECS控制台建立
前往執行個體建立頁。
選擇自訂購買頁簽。
根據實際需求和頁面提示,設定ECS資源配置資訊。
需注意以下參數(其他配置項說明,請參考自訂購買執行個體):
付費模式:選擇搶佔式執行個體。
搶佔式執行個體使用時間長度:
設定執行個體使用1小時:執行個體穩定運行1小時不會被自動釋放,超過1小時後,系統每5分鐘監測庫存、您出價的變化,進而判斷您是否能夠繼續使用資源。
無確定使用時間長度:基於實際業務需求,不進行資源使用時間長度的設定,優勢在於相較設定執行個體使用時間長度可獲得更優成本。
單台執行個體規格上限價:
使用自動出價:選擇跟隨當前市場價格的模式,即表示始終接受即時的市場價格作為執行個體規格的計費價格 。
設定單台上限價:您必須為指定的執行個體規格設定一個價格上限,即您願意為這個執行個體規格支付的最高價格 。
在最終建立執行個體前,請在頁面檢查執行個體的整體配置並配置使用時間長度等選項,確保各項配置符合您的要求。
閱讀並確認《Elastic Compute Service服務條款》 和《泛型服務條款》,單擊確認下單。
通過API建立
您可以通過阿里雲CLI、OpenAPI Explorer和阿里雲SDK等開發人員工具調用RunInstances介面建立搶佔式執行個體。 具體操作,請參見RunInstances。
如果需要跟隨當前市場實際價格,將SpotStrategy參數設為SpotAsPriceGo。如果需要設定能接受的最高價,將 SpotStrategy參數設為SpotWithPriceLimit。
您可以調用DescribeSpotPriceHistory介面查詢搶佔式執行個體的歷史價格,通過歷史價格資料可以協助您合理的設定搶佔式執行個體的單台執行個體上限價格。
通過Terraform建立
以下操作步驟範例程式碼支援一鍵運行,您可以直接運行代碼。一鍵運行
前提條件
由於阿里雲帳號(主帳號)具有資源的所有許可權,防止AK泄露後被任意利用。建議您使用擁有最小化許可權的RAM使用者的AccessKey進行操作,具體操作方式請參見建立RAM使用者和建立AccessKey。
請參考以下樣本為RAM使用者建立自訂權限原則:允許啟動ECS執行個體、查看ECS執行個體的詳細資料以及查看ECS現貨執行個體的價格歷史。具體操作方式請參見建立自訂權限原則。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:RunInstances",
"ecs:DescribeInstances",
"ecs:DescribeSpotPriceHistory"
],
"Resource": "*"
}
]
}
準備Terraform運行環境,您可以選擇以下任一方式來使用Terraform。
在Terraform Explorer中使用Terraform:阿里雲提供了Terraform的線上運行環境,您無需安裝Terraform,登入後即可線上使用和體驗Terraform。適用於零成本、快速、便捷地體驗和調試Terraform的情境。
Cloud Shell:阿里雲Cloud Shell中預裝了Terraform的組件,並已配置好身份憑證,您可直接在Cloud Shell中運行Terraform的命令。適用於低成本、快速、便捷地訪問和使用Terraform的情境。
在本地安裝和配置Terraform:適用於網路連接較差或需要自訂開發環境的情境。
使用的資源
alicloud_vpc:建立VPC。
alicloud_vswitch:在VPC內部建立一個vSwitch,vSwitch用於為VPC內的執行個體提供子網劃分功能。
alicloud_security_group:建立一個名為default的安全性群組,並關聯到前面建立的VPC。
alicloud_instance:建立一個ECS執行個體。
alicloud_security_group_rule:定義安全性群組規則。
操作步驟
開啟瀏覽器,訪問Cloud Shell的地址https://shell.aliyun.com。
更多Cloud Shell入口及使用,請參見使用雲命令列。
登入Cloud Shell。
建立一個用於存放Terraform資源的專案檔夾,命名為terraform。
執行以下命令,進入專案目錄。
cd terraform
執行以下命令,建立名為main.tf的設定檔。
provider "alicloud" {
region = var.region
}
# 地區
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"
}
# 可用性區域
variable "availability_zone" {
type = string
default = "cn-beijing-b"
}
# 安全性群組名稱
variable "security_group_name" {
type = string
default = "default"
}
# 執行個體規格
variable "instance_type" {
type = string
default = "ecs.n2.small"
}
# 系統硬碟類型
variable "system_disk_category" {
type = string
default = "cloud_efficiency"
}
# 作業系統鏡像
variable "image_id" {
type = string
default = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"
}
# 執行個體名稱
variable "instance_name" {
type = string
default = "test_fofo"
}
# 公網頻寬
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
}
# 入站規則連接埠範圍
variable "port_range" {
type = string
default = "1/65535"
}
# 入站規則優先順序
variable "priority" {
type = number
default = 1
}
# 入站規則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
}
執行
terraform init
命令,初始化配置。
預期結果:
執行
terraform apply
命令,在執行過程中,根據提示輸入yes
並按下Enter鍵,等待命令執行完成,若出現以下資訊,則表示建立搶佔式執行個體完成。
預期結果:
操作驗證
執行terraform show命令
您可以使用以下命令查詢Terraform已建立的資來源詳細資料:
terraform show
Elastic Compute Service控制台驗證
登入雲伺服器ECS控制台,查看您建立的搶佔式執行個體。
清理資源
當您不再需要上述通過Terraform建立或管理的資源時,請運行以下命令以釋放資源。關於terraform destroy
的更多資訊,請參見常用命令。
terraform destroy
完整樣本
當前範例程式碼支援一鍵運行,您可以直接運行代碼。一鍵運行
範例程式碼
相關文檔
Terrafrom介紹,請參見Terraform產品介紹。
當您遇到由於網路延遲等原因造成的 terraform init 逾時,導致無法正常下載 Provider 等情況時,請參見Terraform Init 加速方案配置。