Creazione di un servizio Amazon ECS che utilizza Service Discovery - Amazon Elastic Container Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Creazione di un servizio Amazon ECS che utilizza Service Discovery

Scopri come creare un servizio contenente un'attività Fargate che utilizza il rilevamento dei servizi con. AWS CLI

Per un elenco della scoperta di Regioni AWS tale servizio di supporto, vedereUsa Service Discovery per connettere i servizi Amazon ECS con i nomi DNS.

Per informazioni sulle regioni che supportano Fargate, consulta Regioni supportate per Amazon ECS su AWS Fargate.

Nota

Puoi utilizzare gli endpoint del servizio dual-stack per interagire con Amazon ECS da AWS CLI, SDKs e l'API Amazon ECS su entrambi e. IPv4 IPv6 Per ulteriori informazioni, consulta Utilizzo degli endpoint dual-stack Amazon ECS.

Prerequisiti

Prima di iniziare questo tutorial, verifica che siano soddisfatti i seguenti requisiti preliminari:

Fase 1: Creare le risorse Service Discovery in AWS Cloud Map

Utilizza la procedura seguente per creare lo spazio dei nomi di individuazione dei servizi e il servizio di individuazione dei servizi.

  1. Crea uno spazio dei nomi privato di individuazione dei servizi Cloud Map. In questo esempio viene creato uno spazio dei nomi denominato tutorial. Sostituisci vpc-abcd1234 con l'ID di uno dei tuoi esistenti VPCs.

    aws servicediscovery create-private-dns-namespace \ --name tutorial \ --vpc vpc-abcd1234

    L'output di questo comando è il seguente:

    {
        "OperationId": "h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e"
    }
  2. Usando OperationId dall'output della fase precedente, verifica che lo spazio dei nomi privato sia stato creato correttamente. Prendi nota dell'ID dello spazio dei nomi perché lo utilizzerai nei comandi successivi.

    aws servicediscovery get-operation \ --operation-id h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e

    L'output è il seguente.

    {
        "Operation": {
            "Id": "h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e",
            "Type": "CREATE_NAMESPACE",
            "Status": "SUCCESS",
            "CreateDate": 1519777852.502,
            "UpdateDate": 1519777856.086,
            "Targets": {
               "NAMESPACE": "ns-uejictsjen2i4eeg"
            }
        }
    }
  3. Usando l'ID NAMESPACE dall'output nella fase precedente, crea un servizio di individuazione dei servizi. Questo esempio crea un servizio denominato myapplication. Prendi nota dell'ID del servizio e dell'ARN perché li utilizzerai nei comandi successivi.

    aws servicediscovery create-service \ --name myapplication \ --dns-config "NamespaceId="ns-uejictsjen2i4eeg",DnsRecords=[{Type="A",TTL="300"}]" \ --health-check-custom-config FailureThreshold=1

    L'output è il seguente.

    {
        "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"
        }
    }

Fase 2: Creazione delle risorse Amazon ECS

