全部产品
Search
文档中心

Elastic Compute Service:Deteksi dan tanggapi event interupsi instans spot

更新时间:Nov 25, 2025

Instans Elastic Compute Service (ECS) spot dapat direklamasi secara paksa akibat perubahan harga pasar atau ketersediaan sumber daya yang tidak mencukupi. Jika bisnis Anda sensitif terhadap interupsi instans, Anda harus segera mendeteksi dan menanggapi event interupsi instans spot. Topik ini menjelaskan cara mendeteksi dan menanggapi event tersebut.

Detect spot instance interruption events

Use an ECS SDK

Anda dapat memanggil operasi DescribeInstances untuk mengkueri informasi instans ECS dan menentukan apakah instans spot berada dalam status To Be Recycled berdasarkan array OperationLocks dalam respons.

  • Jika array OperationLocks untuk instans spot kosong, instans tersebut tersedia.

  • Jika array OperationLocks untuk instans spot berisi parameter LockReason yang diatur ke Recycling, instans spot tersebut diinterupsi dan berada dalam status To Be Recycled.

Contoh kueri event interupsi instans spot menggunakan ECS SDK

Persiapan

  1. Buat Pasangan Kunci Akses

    Buat Pasangan Kunci Akses untuk pengguna Resource Access Management (RAM). Akun Alibaba Cloud memiliki semua izin atas sumber daya. Jika Pasangan Kunci Akses akun Alibaba Cloud Anda bocor, sumber daya Anda akan menghadapi risiko besar. Kami menyarankan Anda menggunakan Pasangan Kunci Akses pengguna RAM. Untuk informasi tentang cara membuat Pasangan Kunci Akses, lihat Buat Pasangan Kunci Akses.

  2. Berikan izin ECS kepada pengguna RAM

    Berikan izin atas sumber daya ECS kepada pengguna RAM yang ingin Anda gunakan. Kode contoh dalam topik ini mengkueri informasi instans ECS. Untuk memberikan izin kepada pengguna RAM agar dapat menjalankan kode contoh ini, kami menyarankan Anda melampirkan kebijakan berikut ke pengguna RAM tersebut.

    Layanan cloud

    Kebijakan

    ECS

    AliyunECSFullAccess

  3. Konfigurasikan kredensial akses

    Konfigurasikan Pasangan Kunci Akses pengguna RAM yang ingin Anda gunakan dalam variabel lingkungan. Kode contoh dalam topik ini membaca Pasangan Kunci Akses dari variabel lingkungan dan menggunakannya sebagai kredensial untuk mengakses layanan Alibaba Cloud. Untuk informasi tentang cara mengonfigurasi Pasangan Kunci Akses dalam variabel lingkungan, lihat Konfigurasikan variabel lingkungan di Linux, macOS, dan Windows.

  4. Instal ECS SDK.

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

    Kode contoh untuk 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 beberapa kredensial akses, seperti Pasangan Kunci Akses dan token Security Token Service (STS), untuk menginisialisasi klien. Untuk informasi selengkapnya, lihat Kelola kredensial akses. Dalam contoh ini, Pasangan Kunci Akses digunakan 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 dikonfigurasi.
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah dikonfigurasi.
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // Tentukan titik akhir. Untuk informasi tentang titik akhir, kunjungi https://api.aliyun.com/product/Ecs.
                .setEndpoint("ecs.cn-hangzhou.aliyuncs.com");
        return new Client(config);
    }
}

Buat objek permintaan untuk operasi API

Sebelum membuat objek permintaan, tinjau parameter operasi API yang ingin Anda panggil.

// Buat objek permintaan.
DescribeInstancesRequest request = new DescribeInstancesRequest().setRegionId("cn-hangzhou");

Lakukan pemanggilan

Saat memanggil operasi API dari klien, Anda dapat menentukan parameter waktu proses, seperti timeout dan proxy. Untuk informasi selengkapnya, lihat Pengaturan lanjutan.

// Tentukan parameter waktu proses.
RuntimeOptions runtime = new RuntimeOptions();
// Panggil operasi DescribeInstances.
DescribeInstancesResponse response = client.describeInstancesWithOptions(request, runtime);
System.out.println(response.body.toMap());

Tangani pengecualian

ECS SDK untuk Java mengklasifikasikan pengecualian menjadi tipe-tipe berikut:

  • TeaUnretryableException: Umumnya disebabkan oleh error jaringan dan dilaporkan ketika jumlah maksimum percobaan ulang telah tercapai.

  • TeaException: Umumnya disebabkan oleh error bisnis.

