View a markdown version of this page

Daemon-Aufgabendefinitionen - 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.

Daemon-Aufgabendefinitionen

Eine Daemon-Aufgabendefinition ist die Blaupause für Ihren Daemon. Amazon ECS Managed Daemons verwenden eine spezielle Daemon-Aufgabendefinitionsressource, die sich von den standardmäßigen Amazon ECS-Aufgabendefinitionen unterscheidet. Sie registrieren eine Daemon-Aufgabendefinition, um das Container-Image, die Ressourcenanforderungen und die Konfiguration für Ihren Daemon festzulegen.

Eine Daemon-Aufgabendefinition erstellen

Sie können eine Daemon-Aufgabendefinition erstellen, indem Sie den AWS-Managementkonsole oder den verwenden. AWS CLI

Verwendung der AWS-Managementkonsole

  1. Öffnen Sie die Amazon-ECS-Konsole. Wählen Sie in der linken Navigationsleiste Daemon-Aufgabendefinitionen aus.

  2. Wählen Sie Neue Daemon-Aufgabendefinition erstellen aus.

  3. Geben Sie für die Daemon-Aufgabendefinitionsfamilie einen eindeutigen Namen ein. Der Name kann bis zu 255 alphanumerische Zeichen, Bindestriche und Unterstriche enthalten.

  4. (Optional) Wählen Sie für die Aufgabenrolle eine IAM-Rolle aus, die den Anwendungen, die in Ihren Containern ausgeführt werden, Berechtigungen gewährt. Lassen Sie dieses Feld leer, wenn Ihre Container keine AWS APIs aufrufen.

  5. (Optional) Wählen Sie für die Rolle „Aufgabenausführung“ die Option ausecsTaskExecutionRole. Amazon ECS benötigt diese Rolle, um Container-Images abzurufen und Protokolle zu veröffentlichen.

  6. (Optional) Geben Sie unter Aufgabengröße die CPU und den Arbeitsspeicher an, die für Ihren Daemon reserviert werden sollen. Zum Beispiel 0.25 vCPU und 512 MB Arbeitsspeicher.

  7. Konfigurieren Sie Ihre Container-Details:

    • Containername — Geben Sie einen Namen für Ihren Container ein. Der Name kann bis zu 255 alphanumerische Zeichen, Bindestriche und Unterstriche enthalten.

    • Unverzichtbarer Behälter — Wählen Sie Ja aus. Für jede Daemon-Aufgabendefinition ist mindestens ein essenzieller Container erforderlich. Wenn ein wichtiger Container ausfällt, stoppt Amazon ECS die gesamte Aufgabe.

    • Image-URI — Geben Sie den Docker-Image-URI ein. Sie können Amazon ECR-Images durchsuchen oder öffentliche Images von Docker Hub oder anderen Registern verwenden.

  8. (Optional) Konfigurieren Sie nach Bedarf Ressourcenzuweisung, Integritätsprüfung, Umgebungsvariablen, Protokollerfassung und Tags.

  9. Überprüfen Sie Ihre Konfiguration und wählen Sie Erstellen aus.

Verwendung der AWS CLI

Registrieren Sie eine Daemon-Aufgabendefinition, indem Sie eine JSON-Datei erstellen und den register-daemon-task-definition Befehl verwenden.

Im Folgenden finden Sie ein Beispiel für eine JSON-Datei:

{ "family": "my-daemon-task", "containerDefinitions": [ { "name": "daemon-container", "image": "public.ecr.aws/docker/library/busybox:latest", "essential": true, "command": ["sh", "-c", "while true; do echo 'Daemon running'; sleep 30; done"], "memoryReservation": 512 } ] }

Führen Sie den folgenden Befehl aus, um die Daemon-Aufgabendefinition zu registrieren:

aws ecs register-daemon-task-definition --cli-input-json file://daemon-taskdef.json

Parameter der Daemon-Aufgabendefinition

Sie können die folgenden Parameter verwenden, wenn Sie eine Daemon-Aufgabendefinition registrieren.

Erforderliche Parameter

  • family- Der Familienname der Aufgabendefinition. Dies gruppiert mehrere Revisionen derselben Daemon-Aufgabendefinition.

  • containerDefinitions- Eine Reihe von DaemonContainerDefinition Objekten, die die Container in Ihrer Daemon-Aufgabe beschreiben.

