全部产品
Search
文档中心

Elastic Compute Service:Buat instans spot

更新时间:Dec 02, 2025

Instans spot adalah sumber daya komputasi berbiaya rendah dari Alibaba Cloud yang cocok untuk tugas-tugas yang sensitif terhadap biaya dan dapat mentolerir gangguan, seperti analitik data, pengujian, dan pengembangan. Harga instans spot biasanya jauh lebih rendah dibandingkan instans berbayar sesuai penggunaan. Namun, sistem dapat secara otomatis melepaskan instans spot akibat fluktuasi harga pasar atau perubahan ketersediaan sumber daya. Topik ini menjelaskan cara membuat instans spot melalui Konsol Elastic Compute Service (ECS), menggunakan kit pengembangan perangkat lunak (SDK), atau menggunakan Terraform.

Saran

Saat membuat instans spot, pertimbangkan saran berikut:

  • Pilih mode penawaran yang wajar: Saat menawar, pertimbangkan fluktuasi harga pasar. Penawaran yang wajar meningkatkan tingkat keberhasilan pembuatan instans spot dan mengurangi kemungkinan instans dilepas jika penawaran Anda turun di bawah harga pasar. Penawaran Anda juga harus selaras dengan kebutuhan bisnis Anda.

    Catatan

    Jika Anda kesulitan menentukan penawaran, Anda dapat menggunakan opsi penawaran otomatis. Opsi ini menerima harga pasar real-time sebagai harga penagihan untuk tipe instans tersebut.

  • Persistensi data: Simpan data penting Anda pada media penyimpanan yang tidak terpengaruh saat instans spot dilepas, seperti disk independen yang tidak ikut dilepas bersama instans, Object Storage Service (OSS), atau Apsara File Storage NAS (NAS).

  • Monitor status instans: Anda dapat menggunakan CloudMonitor atau metadata instans untuk memantau status instans spot Anda. Hal ini membantu Anda mengetahui apakah suatu instans telah terganggu dan ditarik kembali. Untuk informasi selengkapnya, lihat Deteksi dan tanggapi event gangguan instans spot.

  • Tangani gangguan: Instans spot dapat dilepas jika harga pasar melebihi penawaran Anda atau jika persediaan sumber daya tidak mencukupi. Anda harus menguji aplikasi Anda untuk memastikan bahwa aplikasi tersebut dapat menangani pelepasan instans yang tidak terduga.

Prosedur

Buat di Konsol ECS

  1. Buka halaman pembuatan instans dan klik tab Custom Launch.

  2. Konfigurasikan pengaturan sumber daya ECS sesuai kebutuhan Anda dengan mengikuti petunjuk di layar.

    Perhatikan parameter berikut. Untuk informasi lebih lanjut tentang item konfigurasi lainnya, lihat Buat instans di tab Custom Launch.

    • Billing Method: Pilih Spot Instance.

    • Instance Usage Duration:

      • 1 Hour: Instans berjalan selama periode stabil 1 jam dan tidak dilepas secara otomatis. Setelah 1 jam, sistem memantau persediaan dan perubahan penawaran secara real time untuk menentukan apakah Anda dapat terus menggunakan sumber daya tersebut.

      • None: Tidak ada durasi penggunaan yang ditetapkan. Pilih opsi ini sesuai kebutuhan bisnis Anda. Opsi ini menawarkan harga yang lebih baik dibandingkan durasi penggunaan 1 jam.

    • Highest Price Per Instance:

      • Use Automatic Bid: Penawaran mengikuti harga pasar saat ini. Artinya, Anda selalu menerima harga pasar real-time sebagai harga penagihan untuk tipe instans tersebut.

      • Set Maximum Price: Anda harus menetapkan batas harga maksimum untuk tipe instans yang ditentukan. Batas harga ini merupakan harga tertinggi yang bersedia Anda bayarkan untuk tipe instans tersebut.

    • Instance Interruption Mode:

      • Release: Saat terjadi gangguan, instans Anda segera dilepas. Sumber daya yang dilepas mencakup sumber daya komputasi (vCPU, GPU, dan memori), alamat IP publik statis, bandwidth tetap, serta disk (disk sistem dan disk data).

        Peringatan

        Instans spot tidak cocok untuk menyimpan data penting. Jika Anda mengatur Instance Interruption Mode ke Release, Anda berisiko kehilangan data. Untuk memastikan keamanan data, Anda dapat menonaktifkan fitur yang melepas disk bersama instans atau membuat snapshot disk secara berkala.

      • Stop In Economical Mode: Saat terjadi gangguan, instans memasuki mode hemat. Sumber daya komputasi (vCPU, GPU, dan memori), alamat IP publik statis, serta bandwidth tetap ditarik kembali. Disk (disk sistem dan disk data), Alamat IP Elastis, snapshot, dan sumber daya lainnya dipertahankan dan tetap ditagih.

        Catatan

        Instans spot yang memasuki mode hemat mungkin gagal melakukan restart. Hal ini dapat terjadi karena persediaan tidak mencukupi atau karena harga pasar berfluktuasi di atas penawaran Anda.

  3. Di sisi kanan halaman, tinjau konfigurasi instans secara keseluruhan dan atur opsi seperti durasi penggunaan. Lalu, klik Create Order untuk menyelesaikan proses pembuatan.