Kami menyarankan Anda menangani pengecualian dengan benar melalui tindakan seperti pelaporan error, pencatatan log error, dan percobaan ulang, guna memastikan ketangguhan dan stabilitas sistem Anda.

Contoh

import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.DescribeInstancesRequest;
import com.aliyun.ecs20140526.models.DescribeInstancesResponse;
import com.aliyun.ecs20140526.models.DescribeInstancesResponseBody;
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 dikonfigurasi.
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah dikonfigurasi.
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // Tentukan titik akhir. Untuk informasi tentang titik akhir, kunjungi https://api.alibabacloud.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.
            // Tentukan ID satu atau beberapa instans ECS.
            JSONArray instanceIds = new JSONArray();
            instanceIds.addAll(Arrays.asList("i-bp145cvd0exyqj****","i-bp1gehfgfrrk4lah****"));
            DescribeInstancesRequest request = new DescribeInstancesRequest()
                    .setRegionId("cn-hangzhou")
                    .setInstanceIds(instanceIds.toJSONString());
            // Tentukan parameter waktu proses.
            RuntimeOptions runtime = new RuntimeOptions();
            while (!instanceIds.isEmpty()) {
              // Panggil operasi DescribeInstances.
              DescribeInstancesResponse response = client.describeInstancesWithOptions(request, runtime);
              // Dapatkan hasil spesifik instans.
              DescribeInstancesResponseBody responseBody = response.getBody();
              DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstances instanceList = responseBody.getInstances();
              // Dapatkan informasi instans dan tentukan status instans berdasarkan nilai parameter lockReason.
              if (instanceList != null && instanceList.getInstance()!= null && !instanceList.getInstance().isEmpty()) {
                  for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : instanceList.getInstance()) {
                      // Lihat ID dan ID zona dari instans yang dikueri.
                      System.out.println("result:instance:" + instance.getInstanceId() + ",az:" + instance.getZoneId());
                      if (instance.getOperationLocks() != null ) {
                          DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstanceOperationLocks operationLocks  = instance.getOperationLocks();
                          if(operationLocks.getLockReason()!=null && !operationLocks.getLockReason().isEmpty()){
                              for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstanceOperationLocksLockReason lockReason : operationLocks.getLockReason()) {
                                  // Jika instans dikunci, lihat ID instans dan alasan penguncian.
                                  System.out.println("instance:" + instance.getInstanceId() + "-->lockReason:" + lockReason.getLockReason() + ",vmStatus:" + instance.getStatus());
                                  if ("Recycling".equals(lockReason.getLockReason())) {
                                      // Lihat ID instans yang akan direklamasi.
                                      System.out.println("spot instance will be recycled immediately, instance id:" + instance.getInstanceId());
                                      instanceIds.remove(instance.getInstanceId());
                                  }
                              }
                          }

                      }
                  }
                  // Jika instans spot tidak dikunci, instans tersebut dikueri setiap 2 menit.
                  System.out.print("try describeInstances again later ...");
                  Thread.sleep(2 * 60 * 1000);
              } else {
                  break;
              }
            }
        } catch (TeaUnretryableException ue) {
            // Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian hanya disediakan sebagai referensi.
            ue.printStackTrace();
            // Tampilkan pesan error.
            System.out.println(ue.getMessage());
            // Tampilkan pesan permintaan dan kueri informasi permintaan saat terjadi error.
            System.out.println(ue.getLastRequest());
        } catch (TeaException e) {
            // Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian hanya disediakan sebagai referensi.
            e.printStackTrace();
            // Tampilkan kode error.
            System.out.println(e.getCode());
            // Tampilkan pesan error yang berisi ID permintaan.
            System.out.println(e.getMessage());
            // Tampilkan informasi error detail yang dikembalikan oleh server.
            System.out.println(e.getData());
        } catch (Exception e) {
            // Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian hanya disediakan sebagai referensi.
            e.printStackTrace();
        }
    }
}

Respons

Respons berikut dikembalikan jika reklamasi instans spot dipicu:

result:instance:i-bp1i9c3qiv1qs6nc****,az:cn-hangzhou-i
instance:i-bp1i9c3qiv1qs6nc****-->lockReason:Recycling,vmStatus:Stopped
spot instance will be recycled immediately, instance id:i-bp1i9c3qiv1qs6nc****

Gunakan metadata instans

