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.
Konfiguration von Amazon ECS Service Connect mit dem AWS CLI
Sie können einen ECS Amazon-Service für eine Fargate-Aufgabe erstellen, der Service Connect mit dem AWS CLI verwendet.
Voraussetzungen
Im Folgenden sind die Voraussetzungen für Service Connect aufgeführt:
-
Stellen Sie sicher, dass die Region Service Connect unterstützt. Weitere Informationen finden Sie unter Regions with Service Connect.
-
Stellen Sie sicher, dass die neueste Version von installiert und konfiguriert AWS CLI ist. Weitere Informationen finden Sie unter Installieren der AWS Command Line Interface.
-
Ihr AWS Benutzer verfügt über die erforderlichen Berechtigungen, die im ECSAmazonas_ FullAccess IAM Richtlinienbeispiel angegeben sind.
-
Sie haben ein SubnetzVPC, 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
ecsTaskExecutionRole
und die vonAmazonECSTaskExecutionRolePolicy
verwaltete Richtlinie ist der Rolle angefügt. Diese Rolle ermöglicht es Fargate, die NGINX Anwendungsprotokolle und Service Connect-Proxyprotokolle in Amazon CloudWatch Logs zu schreiben. Weitere Informationen finden Sie unter Erstellen der -Aufgabenausführungsrolle.
Schritt 1: Cluster erstellen
Gehen Sie wie folgt vor, um Ihren ECS Amazon-Cluster und Namespace zu erstellen.
So erstellen Sie den ECS Amazon-Cluster und den AWS Cloud Map Amazon-Namespace
-
Erstellen Sie einen ECS Amazon-Cluster mit dem Namen „
tutorial
Zu verwenden“. Der Parameter--service-connect-defaults
legt den Standard-Namespace des Clusters fest. In der Beispielausgabe ist in diesem Kontoservice-connect
kein AWS Cloud Map Namespace mit dem Namen vorhanden AWS-Region, weshalb der Namespace von Amazon erstellt wurde. ECS 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-name
tutorial
--service-connect-defaults namespace=service-connect
Ausgabe:
{ "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 tutorial
Ausgabe:
{ "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 Management Console oder die normale AWS CLI Konfiguration verwenden, in AWS Cloud Map der dieser erstellt wurde.
Verwenden Sie beispielsweise die AWS CLI:
aws servicediscovery --region us-west-2 get-namespace --id
ns-EXAMPLE
Ausgabe:
{ "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 Sie den Dienst für den Server
Die Service Connect-Funktion ist für die Verbindung mehrerer Anwendungen auf Amazon ECS vorgesehen. 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 ECS Amazon-Servicedefinition, die Service Connect so konfiguriert, dass Service Discovery und Service Mesh-Proxy für den Datenverkehr zu diesem Service bereitgestellt werden. 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 ECS Amazon-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 ausgeführt wirdECS, wartet der Proxy in der Client-Task auf ausgehende Verbindungen mit dem Portnamen der Aufgabendefinition, dem Service Discovery-Namen oder dem Service-Client-Aliasnamen und der Portnummer des Client-Alias.
Um den Webservice mit Service Connect zu erstellen
-
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.json
mit 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 IAM Aufgabenrolle, da für den Dienst ECS Exec aktiviert ist.
Wichtig
Diese Aufgabendefinition verwendet a
logConfiguration
, um die Nginx-Ausgabe vonstdout
und an Amazon CloudWatch Logsstderr
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 Management Console oder AWS CLI. Wenn Sie die Nginx-Protokolle nicht an Logs senden möchten, CloudWatch können Sie die entfernen.logConfiguration
Ersetzen 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 Sie einen Dienst:
-
Erstellen Sie eine Datei, die
service-connect-nginx-service.json
mit dem Inhalt des ECS Amazon-Service benannt ist, den Sie gerade erstellen. 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 Dienst erstellen, geben Sie den Fargate-Starttyp und die
LATEST
Plattformversion an, die Service Connect unterstützt. DassecurityGroups
undsubnets
muss zu einem gehörenVPC, das die Voraussetzungen für die Nutzung von Amazon erfülltECS. Sie können die Sicherheitsgruppe und das Subnetz IDs von der VPC Amazon-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 ECS im Namespace ausgeführt werden, stellen eine Verbindung zu diesem Service her, indem sie denportName
und den Port in der verwenden.clientAliases
Dieser Service ist beispielsweise überhttp://nginx:80/
erreichbar, da Nginx eine Willkommensseite im Stammverzeichnis/
bereitstellt. Externe Anwendungen, die nicht in Amazon laufen ECS 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 Zertifikatarn
für IhreawsPcaAuthorityArn
kmsKey
, Ihre undroleArn
Ihre IAM Rolle hinzu.Dieser Service verwendet eine
logConfiguration
, um die Service-Connect-Proxyausgabe vonstdout
undstderr
zu Amazon CloudWatch Logs zu senden. Diese Rolle zur Ausführung von Aufgaben 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 Management Console 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 Sie einen Dienst mit der
service-connect-nginx-service.json
Datei:aws ecs create-service --cluster tutorial --cli-input-json file://service-connect-nginx-service.json
Ausgabe:
{ "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
serviceConnectConfiguration
wird in der ersten Bereitstellung der Ausgabe angezeigt. Wenn Sie Änderungen am ECS Service so vornehmen, dass Änderungen an Aufgaben erforderlich sind, wird von Amazon eine neue Bereitstellung erstelltECS.
-
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 Management Console oder AWS CLI die Details der elastic network interface.
In diesem Beispiel VPC verwendet eine EC2 Amazon-Instance derselben 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 (HTTPHTTP2RPC, G oder TCP Verbindung) in CloudWatch Metriken. Wenn Sie die CloudWatch Konsole verwenden, sehen Sie sich die zusätzlichen metrischen Dimensionen DiscoveryName, (DiscoveryName, ServiceName, ClusterName), und (TargetDiscoveryName, TargetDiscoveryName ServiceName, ClusterName) unter dem ECS Amazon-Namespace an. Weitere Informationen zu diesen Metriken und den Dimensionen finden Sie unter Verfügbare Metriken anzeigen im Amazon CloudWatch Logs-Benutzerhandbuch.