All Products
Search
Document Center

Elastic Compute Service:Buat spot instance dengan Konsol ECS, SDK, atau Terraform

Last Updated:May 29, 2026

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.

    Catatan

    Jika 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

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

  2. 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.

        Peringatan

        Spot 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.

        Catatan

        Spot instance dalam mode hemat mungkin gagal restart karena stok tidak mencukupi atau harga pasar melebihi penawaran Anda.

  3. Tinjau konfigurasi Anda di sisi kanan halaman, atur opsi penggunaan, lalu klik Confirm Order.

Buat melalui SDK

Prasyarat

  1. 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.

  2. 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

  3. Konfigurasikan kredensial akses

    Kode contoh membaca AccessKey dari variabel lingkungan sistem. Untuk langkah-langkah pengaturan, lihat Konfigurasikan variabel lingkungan pada Linux, macOS, dan Windows.

  4. Instal ECS SDK

    Dapatkan ECS SDK. Contoh ini menggunakan Maven. Untuk metode lainnya, lihat Instal ECS Java SDK.

    Tambahkan dependensi Maven sebagai berikut:

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

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

Catatan

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

Prosedur

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

    Untuk cara lain menggunakan Cloud Shell, lihat Gunakan Cloud Shell.

  2. Buat folder proyek bernama terraform dan masuk ke direktori tersebut.

    mkdir terraform
    cd terraform
  3. Buat file konfigurasi bernama main.tf dengan 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"
    }
    
    # Kategori disk sistem
    variable "system_disk_category" {
      type    = string
      default = "cloud_efficiency"
    }
    
    # Citra OS
    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"
    }
    
    # Strategi penawaran spot instance
    variable "spot_strategy" {
      type    = string
      default = "SpotAsPriceGo"
    }
    
    # Durasi cadangan spot instance
    variable "spot_duration" {
      type    = number
      default = 0
    }
    
    # Range port aturan inbound
    variable "port_range" {
      type    = string
      default = "1/65535"
    }
    
    # Prioritas aturan inbound
    variable "priority" {
      type    = number
      default = 1
    }
    
    # CIDR aturan inbound
    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 terraform init untuk menginisialisasi konfigurasi.

    image

  5. Jalankan terraform apply. Saat diminta, masukkan yes lalu tekan Enter. Jika muncul pesan berikut, spot instance Anda telah dibuat.

    image

  6. Jalankan terraform show untuk melihat detail resource yang telah dibuat.

    image

Bersihkan resource

Untuk melepas resource yang dibuat oleh Terraform, jalankan perintah berikut. Lihat Perintah umum.

terraform destroy

Referensi

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.