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 Amazon ECS Linux-Container-Instance
Möglicherweise müssen Sie auf jeder Container-Instance einen bestimmten Container ausführen, um Betriebs- oder Sicherheitsprobleme wie Überwachung, Sicherheit, Metriken, Serviceerkennung oder Protokollierung zu lösen.
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 dann Amazon ECS, um die Aufgabe beim Start mit EC2 Amazon-Benutzerdaten zu platzieren.
Das EC2 Amazon-Benutzerdatenskript im folgenden Verfahren verwendet die Amazon ECS-Introspection-API, um die Container-Instance zu identifizieren. Anschließend verwendet es den Befehl AWS CLI und den start-task Befehl, um beim Start eine bestimmte Aufgabe für sich selbst auszuführen.
So starten Sie eine Aufgabe beim Start einer Container-Instance
-
Ändern Sie Ihre
ecsInstanceRole
-IAM-Rolle, um Berechtigungen für die API-OperationStartTask
hinzuzufügen. Weitere Informationen finden Sie im AWS Identity and Access Management Benutzerhandbuch unter Aktualisieren von Berechtigungen für eine Rolle. -
Starten Sie eine oder mehrere Container-Instances mit dem Amazon ECS-optimierten Amazon Linux 2-AMI. Starten Sie neue Container-Instances und verwenden Sie das folgende Beispielskript in den EC2 Benutzerdaten.
your_cluster_name
Ersetzen Sie durch den Cluster, in dem sich die Container-Instance registrieren soll, undmy_task_def
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.
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==-- -
Überprüfen Sie, ob Ihre Container-Instances im richtigen Cluster gestartet werden und ob Ihre Aufgaben gestartet wurden.
Öffnen Sie die Konsole auf https://console.aws.amazon.com/ecs/Version
2. -
Wählen Sie auf der Navigationsleiste die Region aus, in der sich der Cluster befindet.
-
Wählen Sie im Navigationsbereich Clusters und dann den Cluster aus, der Ihre Container-Instances hostet.
-
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.