Anda dapat mengakses Metadata Service di dalam instans spot untuk mendapatkan waktu saat instans tersebut dihentikan (dihentikan dan dilepas). Untuk informasi tentang metadata instans, lihat Metadata instans.

Item metadata yang menentukan waktu terminasi instans spot: instance/spot/termination-time

Nilai item metadata di atas:

  • Jika respons 404 dikembalikan, instans tersebut tersedia.

  • Jika timestamp UTC seperti 2015-01-05T18:02:00Z dikembalikan, instans tersebut akan direklamasi pada waktu yang ditentukan.

Kode contoh:

Instans ECS Linux

# Dapatkan kredensial akses server metadata untuk autentikasi.
TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:<Masa berlaku kredensial akses server metadata>"`
# Periksa apakah instans spot diinterupsi dan direklamasi.
curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/instance/spot/termination-time

Instans ECS Windows

# Dapatkan kredensial akses server metadata untuk autentikasi.
$token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "<Masa berlaku kredensial akses server metadata>"} -Method PUT -Uri http://100.100.100.200/latest/api/token
# Periksa apakah instans spot diinterupsi dan direklamasi.
Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/instance/spot/termination-time

Gunakan CloudMonitor SDK

Event terkait instans ECS disinkronkan ke CloudMonitor. Anda dapat memanggil operasi DescribeSystemEventAttribute CloudMonitor untuk mengkueri event interupsi instans spot (Instance:PreemptibleInstanceInterruption) dan menentukan apakah interupsi dan reklamasi instans spot telah dipicu berdasarkan nilai bidang action dalam parameter content pada respons. Jika nilai bidang action dalam parameter content untuk instans spot adalah delete, maka interupsi dan reklamasi instans tersebut telah dipicu.

Contoh kueri event interupsi instans spot menggunakan CloudMonitor SDK

Persiapan

  1. Buat Pasangan Kunci Akses

    Buat Pasangan Kunci Akses untuk pengguna RAM. Akun Alibaba Cloud memiliki semua izin atas sumber daya. Jika Pasangan Kunci Akses akun Alibaba Cloud Anda bocor, sumber daya Anda akan menghadapi risiko besar. Kami menyarankan Anda menggunakan Pasangan Kunci Akses pengguna RAM. Untuk informasi tentang cara membuat Pasangan Kunci Akses, lihat Buat Pasangan Kunci Akses.

  2. Berikan izin CloudMonitor kepada pengguna RAM

    Berikan izin CloudMonitor kepada pengguna RAM yang ingin Anda gunakan. Kode contoh dalam topik ini mengkueri event sistem. Untuk memberikan izin kepada pengguna RAM agar dapat menjalankan kode contoh ini, kami menyarankan Anda melampirkan kebijakan berikut ke pengguna RAM tersebut.

    Layanan cloud

    Kebijakan

    CloudMonitor

    AliyunCloudMonitorFullAccess

  3. Konfigurasikan kredensial akses

    Konfigurasikan Pasangan Kunci Akses pengguna RAM yang ingin Anda gunakan dalam variabel lingkungan. Kode contoh dalam topik ini membaca Pasangan Kunci Akses dari variabel lingkungan dan menggunakannya sebagai kredensial untuk mengakses layanan Alibaba Cloud. Untuk informasi tentang cara mengonfigurasi Pasangan Kunci Akses dalam variabel lingkungan, lihat Konfigurasikan variabel lingkungan di Linux, macOS, dan Windows.

  4. Instal CloudMonitor SDK

    Ambil CloudMonitor SDK untuk Java. Dalam contoh ini, CloudMonitor SDK untuk Java diinstal dengan menambahkan dependensi Maven. Untuk informasi metode instalasi lainnya, lihat Install CloudMonitor SDK for Java.

    Kode contoh untuk menambahkan dependensi Maven:

    <dependencies>
        <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>cms20190101</artifactId>
          <version>8.1.3</version>
        </dependency>
    </dependencies>

Inisialisasi klien

Alibaba Cloud SDK mendukung beberapa kredensial akses, seperti Pasangan Kunci Akses dan token STS, untuk menginisialisasi klien. Untuk informasi selengkapnya, lihat Kelola kredensial akses. Dalam contoh ini, Pasangan Kunci Akses digunakan untuk menginisialisasi klien.

import com.aliyun.cms20190101.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 dikonfigurasi.
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah dikonfigurasi.
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // Tentukan titik akhir. Untuk informasi tentang titik akhir, kunjungi https://api.alibabacloud.com/product/Cms.
                .setEndpoint("metrics.cn-hangzhou.aliyuncs.com");
        return new Client(config);
    }
}