Optionale Parameter

  • cpu- Task-level CPU-Einheiten als Zeichenfolge (zum Beispiel"256").

  • memory- Task-level Speicher in MiB als Zeichenfolge (zum Beispiel"512").

  • taskRoleArn- Der ARN der IAM-Rolle, die den Containern in Ihrer Daemon-Aufgabe Berechtigungen gewährt.

  • executionRoleArn— Der ARN der IAM-Rolle, die der Amazon ECS-Container-Agent verwendet, um AWS API-Aufrufe in Ihrem Namen durchzuführen (z. B. Bilder aus Amazon ECR abzurufen).

  • volumes- Eine Reihe von Objekten. DaemonVolume Daemon-Volumes unterstützen nur Bind-Mounts mit host und. sourcePath Daemon-Aufgabendefinitionen unterstützen Amazon EBS, Amazon EFS, FSx for Windows File Server, Docker-Volumes oder kurzlebigen Speicher nicht.

  • tags- Eine Reihe von Schlüssel-Wert-Paaren zur Kennzeichnung Ihrer Daemon-Aufgabendefinition.

  • pidMode- Steuert den PID-Namespace-Modus für den Daemon.

  • ipcMode- Steuert den IPC-Namespace-Modus für den Daemon.

Netzwerkmodus

Daemons verwenden einen speziellen daemon_bridge Netzwerkmodus, den Amazon ECS automatisch festlegt. Sie können in Ihrer Daemon-Aufgabendefinition keinen Netzwerkmodus angeben. Alle Daemons auf einer Instanz teilen sich einen einzigen Netzwerk-Namespace und sind lokal über eine statische Daemon-Bridge-IP-Adresse (169.254.172.2für IPv4 oder für IPv6) zugänglich. fd00:ec2::172:2 Anwendungsaufgaben (keine Daemons) können ohne zusätzliche Netzwerkkonfiguration mit Daemons an dieser Adresse kommunizieren.

Da Daemons in einem von Anwendungsaufgaben getrennten Netzwerk-Namespace ausgeführt werden, müssen sich Aufgaben, die keine Dämonen sind, nicht um Portkonflikte mit Daemons kümmern. Da sich jedoch alle Daemon-Aufgaben denselben Namespace teilen, können sich Daemons auf derselben Instanz nicht an denselben Port binden. Wenn Sie mehrere Daemons einsetzen, stellen Sie sicher, dass jeder Daemon einen eindeutigen Port verwendet.

Privilegierte Funktionen

Auf Amazon ECS Managed Instances unterstützen Daemons privilegierte Linux-Funktionen für Operationen auf Systemebene. Sicherheitsagenten, Netzwerküberwachungstools und Observability-Agenten benötigen häufig Zugriff auf Kernelebene, um ordnungsgemäß zu funktionieren.

Sie können Funktionen auf zwei Arten gewähren:

Der voll privilegierte Modus gewährt dem Container alle Linux-Funktionen. Verwenden Sie diesen Modus, wenn Ihr Agent umfassenden Systemzugriff benötigt:

{ "containerDefinitions": [{ "name": "security-daemon", "image": "my-security-agent:latest", "privileged": true }] }

Individuelle Funktionen gewähren nur die Berechtigungen, die Ihr Daemon benötigt, und folgen dabei dem Prinzip der geringsten Rechte. Verwenden Sie das linuxParameters.capabilities Feld, um individuelle Funktionen wieSYS_ADMIN,, NET_ADMIN SYS_PTRACEBPF, und PERFMON hinzuzufügen:

{ "containerDefinitions": [{ "name": "monitoring-daemon", "image": "my-monitoring-agent:latest", "linuxParameters": { "capabilities": { "add": ["NET_ADMIN", "SYS_PTRACE"] } } }] }

Gemeinsame Nutzung von PID- und IPC-Namespaces

Auf Amazon ECS Managed Instances unterstützen Daemons die gemeinsame Nutzung von PID- und IPC-Namespaces, um Anwendungsfälle wie Sicherheitsagenten, Überwachungstools und Observability-Daemons zu ermöglichen, die Einblick in Anwendungsaufgaben oder IPC-Ressourcen benötigen.

pidMode

Typ: Zeichenfolge

Erforderlich: Nein

Zulässige Werte: none | shared

Standard: none

Der PID-Namespace-Modus für den Daemon. Wenn none angegeben oder kein Wert angegeben wird, läuft der Daemon mit seinem eigenen PID-Namespace, isoliert von anderen Aufgaben. Wenn shared angegeben, tritt der Daemon dem Host-PID-Namespace bei und macht ihn für Aufgaben zugänglich, die keinen Daemon verwenden, oder für andere Daemons, die ihn verwendenpidMode: "host". pidMode: "shared"

ipcMode

Typ: Zeichenfolge

Erforderlich: Nein

Zulässige Werte: none | shared

Standard: none

Der IPC-Namespace-Modus für den Daemon. Wenn none angegeben oder kein Wert angegeben wird, läuft der Daemon mit seinem eigenen IPC-Namespace, isoliert von anderen Aufgaben. Wenn shared angegeben, tritt der Daemon dem Host-IPC-Namespace bei und macht ihn für Aufgaben zugänglich, die keinen Daemon verwenden, oder für andere Daemons, die ihn verwenden. ipcMode: "host" ipcMode: "shared"

