Konfiguration von Amazon ECS Service Connect mit dem AWS CLI - Amazon Elastic Container Service

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 von AmazonECSTaskExecutionRolePolicy 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
  1. Erstellen Sie einen ECS Amazon-Cluster mit dem Namen „tutorialZu verwenden“. Der Parameter --service-connect-defaults legt den Standard-Namespace des Clusters fest. In der Beispielausgabe ist in diesem Konto service-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"
        }
    }
    }
  2. 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": []
    }
                    
  3. (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
  1. Registrieren Sie eine Aufgabendefinition, die mit Fargate kompatibel ist und den awsvpc-Netzwerkmodus verwendet. Dazu gehen Sie wie folgt vor:

    1. 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- und appProtocol-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 alogConfiguration, um die Nginx-Ausgabe von stdout und an Amazon CloudWatch Logs stderr 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" }
    2. Registrieren Sie die Aufgabendefinition mit der service-connect-nginx.json-Datei:

      aws ecs register-task-definition --cli-input-json file://service-connect-nginx.json
  2. Erstellen Sie einen Dienst:

    1. 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. Ein awsvpcConfiguration ist erforderlich, da die Beispiel-Aufgabendefinition den awsvpc-Netzwerkmodus verwendet.

      Wenn Sie den ECS Dienst erstellen, geben Sie den Fargate-Starttyp und die LATEST Plattformversion an, die Service Connect unterstützt. Das securityGroups und subnets 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 den portName und den Port in der verwenden. clientAliases Dieser Service ist beispielsweise über http://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 Ihre tls Konfiguration das Zertifikat arn für Ihre awsPcaAuthorityArnkmsKey, Ihre und roleArn Ihre IAM Rolle hinzu.

      Dieser Service verwendet einelogConfiguration, um die Service-Connect-Proxyausgabe von stdout und stderr 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" }
    2. 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 verwendenaws 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.