Buat spot instance melalui Konsol ECS, SDK, atau Terraform untuk menjalankan beban kerja yang toleran terhadap kegagalan, seperti analitik data, dengan biaya lebih rendah dibandingkan harga bayar sesuai penggunaan.
Sebelum memulai
Ikuti rekomendasi berikut saat membuat spot instance:
-
Tetapkan strategi penawaran yang wajar: Pertimbangkan volatilitas harga pasar. Penawaran yang wajar meningkatkan peluang peluncuran berhasil dan mengurangi risiko pelepasan. Pastikan penawaran Anda sesuai dengan ekspektasi anggaran.
CatatanJika Anda tidak yakin dengan jumlah penawaran, gunakan penawaran otomatis, yang menerima harga pasar real-time sebagai tarif penagihan.
-
Pastikan persistensi data: Simpan data kritis pada media penyimpanan yang tidak terpengaruh oleh pelepasan spot instance, seperti disk independen (tidak dilepas bersama instans), OSS, atau NAS.
-
Monitor status instans: Gunakan Cloud Monitor atau metadata instans untuk melacak status spot instance Anda. Lihat Deteksi dan tanggapi event interupsi spot instance.
-
Tangani interupsi: Spot instance dapat dilepas ketika harga pasar melebihi penawaran maksimum Anda atau stok habis. Uji aplikasi Anda untuk memastikan aplikasi tersebut menangani pelepasan tak terduga secara elegan.
Buat spot instance
Buat melalui Konsol ECS
-
Buka halaman pembuatan instans dan pilih tab Custom Launch.
-
Konfigurasikan resource ECS sesuai kebutuhan dan petunjuk di layar.
Perhatikan parameter berikut. Untuk pengaturan lainnya, lihat Custom launch instances.
-
Billing Method: Pilih Spot Instance.
-
Instance Usage Duration:
-
1 Hour: Instans berjalan tanpa gangguan selama satu jam. Setelah itu, sistem memantau perubahan stok dan penawaran untuk menentukan apakah Anda dapat terus menggunakannya.
-
None: Tidak ada durasi tetap. Opsi ini sering menawarkan harga lebih baik.
-
-
Maximum hourly price per instance:
-
Use Automatic Bid: Terima harga pasar saat ini sebagai tarif penagihan Anda.
-
Set a maximum price: Tetapkan harga tertinggi per jam yang bersedia Anda bayar.
-
-
Instance Interruption Mode:
-
Release: Instans dan resource komputasinya (vCPU, GPU, memory), IP publik statis, bandwidth tetap, serta disk dilepas.
PeringatanSpot instance tidak cocok untuk menyimpan data kritis. Memilih Instance Interruption Mode sebagai Release dapat menyebabkan kehilangan data. Nonaktifkan pelepasan disk saat instans dihentikan atau buat snapshot disk secara berkala untuk melindungi data Anda.
-
Stop in Economical Mode: Resource komputasi (vCPU, GPU, memory), IP publik statis, dan bandwidth tetap ditarik kembali. Disk, Elastic IP Address, dan snapshot dipertahankan dan terus dikenai biaya.
CatatanSpot instance dalam mode hemat mungkin gagal restart karena stok tidak mencukupi atau harga pasar melebihi penawaran Anda.
-
-
-
Tinjau konfigurasi Anda di sisi kanan halaman, atur opsi penggunaan, lalu klik Confirm Order.
Buat melalui SDK
Prasyarat
-
Buat AccessKey
Akun Alibaba Cloud (akun utama) memiliki izin penuh atas semua resource, sehingga kebocoran AccessKey-nya menimbulkan risiko serius. Gunakan AccessKey Pengguna RAM dengan izin minimal yang diperlukan. Lihat Buat AccessKey.
-
Berikan izin ECS kepada Pengguna RAM
Berikan izin manajemen ECS kepada Pengguna RAM. Kode contoh memerlukan hak istimewa pembuatan instans. Izin yang direkomendasikan:
Cloud Products
Permission
Elastic Compute Service
AliyunECSFullAccess
-
Konfigurasikan kredensial akses
Kode contoh membaca AccessKey dari variabel lingkungan sistem. Untuk langkah-langkah pengaturan, lihat Konfigurasikan variabel lingkungan pada Linux, macOS, dan Windows.
-
Instal ECS SDK
Dapatkan ECS SDK. Contoh ini menggunakan Maven. Untuk metode lainnya, lihat Instal ECS Java SDK.
Inisialisasi client
Alibaba Cloud SDK mendukung berbagai jenis kredensial untuk inisialisasi client, seperti AccessKey dan Token Layanan Token Keamanan. Lihat Kelola kredensial akses. Contoh ini menggunakan AccessKey.
import com.aliyun.ecs20140526.Client;
import com.aliyun.teaopenapi.models.Config;
public class Sample {
private static Client createClient() throws Exception {
Config config = new Config()
// Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID telah disetel.
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah disetel.
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
// Untuk Endpoint, lihat https://api.aliyun.com/product/Ecs
.setEndpoint("ecs.cn-hangzhou.aliyuncs.com");
return new Client(config);
}
}
Buat objek permintaan API
Periksa dokumentasi API untuk detail parameter sebelum membuat objek permintaan.
// Buat objek permintaan
RunInstancesRequest request = new RunInstancesRequest()
// Atur wilayah
.setRegionId("cn-hangzhou")
// Atur metode penagihan menjadi bayar sesuai penggunaan
.setInstanceChargeType("PostPaid")
// Atur strategi penawaran menjadi otomatis
.setSpotStrategy("SpotAsPriceGo")
// Atur durasi penggunaan 1 jam: menjamin instans berjalan selama 1 jam tanpa pelepasan
.setSpotDuration(1)
// Atur tipe instans
.setInstanceType("instanceType")
// Atur citra
.setImageId("imageId")
// Atur ID grup keamanan
.setSecurityGroupId("securityGroupId")
// Atur ID virtual switch
.setVSwitchId("vSwitchId");
Lakukan pemanggilan
Konfigurasikan opsi waktu proses seperti timeout dan pengaturan proxy saat memanggil OpenAPI. Lihat Konfigurasi lanjutan.
// Atur opsi waktu proses
RuntimeOptions runtime = new RuntimeOptions();
// Panggil API RunInstances
RunInstancesResponse response = client.runInstancesWithOptions(request, runtime);
System.out.println(response.body.toMap());
Tangani exception
Java SDK mengkategorikan exception menjadi TeaUnretryableException dan TeaException.
-
TeaUnretryableException: Masalah jaringan setelah mencapai jumlah percobaan ulang maksimum.
-
TeaException: Kesalahan terkait bisnis.
Tangani exception dengan benar untuk memastikan ketangguhan sistem, misalnya dengan meneruskannya, mencatat detailnya, atau mencoba pemulihan.
Contoh lengkap
import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.RunInstancesRequest;
import com.aliyun.ecs20140526.models.RunInstancesResponse;
import com.aliyun.ecs20140526.models.RunInstancesResponseBody;
import com.aliyun.tea.TeaException;
import com.aliyun.tea.TeaUnretryableException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import com.alibaba.fastjson.JSONArray;
import java.util.Arrays;
public class Sample {
private static Client createClient() throws Exception {
Config config = new Config()
// Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID telah disetel.
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah disetel.
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
// Untuk Endpoint, lihat https://api.aliyun.com/product/Ecs
.setEndpoint("ecs.cn-hangzhou.aliyuncs.com");
return new Client(config);
}
public static void main(String[] args) {
try {
Client client = Sample.createClient();
// Buat objek permintaan
RunInstancesRequest request = new RunInstancesRequest()
// Atur wilayah
.setRegionId("cn-hangzhou")
// Atur metode penagihan menjadi bayar sesuai penggunaan
.setInstanceChargeType("PostPaid")
// Atur strategi penawaran menjadi otomatis
.setSpotStrategy("SpotAsPriceGo")
// Atur durasi penggunaan 1 jam: menjamin instans berjalan selama 1 jam tanpa pelepasan
.setSpotDuration(1)
// Atur tipe instans
.setInstanceType("instanceType")
// Atur citra
.setImageId("imageId")
// Atur ID grup keamanan
.setSecurityGroupId("securityGroupId")
// Atur ID virtual switch
.setVSwitchId("vSwitchId");
// Atur opsi waktu proses
RuntimeOptions runtime = new RuntimeOptions();
// Panggil API RunInstances
RunInstancesResponse response = client.runInstancesWithOptions(request, runtime);
System.out.println(response.body.toMap());
} catch (TeaUnretryableException ue) {
// Contoh ini hanya mencetak exception. Tangani exception dengan hati-hati dalam kode produksi—jangan pernah mengabaikannya.
ue.printStackTrace();
// Cetak pesan kesalahan
System.out.println(ue.getMessage());
// Cetak detail permintaan untuk debugging
System.out.println(ue.getLastRequest());
} catch (TeaException e) {
// Contoh ini hanya mencetak exception. Tangani exception dengan hati-hati dalam kode produksi—jangan pernah mengabaikannya.
e.printStackTrace();
// Cetak kode kesalahan
System.out.println(e.getCode());
// Cetak pesan kesalahan (termasuk RequestId)
System.out.println(e.getMessage());
// Cetak detail kesalahan sisi server
System.out.println(e.getData());
} catch (Exception e) {
// Contoh ini hanya mencetak exception. Tangani exception dengan hati-hati dalam kode produksi—jangan pernah mengabaikannya.
e.printStackTrace();
}
}
}
Buat melalui Terraform
Langkah-langkah berikut mencakup kode contoh siap jalankan. Jalankan sekarang
Prasyarat
-
Buat AccessKey
Akun Alibaba Cloud (akun utama) memiliki izin penuh atas semua resource. Untuk mencegah penggunaan tidak sah jika AccessKey bocor, gunakan AccessKey Pengguna RAM dengan izin minimal yang diperlukan. Lihat Buat Pengguna RAM dan Buat AccessKey.
-
Buat kebijakan kustom
Buat kebijakan kustom untuk mengizinkan peluncuran instans ECS, melihat detail instans, dan memeriksa riwayat harga spot. Lihat Buat kebijakan kustom.
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunInstances", "ecs:DescribeInstances", "ecs:DescribeSpotPriceHistory" ], "Resource": "*" } ] }
Resource yang digunakan
-
alicloud_vpc: Membuat VPC.
-
alicloud_vswitch: Membuat vSwitch di dalam VPC untuk segmentasi subnet.
-
alicloud_security_group: Membuat grup keamanan bernama default dan mengaitkannya dengan VPC.
-
alicloud_instance: Membuat instans ECS.
-
alicloud_security_group_rule: Menentukan aturan grup keamanan.
Prosedur
-
Buka https://shell.aliyun.com dan login ke Cloud Shell.
Untuk cara lain menggunakan Cloud Shell, lihat Gunakan Cloud Shell.
-
Buat folder proyek bernama terraform dan masuk ke direktori tersebut.
mkdir terraform cd terraform -
Buat file konfigurasi bernama main.tf dengan konten berikut:
-
Jalankan
terraform inituntuk menginisialisasi konfigurasi.
-
Jalankan
terraform apply. Saat diminta, masukkanyeslalu tekan Enter. Jika muncul pesan berikut, spot instance Anda telah dibuat.
-
Jalankan
terraform showuntuk melihat detail resource yang telah dibuat.
Bersihkan resource
Untuk melepas resource yang dibuat oleh Terraform, jalankan perintah berikut. Lihat Perintah umum.
terraform destroy
Referensi
-
Untuk pengantar Terraform, lihat Ikhtisar Terraform.
Metode lain
Alibaba Cloud juga menawarkan Auto Scaling, ACK, dan kelompok penyediaan otomatis untuk pembuatan spot instance dalam skenario yang lebih kompleks.
Auto Scaling (ESS)
Mencampurkan instans bayar sesuai penggunaan dan spot instance secara dinamis untuk merespons fluktuasi beban, serta mengganti instans yang dilepas secara otomatis. Lihat Gunakan spot instance dalam grup penskalaan untuk mengurangi biaya.
ACK
Membuat kelompok node Kubernetes berbiaya rendah untuk aplikasi tanpa status yang toleran terhadap kegagalan. Lihat Praktik terbaik untuk kelompok node spot instance.
Kelompok penyediaan otomatis
Menyediakan kluster instans di beberapa zona dan metode penagihan (bayar sesuai penggunaan dan spot) dengan satu konfigurasi. Lihat Contoh konfigurasi kelompok penyediaan otomatis.