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.
Konfigurieren von Amazon ECS Service Connect mit der AWS CLI
Sie können mit der AWS CLI einen Amazon-ECS-Service mit einer Fargate-Aufgabe erstellen, die Service Connect verwendet.
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
Im Folgenden sind die Voraussetzungen für Service Connect aufgeführt:
-
Stellen Sie sicher, dass die neueste Version von installiert und konfiguriert AWS CLI ist. Weitere Informationen finden Sie unter Installieren oder Aktualisierung auf die neueste Version der AWS CLI.
-
Ihr IAM-Benutzer besitzt die im AmazonECS_ FullAccess-IAM-Richtlinienbeispiel angegebenen Berechtigungen.
-
Sie haben eine VPC, ein Subnetz, eine Routing-Tabelle und eine Sicherheitsgruppe zur Verwendung erstellt. Weitere Informationen finden Sie unter Erstellen einer Virtual Private Cloud.
-
Sie verfügen über eine Aufgabenausführungsrolle mit dem Namen
ecsTaskExecutionRoleund die vonAmazonECSTaskExecutionRolePolicyverwaltete Richtlinie ist der Rolle angefügt. Diese Rolle ermöglicht es Fargate, die NGINX-Anwendungsprotokolle und Service Connect-Proxyprotokolle in Amazon Logs zu schreiben. CloudWatch Weitere Informationen finden Sie unter Erstellen der -Aufgabenausführungsrolle.
Schritt 1: Cluster erstellen
Führen Sie die folgenden Schritte aus, um Ihren Amazon-ECS-Cluster und -Namespace zu erstellen.
Um den Amazon ECS-Cluster und den AWS Cloud Map Namespace zu erstellen
-
Erstellen Sie einen zu verwendenden Amazon-ECS-Cluster mit dem Namen
tutorial. Der Parameter--service-connect-defaultslegt den Standard-Namespace des Clusters fest. In der Beispielausgabe ist in diesem Kontoservice-connectkein AWS Cloud Map Namespace mit dem Namen vorhanden AWS-Region, weshalb der Namespace von Amazon ECS erstellt wurde. Der Namespace wird in AWS Cloud Map im Konto erstellt und ist mit allen anderen Namespaces sichtbar. Verwenden Sie daher einen Namen, der den Zweck angibt.aws ecs create-cluster --cluster-nametutorial--service-connect-defaults namespace=service-connectAusgabe:
{ "cluster": { "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/tutorial", "clusterName": "tutorial", "serviceConnectDefaults": { "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-EXAMPLE" }, "status": "PROVISIONING", "registeredContainerInstancesCount": 0, "runningTasksCount": 0, "pendingTasksCount": 0, "activeServicesCount": 0, "statistics": [], "tags": [], "settings": [ { "name": "containerInsights", "value": "disabled" } ], "capacityProviders": [], "defaultCapacityProviderStrategy": [], "attachments": [ { "id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "type": "sc", "status": "ATTACHING", "details": [] } ], "attachmentsStatus": "UPDATE_IN_PROGRESS" } } }
-
Stellen Sie sicher, dass der Cluster erstellt wurde:
aws ecs describe-clusters --clusters tutorialAusgabe:
{ "clusters": [ { "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/tutorial", "clusterName": "tutorial", "serviceConnectDefaults": { "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-EXAMPLE" }, "status": "ACTIVE", "registeredContainerInstancesCount": 0, "runningTasksCount": 0, "pendingTasksCount": 0, "activeServicesCount": 0, "statistics": [], "tags": [], "settings": [], "capacityProviders": [], "defaultCapacityProviderStrategy": [] } ], "failures": [] }
-
(Optional) Stellen Sie sicher, dass der Namespace in erstellt wurde. AWS Cloud Map Sie können die AWS-Managementkonsole oder die normale AWS CLI Konfiguration verwenden, in AWS Cloud Map der dieser erstellt wurde.
Verwenden Sie beispielsweise die AWS CLI:
aws servicediscovery get-namespace --idns-EXAMPLEAusgabe:
{ "Namespace": { "Id": "ns-EXAMPLE", "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-EXAMPLE", "Name": "service-connect", "Type": "HTTP", "Properties": { "DnsProperties": { "SOA": {} }, "HttpProperties": { "HttpName": "service-connect" } }, "CreateDate": 1661749852.422, "CreatorRequestId": "service-connect" } }
Schritt 2: Erstellen des Service für den Server
Das Service-Connect-Feature dient zum Verbinden mehrerer Anwendungen auf Amazon ECS. Mindestens eine dieser Anwendungen muss einen Web-Service bereitstellen, zu dem eine Verbindung hergestellt werden kann. In diesem Schritt erstellen Sie:
-
Die Aufgabendefinition, die das unveränderte offizielle Nginx-Container-Image verwendet und die Service-Connect-Konfiguration beinhaltet.
-
Die Amazon-ECS-Servicedefinition, die Service Connect konfiguriert, um Serviceerkennung und Service-Mesh-Proxy für Datenverkehr zu diesem Service bereitzustellen. Die Konfiguration verwendet den Standard-Namespace aus der Cluster-Konfiguration erneut, um den Umfang der Service-Konfiguration, die Sie für jeden Service vornehmen, zu reduzieren.
-
Der Amazon-ECS-Service. Er führt eine Aufgabe mithilfe der Aufgabendefinition aus und fügt einen zusätzlichen Container für den Service-Connect-Proxy ein. Der Proxy überwacht den Port aus der Container-Port-Zuordnung der Aufgabendefinition. In einer Client-Anwendung, die in Amazon ECS ausgeführt wird, wartet der Proxy in der Client-Aufgabe auf ausgehende Verbindungen mit dem Portnamen der Aufgabendefinition, dem Serviceerkennungsnamen oder dem Service-Client-Aliasnamen und der Portnummer des Client-Alias.
So erstellen Sie den Webservice mit Service Connect
-
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
service-connect-nginx.jsonmit dem Inhalt der folgenden Aufgabendefinition.Diese Aufgabendefinition konfiguriert Service Connect durch Hinzufügen von
name- undappProtocol-Parametern zur Portzuordnung. Durch den Portnamen wird dieser Port in der Service-Konfiguration besser identifizierbar, wenn mehrere Ports verwendet werden. Der Portname wird standardmäßig auch als auffindbarer Name für andere Anwendungen im Namespace verwendet.Die Aufgabendefinition enthält die Aufgaben-IAM-Rolle, da für den Service ECS Exec aktiviert ist.
Wichtig
Diese Aufgabendefinition verwendet a
logConfiguration, um die Nginx-Ausgabe vonstdoutund an Amazon CloudWatch Logsstderrzu senden. Diese Rolle zur Aufgabenausführung verfügt nicht über die zusätzlichen Berechtigungen, die für die Erstellung der Protokollgruppe CloudWatch Logs erforderlich sind. Erstellen Sie die Protokollgruppe in CloudWatch Logs mithilfe von AWS-Managementkonsole oder AWS CLI. Wenn Sie die Nginx-Protokolle nicht an Logs senden möchten, CloudWatch können Sie die entfernen.logConfigurationErsetzen Sie die AWS-Konto ID in der Rolle zur Aufgabenausführung durch Ihre AWS-Konto ID.
{ "family": "service-connect-nginx", "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole", "taskRoleArn": "arn:aws:iam::123456789012:role/ecsTaskRole", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "webserver", "image": "public.ecr.aws/docker/library/nginx:latest", "cpu": 100, "portMappings": [ { "name": "nginx", "containerPort": 80, "protocol": "tcp", "appProtocol": "http" } ], "essential": true, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/service-connect-nginx", "awslogs-region": "region", "awslogs-stream-prefix": "nginx" } } } ], "cpu": "256", "memory": "512" } -
Registrieren Sie die Aufgabendefinition mit der
service-connect-nginx.json-Datei:aws ecs register-task-definition --cli-input-json file://service-connect-nginx.json
-
-
Erstellen eines Services:
-
Erstellen Sie eine Datei mit dem Namen
service-connect-nginx-service.jsonmit dem Inhalt des Amazon-ECS-Service, den Sie erstellen. 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 den Fargate und die
LATEST-Plattformversion an, die Service Connect unterstützt. DiesecurityGroupsundsubnetsmüssen zu einer VPC gehören, die die Anforderungen für die Verwendung von Amazon ECS erfüllt. Sie können die Sicherheitsgruppe und das Subnetz IDs von der Amazon VPC-Konsole abrufen.Dieser Service konfiguriert Service Connect durch Hinzufügen des
serviceConnectConfiguration-Parameters. Der Namespace ist nicht erforderlich, da für den Cluster ein Standard-Namespace konfiguriert ist. Client-Anwendungen, die in ECS im Namespace ausgeführt werden, stellen eine Verbindung zu diesem Service her, indem sie denportNameund den Port imclientAliasesverwenden. Dieser Service ist beispielsweise überhttp://nginx:80/erreichbar, da Nginx eine Willkommensseite im Stammverzeichnis/bereitstellt. Externe Anwendungen, die nicht in Amazon ECS ausgeführt werden oder sich nicht im selben Namespace befinden, können diese Anwendung über den Service-Connect-Proxy erreichen, indem sie die IP-Adresse der Aufgabe und die Portnummer aus der Aufgabendefinition verwenden. Fügen Sie für Ihretls-Konfiguration das Zertifikatarnfür dieawsPcaAuthorityArn, IhrenkmsKeyund denroleArnIhrer IAM-Rolle hinzu.Dieser Service verwendet eine
logConfiguration, um die Service-Connect-Proxyausgabe vonstdoutundstderrzu Amazon CloudWatch Logs zu senden. Diese Rolle zur Aufgabenausführung verfügt nicht über die zusätzlichen Berechtigungen, die für die Erstellung der Protokollgruppe CloudWatch Logs erforderlich sind. Erstellen Sie die Protokollgruppe in CloudWatch Logs mithilfe von AWS-Managementkonsole oder AWS CLI. Es wird empfohlen, diese Protokollgruppe zu erstellen und die CloudWatch Proxyprotokolle in Logs zu speichern. Wenn Sie die Proxyprotokolle nicht an Logs senden möchten, CloudWatch können Sie die entfernenlogConfiguration.{ "cluster": "tutorial", "deploymentConfiguration": { "maximumPercent": 200, "minimumHealthyPercent": 0 }, "deploymentController": { "type": "ECS" }, "desiredCount": 1, "enableECSManagedTags": true, "enableExecuteCommand": true, "launchType": "FARGATE", "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-EXAMPLE" ], "subnets": [ "subnet-EXAMPLE", "subnet-EXAMPLE", "subnet-EXAMPLE" ] } }, "platformVersion": "LATEST", "propagateTags": "SERVICE", "serviceName": "service-connect-nginx-service", "serviceConnectConfiguration": { "enabled": true, "services": [ { "portName": "nginx", "clientAliases": [ { "port": 80 } ], "tls": { "issuerCertificateAuthority": { "awsPcaAuthorityArn": "certificateArn" }, "kmsKey": "kmsKey", "roleArn": "iamRoleArn" } } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/service-connect-proxy", "awslogs-region": "region", "awslogs-stream-prefix": "service-connect-proxy" } } }, "taskDefinition": "service-connect-nginx" } -
Erstellen eines Service mithilfe der
service-connect-nginx-service.json-Datei:aws ecs create-service --cluster tutorial --cli-input-json file://service-connect-nginx-service.jsonAusgabe:
{ "service": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/tutorial/service-connect-nginx-service", "serviceName": "service-connect-nginx-service", "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/tutorial", "loadBalancers": [], "serviceRegistries": [], "status": "ACTIVE", "desiredCount": 1, "runningCount": 0, "pendingCount": 0, "launchType": "FARGATE", "platformVersion": "LATEST", "platformFamily": "Linux", "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/service-connect-nginx:1", "deploymentConfiguration": { "deploymentCircuitBreaker": { "enable": false, "rollback": false }, "maximumPercent": 200, "minimumHealthyPercent": 0 }, "deployments": [ { "id": "ecs-svc/3763308422771520962", "status": "PRIMARY", "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/service-connect-nginx:1", "desiredCount": 1, "pendingCount": 0, "runningCount": 0, "failedTasks": 0, "createdAt": 1661210032.602, "updatedAt": 1661210032.602, "launchType": "FARGATE", "platformVersion": "1.4.0", "platformFamily": "Linux", "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-EXAMPLE" ], "subnets": [ "subnet-EXAMPLEf", "subnet-EXAMPLE", "subnet-EXAMPLE" ] } }, "rolloutState": "IN_PROGRESS", "rolloutStateReason": "ECS deployment ecs-svc/3763308422771520962 in progress.", "failedLaunchTaskCount": 0, "replacedTaskCount": 0, "serviceConnectConfiguration": { "enabled": true, "namespace": "service-connect", "services": [ { "portName": "nginx", "clientAliases": [ { "port": 80 } ] } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/service-connect-proxy", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "service-connect-proxy" }, "secretOptions": [] } }, "serviceConnectResources": [ { "discoveryName": "nginx", "discoveryArn": "arn:aws:servicediscovery:us-west-2:123456789012:service/srv-EXAMPLE" } ] } ], "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS", "version": 0, "events": [], "createdAt": 1661210032.602, "placementConstraints": [], "placementStrategy": [], "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-EXAMPLE" ], "subnets": [ "subnet-EXAMPLE", "subnet-EXAMPLE", "subnet-EXAMPLE" ] } }, "schedulingStrategy": "REPLICA", "enableECSManagedTags": true, "propagateTags": "SERVICE", "enableExecuteCommand": true } }
Die von Ihnen angegebene
serviceConnectConfigurationwird in der ersten Bereitstellung der Ausgabe angezeigt. Wenn Sie Änderungen am ECS-Service vornehmen, die Änderungen an Aufgaben erfordern, wird von Amazon ECS eine neue Bereitstellung erstellt.
-
Schritt 3: Überprüfen der Möglichkeit, eine Verbindung herzustellen
Um zu überprüfen, ob Service Connect konfiguriert ist und funktioniert, führen Sie die folgenden Schritte aus, um von einer externen Anwendung aus eine Verbindung zum Webservice herzustellen. Sehen Sie sich dann die zusätzlichen Metriken an, CloudWatch die der Service Connect-Proxy erstellt.
So stellen Sie über eine externe Anwendung eine Verbindung mit dem Webservice her
-
Herstellen einer Verbindung mit der IP-Adresse der Aufgabe und dem Container-Port mithilfe der IP-Adresse der Aufgabe
Verwenden Sie die AWS CLI , um die Aufgaben-ID abzurufen, indem Sie den verwenden
aws ecs list-tasks --cluster tutorial.Wenn Ihre Subnetze und Sicherheitsgruppe Datenverkehr aus dem öffentlichen Internet auf dem Port aus der Aufgabendefinition zulassen, können Sie von Ihrem Computer aus eine Verbindung mit der öffentlichen IP-Adresse herstellen. Die öffentliche IP ist jedoch nicht über `describe-tasks` verfügbar. Die Schritte beinhalten also, zum Amazon zu gehen EC2 AWS-Managementkonsole oder AWS CLI die Details der elastic network interface.
In diesem Beispiel verwendet eine EC2 Amazon-Instance in derselben VPC die private IP der Aufgabe. Die Anwendung ist Nginx, aber der
server: envoy-Header zeigt, dass der Service-Connect-Proxy verwendet wird. Der Service-Connect-Proxy überwacht den Container-Port aus der Aufgabendefinition.$ curl -v 10.0.19.50:80/ * Trying 10.0.19.50:80... * Connected to 10.0.19.50 (10.0.19.50) port 80 (#0) > GET / HTTP/1.1 > Host: 10.0.19.50 > User-Agent: curl/7.79.1 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < server: envoy < date: Tue, 23 Aug 2022 03:53:06 GMT < content-type: text/html < content-length: 612 < last-modified: Tue, 16 Apr 2019 13:08:19 GMT < etag: "5cb5d3c3-264" < accept-ranges: bytes < x-envoy-upstream-service-time: 0 < <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
So zeigen Sie Service-Connect-Metriken an
Der Service Connect-Proxy erstellt Anwendungsmetriken (HTTP- HTTP2, gRPC- oder TCP-Verbindung) in CloudWatch Metriken. Wenn Sie die CloudWatch Konsole verwenden, sehen Sie sich die zusätzlichen metrischen Dimensionen von DiscoveryName, (DiscoveryName, ServiceName, ClusterName) TargetDiscoveryName, und (TargetDiscoveryName, ServiceName, ClusterName) unter dem Amazon ECS-Namespace an. Weitere Informationen zu diesen Metriken und den Dimensionen finden Sie unter Verfügbare Metriken anzeigen im Amazon CloudWatch Logs-Benutzerhandbuch.