Buat objek permintaan untuk operasi API

Konfigurasikan parameter berikut dari operasi DescribeSystemEventAttribute, yang diperlukan untuk mengkueri event interupsi instans spot.

API

Parameter

Deskripsi

DescribeSystemEventAttribute

Product

Singkatan nama layanan. Atur nilainya ke ECS.

EventType

Jenis event. Atur nilainya ke StatusNotification.

Name

Nama event. Atur nilainya ke Instance:PreemptibleInstanceInterruption.

// Buat objek permintaan.
DescribeSystemEventAttributeRequest request = new DescribeSystemEventAttributeRequest()
    .setProduct("ECS");
    .setEventType("StatusNotification");
     .setName("Instance:PreemptibleInstanceInterruption");

Lakukan pemanggilan

Saat memanggil operasi API dari klien, Anda dapat menentukan parameter waktu proses, seperti timeout dan proxy. Untuk informasi selengkapnya, lihat Pengaturan lanjutan.

// Tentukan parameter waktu proses.
RuntimeOptions runtime = new RuntimeOptions();
// Panggil operasi DescribeInstances.
DescribeSystemEventAttributeResponse response = client.describeSystemEventAttributeWithOptions(request, runtime);
System.out.println(response.body.toMap());

Tangani pengecualian

CloudMonitor SDK untuk Java mengklasifikasikan pengecualian menjadi tipe-tipe berikut:

  • TeaUnretryableException: Umumnya disebabkan oleh error jaringan dan dilaporkan ketika jumlah maksimum percobaan ulang telah tercapai.

  • TeaException: Umumnya disebabkan oleh error bisnis.

Kami menyarankan Anda menangani pengecualian dengan benar melalui tindakan seperti pelaporan error, pencatatan log error, dan percobaan ulang, guna memastikan ketangguhan dan stabilitas sistem Anda.

Contoh

import com.aliyun.cms20190101.Client;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.cms20190101.models.DescribeSystemEventAttributeRequest;
import com.aliyun.cms20190101.models.DescribeSystemEventAttributeResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.tea.TeaUnretryableException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

public class Sample {
    private static Client createClient() throws Exception {
        Config config = new Config()
                // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID telah dikonfigurasi.
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah dikonfigurasi.
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // Tentukan titik akhir. Untuk informasi tentang titik akhir, kunjungi https://api.alibabacloud.com/product/Ecs.
                .setEndpoint("metrics.cn-hangzhou.aliyuncs.com");
        return new Client(config);
    }

    public static void main(String[] args) {
        try {
            Client client = Sample.createClient();
            // Buat objek permintaan.
            DescribeSystemEventAttributeRequest request = new DescribeSystemEventAttributeRequest()
                .setProduct("ECS");
                .setEventType("StatusNotification");
                .setName("Instance:PreemptibleInstanceInterruption");
            // Tentukan parameter waktu proses.
            RuntimeOptions runtime = new RuntimeOptions();
            // Panggil operasi DescribeSystemEventAttribute.
            DescribeSystemEventAttributeResponse response = client.describeSystemEventAttributeWithOptions(request, runtime);
            System.out.println(response.body.toMap());
        } catch (TeaUnretryableException ue) {
            // Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian hanya disediakan sebagai referensi.
            ue.printStackTrace();
            // Tampilkan pesan error.
            System.out.println(ue.getMessage());
            // Tampilkan pesan permintaan dan kueri informasi permintaan saat terjadi error.
            System.out.println(ue.getLastRequest());
        } catch (TeaException e) {
            // Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian hanya disediakan sebagai referensi.
            e.printStackTrace();
            // Tampilkan kode error.
            System.out.println(e.getCode());
            // Tampilkan pesan error yang berisi ID permintaan.
            System.out.println(e.getMessage());
            // Tampilkan informasi error detail yang dikembalikan oleh server.
            System.out.println(e.getData());
        } catch (Exception e) {
            // Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pengecualian hanya disediakan sebagai referensi.
            e.printStackTrace();
        }
    }
}

Respons

Identifikasi event interupsi instans spot berdasarkan respons.

Bagian berikut menunjukkan contoh notifikasi event interupsi dalam format JSON untuk instans spot:

