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 eines Amazon-ECS-Service, der Serviceerkennung verwendet
Erfahren Sie, wie Sie mit der AWS CLI einen Service erstellen, der eine Fargate-Aufgabe enthält, die die Serviceerkennung verwendet.
Eine Liste AWS-Regionen dieser Support-Serviceanfragen finden Sie unterDie Serviceerkennung verwenden, um Amazon-ECS-Services mithilfe von 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.
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 Verwenden von Dual-Stack-Endpunkten in Amazon ECS.
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 Installieren oder Aktualisierung auf die neueste Version der AWS CLI.
-
Die unter Einrichtung für die Verwendung von Amazon ECS beschriebenen Schritte sind abgeschlossen.
-
Ihr IAM-Benutzer besitzt die im AmazonECS_ FullAccess-IAM-Richtlinienbeispiel angegebenen Berechtigungen.
-
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 Serviceerkennung zu erstellen:
-
Erstellen Sie einen privaten Namespace für die Serviceerkennung der Cloud Map. In diesem Beispiel wird ein Namespace mit dem Namen
tutorialerstellt.vpc-abcd1234Ersetzen Sie es durch die ID einer Ihrer vorhandenen VPCs.aws servicediscovery create-private-dns-namespace \ --nametutorial\ --vpcvpc-abcd1234Die Ausgabe dieses Befehls sieht wie folgt aus.
{ "OperationId": "
h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e" } -
Überprüfen Sie mithilfe der
OperationIdaus 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-idh2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2eDie 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 Serviceerkennung. In diesem Beispiel wird ein Service mit dem Namenmyapplicationerstellt. Notieren Sie sich die Service-ID und den ARN, da Sie sie in nachfolgenden Befehlen verwenden.aws servicediscovery create-service \ --namemyapplication\ --dns-config "NamespaceId="ns-uejictsjen2i4eeg",DnsRecords=[{Type="A",TTL="300"}]" \ --health-check-custom-config FailureThreshold=1Die 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
tutorialerstellt.aws ecs create-cluster \ --cluster-nametutorial -
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.jsonmit 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. EinawsvpcConfigurationist erforderlich, da die Beispiel-Aufgabendefinition denawsvpc-Netzwerkmodus verwendet.Wenn Sie den ECS-Service erstellen, geben Sie Fargate und die
LATEST-Plattformversion an, die Serviceerkennung unterstützt. Wenn der Service zur Serviceerkennung in AWS Cloud Map erstellt wird, istregistryArnder zurückgegebene ARN. DiesecurityGroupsundsubnetsmuss 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 Serviceerkennung-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 Serviceerkennung-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-idsrv-utcrh6wavdkggqtkDie 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 Serviceerkennung-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 Serviceerkennung 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 --idns-uejictsjen2i4eegDie 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-idZ35JQ4ZFDRYPLV
-
-
Sie können den DNS auch von einer Instance innerhalb Ihrer VPC mit
digabfragen.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 Serviceerkennung Service-Instances mithilfe der zuvor notierten Service-ID und Instance-ID.
aws servicediscovery deregister-instance \ --service-idsrv-utcrh6wavdkggqtk\ --instance-id16becc26-8558-4af1-9fbd-f81be062a266Die Ausgabe sieht wie folgt aus.
{ "OperationId": "
xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv" } -
Überprüfen Sie mithilfe von
OperationIdaus der Ausgabe des vorherigen Schritts, ob die Serviceerkennung-Instances erfolgreich deregistriert wurden.aws servicediscovery get-operation \ --operation-idxhu73bsertlyffhm3faqi7kumsmx274n-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 Serviceerkennung unter Verwendung der Service-ID.
aws servicediscovery delete-service \ --idsrv-utcrh6wavdkggqtk -
Löschen Sie den Serviceerkennung-Namespace mithilfe der Namespace-ID.
aws servicediscovery delete-namespace \ --idns-uejictsjen2i4eegDie Ausgabe sieht wie folgt aus.
{ "OperationId": "
c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj" } -
Überprüfen Sie mithilfe der
OperationIdaus der vorherigen Ausgabe des vorherigen Schritts, ob der Serviceerkennung-Namespace erfolgreich gelöscht wurde.aws servicediscovery get-operation \ --operation-idc3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysjDie 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