Ausführen eines Skripts beim Starten einer Amazon ECS Linux-Container-Instance - Amazon Elastic Container Service

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 keine Kenntnis von dem Container ECS hat und den SpeicherCPU, die Ports oder andere verwendete Ressourcen nicht überwachen kann. Um sicherzustellen, dass Amazon alle Aufgabenressourcen ordnungsgemäß berücksichtigen ECS kann, erstellen Sie eine Aufgabendefinition für den Container, 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 ECS Amazon-Introspektion, um die Container-Instance API 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
  1. Ändern Sie Ihre ecsInstanceRole IAM Rolle, um Berechtigungen für den StartTask API Vorgang hinzuzufügen. Weitere Informationen finden Sie unter Ändern einer Rolle im AWS Identity and Access Management IAM-Benutzerhandbuch.

  2. Starten Sie eine oder mehrere Container-Instances mit dem für Amazon ECS optimierten Amazon Linux 2. AMI Starten Sie neue Container-Instances und verwenden Sie das folgende Beispielskript in den EC2 Benutzerdaten. Ersetzen your_cluster_name mit dem Cluster, in dem sich die Container-Instance registrieren soll, und my_task_def mit der 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 MIME mehrteilige Inhalt unten verwendet ein Shell-Skript, um Konfigurationswerte festzulegen und Pakete zu installieren. Außerdem wird ein Systemd-Job verwendet, um die Aufgabe zu starten, nachdem der ecs Dienst ausgeführt wurde und die API Introspektion 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==--
  3. Überprüfen Sie, ob Ihre Container-Instances im richtigen Cluster gestartet werden und ob Ihre Aufgaben gestartet wurden.

    1. Öffnen Sie die Konsole auf Version 2. https://console.aws.amazon.com/ecs/

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

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

    4. 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 Sie Ihre Aufgaben nicht sehen, können Sie sich mit Ihren Container-Instances anmelden SSH und in der /var/log/ecs/ecs-start-task.log Datei nach Debugging-Informationen suchen.