{
  "ver": "1.0",
  "id": "2256A988-0B26-4E2B-820A-8A********E5",
  "product": "ECS",
  "resourceId": "acs:ecs:cn-hangzhou:169070********30:instance/i-bp1ecr********5go2go",
  "level": "INFO",
  "name": "Instance:PreemptibleInstanceInterruption",
  "userId": "169070********30",
  "eventTime": "20190409T121826.922+0800",
  "regionId": "cn-hangzhou",
  "content": {
    "instanceId": "i-bp1ecr********5go2go",  
    "action": "delete"                       
  }
}

Tabel berikut menjelaskan bidang-bidang yang terdapat dalam parameter content. Untuk informasi tentang parameter lainnya, lihat DescribeSystemEventAttribute.

Bidang

Deskripsi

Contoh

instanceId

ID instans spot.

i-bp1ecr********5go2go

action

Aksi pada instans spot. Jika bidang ini diatur ke delete, instans spot diinterupsi dan akan direklamasi secara paksa.

delete

Berlangganan event sistem di CloudMonitor

Berlangganan event sistem di CloudMonitor untuk memantau event interupsi instans spot secara real-time, mengirim pemberitahuan peringatan melalui metode notifikasi yang ditentukan—seperti pesan teks dan email—serta mendorong pemberitahuan peringatan ke berbagai saluran dorong, seperti Simple Message Queue (formerly MNS) (SMQ), Simple Log Service, Function Compute, dan webhook.

Alur kerja