Buat menggunakan SDK

Persiapan

  1. Buat Pasangan Kunci Akses

    Kami menyarankan Anda menggunakan Pasangan Kunci Akses milik Pengguna Resource Access Management (RAM) untuk memenuhi prinsip izin minimum. Akun Alibaba Cloud memiliki izin penuh atas semua sumber daya, sehingga membawa risiko keamanan tinggi jika Pasangan Kunci Aksesnya bocor. Untuk informasi selengkapnya, lihat Buat Pasangan Kunci Akses.

  2. Berikan izin terkait ECS kepada pengguna RAM

    Anda harus memberikan izin kepada pengguna RAM untuk mengoperasikan sumber daya ECS. Kode contoh dalam topik ini membuat instans. Kami menyarankan Anda memberikan izin berikut:

    Layanan Alibaba Cloud

    Grant Permissions

    Elastic Compute Service

    AliyunECSFullAccess

  3. Konfigurasikan kredensial akses

    Kode contoh dalam topik ini membaca Pasangan Kunci Akses dari variabel lingkungan sistem sebagai kredensial untuk mengakses layanan Alibaba Cloud. Untuk informasi selengkapnya, lihat Konfigurasikan variabel lingkungan di Linux, macOS, dan Windows.

  4. Instal ECS SDK

    Dapatkan ECS SDK untuk Java. Dalam contoh ini, ECS SDK untuk Java diinstal dengan menambahkan dependensi Maven. Untuk informasi metode instalasi lainnya, lihat Instal ECS SDK untuk Java.

    Contoh berikut menunjukkan cara menambahkan dependensi Maven:

    <dependencies>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>ecs20140526</artifactId>
            <version>5.3.0</version>
        </dependency>
    </dependencies>

Inisialisasi klien

Alibaba Cloud SDK mendukung berbagai jenis kredensial akses untuk menginisialisasi klien, seperti Pasangan Kunci Akses dan Token Layanan Keamanan (STS). Untuk informasi selengkapnya, lihat Kelola kredensial akses. Contoh ini menggunakan Pasangan Kunci Akses untuk menginisialisasi klien.

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 diatur.
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah diatur.
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // Untuk informasi lebih lanjut tentang titik akhir, lihat https://api.aliyun.com/product/Ecs
                .setEndpoint("ecs.cn-hangzhou.aliyuncs.com");
        return new Client(config);
    }
}

Buat objek permintaan untuk API

Sebelum membuat objek permintaan, lihat dokumentasi API untuk operasi tersebut guna mendapatkan informasi parameter.

// Buat objek permintaan.
RunInstancesRequest request = new RunInstancesRequest()
    // Atur wilayah.
    .setRegionId("cn-hangzhou")
    // Atur metode penagihan menjadi bayar sesuai penggunaan.
    .setInstanceChargeType("PostPaid")
    // Atur mode penawaran menjadi penawaran otomatis.
    .setSpotStrategy("SpotAsPriceGo")
    // Atur durasi penggunaan instans menjadi 1 jam. Ini memastikan instans tidak dilepas dalam waktu 1 jam.
    .setSpotDuration(1)
    // Atur tipe instans.
    .setInstanceType("instanceType")
    // Atur citra.
    .setImageId("imageId")
    // Atur ID grup keamanan.
    .setSecurityGroupId("securityGroupId")
    // Atur ID virtual switch.
    .setVSwitchId("vSwitchId");

Ajukan panggilan

Saat memanggil operasi OpenAPI dari klien, Anda dapat mengatur parameter runtime, seperti timeout dan konfigurasi proxy. Untuk informasi selengkapnya, lihat Konfigurasi lanjutan.

// Atur parameter runtime.
RuntimeOptions runtime = new RuntimeOptions();
// Panggil operasi RunInstances.
RunInstancesResponse response = client.runInstancesWithOptions(request, runtime);
System.out.println(response.body.toMap());

