

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Kebijakan penskalaan berdasarkan Amazon SQS
<a name="as-using-sqs-queue"></a>

**penting**  
Informasi dan langkah-langkah berikut menunjukkan cara menghitung backlog antrean Amazon SQS per instance menggunakan atribut antrian sebelum mempublikasikannya sebagai metrik kustom. `ApproximateNumberOfMessages` CloudWatch Namun, Anda sekarang dapat menghemat biaya dan upaya untuk menerbitkan metrik Anda sendiri dengan menggunakan matematika metrik. Untuk informasi selengkapnya, lihat [Membuat kebijakan penskalaan pelacakan target menggunakan matematika metrik](ec2-auto-scaling-target-tracking-metric-math.md).

Anda dapat menskalakan grup Auto Scaling sebagai respons terhadap perubahan pemuatan sistem dalam antrian Amazon Simple Queue Service (Amazon SQS). Untuk mempelajari lebih lanjut tentang cara menggunakan Amazon SQS, lihat [Panduan Pengembang Amazon Simple Queue Service](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/).

Ada beberapa skenario di mana Anda mungkin berpikir tentang penskalaan sebagai respons terhadap aktivitas dalam antrean Amazon SQS. Misalnya, kita asumsikan Anda memiliki aplikasi web yang memungkinkan pengguna mengunggah gambar dan menggunakannya secara online. Dalam skenario ini, setiap gambar perlu mengubah ukuran dan mengenkodekannya sebelum dapat diterbitkan. Aplikasi ini berjalan pada instance EC2 dalam grup Auto Scaling, dan dikonfigurasi untuk menangani tingkat pengunggahan standar Anda. Instance yang tidak sehat dihentikan dan diganti untuk memelihara tingkat instance saat ini setiap saat. Aplikasi ini menempatkan data gambar bitmap mentah dalam antrean SQS untuk pemrosesan. Aplikasi ini memproses gambar dan menerbitkan gambar yang diproses di mana gambar tersebut dapat dilihat oleh pengguna. Arsitektur untuk skenario ini berfungsi dengan baik jika jumlah pengunggahan gambar tidak bervariasi dari waktu ke waktu. Tetapi jika jumlah unggahan berubah dari waktu ke waktu, Anda dapat mempertimbangkan menggunakan penskalaan dinamis untuk menskalakan kapasitas grup Auto Scaling Anda.

