Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menjalankan skrip saat Anda meluncurkan instans penampung Amazon ECS Linux
Anda mungkin perlu menjalankan kontainer tertentu pada setiap instance kontainer untuk menangani masalah operasi atau keamanan seperti pemantauan, keamanan, metrik, penemuan layanan, atau pencatatan.
Untuk melakukannya, Anda dapat mengonfigurasi instans kontainer Anda untuk memanggil perintah docker run dengan skrip data pengguna saat peluncuran, atau dalam beberapa sistem unit seperti Upstart atau systemd. Meskipun metode ini berfungsi, ia memiliki beberapa kelemahan karena Amazon ECS tidak memiliki pengetahuan tentang wadah dan tidak dapat memantau CPU, memori, port, atau sumber daya lain yang digunakan. Untuk memastikan Amazon ECS dapat memperhitungkan semua sumber daya tugas dengan benar, buat definisi tugas agar container dapat dijalankan pada instance container Anda. Kemudian, gunakan Amazon ECS untuk menempatkan tugas pada waktu peluncuran dengan data EC2 pengguna Amazon.
Skrip data EC2 pengguna Amazon dalam prosedur berikut menggunakan API introspeksi Amazon ECS untuk mengidentifikasi instance container. Kemudian, ia menggunakan AWS CLI dan start-task perintah untuk menjalankan tugas tertentu pada dirinya sendiri selama startup.
Untuk memulai tugas pada waktu peluncuran instans kontainer
-
Modifikasi
ecsInstanceRole
IAM role Anda untuk menambahkan izin untuk Operasi APIStartTask
. Untuk informasi selengkapnya, lihat Memperbarui izin untuk peran dalam Panduan AWS Identity and Access Management Pengguna. -
Luncurkan satu atau beberapa instans kontainer menggunakan Amazon Linux 2 AMI Amazon ECS yang dioptimalkan Amazon. Luncurkan instance container baru dan gunakan contoh script berikut dalam data EC2 User. Ganti
your_cluster_name
dengan cluster untuk instance container untuk mendaftar ke danmy_task_def
dengan definisi tugas untuk dijalankan pada instance saat peluncuran.Untuk informasi selengkapnya, lihat Meluncurkan instans penampung Amazon ECS Linux.
catatan
Konten multibagian MIME di bawah ini menggunakan skrip shell untuk menetapkan nilai konfigurasi dan menginstal paket. Hal ini juga menggunakan tugas sistem untuk memulai tugas setelah layanan ecs berjalan dan API introspeksi tersedia.
Content-Type: multipart/mixed; boundary="==BOUNDARY==" MIME-Version: 1.0 --==BOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash # Specify the cluster that the container instance should register into cluster=
your_cluster_name
# Write the cluster configuration variable to the ecs.config file # (add any other configuration variables here also) echo ECS_CLUSTER=$cluster >> /etc/ecs/ecs.config START_TASK_SCRIPT_FILE="/etc/ecs/ecs-start-task.sh" cat <<- 'EOF' > ${START_TASK_SCRIPT_FILE} exec 2>>/var/log/ecs/ecs-start-task.log set -x # Install prerequisite tools yum install -y jq aws-cli # Wait for the ECS service to be responsive until curl -s http://localhost:51678/v1/metadata do sleep 1 done # Grab the container instance ARN and AWS Region from instance metadata instance_arn=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .ContainerInstanceArn' | awk -F/ '{print $NF}' ) cluster=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .Cluster' | awk -F/ '{print $NF}' ) region=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .ContainerInstanceArn' | awk -F: '{print $4}') # Specify the task definition to run at launch task_definition=my_task_def
# Run the AWS CLI start-task command to start your task on this container instance aws ecs start-task --cluster $cluster --task-definition $task_definition --container-instances $instance_arn --started-by $instance_arn --region $region EOF # Write systemd unit file UNIT="ecs-start-task.service" cat <<- EOF > /etc/systemd/system/${UNIT} [Unit] Description=ECS Start Task Requires=ecs.service After=ecs.service [Service] Restart=on-failure RestartSec=30 ExecStart=/usr/bin/bash ${START_TASK_SCRIPT_FILE} [Install] WantedBy=default.target EOF # Enable our ecs.service dependent service with `--no-block` to prevent systemd deadlock # See https://github.com/aws/amazon-ecs-agent/issues/1707 systemctl enable --now --no-block "${UNIT}" --==BOUNDARY==-- -
Verifikasi bahwa instans kontainer Anda meluncurkan ke klaster yang benar dan bahwa tugas Anda telah dimulai.
Buka konsol di https://console.aws.amazon.com/ecs/v2
. -
Dari bilah navigasi, pilih Wilayah tempat klaster Anda berada.
-
Di panel navigasi, pilih Klaster dan pilih klaster yang meng-host instans kontainer Anda.
-
Pada halaman Cluster, pilih Tasks, lalu pilih yor task.
Setiap instance kontainer yang Anda luncurkan harus menjalankan tugas Anda di atasnya.
Jika Anda tidak melihat tugas Anda, Anda dapat masuk ke instans kontainer Anda dengan SSH dan memeriksa file
/var/log/ecs/ecs-start-task.log
untuk informasi debugging.