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.
Erstellen einer Amazon ECS-Aufgabe für den EC2 Starttyp mit dem AWS CLI
Mithilfe der folgenden Schritte können Sie über die AWS CLI einen Cluster einrichten, eine Aufgabendefinition registrieren, eine Aufgabe ausführen sowie andere allgemeine Szenarien in Amazon ECS umsetzen. Verwenden Sie die neueste Version von AWS CLI. Weitere Informationen zum Upgrade auf die neueste Version finden Sie unter Installation oder Aktualisierung auf die neueste Version von AWS CLI.
Anmerkung
Sie können Dual-Stack-Service-Endpunkte verwenden, um mit Amazon ECS über die AWS CLI SDKs, und die Amazon ECS-API sowohl über als auch IPv4 zu interagieren. IPv6 Weitere Informationen finden Sie unter Verwendung von Amazon ECS-Dual-Stack-Endpunkten.
Themen
Voraussetzungen
In diesem Tutorial wird davon ausgegangen, dass die folgenden Voraussetzungen erfüllt wurden:
-
Die neueste Version von AWS CLI ist installiert und konfiguriert. Weitere Informationen zur Installation oder Aktualisierung von finden Sie unter Installation oder Aktualisierung auf die neueste Version von AWS CLI. AWS CLI
-
Die Schritte in Einrichtung für die Verwendung von Amazon ECS wurden ausgeführt.
-
Ihr IAM-Benutzer verfügt über die erforderlichen Berechtigungen, die im Beispiel für eine AmazonECS_ FullAccess IAM-Richtlinie angegeben sind.
-
Sie haben eine IAM-Rolle für eine Container-Instance zur Verwendung erstellt. Weitere Informationen finden Sie unter IAM-Rolle für Amazon-ECS-Container-Instance.
-
Sie haben eine VPC zur Verwendung erstellt. Weitere Informationen finden Sie unter Erstellen einer Virtual Private Cloud.
-
(Optional) AWS CloudShell ist ein Tool, das Kunden eine Befehlszeile bietet, ohne dass sie ihre eigene EC2 Instanz erstellen müssen. Weitere Informationen finden Sie unter Was ist AWS CloudShell? im AWS CloudShell Benutzerhandbuch.
Erstellen eines -Clusters
Standardmäßig erhält Ihr Konto beim Start Ihrer ersten Container-Instance einen Cluster default
.
Anmerkung
Wenn Sie den bereitgestellten Cluster default
verwenden, hat dies den Vorteil, dass Sie in den nachfolgenden Befehlen nicht die Option --cluster
angeben müssen. Wenn Sie Ihren eigenen, nicht standardmäßigen Cluster erstellen, müssen Sie cluster_name
--cluster
für jeden Befehl angeben, den Sie mit diesem Cluster verwenden möchten.cluster_name
Erstellen Sie mit dem folgenden Befehl Ihren eigenen Cluster mit eindeutigem Namen:
aws ecs create-cluster --cluster-name
MyCluster
Ausgabe:
{
"cluster": {
"clusterName": "MyCluster",
"status": "ACTIVE",
"clusterArn": "arn:aws:ecs:region
:aws_account_id
:cluster/MyCluster"
}
}
Starten Sie eine Container-Instance mit dem Amazon ECS-AMI
EC2 Container-Instances sind Instances, die den Amazon ECS-Container-Agenten ausführen und in einem Cluster registriert wurden. In diesem Abschnitt starten Sie eine EC2 Instance mit dem ECS-optimierten AMI.
Um eine Container-Instance mit dem zu starten AWS CLI
-
Rufen Sie mit dem folgenden AWS-Region Befehl die neueste ECS-optimierte Amazon Linux 2-AMI-ID für Sie ab. Dieser Befehl verwendet AWS Systems Manager Parameter Store, um die neueste ECS-optimierte AMI-ID abzurufen. Das AMI umfasst den vorinstallierten Amazon ECS-Container-Agenten und die Docker-Runtime.
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/recommended --query 'Parameters[0].Value' --output text | jq -r '.image_id'
Ausgabe:
ami-abcd1234
-
Erstellen Sie eine Sicherheitsgruppe, die SSH-Zugriff für die Verwaltung Ihrer Container-Instance und HTTP-Zugriff für den Webserver ermöglicht.
aws ec2 create-security-group --group-name
ecs-tutorial-sg
--description "ECS tutorial security group"Ausgabe:
{ "GroupId": "sg-abcd1234" }
-
Fügen Sie der Sicherheitsgruppe eine Regel für eingehenden Datenverkehr hinzu, indem Sie den folgenden Befehl ausführen.
aws ec2 authorize-security-group-ingress --group-id
sg-abcd1234
--protocol tcp --port 80 --cidr 0.0.0.0/0Ausgabe:
{ "Return": true, "SecurityGroupRules": [ { "SecurityGroupRuleId": "sgr-efgh5678", "GroupId": "sg-abcd1234", "GroupOwnerId": "123456789012", "IsEgress": false, "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "CidrIpv4": "0.0.0.0/0" } ] }
Die Sicherheitsgruppe ermöglicht jetzt SSH-Zugriff aus dem angegebenen IP-Bereich und HTTP-Zugriff von überall aus. In einer Produktionsumgebung sollten Sie den SSH-Zugriff auf Ihre spezifische IP-Adresse beschränken und erwägen, den HTTP-Zugriff nach Bedarf einzuschränken.
-
Erstellen Sie ein EC2 key pair für den SSH-Zugriff auf Ihre Container-Instance.
aws ec2 create-key-pair --key-name
ecs-tutorial-key
--query 'KeyMaterial' --output text > ecs-tutorial-key.pem chmod 400 ecs-tutorial-key.pemDer private Schlüssel wird auf Ihrem lokalen Computer mit den entsprechenden Berechtigungen für den SSH-Zugriff gespeichert.
-
Starten Sie eine EC2 Instance mit dem ECS-optimierten AMI und konfigurieren Sie sie so, dass sie Ihrem Cluster beitritt.
aws ec2 run-instances --image-id
ami-abcd1234
--instance-typet3.micro
--key-nameecs-tutorial-key
--security-group-idssg-abcd1234
--iam-instance-profile Name=ecsInstanceRole --user-data '#!/bin/bash echo ECS_CLUSTER=MyCluster >> /etc/ecs/ecs.config' { "Instances": [ { "InstanceId": "i-abcd1234", "ImageId": "ami-abcd1234", "State": { "Code": 0, "Name": "pending" }, "PrivateDnsName": "", "PublicDnsName": "", "StateReason": { "Code": "pending", "Message": "pending" }, "InstanceType": "t3.micro", "KeyName": "ecs-tutorial-key", "LaunchTime": "2025-01-13T10:30:00.000Z" } ] }Das Benutzerdatenskript konfiguriert den Amazon ECS-Agenten so, dass er die Instance bei Ihrem
MyCluster
registriert. Die Instance verwendet dieecsInstanceRole
IAM-Rolle, die die erforderlichen Berechtigungen für den Agenten bereitstellt.
Container-Instances auflisten
Innerhalb von wenigen Minuten nach dem Launch Ihrer Container-Instance meldet der Amazon-ECS-Agent die Instance bei Ihrem Standard-Cluster an. Die Container-Instances in einem Cluster können mit dem folgenden Befehl aufgelistet werden:
aws ecs list-container-instances --cluster
default
Ausgabe:
{
"containerInstanceArns": [
"arn:aws:ecs:us-east-1:aws_account_id
:container-instance/container_instance_ID
"
]
}
Beschreiben Sie Ihre Container-Instance
Wenn Sie den ARN oder die ID einer Container-Instance haben, können Sie mit dem Befehl describe-container-instances wichtige Informationen zu der Instance abrufen, wie z. B. die verbleibenden und registrierten CPU- und Speicherressourcen.
aws ecs describe-container-instances --cluster
MyCluster
--container-instancescontainer_instance_ID
Ausgabe:
{
"failures": [],
"containerInstances": [
{
"status": "ACTIVE",
"registeredResources": [
{
"integerValue": 1024,
"longValue": 0,
"type": "INTEGER",
"name": "CPU",
"doubleValue": 0.0
},
{
"integerValue": 995,
"longValue": 0,
"type": "INTEGER",
"name": "MEMORY",
"doubleValue": 0.0
},
{
"name": "PORTS",
"longValue": 0,
"doubleValue": 0.0,
"stringSetValue": [
"22",
"2376",
"2375",
"51678"
],
"type": "STRINGSET",
"integerValue": 0
},
{
"name": "PORTS_UDP",
"longValue": 0,
"doubleValue": 0.0,
"stringSetValue": [],
"type": "STRINGSET",
"integerValue": 0
}
],
"ec2InstanceId": "instance_id
",
"agentConnected": true,
"containerInstanceArn": "arn:aws:ecs:us-west-2:aws_account_id
:container-instance/container_instance_ID
",
"pendingTasksCount": 0,
"remainingResources": [
{
"integerValue": 1024,
"longValue": 0,
"type": "INTEGER",
"name": "CPU",
"doubleValue": 0.0
},
{
"integerValue": 995,
"longValue": 0,
"type": "INTEGER",
"name": "MEMORY",
"doubleValue": 0.0
},
{
"name": "PORTS",
"longValue": 0,
"doubleValue": 0.0,
"stringSetValue": [
"22",
"2376",
"2375",
"51678"
],
"type": "STRINGSET",
"integerValue": 0
},
{
"name": "PORTS_UDP",
"longValue": 0,
"doubleValue": 0.0,
"stringSetValue": [],
"type": "STRINGSET",
"integerValue": 0
}
],
"runningTasksCount": 0,
"attributes": [
{
"name": "com.amazonaws.ecs.capability.privileged-container"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.17"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "com.amazonaws.ecs.capability.logging-driver.json-file"
},
{
"name": "com.amazonaws.ecs.capability.logging-driver.syslog"
}
],
"versionInfo": {
"agentVersion": "1.5.0",
"agentHash": "b197edd",
"dockerVersion": "DockerVersion: 1.7.1"
}
}
]
}
Sie finden die EC2 Amazon-Instance-ID, mit der Sie die Instance überwachen können, auch in der EC2 Amazon-Konsole oder mit dem aws ec2 describe-instances --instance-id
instance_id
Befehl.
Registrieren Sie eine Aufgabendefinition
Bevor Sie eine Aufgabe auf Ihrem Amazon ECS-Cluster ausführen können, müssen Sie eine Aufgabendefinition registrieren. Aufgabendefinitionen sind Listen zusammengefasster Container. Das folgende Beispiel ist eine einfache Aufgabendefinition, die ein nginx
Bild verwendet. Weitere Informationen zu den verfügbaren Parametern für die Aufgabendefinition finden Sie im Abschnitt Amazon-ECS-Aufgabendefinitionen.
{ "family": "nginx-task", "containerDefinitions": [ { "name": "nginx", "image": "public.ecr.aws/ecs-sample-image/amazon-ecs-sample:latest", "cpu": 256, "memory": 512, "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ] } ], "requiresCompatibilities": ["EC2"], "networkMode": "bridge" }
Das obige JSON-Beispiel kann auf zwei Arten AWS CLI an die übergeben werden: Sie können die Aufgabendefinition JSON als Datei speichern und sie mit der
Option übergeben. Oder Sie können die Anführungszeichen im JSON umgehen und die JSON-Containerdefinitionen in der Befehlszeile übergeben. Wenn Sie die Containerdefinitionen in der Befehlszeile übergeben möchten, müssen Sie in dem Befehl zusätzlich einen Parameter --cli-input-json
file://path_to_file.json
--family
angeben, damit mehrere Versionen Ihrer Aufgabendefinition miteinander verbunden bleiben.
Verwendung einer JSON-Datei für Containerdefinitionen:
aws ecs register-task-definition --cli-input-json
file://$HOME/tasks/nginx.json
Der Befehl register-task-definition gibt nach Abschluss der Registrierung eine Beschreibung der Aufgabendefinition zurück.
{
"taskDefinition": {
"taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/nginx-task:1",
"family": "nginx-task",
"revision": 1,
"status": "ACTIVE",
"containerDefinitions": [
{
"name": "nginx",
"image": "public.ecr.aws/docker/library/nginx:latest",
"cpu": 256,
"memory": 512,
"essential": true,
"portMappings": [
{
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}
],
"environment": [],
"mountPoints": [],
"volumesFrom": []
}
],
"volumes": [],
"networkMode": "bridge",
"compatibilities": [
"EC2"
],
"requiresCompatibilities": [
"EC2"
]
}
}
Aufgabendefinitionen auflisten
Sie können die Aufgabendefinitionen für Ihr Konto jederzeit mit dem Befehl list-task-definitions auflisten. Die Ausgabe dieses Befehls zeigt die revision
Werte family
und, die Sie beim Aufrufen zusammen verwenden könnencreate-service.
aws ecs list-task-definitions
Ausgabe:
{
"taskDefinitionArns": [
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/sleep360:1",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/sleep360:2",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/nginx-task:1",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/wordpress:3",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/wordpress:4",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/wordpress:5",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/wordpress:6"
]
}
Einen Service erstellen
Nachdem Sie eine Aufgabe für Ihr Konto registriert und eine Container-Instance gestartet haben, die in Ihrem Cluster registriert ist, können Sie mithilfe der von Ihnen registrierten Aufgabendefinition einen Amazon ECS-Service erstellen, der eine gewünschte Anzahl von Aufgaben gleichzeitig ausführt und verwaltet. In diesem Beispiel stellen Sie eine einzelne Instance der Aufgabendefinition nginx:1
in Ihren Standardcluster.
aws ecs create-service --cluster
default
--service-namenginx-service
--task-definitionnginx-task:1
--desired-count1
Ausgabe:
{
"service": {
"serviceArn": "arn:aws:ecs:us-east-1:aws_account_id
:service/MyCluster/nginx-service",
"serviceName": "nginx-service",
"clusterArn": "arn:aws:ecs:us-east-1:aws_account_id
:cluster/MyCluster",
"taskDefinition": "arn:aws:ecs:us-east-1:aws_account_id
:task-definition/nginx-task:1",
"desiredCount": 1,
"runningCount": 0,
"pendingCount": 0,
"launchType": "EC2",
"status": "ACTIVE",
"createdAt": "2025-01-13T10:45:00.000Z"
}
}
Dienste auflisten
Listet die Services für Ihren Cluster auf. Der im vorherigen Abschnitt erstellte Service müsste angezeigt werden. Sie können die Service-ID oder den vollständigen ARN, der von diesem Befehl zurückgegeben wird, notieren und damit den Dienst später beschreiben.
aws ecs list-services --cluster
MyCluster
Ausgabe:
{
"taskArns": [
"arn:aws:ecs:us-east-1:aws_account_id
:task/task_ID
"
]
}
Beschreiben Sie den Dienst
Beschreiben Sie den Dienst mit dem folgenden Befehl, um weitere Informationen über den Dienst zu erhalten.
aws ecs describe-services --cluster
MyCluster
--servicesnginx-service
Ausgabe:
{
"services": [
{
"serviceArn": "arn:aws:ecs:us-east-1:aws_account_id
:service/MyCluster/nginx-service",
"serviceName": "nginx-service",
"clusterArn": "arn:aws:ecs:us-east-1:aws_account_id
:cluster/MyCluster",
"taskDefinition": "arn:aws:ecs:us-east-1:aws_account_id
:task-definition/nginx-task:1",
"desiredCount": 1,
"runningCount": 1,
"pendingCount": 0,
"launchType": "EC2",
"status": "ACTIVE",
"createdAt": "2025-01-13T10:45:00.000Z",
"events": [
{
"id": "abcd1234-5678-90ab-cdef-1234567890ab",
"createdAt": "2025-01-13T10:45:30.000Z",
"message": "(service nginx-service) has started 1 tasks: (task abcd1234-5678-90ab-cdef-1234567890ab)."
}
]
}
]
}
Beschreiben Sie die laufende Aufgabe
Führen Sie nach der Beschreibung des Dienstes den folgenden Befehl aus, um weitere Informationen zu der Aufgabe zu erhalten, die als Teil Ihres Dienstes ausgeführt wird.
aws ecs list-tasks --cluster
MyCluster
--service-namenginx-service
Ausgabe:
{
"tasks": [
{
"taskArn": "arn:aws:ecs:us-east-1:aws_account_id
:task/MyCluster/abcd1234-5678-90ab-cdef-1234567890ab",
"clusterArn": "arn:aws:ecs:us-east-1:aws_account_id
:cluster/MyCluster",
"taskDefinitionArn": "arn:aws:ecs:us-east-1:aws_account_id
:task-definition/nginx-task:1",
"containerInstanceArn": "arn:aws:ecs:us-east-1:aws_account_id
:container-instance/MyCluster/abcd1234-5678-90ab-cdef-1234567890ab",
"lastStatus": "RUNNING",
"desiredStatus": "RUNNING",
"containers": [
{
"containerArn": "arn:aws:ecs:us-east-1:aws_account_id
:container/MyCluster/abcd1234-5678-90ab-cdef-1234567890ab/abcd1234-5678-90ab-cdef-1234567890ab",
"taskArn": "arn:aws:ecs:us-east-1:aws_account_id
:task/MyCluster/abcd1234-5678-90ab-cdef-1234567890ab",
"name": "nginx",
"lastStatus": "RUNNING",
"networkBindings": [
{
"bindIP": "0.0.0.0",
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}
]
}
],
"createdAt": "2025-01-13T10:45:00.000Z",
"startedAt": "2025-01-13T10:45:30.000Z"
}
]
}
Testen Sie den Webserver
Um den Webserver zu testen
-
Rufen Sie die öffentliche IP-Adresse Ihrer Container-Instance ab, indem Sie den folgenden Befehl ausführen.
aws ec2 describe-instances --instance-ids
i-abcd1234
--query 'Reservations[0].Instances[0].PublicIpAddress' --output textAusgabe:
203.0.113.25
-
Führen Sie nach dem Abrufen der IP-Adresse den folgenden
curl
Befehl mit der IP-Adresse aus.curl http://203.0.113.25
Ausgabe:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> ... </head> <body> <h1>Welcome to nginx!</h1> <p>If you can see this page, the nginx web server is successfully installed and working.</p> ... </body> </html>
Die Nginx-Willkommensseite bestätigt, dass Ihr Dienst erfolgreich ausgeführt wird und über das Internet zugänglich ist.
Bereinigen von -Ressourcen
Um Gebühren zu vermeiden, bereinigen Sie die Ressourcen, die Sie in diesem Tutorial erstellt haben.
So bereinigen Sie Ressourcen
-
Aktualisieren Sie den Dienst so, dass er keine gewünschten Aufgaben hat, und löschen Sie den Dienst dann.
aws ecs update-service --cluster
MyCluster
--servicenginx-service
--desired-count 0 { "service": { "serviceArn": "arn:aws:ecs:us-east-1:123456789012:service/MyCluster/nginx-service", "serviceName": "nginx-service", "desiredCount": 0, "runningCount": 1, "pendingCount": 0, "status": "ACTIVE" } } -
Warten Sie, bis die laufenden Aufgaben beendet sind, und löschen Sie dann den Dienst.
aws ecs delete-service --cluster
MyCluster
--servicenginx-service
{ "service": { "serviceArn": "arn:aws:ecs:us-east-1:123456789012:service/MyCluster/nginx-service", "serviceName": "nginx-service", "status": "DRAINING" } } -
Beenden Sie die Container-Instance, die Sie erstellt haben.
aws ec2 terminate-instances --instance-ids
i-abcd1234
{ "TerminatingInstances": [ { "InstanceId": "i-abcd1234", "CurrentState": { "Code": 32, "Name": "shutting-down" }, "PreviousState": { "Code": 16, "Name": "running" } } ] } -
Bereinigen Sie die Sicherheitsgruppe und das key pair, die Sie erstellt haben.
aws ec2 delete-security-group --group-id
sg-abcd1234
aws ec2 delete-key-pair --key-nameecs-tutorial-key
rmecs-tutorial-key.pem
-
Löschen Sie den Amazon-ECS-Cluster.
aws ecs delete-cluster --cluster
MyCluster
{ "cluster": { "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/MyCluster", "clusterName": "MyCluster", "status": "INACTIVE" } }