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:
-
La versione più recente di è installata e configurata. AWS CLI Per ulteriori informazioni, vedere Installazione o aggiornamento alla versione più recente di AWS CLI.
-
Le fasi descritte in Configurazione per l'uso di Amazon ECS sono complete.
-
Il tuo utente IAM dispone delle autorizzazioni richieste specificate nell'esempio di policy Amazon ECS_ FullAccess IAM.
-
Hai creato almeno un VPC e un gruppo di sicurezza. Per ulteriori informazioni, consulta Crea un cloud privato virtuale.
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.
-
Crea uno spazio dei nomi privato di individuazione dei servizi Cloud Map. In questo esempio viene creato uno spazio dei nomi denominato
tutorial
. Sostituiscivpc-abcd1234
con l'ID di uno dei tuoi esistenti VPCs.aws servicediscovery create-private-dns-namespace \ --name
tutorial
\ --vpcvpc-abcd1234
L'output di questo comando è il seguente:
{ "OperationId": "
h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e
" } -
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
" } } } -
Usando l'ID
NAMESPACE
dall'output nella fase precedente, crea un servizio di individuazione dei servizi. Questo esempio crea un servizio denominatomyapplication
. 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.
-
Crea un cluster Amazon ECS. In questo esempio viene creato un cluster denominato
tutorial
.aws ecs create-cluster \ --cluster-name
tutorial
-
Registra una definizione di attività che sia compatibile con Fargate e utilizzi la modalità di rete
awsvpc
. Completare la procedura riportata di seguito.-
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" }
-
Registrazione della definizione dell'attività tramite
fargate-task.json
.aws ecs register-task-definition \ --cli-input-json file://fargate-task.json
-
-
Crea un servizio ECS completando la seguente procedura:
-
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 parametroawsvpcConfiguration
perché la definizione di attività di esempio usa la modalità di reteawsvpc
.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
esubnets
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
} -
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.
-
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" } } ] }
-
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
-
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 :
-
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" } } -
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
-
-
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.
-
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-id16becc26-8558-4af1-9fbd-f81be062a266
L'output è il seguente.
{ "OperationId": "
xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv
" } -
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" } } }
-
Eliminazione del servizio di individuazione dei servizi utilizzando l'ID servizio.
aws servicediscovery delete-service \ --id
srv-utcrh6wavdkggqtk
-
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
" } -
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" } } } -
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
-
Elimina il servizio Amazon ECS.
aws ecs delete-service \ --cluster tutorial \ --service ecs-service-discovery
-
Elimina il cluster Amazon ECS.
aws ecs delete-cluster \ --cluster tutorial