**Topics**
+ [Gunakan pelacakan target dengan metrik yang tepat](#scale-sqs-queue-custom-metric)
+ [Batasan](#scale-sqs-queue-limitations)
+ [Mengonfigurasi penskalaan berdasarkan Amazon SQS](scale-sqs-queue-cli.md)
+ [Amazon SQS dan perlindungan penskalaan instans](#scale-sqs-queue-scale-in-protection)

## Gunakan pelacakan target dengan metrik yang tepat
<a name="scale-sqs-queue-custom-metric"></a>

Jika Anda menggunakan kebijakan penskalaan pelacakan target berdasarkan metrik antrean Amazon SQS kustom, penskalaan dinamis dapat menyesuaikan kurva permintaan aplikasi Anda secara lebih efektif. Untuk informasi selengkapnya tentang memilih metrik untuk pelacakan target, lihat [Pilih metrik](as-scaling-target-tracking.md#target-tracking-choose-metrics).

Masalah dengan menggunakan metrik CloudWatch Amazon SQS seperti `ApproximateNumberOfMessagesVisible` untuk pelacakan target adalah bahwa jumlah pesan dalam antrian mungkin tidak berubah secara proporsional dengan ukuran grup Auto Scaling yang memproses pesan dari antrian. Hal itu karena jumlah pesan dalam antrean SQS Anda tidak hanya menentukan jumlah instance yang diperlukan. Jumlah instance dalam grup Auto Scaling Anda dapat didorong oleh beberapa faktor, termasuk berapa lama waktu yang diperlukan untuk memproses pesan dan jumlah latensi yang dapat diterima (penundaan antrean). 

Solusinya adalah menggunakan metrik *backlog per instance* dengan nilai target menjadi *backlog yang dapat diterima per instance* untuk dipertahankan. Anda dapat menghitung angka-angka ini sebagai berikut:
+ **Backlog per instance**: Untuk menghitung backlog per instance, mulailah dengan atribut `ApproximateNumberOfMessages` antrian untuk menentukan panjang antrian SQS (jumlah pesan yang tersedia untuk diambil dari antrian). Bagi jumlahnya berdasarkan kapasitas berjalan fleet, yang untuk grup Auto Scaling adalah jumlah instance dalam status `InService`, untuk mendapatkan backlog per instance.
+ **Backlog yang dapat diterima per instance**: Untuk menghitung nilai target Anda, tentukan terlebih dahulu apa yang dapat diterima aplikasi Anda dalam hal latensi. Kemudian, ambil nilai latensi yang dapat diterima dan bagi dengan waktu rata-rata yang diperlukan oleh instance EC2 untuk memproses pesan. 

Sebagai contoh, katakanlah Anda saat ini memiliki grup Auto Scaling dengan 10 instance dan jumlah pesan yang terlihat dalam antrian () `ApproximateNumberOfMessages` adalah 1500. Jika waktu pemrosesan rata-rata adalah 0,1 detik untuk setiap pesan dan latensi terpanjang yang dapat diterima adalah 10 detik, maka backlog yang dapat diterima per instance adalah 10/0,1, yang sama dengan 100 pesan. Ini berarti bahwa 100 adalah nilai target untuk kebijakan pelacakan target Anda. Ketika backlog per instance mencapai nilai target, peristiwa scale-out akan terjadi. Karena backlog per instance sudah 150 pesan (1500 pesan/10 instance), grup Anda menskalakan, dan skalanya menjadi lima instance untuk mempertahankan proporsi dengan nilai target.

Prosedur berikut mendemonstrasikan cara mempublikasikan metrik khusus dan membuat kebijakan penskalaan pelacakan target yang mengonfigurasi grup Auto Scaling Anda ke skala berdasarkan perhitungan ini.

**penting**  
Ingat, untuk mengurangi biaya, gunakan matematika metrik sebagai gantinya. Untuk informasi selengkapnya, lihat [Membuat kebijakan penskalaan pelacakan target menggunakan matematika metrik](ec2-auto-scaling-target-tracking-metric-math.md).

Ada tiga bagian utama untuk konfigurasi ini:
+ Grup Auto Scaling untuk mengelola instance EC2 untuk tujuan pemrosesan pesan dari antrean SQS. 
+ Metrik khusus untuk dikirim ke Amazon CloudWatch yang mengukur jumlah pesan dalam antrian per instans EC2 di grup Auto Scaling.
+ Kebijakan pelacakan target yang mengonfigurasi grup Auto Scaling Anda untuk menskalakan berdasarkan metrik kustom dan nilai target yang ditetapkan. CloudWatch alarm memanggil kebijakan penskalaan. 

Diagram berikut menggambarkan arsitektur konfigurasi ini. 

![\[Amazon EC2 Auto Scaling menggunakan diagram arsitektur antrean\]](http://docs.aws.amazon.com/id_id/autoscaling/ec2/userguide/images/sqs-as-custom-metric-diagram.png)


## Batasan
<a name="scale-sqs-queue-limitations"></a>

Anda harus menggunakan AWS CLI atau SDK untuk mempublikasikan metrik kustom Anda. CloudWatch Anda kemudian dapat memantau metrik Anda dengan Konsol Manajemen AWS.

Di bagian berikut Anda menggunakan AWS CLI untuk tugas yang perlu Anda lakukan. Misalnya, untuk mendapatkan data metrik yang mencerminkan penggunaan antrean saat ini, Anda menggunakan perintah SQS [get-queue-attributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sqs/get-queue-attributes.html). 

# Mengonfigurasi penskalaan berdasarkan Amazon SQS
<a name="scale-sqs-queue-cli"></a>

Prosedur berikut menjelaskan cara mengonfigurasi penskalaan otomatis berdasarkan Amazon SQS. Anda akan mempelajari cara membuat metrik CloudWatch kustom, cara menyiapkan kebijakan pelacakan target menggunakan AWS CLI, dan cara menguji konfigurasi Anda. 

Sebelum Anda mulai, pastikan Anda telah AWS CLI [menginstal](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) dan [mengkonfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html). Selain itu, Anda harus memiliki antrian Amazon SQS untuk digunakan. Tugas berikut mengasumsikan bahwa Anda sudah memiliki antrian (standar atau FIFO), grup Auto Scaling, dan instans EC2 yang menjalankan aplikasi yang menggunakan antrian. 

Untuk informasi lebih lanjut tentang Amazon SQS, lihat [Panduan Pengembang Amazon Simple Queue Service](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/).

**Topics**
+ [Langkah 1: Buat metrik CloudWatch khusus](#create-sqs-cw-alarms-cli)
+ [Langkah 2: Buat kebijakan penskalaan pelacakan target](#create-sqs-policies-cli)
+ [Langkah 3: Uji kebijakan penskalaan Anda](#validate-sqs-scaling-cli)

## Langkah 1: Buat metrik CloudWatch khusus
<a name="create-sqs-cw-alarms-cli"></a>

Metrik khusus ditentukan menggunakan nama metrik dan ruang nama pilihan Anda. Ruang nama untuk metrik kustom tidak dapat dimulai dengan. `AWS/` Untuk informasi selengkapnya tentang memublikasikan metrik [kustom, lihat topik Publikasikan metrik](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html) kustom di * CloudWatch Panduan Pengguna Amazon*.

Ikuti prosedur ini untuk membuat metrik kustom dengan terlebih dahulu membaca informasi dari AWS akun Anda. Kemudian, hitung backlog per metrik instance, seperti yang disarankan di bagian sebelumnya. Terakhir, publikasikan nomor ini dengan CloudWatch perincian 1 menit. Jika memungkinkan, kami sangat menyarankan agar Anda menskalakan metrik dengan granularitas 1 menit untuk memastikan respons yang lebih cepat terhadap perubahan beban sistem. 

**Untuk membuat metrik CloudWatch kustom (AWS CLI)**

1. Gunakan perintah SQS [get-queue-attributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sqs/get-queue-attributes.html) untuk mendapatkan jumlah pesan menunggu di antrean (`ApproximateNumberOfMessages`). 

   ```
   aws sqs get-queue-attributes --queue-url https://sqs.region.amazonaws.com/123456789/MyQueue \
     --attribute-names ApproximateNumberOfMessages
   ```

1. Gunakan perintah [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) agar grup berjalan, yaitu jumlah instance dalam status siklus aktif `InService`. Perintah ini mengembalikan instance grup Auto Scaling beserta keadaan siklus aktifnya. 

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
   ```

1. Hitung backlog per instance dengan membagi perkiraan jumlah pesan yang tersedia untuk diambil dari antrian dengan kapasitas berjalan grup. 

1. Buat skrip yang berjalan setiap menit untuk mengambil backlog per nilai instance dan mempublikasikannya ke metrik CloudWatch khusus. Saat memublikasikan metrik kustom, Anda menentukan nama metrik, namespace, unit, nilai, dan dimensi nol atau lebih. Dimensi terdiri dari nama dimensi dan nilai dimensi.

   Untuk mempublikasikan metrik kustom Anda, ganti nilai placeholder *italics* dengan nama metrik pilihan Anda, nilai metrik, namespace (asalkan tidak dimulai dengan "`AWS`“), dan dimensi (opsional), lalu jalankan perintah berikut. [put-metric-data](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/put-metric-data.html) 

   ```
   aws cloudwatch put-metric-data --metric-name MyBacklogPerInstance --namespace MyNamespace \
     --unit None --value 20 --dimensions MyOptionalMetricDimensionName=MyOptionalMetricDimensionValue
   ```

Setelah aplikasi Anda memancarkan metrik yang diinginkan, data dikirim ke CloudWatch. Metrik terlihat di CloudWatch konsol. Anda dapat mengaksesnya dengan masuk ke Konsol Manajemen AWS dan menavigasi ke halaman. CloudWatch Lalu, lihat metrik dengan menavigasi ke halaman metrik atau dengan mencarinya menggunakan kotak pencarian. Untuk informasi tentang melihat metrik, lihat [Melihat metrik yang tersedia](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html) di * CloudWatch Panduan Pengguna Amazon*.

## Langkah 2: Buat kebijakan penskalaan pelacakan target
<a name="create-sqs-policies-cli"></a>

Metrik yang Anda buat sekarang dapat ditambahkan ke kebijakan penskalaan pelacakan target.

**Untuk membuat kebijakan penskalaan pelacakan target ()AWS CLI**

1. Gunakan `cat` perintah berikut untuk menyimpan nilai target untuk kebijakan penskalaan Anda dan spesifikasi metrik yang disesuaikan dalam file JSON yang diberi nama `config.json` di direktori home Anda. Ganti masing-masing *user input placeholder* dengan informasi Anda sendiri. Untuk `TargetValue`, hitung backlog yang dapat diterima per metrik instance dan masukkan di sini. Untuk menghitung angka ini, tentukan nilai latensi normal dan bagi dengan waktu rata-rata yang diperlukan untuk memproses pesan, seperti yang dijelaskan di bagian sebelumnya. 

   Jika Anda tidak menentukan dimensi apa pun untuk metrik yang Anda buat di langkah 1, jangan sertakan dimensi apa pun dalam spesifikasi metrik yang disesuaikan.

   ```
   $ cat ~/config.json
   {
      "TargetValue":100,
      "CustomizedMetricSpecification":{
         "MetricName":"MyBacklogPerInstance",
         "Namespace":"MyNamespace",
         "Dimensions":[
            {
               "Name":"MyOptionalMetricDimensionName",
               "Value":"MyOptionalMetricDimensionValue"
            }
         ],
         "Statistic":"Average",
         "Unit":"None"
      }
   }
   ```

1. Gunakan perintah [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html), beserta file `config.json` yang Anda buat di langkah sebelumnya, untuk membuat kebijakan penskalaan Anda.

   ```
   aws autoscaling put-scaling-policy --policy-name sqs100-target-tracking-scaling-policy \
     --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \
     --target-tracking-configuration file://~/config.json
   ```

   Ini menciptakan dua alarm: satu untuk peningkatan skala dan satu untuk penurunan skala. Ini juga mengembalikan Nama Sumber Daya Amazon (ARN) dari kebijakan yang terdaftar CloudWatch, yang CloudWatch digunakan untuk memanggil penskalaan setiap kali ambang metrik dilanggar. 

## Langkah 3: Uji kebijakan penskalaan Anda
<a name="validate-sqs-scaling-cli"></a>

Setelah penyiapan selesai, periksa apakah kebijakan penskalaan Anda berfungsi. Anda dapat mengujinya dengan meningkatkan jumlah pesan dalam antrean SQS Anda dan kemudian memverifikasi bahwa grup Auto Scaling Anda telah meluncurkan instance EC2 tambahan. Anda juga dapat mengujinya dengan mengurangi jumlah pesan dalam antrean SQS Anda dan kemudian memverifikasi bahwa grup Auto Scaling telah menghentikan instance EC2.

**Untuk menguji fungsi peningkatan skala**

1. Ikuti langkah-langkah dalam [Membuat antrean standar Amazon SQS dan mengirim pesan atau Membuat antrian](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/creating-sqs-standard-queues.html) [FIFO Amazon SQS dan mengirim pesan untuk menambahkan pesan ke antrian](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/creating-sqs-fifo-queues.html) Anda. Pastikan Anda telah meningkatkan jumlah pesan di antrean sehingga backlog per instance metrik melebihi nilai target.

   Diperlukan beberapa menit agar perubahan Anda memanggil alarm.

1. Gunakan [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) untuk memverifikasi bahwa grup telah meluncurkan suatu instance.

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
   ```

**Untuk menguji skala dalam fungsi**

1. Ikuti langkah-langkah di [Menerima dan menghapus pesan (konsol)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/step-receive-delete-message.html) untuk menghapus pesan dari antrian. Pastikan Anda telah mengurangi jumlah pesan di antrean sehingga backlog per instance metrik berada di bawah nilai target.

   Diperlukan beberapa menit agar perubahan Anda memanggil alarm.

1. Gunakan [describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html) untuk memverifikasi bahwa grup telah menghentikan suatu instance.

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
   ```

## Amazon SQS dan perlindungan penskalaan instans
<a name="scale-sqs-queue-scale-in-protection"></a>

Pesan yang belum diproses pada saat instance dihentikan dikembalikan ke antrian SQS di mana mereka dapat diproses oleh instance lain yang masih berjalan. Untuk aplikasi yang menjalankan tugas yang berjalan lama, Anda dapat menggunakan perlindungan skala masuk instans secara opsional untuk mengontrol pekerja antrian mana yang dihentikan saat grup Auto Scaling Anda masuk.

Pseudocode berikut menunjukkan satu cara untuk melindungi proses pekerja berbasis antrian yang berjalan lama dari penghentian skala.

```
while (true)
{
  SetInstanceProtection(False);
  Work = GetNextWorkUnit();
  SetInstanceProtection(True);
  ProcessWorkUnit(Work);
  SetInstanceProtection(False);
}
```

Untuk informasi selengkapnya, lihat [Rancang aplikasi Anda untuk menangani penghentian instans dengan anggun](gracefully-handle-instance-termination.md).