Das folgende Beispiel zeigt eine Daemon-Aufgabendefinition, bei der die gemeinsame Nutzung von PID- und IPC-Namespaces aktiviert ist:

{ "family": "my-monitoring-daemon", "pidMode": "shared", "ipcMode": "shared", "containerDefinitions": [ { "name": "monitoring-agent", "image": "public.ecr.aws/my-company/monitoring-agent:latest", "essential": true } ] }

Um den PID-Namespace mit einem Daemon gemeinsam zu nutzen, der auf pidMode eingestellt ist, muss eine Nicht-Daemon-Aufgabe in ihrer Aufgabendefinition Folgendes angeben. shared pidMode: "host" Dadurch können die Container der Aufgabe die Prozesse des Daemons einsehen und Anwendungsfälle wie Prozessüberwachung und Signalübertragung ermöglichen.

Um den IPC-Namespace mit einem Daemon gemeinsam zu nutzen, der auf ipcMode eingestellt ist, muss eine Aufgabe, die kein Daemon istshared, in ihrer Aufgabendefinition Folgendes angeben. ipcMode: "host" Dadurch können die Container der Aufgabe auf die IPC-Ressourcen des Daemons wie gemeinsame Speichersegmente und Nachrichtenwarteschlangen zugreifen.

Datenträger

Managed Daemons unterstützen Bind-Mounts mithilfe von Host-Volumes mit einer Spezifikation. sourcePath Auf diese Weise können Daemon-Container Host-Verzeichnisse mounten, um auf Protokolle, Metriken und Systeminformationen der zugrunde liegenden Amazon EC2 EC2-Instance zuzugreifen. Agenten zur Erfassung von Protokollen, Metrik-Exporteure und Sicherheitsscanner verwenden dies häufig, um sich einen Überblick über Daten auf Host-Ebene zu verschaffen.

Die Daemon-Aufgabendefinition unterstützt Host-Volume-Spezifikationen mit. sourcePath Daemon-Volumes bleiben für den gesamten Lebenszyklus der zugrunde liegenden Container-Instance bestehen.

Anmerkung

Amazon EBS-Volumes, Amazon EFS-Volumes, FSx for Windows File Server Server-Volumes, Docker-Volumes und kurzlebiger Speicher werden in Daemon-Aufgabendefinitionen nicht unterstützt.

Anmerkung

Daemons unterstützen keine gemeinsame Nutzung von Volumes untereinander. Jeder Daemon arbeitet mit seiner eigenen unabhängigen Volume-Konfiguration.

Das folgende Beispiel zeigt einen Log-Collector-Daemon mit einem Bind-Mount:

{ "containerDefinitions": [{ "name": "log-collector", "image": "fluent/fluentd:latest", "mountPoints": [{ "sourceVolume": "var-log", "containerPath": "/var/log" }] }], "volumes": [{ "name": "var-log", "host": { "sourcePath": "/var/log" } }] }

Unterstützte Container-Parameter

Daemon-Container-Definitionen unterstützen die folgenden Parameter:

  • image(erforderlich) — URI für das Container-Image

  • name(erforderlich) — Name des Containers

  • cpu- Für den Container reservierte CPU-Einheiten

  • memory/memoryReservation— Limits für festen und weichen Speicher

  • essential- Ob der Container essenziell ist (Standard: true)

  • command/entryPoint— Überschreibt den Container-Befehl oder den Einstiegspunkt

  • environment/environmentFiles/secrets- Konfiguration der Umgebung

  • privileged- Führen Sie den Container im privilegierten Modus aus

  • user- Benutzer, als der Container ausgeführt werden soll

  • workingDirectory- Arbeitsverzeichnis innerhalb des Containers

  • readonlyRootFilesystem- Hängt das Root-Dateisystem schreibgeschützt ein

  • mountPoints- Einhängepunkte für das Volume (Binden von Mounts nur mit Host und SourcePath)

  • logConfiguration- Logging-Konfiguration (unterstützt awslogs, Splunk, awsfirelens)

  • healthCheck- Konfiguration der Container-Integritätsprüfung

  • dependsOn- Abhängigkeiten beim Starten von Containern

  • ulimits- Ressourcengrenzen

  • systemControls- Kernel-Parameter

  • linuxParameters.capabilities- Linux-Funktionen zum Hinzufügen oder Löschen

  • linuxParameters.initProcessEnabled- Führt einen Init-Prozess im Container aus

  • repositoryCredentials- Anmeldeinformationen für private Register

  • restartPolicy- Richtlinie zum Neustarten von Containern