As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Tutorial: Criar um serviço usando a descoberta de serviço
A descoberta de serviços está agora integrada ao assistente para Criar serviço no console do Amazon ECS. Para obter mais informações, consulte Criar um serviço do Amazon ECS usando o console clássico.
O tutorial a seguir mostra como criar um serviço do ECS usando que contém uma tarefado Fargate que usa a descoberta de serviço com a AWS CLI.
Para obter uma lista de Regiões da AWS que oferecem suporte à descoberta de serviços, consulte Descoberta de serviço.
Para obter informações sobre as regiões que oferecem suporte ao Fargate, consulte Regiões com suporte para Amazon ECS no AWS Fargate.
Pré-requisitos
Antes de começar este tutorial, certifique-se de que os seguintes pré-requisitos foram atendidos:
-
A versão mais recente da AWS CLI está instalada e configurada. Para obter mais informações, consulte Instalar a AWS Command Line Interface.
-
As etapas descritas em Configuração para usar o Amazon ECS estão concluídas.
-
Seu usuário da AWS tem as permissões necessárias especificadas no exemplo de política Permissões do assistente da primeira execução do Amazon ECS do IAM.
-
Você criou pelo menos uma VPC e um grupo de segurança. Para obter mais informações, consulte Criar uma nuvem privada virtual.
Etapa 1: Criar os recursos da descoberta de serviços no AWS Cloud Map
Siga estas etapas para criar o namespace de descoberta de serviços e o serviço de descoberta de serviços.
-
Crie um namespace privado de descoberta de serviços do Cloud Map. Este exemplo cria um namespace denominado
tutorial
. Substituavpc-abcd1234
pelo ID de uma das VPCs existentes.aws servicediscovery create-private-dns-namespace \ --name
tutorial
\ --vpcvpc-abcd1234
A saída deste comando é a seguinte.
{ "OperationId": "
h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e
" } -
Usando o
OperationId
do resultado da etapa anterior, verifique se o namespace privado foi criado com êxito. Anote o ID de namespace, pois ele será usado em comandos subsequentes.aws servicediscovery get-operation \ --operation-id
h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e
A saída é a seguinte:
{ "Operation": { "Id": "
h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e
", "Type": "CREATE_NAMESPACE", "Status": "SUCCESS", "CreateDate": 1519777852.502, "UpdateDate": 1519777856.086, "Targets": { "NAMESPACE": "ns-uejictsjen2i4eeg
" } } } -
Usando o ID do
NAMESPACE
da saída da etapa anterior, crie um serviço de descoberta de serviços. Este exemplo cria um serviço denominadomyapplication
. Anote o ID do serviço e o ARN, pois você os usará em comandos subsequentes.aws servicediscovery create-service \ --name
myapplication
\ --dns-config "NamespaceId="ns-uejictsjen2i4eeg
",DnsRecords=[{Type="A
",TTL="300
"}]" \ --health-check-custom-config FailureThreshold=1
A saída é a seguinte:
{ "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" } }
Etapa 2: Criar os recursos do Amazon ECS
Siga estas etapas para criar seu cluster, definição de tarefa e serviço do Amazon ECS:
-
Crie um cluster do Amazon ECS. Este exemplo cria um cluster que denominado
tutorial
.aws ecs create-cluster \ --cluster-name
tutorial
-
Registre uma definição de tarefa compatível com o Fargate e use o modo de rede
awsvpc
. Siga estas etapas:-
Crie um arquivo denominado
fargate-task.json
com o conteúdo da seguinte definição de tarefa.{ "family": "tutorial-task-def", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "sample-app", "image": "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" }
-
Registre a definição de tarefa usando
fargate-task.json
.aws ecs register-task-definition \ --cli-input-json file://fargate-task.json
-
-
Crie um serviço do ECS seguindo estas etapas:
-
Crie um arquivo denominado
ecs-service-discovery.json
com o conteúdo do serviço do ECS que você está criando. Este exemplo usa a definição de tarefa criada na etapa anterior. UmaawsvpcConfiguration
é necessária, pois o exemplo de definição de tarefa usa o modo de redeawsvpc
.Ao criar o serviço do ECS, especifique o tipo de inicialização do Fargate e a versão
LATEST
da plataforma que oferece suporte à descoberta de serviços. Quando o serviço de descoberta de serviços é criado no AWS Cloud Map,registryArn
é o ARN retornado.securityGroups
esubnets
devem pertencer à VPC utilizada para criar o namespace do Cloud Map. Você pode obter os IDs de grupos de segurança e sub-redes no console da 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
} -
Crie seu serviço do ECS usando
ecs-service-discovery.json
.aws ecs create-service \ --cli-input-json file://ecs-service-discovery.json
-
Etapa 3: Verificar a descoberta de serviços no AWS Cloud Map
Verifique se tudo foi criado corretamente consultando suas informações da descoberta de serviços. Depois que a descoberta de serviços estiver configurada, você poderá usar operações de API do AWS Cloud Map ou chamar dig
de uma instância na sua VPC. Siga estas etapas:
-
Usando o ID de serviço de descoberta de serviço, liste as instâncias da descoberta de serviço. Anote o ID da instância (marcado em negrito) para a limpeza de recursos.
aws servicediscovery list-instances \ --service-id
srv-utcrh6wavdkggqtk
A saída é a seguinte:
{ "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" } } ] }
-
Use o namespace de descoberta de serviços, o serviço e parâmetros adicionais, como o nome do cluster do ECS, para consultar detalhes sobre as instâncias de descoberta de serviços.
aws servicediscovery discover-instances \ --namespace-name tutorial \ --service-name myapplication \ --query-parameters ECS_CLUSTER_NAME=tutorial
-
Os registros DNS criados na zona hospedada do Route 53 para o serviço de descoberta de serviço podem ser consultados com os comandos da AWS CLI a seguir:
Usando o ID do namespace, obtenha informações sobre o namespace, o que inclui o ID da zona hospedada do Route 53.
aws servicediscovery \ get-namespace --id
ns-uejictsjen2i4eeg
A saída é a seguinte:
{ "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" } }-
Usando o ID da zona hospedada do Route 53 da etapa anterior (veja o texto em negrito), obtenha o registro de recurso definido para a zona hospedada.
aws route53 list-resource-record-sets \ --hosted-zone-id
Z35JQ4ZFDRYPLV
-
Você também pode consultar o DNS de uma instância na sua VPC usando
dig
.dig +short myapplication.tutorial
Etapa 4: Limpar
Ao concluir este tutorial, limpe os recursos associados para evitar cobranças por recursos não utilizados. Siga estas etapas:
-
Cancele o registro das instâncias do serviço de descoberta de serviços, usando o ID do serviço e o ID da instância anotados anteriormente.
aws servicediscovery deregister-instance \ --service-id
srv-utcrh6wavdkggqtk
\ --instance-id16becc26-8558-4af1-9fbd-f81be062a266
A saída é a seguinte:
{ "OperationId": "
xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv
" } -
Usando o
OperationId
da saída da etapa anterior, verifique se as instâncias do serviço de descoberta de serviços foram canceladas com êxito.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" } } }
-
Exclua o serviço de descoberta de serviços usando o ID do serviço.
aws servicediscovery delete-service \ --id
srv-utcrh6wavdkggqtk
-
Exclua o namespace de descoberta de serviços usando o ID do namespace.
aws servicediscovery delete-namespace \ --id
ns-uejictsjen2i4eeg
A saída é a seguinte:
{ "OperationId": "
c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj
" } -
Usando o
OperationId
da saída da etapa anterior, verifique se o namespace da descoberta de serviços foi excluído com êxito.aws servicediscovery get-operation \ --operation-id
c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj
A saída é a seguinte:
{ "Operation": { "Id": "
c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj
", "Type": "DELETE_NAMESPACE", "Status": "SUCCESS", "CreateDate": 1525984602.211, "UpdateDate": 1525984602.558, "Targets": { "NAMESPACE": "ns-rymlehshst7hhukh", "ROUTE_53_CHANGE_ID": "CJP2A2M86XW3O" } } } -
Atualize para
0
a contagem desejada para o serviço Amazon ECS. Isso deve ser feito para excluir o serviço na etapa seguinte.aws ecs update-service \ --cluster tutorial \ --service ecs-service-discovery \ --desired-count 0
-
Exclua o serviço do Amazon ECS.
aws ecs delete-service \ --cluster tutorial \ --service ecs-service-discovery
-
Exclua o cluster do Amazon ECS.
aws ecs delete-cluster \ --cluster tutorial