

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Ausführen eines Skripts beim Starten einer Linux-Container-Instance von Amazon ECS
<a name="start_task_at_launch"></a>

Sie müssen unter Umständen einen bestimmten Container auf jeder Container-Instance ausführen, um Vorgänge oder Sicherheitsbelange zu behandeln (z. B. Überwachung, Sicherheit, Metriken, Serviceerkennung oder Protokollierung).

Zu diesem Zweck können Sie Ihre Container-Instances so konfigurieren, dass der Befehl **docker run** mit dem Benutzerdatenskript beim Start oder in manchen Init-Systemen wie Upstart oder **systemd** aufgerufen wird. Diese Methode funktioniert zwar, hat aber einige Nachteile, da Amazon ECS nichts über den Container weiß und CPU, Arbeitsspeicher, Ports oder sonstige verwendete Ressourcen nicht überwachen kann. Damit Amazon ECS alle Aufgabenressourcen ordnungsgemäß berücksichtigen kann, sollten Sie eine Aufgabendefinition für den Container erstellen, der auf Ihren Container-Instances ausgeführt werden soll. Verwenden Sie anschließend Amazon ECS, um die Aufgabe beim Start mit Amazon EC2-Benutzerdaten zu platzieren.

Bei dem Amazon EC2-Benutzerdatenskript im folgenden Verfahren wird die Amazon-ECS-Introspektions-API zur Ermittlung der Container-Instance verwendet. Anschließend verwendet es den Befehl AWS CLI und den **start-task** Befehl, um beim Start eine angegebene Aufgabe für sich selbst auszuführen. 

**So starten Sie eine Aufgabe beim Start einer Container-Instance**

1. Ändern Sie Ihre `ecsInstanceRole`-IAM-Rolle, um Berechtigungen für die API-Operation `StartTask` hinzuzufügen. Weitere Informationen finden Sie unter [Berechtigungen für eine Rolle aktualisieren](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_update-role-permissions.html) im *Benutzerhandbuch für AWS Identity and Access Management *.

1. Starten Sie eine oder mehrere Container-Instances mit dem Amazon-ECS-optimierten AMI für Amazon Linux 2. Starten Sie neue Container-Instances und verwenden Sie das folgende Beispielskript in den EC2-Benutzerdaten. *your\$1cluster\$1name*Ersetzen Sie durch den Cluster, in dem sich die Container-Instance registrieren soll, und *my\$1task\$1def* durch die Aufgabendefinition, die beim Start auf der Instance ausgeführt werden soll. 

   Weitere Informationen finden Sie unter [Starten einer Amazon ECS Linux-Container-Instance](launch_container_instance.md).
**Anmerkung**  
Der mehrteilige MIME-Inhalt unten verwendet zum Einstellen von Konfigurationswerten und Installieren von Paketen ein Shell-Skript. Außerdem verwendet er einen systemd-Auftrag zum Starten der Aufgabe, wenn der **ecs**-Service ausgeführt wird und die Introspektions-API verfügbar ist.

   ```
   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. Überprüfen Sie, ob Ihre Container-Instances im richtigen Cluster gestartet werden und ob Ihre Aufgaben gestartet wurden.

   1. Öffnen Sie die Konsole auf [https://console.aws.amazon.com/ecs/Version](https://console.aws.amazon.com/ecs/v2) 2.

   1. Wählen Sie auf der Navigationsleiste die Region aus, in der sich der Cluster befindet.

   1. Wählen Sie im Navigationsbereich **Clusters** und dann den Cluster aus, der Ihre Container-Instances hostet.

   1. Wählen Sie auf der Seite **Cluster** **Aufgaben** und dann Ihre Aufgaben aus.

      Auf jeder Container-Instance, die Sie gestartet haben, sollte Ihre Aufgabe ausgeführt werden.

      Wenn Ihre Aufgaben nicht angezeigt werden, können Sie sich mit SSH bei Ihren Container-Instances anmelden und die Datei `/var/log/ecs/ecs-start-task.log` auf Debugging-Informationen überprüfen.