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.
Erfahren Sie, wie Sie einen Service erstellen, der eine Fargate-Aufgabe enthält, die Service Discovery mit dem AWS CLI verwendet.
Eine Liste AWS-Regionen dieser Support Service Discovery finden Sie unterVerwenden Sie Service Discovery, um Amazon ECS-Services mit DNS-Namen zu verbinden.
Weitere Informationen über Regionen, die Fargate unterstützen, finden Sie unter Unterstützte Regionen für Amazon ECS auf AWS Fargate.
Voraussetzungen
Bevor Sie mit diesem Tutorial beginnen, stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind:
-
Die neueste Version von AWS CLI ist installiert und konfiguriert. Weitere Informationen finden Sie unter Installation oder Aktualisierung auf die neueste Version von AWS CLI.
-
Die unter Einrichtung für die Verwendung von Amazon ECS beschriebenen Schritte sind abgeschlossen.
-
Ihr AWS Benutzer verfügt über die erforderlichen Berechtigungen, die im Beispiel für eine AmazonECS_ FullAccess IAM-Richtlinie angegeben sind.
-
Sie haben mindestens eine VPC und eine Sicherheitsgruppe erstellt. Weitere Informationen finden Sie unter Erstellen einer Virtual Private Cloud.
Schritt 1: Erstellen Sie die Service Discovery-Ressourcen in AWS Cloud Map
Führen Sie die folgenden Schritte aus, um Ihren Service-Discovery-Namespace und Service zur Service Discovery zu erstellen:
-
Erstellen Sie einen privaten Namespace für die Service Discovery der Cloud Map. In diesem Beispiel wird ein Namespace mit dem Namen
tutorial
erstellt.vpc-abcd1234
Ersetzen Sie es durch die ID einer Ihrer vorhandenen VPCs.aws servicediscovery create-private-dns-namespace \ --name
tutorial
\ --vpcvpc-abcd1234
Die Ausgabe dieses Befehls sieht wie folgt aus.
{ "OperationId": "
h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e
" } -
Überprüfen Sie mithilfe der
OperationId
aus der Ausgabe des vorherigen Schritts, ob der private Namespace erfolgreich erstellt wurde. Notieren Sie sich die Namespace-ID, da Sie sie in nachfolgenden Befehlen verwenden.aws servicediscovery get-operation \ --operation-id
h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e
Die Ausgabe sieht wie folgt aus.
{ "Operation": { "Id": "
h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e
", "Type": "CREATE_NAMESPACE", "Status": "SUCCESS", "CreateDate": 1519777852.502, "UpdateDate": 1519777856.086, "Targets": { "NAMESPACE": "ns-uejictsjen2i4eeg
" } } } -
Erstellen Sie mithilfe der
NAMESPACE
-ID aus der Ausgabe des vorherigen Schritts einen Service zur Service Discovery. In diesem Beispiel wird ein Service mit dem Namenmyapplication
erstellt. Notieren Sie sich die Service-ID und den ARN, da Sie sie in nachfolgenden Befehlen verwenden.aws servicediscovery create-service \ --name
myapplication
\ --dns-config "NamespaceId="ns-uejictsjen2i4eeg
",DnsRecords=[{Type="A
",TTL="300
"}]" \ --health-check-custom-config FailureThreshold=1
Die Ausgabe sieht wie folgt aus.
{ "Service": { "Id": "
srv-utcrh6wavdkggqtk
", "Arn": "arn:aws:servicediscovery:region
:aws_account_id
:service/srv-utcrh6wavdkggqtk
", "Name": "myapplication", "DnsConfig": { "NamespaceId": "ns-uejictsjen2i4eeg
", "DnsRecords": [ { "Type": "A
", "TTL":300
} ] }, "HealthCheckCustomConfig": { "FailureThreshold":1
}, "CreatorRequestId": "e49a8797-b735-481b-a657-b74d1d6734eb" } }
Schritt 2: Erstellen der Amazon-ECS-Ressourcen
Führen Sie die folgenden Schritte aus, um Ihren Amazon-ECS-Cluster, die Definition der Aufgabe und den Service zu erstellen:
-
Erstellen Sie einen Amazon-ECS-Cluster. In diesem Beispiel wird ein Cluster mit dem Namen
tutorial
erstellt.aws ecs create-cluster \ --cluster-name
tutorial
-
Registrieren Sie eine Aufgabendefinition, die mit Fargate kompatibel ist und den
awsvpc
-Netzwerkmodus verwendet. Dazu gehen Sie wie folgt vor:-
Erstellen Sie eine Datei mit dem Namen
fargate-task.json
mit dem Inhalt der folgenden Aufgabendefinition.{ "family": "tutorial-task-def", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "sample-app", "image": "public.ecr.aws/docker/library/httpd:2.4", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "memory": "512" }
-
Registrieren Sie die Aufgabendefinition mithilfe von
fargate-task.json
.aws ecs register-task-definition \ --cli-input-json file://fargate-task.json
-
-
Erstellen Sie einen ECS Service, indem Sie die folgenden Schritte ausführen:
-
Erstellen Sie eine Datei mit dem Namen
ecs-service-discovery.json
, die den Inhalt des ECS-Services enthält, den Sie erstellen wollen. Dieses Beispiel verwendet die Aufgabendefinition, die im vorherigen Schritt erstellt wurde. EinawsvpcConfiguration
ist erforderlich, da die Beispiel-Aufgabendefinition denawsvpc
-Netzwerkmodus verwendet.Wenn Sie den ECS-Service erstellen, geben Sie den Fargate-Starttyp und die
LATEST
-Plattformversion an, die Service Discovery unterstützt. Wenn der Service zur Service Discovery in AWS Cloud Map erstellt wird, istregistryArn
der zurückgegebene ARN. DiesecurityGroups
undsubnets
muss zu der VPC gehören, die zum Erstellen des Cloud Map-Namespaces verwendet wird. Sie können die Sicherheitsgruppe und das Subnetz IDs von der Amazon VPC-Konsole abrufen.{ "cluster": "tutorial", "serviceName": "ecs-service-discovery", "taskDefinition": "tutorial-task-def", "serviceRegistries": [ { "registryArn": "arn:aws:servicediscovery:
region
:aws_account_id
:service/srv-utcrh6wavdkggqtk
" } ], "launchType": "FARGATE", "platformVersion": "LATEST", "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-abcd1234
" ], "subnets": [ "subnet-abcd1234
" ] } }, "desiredCount":1
} -
Erstellen Sie Ihren ECS-Service mithilfe von
ecs-service-discovery.json
.aws ecs create-service \ --cli-input-json file://ecs-service-discovery.json
-
Schritt 3: Überprüfen Sie Service Discovery in AWS Cloud Map
Sie können überprüfen, ob alles ordnungsgemäß erstellt wurde, indem Sie Ihre Service-Discovery-Informationen abfragen. Nachdem die Diensterkennung konfiguriert wurde, können Sie entweder AWS Cloud Map API-Operationen verwenden oder dig
von einer Instanz in Ihrer VPC aus aufrufen. Dazu gehen Sie wie folgt vor:
-
Listen Sie mithilfe der Service-Discovery-Service-ID die Service-Discovery-Instances auf. Notieren Sie sich die Instance-ID (fett markiert) für die Ressourcen-Bereinigung.
aws servicediscovery list-instances \ --service-id
srv-utcrh6wavdkggqtk
Die Ausgabe sieht wie folgt aus.
{ "Instances": [ { "Id": "16becc26-8558-4af1-9fbd-f81be062a266", "Attributes": { "AWS_INSTANCE_IPV4": "172.31.87.2" "AWS_INSTANCE_PORT": "80", "AVAILABILITY_ZONE": "us-east-1a", "REGION": "us-east-1", "ECS_SERVICE_NAME": "ecs-service-discovery", "ECS_CLUSTER_NAME": "tutorial", "ECS_TASK_DEFINITION_FAMILY": "tutorial-task-def" } } ] }
-
Verwenden Sie den Service-Discovery-Namespace, den Service und zusätzliche Parameter wie den ECS-Clusternamen, um Details zu den Service-Discovery-Instances abzufragen.
aws servicediscovery discover-instances \ --namespace-name tutorial \ --service-name myapplication \ --query-parameters ECS_CLUSTER_NAME=tutorial
-
Die DNS-Einträge, die in der von Route 53 gehosteten Zone für den Service zur Service Discovery erstellt wurden, können mit den folgenden AWS CLI -Befehlen abgefragt werden:
-
Rufen Sie mithilfe der Namespace-ID Informationen zum Namespace ab, die die von Route 53 gehostete Zonen-ID enthalten.
aws servicediscovery \ get-namespace --id
ns-uejictsjen2i4eeg
Die Ausgabe sieht wie folgt aus.
{ "Namespace": { "Id": "
ns-uejictsjen2i4eeg
", "Arn": "arn:aws:servicediscovery:region
:aws_account_id
:namespace/ns-uejictsjen2i4eeg
", "Name": "tutorial", "Type": "DNS_PRIVATE", "Properties": { "DnsProperties": { "HostedZoneId": "Z35JQ4ZFDRYPLV
" } }, "CreateDate": 1519777852.502, "CreatorRequestId": "9049a1d5-25e4-4115-8625-96dbda9a6093" } } -
Verwenden Sie die ID der gehosteten Route-53-Zone aus dem vorherigen Schritt (siehe fett gedruckten Text), um den Ressourcendatensatz für die gehostete Zone abzurufen.
aws route53 list-resource-record-sets \ --hosted-zone-id
Z35JQ4ZFDRYPLV
-
-
Sie können den DNS auch von einer Instance innerhalb Ihrer VPC mit
dig
abfragen.dig +short myapplication.tutorial
Schritt 4: Bereinigen
Wenn Sie mit diesem Tutorial fertig sind, bereinigen Sie die zugeordneten Ressourcen, um Gebühren für ungenutzte Ressourcen zu vermeiden. Dazu gehen Sie wie folgt vor:
-
Deregistrieren Sie die Service Discovery Service-Instances mithilfe der zuvor notierten Service-ID und Instance-ID.
aws servicediscovery deregister-instance \ --service-id
srv-utcrh6wavdkggqtk
\ --instance-id16becc26-8558-4af1-9fbd-f81be062a266
Die Ausgabe sieht wie folgt aus.
{ "OperationId": "
xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv
" } -
Überprüfen Sie mithilfe von
OperationId
aus der Ausgabe des vorherigen Schritts, ob die Service Discovery-Instances erfolgreich deregistriert wurden.aws servicediscovery get-operation \ --operation-id
xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv
{ "Operation": { "Id": "xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv", "Type": "DEREGISTER_INSTANCE", "Status": "SUCCESS", "CreateDate": 1525984073.707, "UpdateDate": 1525984076.426, "Targets": { "INSTANCE": "16becc26-8558-4af1-9fbd-f81be062a266", "ROUTE_53_CHANGE_ID": "C5NSRG1J4I1FH", "SERVICE": "srv-utcrh6wavdkggqtk" } } }
-
Löschen Sie den Service zur Service Discovery unter Verwendung der Service-ID.
aws servicediscovery delete-service \ --id
srv-utcrh6wavdkggqtk
-
Löschen Sie den Service Discovery-Namespace mithilfe der Namespace-ID.
aws servicediscovery delete-namespace \ --id
ns-uejictsjen2i4eeg
Die Ausgabe sieht wie folgt aus.
{ "OperationId": "
c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj
" } -
Überprüfen Sie mithilfe der
OperationId
aus der vorherigen Ausgabe des vorherigen Schritts, ob der Service-Discovery-Namespace erfolgreich gelöscht wurde.aws servicediscovery get-operation \ --operation-id
c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj
Die Ausgabe sieht wie folgt aus.
{ "Operation": { "Id": "
c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj
", "Type": "DELETE_NAMESPACE", "Status": "SUCCESS", "CreateDate": 1525984602.211, "UpdateDate": 1525984602.558, "Targets": { "NAMESPACE": "ns-rymlehshst7hhukh", "ROUTE_53_CHANGE_ID": "CJP2A2M86XW3O" } } } -
Aktualisieren Sie die gewünschte Anzahl für den Amazon-ECS-Service auf
0
. Sie müssen dies tun, um den Service im nächsten Schritt zu löschen.aws ecs update-service \ --cluster tutorial \ --service ecs-service-discovery \ --desired-count 0
-
Löschen Sie den Amazon-ECS-Service.
aws ecs delete-service \ --cluster tutorial \ --service ecs-service-discovery
-
Löschen Sie den Amazon-ECS-Cluster.
aws ecs delete-cluster \ --cluster tutorial