View a markdown version of this page

Mengonfigurasi instans pra-inisialisasi untuk grup Penskalaan Otomatis Amazon ECS - Amazon Elastic Container Service

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

Mengonfigurasi instans pra-inisialisasi untuk grup Penskalaan Otomatis Amazon ECS

Amazon ECS mendukung kolam hangat Amazon EC2 Auto Scaling. Kolam hangat adalah sekelompok instans Amazon EC2 yang telah diinisialisasi sebelumnya yang siap untuk digunakan. Kapan pun aplikasi Anda perlu diperbesar, Amazon EC2 Auto Scaling menggunakan instans pra-inisialisasi dari kumpulan hangat daripada meluncurkan instans dingin, memungkinkan proses inisialisasi akhir dijalankan, dan kemudian menempatkan instance ke layanan.

Untuk mempelajari lebih lanjut tentang kolam hangat dan cara menambahkan kolam hangat ke grup Penskalaan Otomatis Anda, lihat Kumpulan hangat untuk Penskalaan Otomatis Amazon EC2 di Panduan Pengguna Penskalaan Otomatis Amazon EC2.

Saat membuat atau memperbarui kumpulan hangat untuk grup Penskalaan Otomatis untuk Amazon ECS, Anda tidak dapat menyetel opsi yang mengembalikan instans ke kumpulan hangat berdasarkan skala di (ReuseOnScaleIn). Untuk informasi lebih lanjut, lihat put-warmpool di Referensi. AWS Command Line Interface

Untuk menggunakan kolam hangat dengan cluster Amazon ECS Anda, setel variabel konfigurasi ECS_WARM_POOLS_CHECK agen ke true bidang Data pengguna templat peluncuran grup Amazon EC2 Auto Scaling Anda.

Berikut ini menunjukkan contoh bagaimana variabel konfigurasi agen dapat ditentukan di bidang Data pengguna dari template peluncuran Amazon EC2 untuk instans Linux. Ganti MyCluster dengan nama klaster Anda. Untuk instans Windows, lihatMenggunakan kolam hangat dengan instans Amazon ECS Windows.

#!/bin/bash cat <<'EOF' >> /etc/ecs/ecs.config ECS_CLUSTER=MyCluster ECS_WARM_POOLS_CHECK=true EOF

ECS_WARM_POOLS_CHECKVariabel hanya didukung pada versi agen 1.59.0 dan yang lebih baru. Untuk informasi lebih lanjut tentang variabel, lihatKonfigurasi agen kontainer Amazon ECS.

Menggunakan kolam hangat dengan instans Amazon ECS Windows

Saat menggunakan kumpulan hangat dengan status D ihentikan kum pulan pada instans Windows, gunakan kait siklus hidup Amazon EC2 Auto Scaling untuk memastikan eksekusi data pengguna selesai sebelum instance dihentikan. Tanpa kait siklus hidup, instans dapat dihentikan sebelum inisialisasi Amazon ECS selesai.

Untuk mengonfigurasi kait siklus hidup untuk instans kumpulan hangat Windows:

  1. Tambahkan kebijakan IAM berikut ke peran instance kontainer Anda untuk memungkinkan instance menyelesaikan tindakan siklus hidup:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CompleteLifecycleAction" ], "Resource": "*" } ] }
  2. Tambahkan kait siklus hidup ke grup Penskalaan Otomatis pada Peluncuran Inst ABANDON ans dengan hasil default dan batas waktu detak jantung yang memungkinkan cukup waktu untuk inisialisasi Amazon ECS (misalnya, 10 menit). Untuk informasi selengkapnya, lihat Menambahkan kait siklus hidup di Panduan Pengguna Penskalaan Otomatis Amazon EC2.

  3. Gunakan data pengguna berikut yang membuat tugas terjadwal untuk menyelesaikan tindakan siklus hidup setelah penundaan. Penundaan memastikan EC2launch selesai menyimpan statusnya sebelum instans dihentikan. GantiMyCluster,my-lifecycle-hook, dan my-asg-name dengan nilai-nilai Anda.

    <powershell> $lifecycleHookName = "my-lifecycle-hook" $autoScalingGroupName = "my-asg-name" $scriptContent = @' $token = Invoke-RestMethod -Method Put -Uri http://169.254.169.254/latest/api/token -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} $instanceId = Invoke-RestMethod -Method Get -Uri http://169.254.169.254/latest/meta-data/instance-id -Headers @{"X-aws-ec2-metadata-token" = $token} $region = Invoke-RestMethod -Method Get -Uri http://169.254.169.254/latest/meta-data/placement/region -Headers @{"X-aws-ec2-metadata-token" = $token} $lifecycleHookName = "my-lifecycle-hook" $autoScalingGroupName = "my-asg-name" Complete-ASLifecycleAction -LifecycleHookName $lifecycleHookName -AutoScalingGroupName $autoScalingGroupName -InstanceId $instanceId -LifecycleActionResult 'CONTINUE' -Region $region '@ Set-Content -Path "C:\ProgramData\Amazon\ECS\complete-lifecycle.ps1" -Value $scriptContent try { [Environment]::SetEnvironmentVariable("ECS_WARM_POOLS_CHECK", "true", "Machine") Import-Module ECSTools Initialize-ECSAgent -Cluster MyCluster -EnableTaskIAMRole $taskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File C:\ProgramData\Amazon\ECS\complete-lifecycle.ps1" $taskTriggerOnce = New-ScheduledTaskTrigger -Once -At ((Get-Date).AddSeconds(60)) $taskTriggerStartup = New-ScheduledTaskTrigger -AtStartup $taskTriggerStartup.Delay = "PT60S" $settings = New-ScheduledTaskSettingsSet -StartWhenAvailable $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName "CompleteLifecycleHook" -Action $taskAction -Trigger $taskTriggerOnce, $taskTriggerStartup -Principal $taskPrincipal -Settings $settings -Force } catch { $token = Invoke-RestMethod -Method Put -Uri http://169.254.169.254/latest/api/token -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} $INSTANCE = Invoke-RestMethod -Method Get -Uri http://169.254.169.254/latest/meta-data/instance-id -Headers @{"X-aws-ec2-metadata-token" = $token} $region = Invoke-RestMethod -Method Get -Uri http://169.254.169.254/latest/meta-data/placement/region -Headers @{"X-aws-ec2-metadata-token" = $token} Complete-ASLifecycleAction -InstanceId $INSTANCE -LifecycleHookName $lifecycleHookName -AutoScalingGroupName $autoScalingGroupName -LifecycleActionResult ABANDON -Region $region } </powershell>

Skrip data pengguna ini melakukan hal berikut:

  • Menginisialisasi agen Amazon ECS dengan pemeriksaan kolam hangat diaktifkan.

  • Membuat tugas terjadwal yang menunggu 60 detik setelah data pengguna selesai, dan kemudian memberi sinyal pada hook siklus hidup untuk melanjutkan.

  • Membuat tugas terjadwal yang berjalan pada setiap reboot berikutnya, dan memberi sinyal kait siklus hidup untuk melanjutkan setelah 60 detik.

  • Jika inisialisasi gagal, tindakan siklus hidup selesai ABANDON sehingga instance dihentikan dan diganti.