View a markdown version of this page

Mengonfigurasi instans pra-inisialisasi untuk grup Auto Scaling Amazon ECS Anda - 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 Auto Scaling Amazon ECS Anda

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

Untuk mempelajari lebih lanjut tentang kolam hangat dan cara menambahkan kolam hangat ke grup Auto Scaling Anda, lihat Kolam hangat untuk Amazon EC2 Auto Scaling di Panduan Pengguna Amazon EC2 Auto Scaling.

Saat membuat atau memperbarui kolam hangat untuk grup Auto Scaling untuk Amazon ECS, Anda tidak dapat menyetel opsi yang mengembalikan instance ke kolam hangat pada skala di (). ReuseOnScaleIn Untuk informasi lebih lanjut, lihat put-warm-pool di Referensi.AWS Command Line Interface

Untuk menggunakan kolam hangat dengan kluster 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 template peluncuran Amazon EC2 untuk instance Linux. Ganti MyCluster dengan nama klaster Anda. Untuk instance 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 kolam hangat dengan status kumpulan Berhenti 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 instance kolam hangat Windows:

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CompleteLifecycleAction" ], "Resource": "*" } ] }
  2. Tambahkan hook siklus hidup ke grup Auto Scaling Anda pada Peluncuran ABANDON Instance sebagai 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 Amazon EC2 Auto Scaling.

  3. Gunakan data pengguna berikut yang membuat tugas terjadwal untuk menyelesaikan tindakan siklus hidup setelah penundaan. Penundaan memastikan EC2launch selesai menyimpan statusnya sebelum instance dihentikan. Ganti MyClustermy-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" $taskTrigger = New-ScheduledTaskTrigger -Once -At ((Get-Date).AddSeconds(60)) $settings = New-ScheduledTaskSettingsSet -StartWhenAvailable $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName "CompleteLifecycleHook" -Action $taskAction -Trigger $taskTrigger -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> <persist>true</persist>

Skrip data pengguna ini melakukan hal berikut:

  • Menginisialisasi agen Amazon ECS dengan pemeriksaan kolam hangat diaktifkan.

  • Membuat tugas terjadwal yang menunggu 30 detik setelah data pengguna selesai, lalu memberi sinyal hook siklus hidup untuk melanjutkan. Penundaan memungkinkan EC2launch untuk menyimpan statusnya sehingga data pengguna berjalan kembali dengan benar pada boot berikutnya.

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