Wie verwende ich AWS Cloud Map, um kontoübergreifende Service Discovery für ECS-Services einzurichten?
Ich möchte AWS Cloud Map verwenden, um kontoübergreifende Service-Discovery für meine Amazon Elastic Container Service (Amazon ECS) -Services einzurichten.
Kurze Beschreibung
Durch die Erstellung eines privaten Namespaces in AWS Cloud Map wird auch eine gehostete Amazon Route 53-Zone erstellt. Da die Route 53-Hostzone mit einer Amazon Virtual Private Cloud (Amazon VPC) verknüpft ist, sind DNS-Einträge auffindbar. Daher können andere AWS-Konten und Amazon VPCs den Amazon ECS-Service nicht über DNS erkennen.
Voraussetzungen:
- Zwei Amazon-VPCs in denselben oder unterschiedlichen Konten mit den erforderlichen Subnetzen, Sicherheitsgruppen und sich nicht überschneidendem CIDR.
- Beide Amazon-VPCs verwenden AmazonProvidedDNS, wobei die Attribute enableDNSHostNames und enableDNSSupport aktiviert sind.
- Ein Amazon ECS-Cluster.
- Die neueste Version der AWS-Befehlszeilenschnittstelle (AWS CLI) wurde mit den entsprechenden Berechtigungen installiert und konfiguriert.
**Hinweis:**Wenn Sie beim Ausführen von AWS CLI Fehler erhalten, vergewissern Sie sich, dass Sie eine aktuelle Version der AWS-CLI ausführen.
Auflösung
**Wichtig:**In den folgenden Schritten werden Beispiele für die Amazon Ziel-VPC, die Amazon Quell-VPC und den Amazon ECS-Cluster verwendet. Ersetzen Sie in der AWS-CLI die Beispiel-Werte durch Ihre Werte.
- Der Beispiel-Cluster für einen Amazon ECS-Cluster befindet sich in AWS-Konto 1.
- Das Beispielziel Amazon VPC example-target-vpc hostet die Amazon ECS-Aufgabe und befindet sich in AWS-Konto 1.
- Die Beispielquelle Amazon VPC example-source-vpc führt die DNS-Abfrage durch und befindet sich in AWS-Konto 2.
Einen Namespace und einen AWS Cloud Map-Service erstellen
1.Konfigurieren Sie Ihre AWS-CLI mit den Anmeldeinformationen von Konto 1.
2.Erstellen Sie einen privaten AWS Cloud Map Service Discovery-Namespace in Konto 1:
$ aws servicediscovery create-private-dns-namespace --name example-namespace --vpc example-target-vpc
**Hinweis:**Der vorherige Befehl erstellt einen Namespace mit dem Namen example-namespace und gibt OperationID als Ausgabe in JSON zurück.
3.Verwenden Sie die OperationID, um den Status des Namespaces und der Namespace-ID zu überprüfen:
$ aws servicediscovery get-operation --operation-id <example-OperationId> --query 'Operation.{Status: Status, NamespaceID: Targets.NAMESPACE}'
4.Suchen Sie die Hosting-Zonen-ID, die dem Namespace zugeordnet ist:
$ aws servicediscovery get-namespace --id <example-NamespaceID> --query 'Namespace.Properties.DnsProperties.{HoztedZoneId: HostedZoneId}'
5.Verwenden Sie die Namespace-ID, um einen AWS Cloud Map-Service zu erstellen:
$ aws servicediscovery create-service \ --name myservice \ --namespace-id <example-NamespaceID> \ --dns-config "NamespaceId=<example-NamespaceID>,RoutingPolicy=MULTIVALUE,DnsRecords=[{Type=A,TTL=60}]"
**Hinweis:**Der vorherige Befehl erstellt einen AWS Cloud Map-Service mit dem Namen example-myservice und gibt einen Service-ARN als Ausgabe zurück.
Registrieren Sie eine Aufgabendefinition, die den awsvpc-Netzwerkmodus verwendet.
Registrieren Sie eine Aufgabendefinition, die mit AWS Fargate kompatibel ist und den awsvpc-Netzwerkmodus verwendet:
1.Erstellen Sie eine Datei mit dem Namen fargate-task.json mit dem folgenden Inhalt der Aufgabendefinition:
{ "family": "tutorial-task-def", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "sample-app", "image": "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" }
2.Verwenden Sie die Datei fargate-task.json, um die Aufgabendefinition zu registrieren:
$ aws ecs register-task-definition --cli-input-json file://fargate-task.json
Erstellen Sie einen Amazon ECS-Service
1.Erstellen Sie eine Datei mit dem Namen ecs-service-discovery.json und fügen Sie den Inhalt des Amazon ECS-Service hinzu, den Sie erstellen:
- Geben Sie LaunchType als FARGATE an.
- Geben Sie PlatformVersion als neueste Version an.
- Stellen Sie sicher, dass die Parameter SecurityGroups und Subnets zur Datei example-target-vpc gehören. Sie können die Sicherheitsgruppen- und Subnetz-IDs von Ihrer Amazon VPC-Konsole abrufen.
**Hinweis:**Da die Aufgabendefinition den awsvpc-Netzwerkmodus verwendet, ist eine AWSVPC-Konfiguration erforderlich.
Beispiel für eine JSON-Datei:
{ "cluster": "example-cluster", "serviceName": "ecs-service-discovery", "taskDefinition": "tutorial-task-def", "serviceRegistries": [ { "registryArn": "<Cloudmap service ARN>" } ], "launchType": "FARGATE", "platformVersion": "example-latest-version", "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "example-target-vpc-sg" ], "subnets": [ "example-target-vpc-subnet" ] } }, "desiredCount": 1 }
2.Verwenden Sie die Datei ecs-service-discovery.json, um Ihren Amazon ECS-Service zu erstellen:
$ aws ecs create-service --cli-input-json file://ecs-service-discovery.json
3.Bestätigen Sie, ob die Serviceaufgabe als Instanz im AWS Cloud Map-Service registriert ist:
$ aws servicediscovery list-instances --service-id <example-cloud-map-service-id>
**Hinweis:**Ihr Amazon ECS-Service ist jetzt in example-target-vpc auffindbar.
Ordnen Sie die Amazon-Quell-VPC der Route 53-Hostzone zu
- Wenn sich die Amazon-VPCs in verschiedenen Konten befinden, reichen Sie eine Autorisierungsanfrage für die Amazon VPC Association an Konto 2 ein:
$ aws route53 create-vpc-association-authorization --hosted-zone-id <example-HoztedZoneId> --vpc VPCRegion=<example_VPC_region>,VPCId=<example-source-vpc>
2.Konfigurieren Sie awscli mit den Anmeldeinformationen von Konto 2 und verknüpfen Sie die example-source-vpc in Konto 2 mit der gehosteten Zone in Konto 1:
$ aws route53 associate-vpc-with-hosted-zone --hosted-zone-id <example-HoztedZoneId> --vpc VPCRegion=<example_VPC_region>,VPCId=<example-source-vpc>
3.Prüfen Sie, ob die example-source-vpc zur gehosteten Zone hinzugefügt wurde:
aws route53 get-hosted-zone --id <example-HoztedZoneId> --query 'VPCs'
4.Stellen Sie sicher, dass der Amazon ECS-Service über DNS in example-source-vpc auffindbar ist. Fragen Sie das DNS von einer Amazon Elastic Compute Cloud (Amazon EC2) -Instance mit example-source-vpc ab:
$ dig +short example-service.example-namespace
**Hinweis:**Im vorherigen Befehl ist example-service.example-namespace der DNS-Name. Ersetzen Sie ihn durch Ihren AWS Cloud Map-Service und Namespace.
Einrichten Amazon VPC-Peering
1.Verwenden Sie Amazon VPC-Peering, um example-target-vpc mit example-source-vpc zu verbinden.
2.Aktualisieren Sie die Routentabellen.
3.Aktualisieren Sie die Sicherheitsgruppen.
**Hinweis:**Nachdem Sie Amazon VPC-Peering mit den Routing-Tabellen und Sicherheitsgruppen eingerichtet haben, können Ressourcen in example-source-vpc eine Verbindung zu Amazon ECS-Aufgaben in example-target-vpc herstellen.
Wenn bei der Einrichtung von Amazon VPC-Peering Probleme auftreten, lesen Sie die folgenden Artikel im AWS Knowledge Center:
- Probleme beim Erstellen von Amazon VPC-Peering: Warum kann ich keine Amazon VPC-Peering-Verbindung mit einer VPC in einem anderen AWS-Konto herstellen?
- Verbindungsprobleme zwischen Amazon-VPCs: Wie behebe ich Probleme beim Verbindungsaufbau über VPC-Peering?
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr