このトピックでは、Elastic Compute Service (ECS) コンソール、API操作の呼び出し、またはTerraformを使用してプリエンプティブルインスタンスを作成する方法について説明します。
使用状況のメモ
プリエンプティブインスタンスを作成して使用するには、次の点に留意してください。
合理的な入札をします。
あなたが入札をするとき、市場価格の変動を考慮に入れてください。 妥当な入札価格は、プリエンプティブルインスタンスを作成する可能性を高め、入札価格が市場価格よりも低くなったインスタンスをリリースする可能性を減らします。 ワークロードの要件に基づいて入札価格を提出する必要があります。
説明プリエンプティブルインスタンスの入札価格を決定できない場合は、購入時の市場価格を入札価格として使用することを推奨します。
必要なソフトウェアの設定を含むイメージを使用して、インスタンスの作成後にインスタンスを起動できるようにします。 インスタンスのユーザーデータを使用して、インスタンスの起動時にコマンドを実行することもできます。 詳細については、「インスタンスの初期化設定のカスタマイズ」をご参照ください。
プリエンプティブルインスタンスのリリースの影響を受けないストレージメディアに重要なデータを保存することを推奨します。
ストレージメディアには、個別に作成されたクラウドディスク、Object Storage Service (OSS) バケット、およびApsaraDB RDSインスタンスが含まれます。
グリッド、Hadoop、またはキューベースのアーキテクチャを使用してタスクをより小さなタスクに分割するか、チェックポイントを使用して計算結果を保存します。
ECSからのインスタンスリリース通知を確認して、プリエンプティブルインスタンスのステータスを監視します。
ECSは、プリエンプティブルインスタンスをリリースする5分前にインスタンスメタデータを更新します。 インスタンスのメタデータを確認することで、プリエンプティブインスタンスのステータスを毎分取得できます。 詳細については、「ECSインスタンスメタデータの概要」をご参照ください。
従量課金インスタンスでアプリケーションを実行し、インスタンスをリリースします。
インスタンスのリリース時にアプリケーションが自動的に設定を変更できるかどうかを確認できます。
手順
ECSコンソールで
ECSコンソールのECSインスタンス購入ページに移動します。
[カスタム起動] タブをクリックします。
ビジネス要件に基づいて、プロンプトに従って設定を構成します。
次のパラメータに注意してください。 その他のパラメーターについては、「カスタム起動タブでインスタンスを作成する」をご参照ください。
課金方法
: [プリエンプティブルインスタンス] を選択します。インスタンス使用期間
:1時間: プリエンプティブルインスタンスの1時間の保護期間を指定します。 インスタンスは、インスタンス作成後1時間以内に自動的にリリースされません。 期間が終了すると、5分ごとにインスタンスタイプの在庫と市場価格がチェックされ、インスタンスをリリースするかどうかが判断されます。
None: プリエンプティブルインスタンスの保護期間を指定しません。 保護期間のないプリエンプティブルインスタンスは、保護期間のあるプリエンプティブルインスタンスよりも費用対効果が高くなります。
インスタンスあたりの最高価格
:自動入札の使用: 購入時の市場価格が入札価格として使用されます。
[最大価格の設定]: インスタンスタイプの支払いを希望する最大価格を指定する必要があります。
[順序の作成] をクリックしてプリエンプティブルインスタンスを作成する前に、インスタンスの使用期間などのインスタンス設定を確認し、すべての設定が要件を満たしていることを確認します。
ECS利用規約と製品利用規約を読み、[注文の作成] をクリックします。
API操作の呼び出し
Alibaba Cloud CLI、OpenAPI Explorer、Alibaba Cloud SDKなどの開発者ツールを使用して、RunInstances操作を呼び出し、プリエンプティブルインスタンスを作成できます。 詳細は、「RunInstances」をご参照ください。
購入時の市場価格を入札価格として使用するには、SpotStrategyパラメーターをSpotAsPriceGoに設定します。 SpotStrategyパラメーターをSpotWithPriceLimitに設定し、支払いを希望するプリエンプティブルインスタンスの最大価格を指定することもできます。
DescribeSpotPriceHistory操作を呼び出して、プリエンプティブルインスタンスの過去の価格を照会できます。 これは、支払いを希望するプリエンプティブルインスタンスの適切な最大価格を設定するのに役立ちます。
Terraform の使用
次のサンプルコードは、Terraformを使用してプリエンプティブインスタンスを作成する方法の例を示しています。 [ワンクリック実行] をクリックして、次のサンプルコードを実行することもできます。
前提条件
Alibaba Cloudアカウントには、リソースに対するすべての権限があります。 AccessKeyペアの漏洩による権限の悪用を防ぐために、Resource Access Management (RAM) ユーザーを作成し、最小権限の原則に基づいてAccessKeyペアにアクセスするために必要な権限をRAMユーザーに付与することを推奨します。 詳細については、「RAMユーザーの作成」および「AccessKeyペアの作成」をご参照ください。
次のサンプルコードでは、RAMユーザーにアタッチされたカスタムポリシーを作成する方法の例を示します。 RAMユーザーには、ECSインスタンスの起動、ECSインスタンスの詳細の表示、プリエンプティブインスタンスの過去の料金の確認を行う権限があります。 詳細については、「カスタムポリシーの作成」をご参照ください。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:RunInstances",
"ecs:DescribeInstances",
"ecs:DescribeSpotPriceHistory"
],
"Resource": "*"
}
]
}
次のいずれかの方法を使用して、Terraformランタイムを準備します。
Terraform ExplorerでのTerraformの使用: Alibaba Cloudがオンラインランタイム環境を提供し、インストールは必要ありません。 ログオンしてTerraformを使用することができます。 この方法は、Terraform機能をコストフリーですばやく使用し、デフォルト設定するシナリオに適しています。
Cloud Shell: Terraformはプリインストールされており、ID資格情報がプリプロビジョニングされています。 これにより、Cloud ShellでTerraformコマンドを実行できます。 この方法は、Terraform機能を低コストですばやく使用し、デフォルト設定するシナリオに適しています。
Terraformのインストールと設定: この方法は、ネットワーク接続が不十分なシナリオや、カスタム開発環境が必要なシナリオに適しています。
リソースの準備
alicloud_vpc: 仮想プライベートクラウド (VPC) を作成します。
alicloud_vswitch: インスタンスが属するVPCにvSwitchを作成します。
alicloud_security_group: defaultという名前のセキュリティグループを作成し、作成したVPCに追加します。
alicloud_instance: ECSインスタンスを作成します。
alicloud_security_group_rule: 作成したセキュリティグループにセキュリティグループルールを追加します。
手順
ブラウザを開き、アドレスバーに https://shell.aliyun.com を入力して、Cloud Shellにアクセスします。
Cloud Shellの使用方法の詳細については、「Cloud Shellの使用」をご参照ください。
Cloud Shellにログインします。
という名前のディレクトリを作成します。terraformTerraformリソースを整理します。
次のコマンドを実行して、プロジェクトディレクトリにアクセスします。
cd terraform
次のコードスニペットを実行して、という名前の構成ファイルを作成します。main.tf.
provider "alicloud" {
region = var.region
}
# The region ID.
variable "region" {
type = string
default = "cn-beijing"
}
# The VPC name.
variable "vpc_name" {
type = string
default = "tf_test_fofo"
}
# The CIDR block of the VPC.
variable "vpc_cidr_block" {
type = string
default = "172.16.0.0/12"
}
# The CIDR block of the vSwitch.
variable "vswitch_cidr_block" {
type = string
default = "172.16.0.0/21"
}
# The zone ID.
variable "availability_zone" {
type = string
default = "cn-beijing-b"
}
# The security group name.
variable "security_group_name" {
type = string
default = "default"
}
# The instance type.
variable "instance_type" {
type = string
default = "ecs.n2.small"
}
# The type of the system disk.
variable "system_disk_category" {
type = string
default = "cloud_efficiency"
}
# The operating system image.
variable "image_id" {
type = string
default = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"
}
# The instance name.
variable "instance_name" {
type = string
default = "test_fofo"
}
# The Internet bandwidth.
variable "internet_max_bandwidth_out" {
type = number
default = 10
}
# The billing method.
variable "instance_charge_type" {
type = string
default = "PostPaid"
}
# The bidding strategy of the preemptible instance.
variable "spot_strategy" {
type = string
default = "SpotAsPriceGo"
}
# The protection period of the preemptible instance.
variable "spot_duration" {
type = number
default = 0
}
# The port range in the inbound security group rule.
variable "port_range" {
type = string
default = "1/65535"
}
# The priority of the inbound security group rule.
variable "priority" {
type = number
default = 1
}
# The CIDR in the inbound security group rule.
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設定を初期化します。次のサンプルコマンド出力が返されます。
terraform apply
コマンドを実行します。 プロンプトに従ってyes
と入力し、Enterキーを押します。 コマンドが完了するのを待ちます。 次のコマンド出力が表示された場合、プリエンプティブルインスタンスは期待どおりに作成されます。次のサンプルコマンド出力が返されます。
Verify the result
terraform showコマンドを実行します。
Terraformによって作成されたインスタンスの詳細を表示するには、次のコマンドを実行します。
terraform show
ECSコンソールでの確認
ECSコンソールにログインし、作成したプリエンプティブルインスタンスを表示します。
リソースのリリース
Terraformによって作成または管理されたリソースが不要になった場合は、リソースをリリースできます。 それらを解放するには、terraform destroyコマンドを実行します。 terraform destroy
コマンドの詳細については、「一般的なコマンド」をご参照ください。
terraform destroy
例:
[ワンクリック実行] をクリックして、次のサンプルコードを実行することもできます。
サンプルコード
関連ドキュメント
Terraformについては、をご参照ください。Terraformとは何ですか?