Penanganan eksepsi

Java SDK mengklasifikasikan eksepsi menjadi dua tipe utama: TeaUnretryableException dan TeaException.

  • TeaUnretryableException: Eksepsi ini terutama disebabkan oleh masalah jaringan. Eksepsi ini dilempar setelah jumlah maksimum percobaan ulang untuk masalah jaringan tercapai.

  • TeaException: Eksepsi ini digunakan untuk kesalahan bisnis.

Anda harus mengambil langkah-langkah yang tepat untuk menangani eksepsi, seperti menyebarkan eksepsi, mencatat log, dan mencoba pemulihan. Hal ini memastikan ketangguhan dan stabilitas sistem Anda.

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 diatur.
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah diatur.
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // Untuk informasi lebih lanjut tentang titik akhir, 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 mode penawaran menjadi penawaran otomatis.
                    .setSpotStrategy("SpotAsPriceGo")
                    // Atur durasi penggunaan instans menjadi 1 jam. Ini memastikan instans tidak dilepas dalam waktu 1 jam.
                    .setSpotDuration(1)
                    // Atur tipe instans.
                    .setInstanceType("instanceType")
                    // Atur citra.
                    .setImageId("imageId")
                    // Atur ID grup keamanan.
                    .setSecurityGroupId("securityGroupId")
                    // Atur ID virtual switch.
                    .setVSwitchId("vSwitchId");
            // Atur parameter runtime.
            RuntimeOptions runtime = new RuntimeOptions();
            // Panggil operasi RunInstances.
            RunInstancesResponse response = client.runInstancesWithOptions(request, runtime);
            System.out.println(response.body.toMap());
        } catch (TeaUnretryableException ue) {
            // Ini hanya untuk tujuan demonstrasi. Tangani eksepsi dengan hati-hati. Jangan abaikan eksepsi dalam proyek Anda.
            ue.printStackTrace();
            // Cetak pesan kesalahan.
            System.out.println(ue.getMessage());
            // Cetak catatan permintaan untuk menelusuri informasi permintaan saat terjadi kesalahan.
            System.out.println(ue.getLastRequest());
        } catch (TeaException e) {
            // Ini hanya untuk tujuan demonstrasi. Tangani eksepsi dengan hati-hati. Jangan abaikan eksepsi dalam proyek Anda.
            e.printStackTrace();
            // Cetak kode kesalahan.
            System.out.println(e.getCode());
            // Cetak pesan kesalahan, yang mencakup RequestId.
            System.out.println(e.getMessage());
            // Cetak konten kesalahan spesifik yang dikembalikan oleh server.
            System.out.println(e.getData());
        } catch (Exception e) {
            // Ini hanya untuk tujuan demonstrasi. Tangani eksepsi dengan hati-hati. Jangan abaikan eksepsi dalam proyek Anda.
            e.printStackTrace();
        }
    }
}

Buat menggunakan Terraform

Catatan

Kode contoh dalam prosedur berikut dapat dijalankan dengan sekali klik. Jalankan dengan satu klik

Prasyarat

  • Buat Pasangan Kunci Akses

    Kami menyarankan Anda menggunakan Pasangan Kunci Akses milik pengguna RAM dengan izin minimum. Akun Alibaba Cloud memiliki izin penuh atas semua sumber daya. Praktik ini mencegah penyalahgunaan jika Pasangan Kunci Akses bocor. Untuk informasi selengkapnya, lihat Buat pengguna RAM dan Buat Pasangan Kunci Akses.

  • Buat kebijakan kustom

    Anda dapat menggunakan contoh berikut untuk membuat kebijakan kustom bagi pengguna RAM. Kebijakan ini mengizinkan pengguna untuk menjalankan instans ECS, melihat detail instans, dan melihat riwayat harga instans spot ECS. Untuk informasi selengkapnya, lihat Buat kebijakan kustom.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ecs:RunInstances",
            "ecs:DescribeInstances",
            "ecs:DescribeSpotPriceHistory"
          ],
          "Resource": "*"
        }
      ]
    }

Sumber daya yang digunakan

