

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
<a name="start_task_at_launch"></a>

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 pengguna Amazon EC2.

Skrip data pengguna Amazon EC2 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**

1. Modifikasi `ecsInstanceRole` IAM role Anda untuk menambahkan izin untuk Operasi API `StartTask` . Untuk informasi selengkapnya, lihat [Memperbarui izin untuk peran](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_update-role-permissions.html) dalam *Panduan AWS Identity and Access Management Pengguna*.

1. Luncurkan satu atau beberapa instans kontainer menggunakan Amazon Linux 2 AMI Amazon ECS yang dioptimalkan Amazon. Luncurkan instance kontainer baru dan gunakan skrip contoh berikut dalam data Pengguna EC2. Ganti *your\$1cluster\$1name* dengan cluster untuk instance container untuk mendaftar ke dan *my\$1task\$1def* dengan definisi tugas untuk dijalankan pada instance saat peluncuran. 

   Untuk informasi selengkapnya, lihat [Meluncurkan instans penampung Amazon ECS Linux](launch_container_instance.md).
**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==--
   ```

1. Verifikasi bahwa instans kontainer Anda meluncurkan ke klaster yang benar dan bahwa tugas Anda telah dimulai.

   1. Buka konsol di [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

   1. Dari bilah navigasi, pilih Wilayah tempat klaster Anda berada.

   1. Di panel navigasi, pilih **Klaster** dan pilih klaster yang meng-host instans kontainer Anda.

   1. 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.