Utilizza la procedura seguente per creare il cluster Amazon ECS, la definizione di attività e il servizio.

  1. Crea un cluster Amazon ECS. In questo esempio viene creato un cluster denominato tutorial.

    aws ecs create-cluster \ --cluster-name tutorial
  2. Registra una definizione di attività che sia compatibile con Fargate e utilizzi la modalità di rete awsvpc. Completare la procedura riportata di seguito.

    1. Crea un file denominato fargate-task.json con il contenuto della seguente definizione di attività.

      { "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" }
    2. Registrazione della definizione dell'attività tramite fargate-task.json.

      aws ecs register-task-definition \ --cli-input-json file://fargate-task.json
  3. Crea un servizio ECS completando la seguente procedura:

    1. Creazione di un file denominato ecs-service-discovery.json con il contenuto del servizio ECS che stai per creare. Questo esempio usa la definizione di attività creata nella fase precedente. È obbligatorio l'uso di un parametro awsvpcConfiguration perché la definizione di attività di esempio usa la modalità di rete awsvpc.

      Quando crei il servizio ECS, specifica il tipo di avvio Fargate e la versione della piattaforma LATEST che supporta l'individuazione dei servizi. Quando viene creato il servizio di individuazione dei servizi in AWS Cloud Map , l'ARN restituito è registryArn. securityGroups e subnets devono appartenere al VPC utilizzato per creare lo spazio dei nomi Cloud Map. Puoi ottenere il gruppo di sicurezza e la sottorete IDs dalla console Amazon VPC.

      { "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 }
    2. Crea il tuo servizio ECS utilizzando ecs-service-discovery.json.

      aws ecs create-service \ --cli-input-json file://ecs-service-discovery.json

Fase 3: Verifica Service Discovery in AWS Cloud Map

Puoi verificare che sia stato creato tutto correttamente eseguendo una query sulle informazioni di individuazione dei servizi. Dopo aver configurato l'individuazione del servizio, puoi utilizzare le operazioni AWS Cloud Map API o effettuare una chiamata dig da un'istanza all'interno del tuo VPC. Completare la procedura riportata di seguito.

  1. Usando l'ID servizio di individuazione dei servizi, elenca le istanze di individuazione dei servizi. Prendi nota dell'ID istanza (contrassegnato in grassetto) per la pulizia delle risorse.

    aws servicediscovery list-instances \ --service-id srv-utcrh6wavdkggqtk

    L'output è il seguente.

    {
        "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"
                }
            }
        ]
    }
  2. Utilizza lo spazio dei nomi, il servizio di individuazione dei servizi e parametri aggiuntivi quali il nome del cluster ECS per ottenere i dettagli sulle istanze di individuazione dei servizi.

    aws servicediscovery discover-instances \ --namespace-name tutorial \ --service-name myapplication \ --query-parameters ECS_CLUSTER_NAME=tutorial
  3. Puoi eseguire query sui record DNS creati nella zona ospitata di Route 53 per il servizio di individuazione dei servizi con i seguenti comandi AWS CLI :

    1. Con l'ID spazio dei nomi, ottieni le informazioni sullo spazio dei nomi che includono l'ID della zona ospitata di Route 53.

      aws servicediscovery \ get-namespace --id ns-uejictsjen2i4eeg

      L'output è il seguente.

      {
          "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"
          }
      }
    2. Utilizzando l'ID della zona ospitata di Route 53 dalla fase precedente (visualizza il testo in grassetto), ottieni il set di record delle risorse per la zona ospitata.

      aws route53 list-resource-record-sets \ --hosted-zone-id Z35JQ4ZFDRYPLV
  4. Puoi eseguire query sul DNS anche da un'istanza all'interno tramite dig.

    dig +short myapplication.tutorial

Fase 4: pulizia

Una volta terminato questo tutorial, elimina le risorse associate in modo da evitare costi aggiuntivi per le risorse non utilizzate. Completare la procedura riportata di seguito.

  1. Annulla la registrazione delle istanze del servizio di individuazione dei servizi utilizzando l'ID servizio e l'ID istanza annotati in precedenza.

    aws servicediscovery deregister-instance \ --service-id srv-utcrh6wavdkggqtk \ --instance-id 16becc26-8558-4af1-9fbd-f81be062a266

    L'output è il seguente.

    {
        "OperationId": "xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv"
    }
  2. Utilizzando l'OperationId dall'output della fase precedente, verifica che la registrazione delle istanze del servizio di individuazione dei servizi sia stata annullata correttamente.

    aws servicediscovery get-operation \ --operation-id xhu73bsertlyffhm3faqi7kumsmx274n-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"
            }
        }
    }    
  3. Eliminazione del servizio di individuazione dei servizi utilizzando l'ID servizio.

    aws servicediscovery delete-service \ --id srv-utcrh6wavdkggqtk
  4. Eliminazione dello spazio dei nomi di individuazione dei servizi utilizzando l'ID spazio dei nomi.

    aws servicediscovery delete-namespace \ --id ns-uejictsjen2i4eeg

    L'output è il seguente.

    {
        "OperationId": "c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj"
    }
  5. Usando l'OperationId dall'output della fase precedente, verifica che lo spazio dei nomi di individuazione dei servizi sia stato eliminato correttamente.

    aws servicediscovery get-operation \ --operation-id c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj

    L'output è il seguente.

    {
        "Operation": {
            "Id": "c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj",
            "Type": "DELETE_NAMESPACE",
            "Status": "SUCCESS",
            "CreateDate": 1525984602.211,
            "UpdateDate": 1525984602.558,
            "Targets": {
                "NAMESPACE": "ns-rymlehshst7hhukh",
                "ROUTE_53_CHANGE_ID": "CJP2A2M86XW3O"
            }
        }
    }
  6. Aggiorna il conteggio desiderato per il servizio Amazon ECS a 0. Questa operazione deve essere eseguita per eliminare il servizio nella fase successiva.

    aws ecs update-service \ --cluster tutorial \ --service ecs-service-discovery \ --desired-count 0
  7. Elimina il servizio Amazon ECS.

    aws ecs delete-service \ --cluster tutorial \ --service ecs-service-discovery
  8. Elimina il cluster Amazon ECS.

    aws ecs delete-cluster \ --cluster tutorial