Prosedur

  1. Buat saluran dorong

    SMQ

    1. Masuk ke Konsol Simple Message Queue (formerly MNS).

    2. Di panel navigasi sebelah kiri, pilih Queue Model > Queues.

    3. Di bilah navigasi atas, pilih wilayah.

    4. Di halaman Queues, klik Create Queue.

    5. Di panel Create Queue, konfigurasikan parameter berikut lalu klik OK:

      • Name: nama antrian.

      • Maximum Message Length: panjang maksimum pesan yang dikirim ke antrian.

      • Long Polling Period: durasi maksimum permintaan long polling ditahan setelah operasi ReceiveMessage dipanggil.

      • Visibility Timeout Period: durasi pesan tetap dalam status Inactive setelah pesan diterima dari antrian.

      • Message Retention Period: durasi maksimum pesan ada dalam antrian. Setelah periode retensi yang ditentukan, pesan akan dihapus terlepas dari apakah pesan tersebut telah diterima atau belum.

      • Message Delay Period: Periode penundaan sebelum semua pesan yang dikirim ke antrian dikonsumsi.

      • Enable Logging Feature: menentukan apakah fitur logging diaktifkan.

      Setelah antrian dibuat, antrian tersebut akan ditampilkan di halaman Queues.

    Webhook

    Penting

    Layanan webhook harus dideploy di server yang memiliki akses Internet. Pastikan port webhook server terbuka di grup keamanan dan firewall yang sesuai.

    Kode contoh dalam Java:

    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class WebhookController {
        @PostMapping("/callback")
        public ResponseEntity<String> receiveWebhook(@RequestBody String payload) {
            // Proses muatan, seperti mencatat log atau menjalankan logika bisnis.
            System.out.println("Received webhook payload: " + payload);
            // Kembalikan respons sukses.
            return ResponseEntity.ok("Webhook received");
        }
    }

  2. Buat kebijakan langganan

    1. Masuk ke Konsol CloudMonitor.

    2. Di panel navigasi sebelah kiri, pilih Event Center > Event Subscription.

    3. Di tab Subscription Policy, klik Create Subscription Policy.

    4. Di halaman Create Subscription Policy, konfigurasikan parameter-parameter.

      Perhatikan parameter berikut, yang diperlukan untuk berlangganan event interupsi instans spot. Untuk informasi tentang parameter lainnya, lihat Kelola langganan event (Direkomendasikan).

      • Basic information: Masukkan nama dan deskripsi untuk kebijakan langganan.

      • Alarm subscription:

        • Subscription Type: Pilih System Events.

        • Subscription Scope:

        • Products: Pilih Elastic Compute Service (ECS).

        • Event Type: Pilih Status Notification.

        • Event Name: Pilih Instance:PreemptibleInstanceInterruption.

        • Event Level: Pilih Warning (Warning).

        • Application group, Event Content, dan Event Resources: Biarkan parameter kosong, yang berarti Anda berlangganan event sistem Instance:PreemptibleInstanceInterruption untuk semua instans ECS di semua kelompok aplikasi yang dimiliki akun saat ini.

      • Combined Noise Reduction: Gunakan pengaturan default.

      • Notification: Untuk parameter Custom Notification Method, gunakan pengaturan default.

      • Push and Integration: Klik Add Channel. Di kotak dialog yang muncul, klik Increase Channels. Di panel Create Push Channel, atur parameter Target type ke saluran dorong yang Anda buat di Langkah 1. Kemudian, ikuti petunjuk di layar untuk mengonfigurasi parameter lainnya. Untuk informasi tentang saluran dorong, lihat Kelola saluran dorong.

  3. Simulasikan event interupsi instans spot

    Event interupsi instans spot adalah event yang dipicu. Saat Anda mengembangkan penangan event interupsi untuk instans spot, Anda tidak dapat melakukan debug kode tersebut. Anda dapat menggunakan fitur Debug Event Subscription CloudMonitor untuk mensimulasikan event interupsi instans spot.

    1. Di tab Subscription Policy, klik Debug Event Subscription.

    2. Di panel Create Event Debugging, atur parameter Products ke Elastic Compute Service (ECS) dan parameter Name ke Instance:PreemptibleInstanceInterruption.

      CloudMonitor secara otomatis menghasilkan konten debugging dalam format JSON. Ganti informasi sumber daya dalam konten debugging dengan informasi instans spot yang ingin Anda simulasi event interupsinya.

      • Ganti variabel <ID akun Alibaba Cloud> dengan ID akun Alibaba Cloud Anda.

      • Ganti variabel <resource-id> dan <instanceId> dengan ID instans spot.

      • Ganti variabel <ID Wilayah> dengan ID wilayah instans spot.

        {
            "product": "ECS",
            "resourceId": "acs:ecs:cn-shanghai:<ID akun Alibaba Cloud>UID:instance/<resource-id>",
            "level": "WARN",
            "instanceName": "instanceName",
            "regionId": "<ID Wilayah>",
            "groupId": "0",
            "name": "Instance:PreemptibleInstanceInterruption",
            "content": {
                "instanceId": "i-2zeg014dfo4y892z***",
                "instanceName": "wor***b73",
                "action": "delete"
            },
            "status": "Normal"
        }
    3. Klik OK.

      Pesan Operation successful muncul. CloudMonitor secara otomatis mengirim notifikasi peringatan uji coba berdasarkan metode notifikasi yang ditentukan dalam kebijakan langganan.

  4. Terima dan lihat pemberitahuan peringatan untuk event interupsi instans spot

    SMQ

    1. Masuk ke Konsol SMQ. Di panel navigasi sebelah kiri, pilih Queue Model > Queues.

    2. Di bilah navigasi atas, pilih wilayah. Di halaman Queues, temukan antrian yang ingin Anda kelola lalu klik Send Messages di kolom Actions.

    3. (Opsional) Di bagian Receive Message halaman Quick Experience, klik Edit Parameters of Receiving Messages. Di panel Edit Parameters of Receiving Messages, konfigurasikan parameter Receive Times dan Polling Period lalu klik OK.

    4. Di halaman Quick Experience, klik Receive Message. Daftar pesan muncul di bagian Receive Message.

    5. (Opsional) Temukan pesan dalam daftar pesan lalu klik Details di kolom Actions. Di kotak dialog Message Details, lihat informasi pesan, seperti konten pesan.

    Webhook

    Lihat log pemanggilan layanan webhook dan pemberitahuan peringatan yang didorong ke layanan tersebut.

Tanggapi event interupsi instans spot

Tanggapi event interupsi instans spot berdasarkan skenario dan kebutuhan bisnis Anda. Kami menyarankan Anda menguji aplikasi untuk memastikan aplikasi dapat menangani interupsi dan reklamasi instans spot dengan baik. Berikut beberapa ide dan saran untuk referensi Anda:

  • Tangani interupsi instans spot secara elegan

    Tanggapi notifikasi event interupsi secara tepat waktu, simpan progres pemrosesan tugas, bebaskan sumber daya, dan hentikan tugas.

  • Persistensi data dan checkpoint

    Secara berkala simpan progres pemrosesan tugas dan hasil antara ke penyimpanan persisten, seperti file lokal atau database, untuk memastikan data bisnis penting dan konfigurasi tetap tersimpan. Untuk informasi tentang cara menyimpan dan memulihkan data untuk instans spot, lihat Simpan dan pulihkan data untuk instans spot.

  • Periksa apakah integrasi layanan berhasil

    Simulasikan event interupsi instans spot di CloudMonitor dan periksa apakah aplikasi merespons sesuai harapan. Untuk informasi selengkapnya, lihat Deteksi dan tanggapi event interupsi instans spot menggunakan SMQ.