Prosedur

  1. Buka browser, kunjungi https://shell.aliyun.com dan login ke Cloud Shell.

    Untuk informasi selengkapnya tentang cara mengakses dan menggunakan Cloud Shell, lihat Gunakan Cloud Shell.

  2. Buat folder proyek bernama terraform untuk menyimpan sumber daya Terraform, lalu navigasi ke direktori proyek.

    mkdir terraform
    cd terraform
  3. Buat file konfigurasi bernama main.tf yang berisi konten berikut:

    main.tf

    provider "alicloud" {
      region = var.region
    }
    
    # Wilayah
    variable "region" {
      type    = string
      default = "cn-beijing"
    }
    
    # Nama VPC
    variable "vpc_name" {
      type    = string
      default = "tf_test_fofo"
    }
    
    # Blok CIDR VPC
    variable "vpc_cidr_block" {
      type    = string
      default = "172.16.0.0/12"
    }
    
    # Blok CIDR vSwitch
    variable "vswitch_cidr_block" {
      type    = string
      default = "172.16.0.0/21"
    }
    
    # Zona
    variable "availability_zone" {
      type    = string
      default = "cn-beijing-b"
    }
    
    # Nama grup keamanan
    variable "security_group_name" {
      type    = string
      default = "default"
    }
    
    # Tipe instans
    variable "instance_type" {
      type    = string
      default = "ecs.n2.small"
    }
    
    # Tipe disk sistem
    variable "system_disk_category" {
      type    = string
      default = "cloud_efficiency"
    }
    
    # Citra sistem operasi
    variable "image_id" {
      type    = string
      default = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"
    }
    
    # Nama instans
    variable "instance_name" {
      type    = string
      default = "test_fofo"
    }
    
    # Bandwidth publik
    variable "internet_max_bandwidth_out" {
      type    = number
      default = 10
    }
    
    # Metode penagihan
    variable "instance_charge_type" {
      type    = string
      default = "PostPaid"
    }
    
    # Kebijakan penawaran instans spot
    variable "spot_strategy" {
      type    = string
      default = "SpotAsPriceGo"
    }
    
    # Periode perlindungan instans spot
    variable "spot_duration" {
      type    = number
      default = 0
    }
    
    # Rentang port aturan Ingress
    variable "port_range" {
      type    = string
      default = "1/65535"
    }
    
    # Prioritas aturan Ingress
    variable "priority" {
      type    = number
      default = 1
    }
    
    # CIDR aturan Ingress
    variable "cidr_ip" {
      type    = string
      default = "0.0.0.0/0"
    }
    
    resource "alicloud_vpc" "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
      zone_id = var.availability_zone
    }
    
    resource "alicloud_security_group" "default" {
      security_group_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
    }
  4. Jalankan perintah terraform init untuk menginisialisasi konfigurasi.

    image

  5. Jalankan perintah terraform apply. Saat diminta, masukkan yes dan tekan Enter. Tunggu hingga perintah selesai. Jika informasi berikut ditampilkan, instans spot telah berhasil dibuat.

    image

  6. Jalankan perintah terraform show untuk menanyakan detail sumber daya yang dibuat oleh Terraform.

    image

Bersihkan sumber daya

Saat Anda tidak lagi memerlukan sumber daya yang dibuat atau dikelola oleh Terraform, jalankan perintah berikut untuk melepaskannya. Untuk informasi selengkapnya, lihat Perintah umum.

terraform destroy

Referensi

Buat instans spot menggunakan metode lain

Alibaba Cloud menyediakan layanan seperti Auto Scaling, Container Service for Kubernetes (ACK), dan kelompok penyediaan otomatis untuk membantu Anda membuat sumber daya dan mengotomatiskan O&M secara lebih efisien.

Auto Scaling ESS

Metode ini cocok untuk skenario yang memerlukan respons dinamis terhadap fluktuasi beban bisnis. Metode ini secara otomatis mencampur instans berbayar sesuai penggunaan dan instans spot dalam rasio yang dapat disesuaikan, serta secara otomatis mengisi instans baru saat instans yang ada dilepas. Untuk informasi selengkapnya, lihat Gunakan instans spot dalam grup penskalaan untuk mengurangi biaya.

Container Service ACK

Metode ini cocok untuk aplikasi tanpa status dan toleran terhadap kesalahan. Jika kluster Kubernetes Anda memerlukan kelompok node berbiaya rendah, Anda dapat membuat kelompok node instans spot. Untuk informasi selengkapnya, lihat Praktik terbaik untuk kelompok node instans spot.

Kelompok penyediaan otomatis

Penyediaan otomatis adalah solusi untuk mengirimkan kluster instans ECS secara cepat. Setelah konfigurasi sederhana, solusi ini dapat secara otomatis mengirimkan kumpulan instans yang memiliki metode penagihan berbeda (berbayar sesuai penggunaan dan spot) serta berbagai tipe instans di beberapa zona. Hal ini meningkatkan efisiensi pengiriman banyak instans secara batch. Untuk informasi selengkapnya, lihat Contoh konfigurasi kelompok penyediaan otomatis.