서비스 검색을 사용하는 새 Amazon ECS 서비스 생성
AWS CLI를 사용하여 서비스 검색을 사용하는 Fargate 태스크가 포함된 서비스를 생성하는 방법을 알아보세요.
서비스 검색을 지원하는 AWS 리전 목록은 서비스 검색을 사용하여 Amazon ECS 서비스를 DNS 이름으로 연결 섹션을 참조하세요.
Fargate가 지원되는 리전에 대한 자세한 정보는 AWS Fargate의 Amazon ECS에 대해 지원되는 리전 섹션을 참조하세요.
참고
듀얼 스택 서비스 엔드포인트를 사용하면 AWS CLI, SDK 및 Amazon ECS API에서 IPv4 및 IPv6 모두를 통해 Amazon ECS와 상호 작용할 수 있습니다. 자세한 내용은 Amazon ECS 듀얼 스택 엔드포인트 사용 섹션을 참조하세요.
사전 조건
이 자습서를 시작하기 전에 다음 사전 조건을 충족하는지 확인하세요.
-
최신 버전의 AWS CLI가 설치 및 구성됩니다. 자세한 내용은 AWS CLI 최신 버전 설치 또는 업데이트를 참조하세요.
-
Amazon ECS 사용 설정 섹션에 설명된 단계를 완료했습니다.
-
IAM 사용자는 AmazonECS_FullAccess IAM 정책 예제에 지정된 필수 권한을 가집니다.
-
하나 이상의 VPC 및 보안 그룹을 생성했습니다. 자세한 내용은 Virtual Private Cloud 생성 섹션을 참조하세요.
1단계: AWS Cloud Map에서 서비스 검색 리소스 생성
이 단계에 따라 서비스 검색 네임스페이스 및 서비스 검색 서비스를 생성합니다.
-
프라이빗 Cloud Map 서비스 검색 네임스페이스를 생성합니다. 이 예에서는 이름이
tutorial
인 네임스페이스를 생성합니다.vpc-abcd1234
를 기존 VPC 중 하나의 ID로 교체합니다.aws servicediscovery create-private-dns-namespace \ --name
tutorial
\ --vpcvpc-abcd1234
이 명령의 출력은 다음과 같습니다.
{ "OperationId": "
h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e
" } -
이전 단계의 출력에서
OperationId
를 사용하여 프라이빗 네임스페이스가 성공적으로 생성되었는지 확인합니다. 후속 명령에서 이를 사용하기 때문에 네임스페이스 ID를 기록해 둡니다.aws servicediscovery get-operation \ --operation-id
h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e
출력값은 다음과 같습니다.
{ "Operation": { "Id": "
h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e
", "Type": "CREATE_NAMESPACE", "Status": "SUCCESS", "CreateDate": 1519777852.502, "UpdateDate": 1519777856.086, "Targets": { "NAMESPACE": "ns-uejictsjen2i4eeg
" } } } -
이전 단계의 출력에서
NAMESPACE
ID를 사용하여 서비스 검색 서비스를 생성합니다. 이 예제에서는myapplication
라는 서비스를 생성합니다. 후속 명령에서 이를 사용하기 때문에 서비스 ID 및 ARN을 기록해 둡니다.aws servicediscovery create-service \ --name
myapplication
\ --dns-config "NamespaceId="ns-uejictsjen2i4eeg
",DnsRecords=[{Type="A
",TTL="300
"}]" \ --health-check-custom-config FailureThreshold=1
출력값은 다음과 같습니다.
{ "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" } }
2단계: Amazon ECS 리소스 생성
이 단계에 따라 Amazon ECS 클러스터, 태스크 정의, 서비스를 생성합니다.
-
Amazon ECS 클러스터를 생성합니다. 이 예에서는 이름이
tutorial
인 클러스터를 생성합니다.aws ecs create-cluster \ --cluster-name
tutorial
-
Fargate와 호환되며
awsvpc
네트워크 모드를 사용하는 태스크 정의를 등록합니다. 다음 단계를 따릅니다.-
다음과 같은 태스크 정의의 내용으로 이름이
fargate-task.json
인 파일을 생성합니다.{ "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" }
-
fargate-task.json
파일을 사용하여 태스크 정의를 등록합니다.aws ecs register-task-definition \ --cli-input-json file://fargate-task.json
-
-
다음 단계에 따라 ECS 서비스를 생성합니다.
-
생성하려는 ECS 서비스의 내용으로 이름이
ecs-service-discovery.json
인 파일을 생성합니다. 이 예에서는 이전 단계에서 생성된 태스크 정의를 사용합니다. 예제 태스크 정의에서awsvpcConfiguration
네트워크 모드가 사용되기 때문에awsvpc
이 필요합니다.Fargate 시작 유형을 지정하고 서비스 검색을 지원하는
LATEST
플랫폼 버전을 지정하여 ECS 서비스를 생성합니다. 서비스 검색 서비스를 AWS Cloud Map에서 생성할 때registryArn
은 반환된 ARN입니다.securityGroups
및subnets
은 반드시 Cloud Map 네임스페이스를 생성하는 데 사용되는 VPC에 속해야 합니다. Amazon VPC 콘솔에서 보안 그룹 및 서브넷 ID를 얻을 수 있습니다.{ "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
} -
ecs-service-discovery.json
를 사용하여 ECS 서비스를 생성합니다.aws ecs create-service \ --cli-input-json file://ecs-service-discovery.json
-
3단계: AWS Cloud Map에서 서비스 검색 확인
서비스 검색 정보를 쿼리하면 모든 것이 적절하게 생성되었는지 확인할 수 있습니다. 서비스 검색이 구성된 후, AWS Cloud Map API 작업을 사용하거나 VPC 내의 인스턴스로부터 dig
를 호출할 수 있습니다. 다음 단계를 따릅니다.
-
서비스 검색 서비스 ID를 사용하여 서비스 검색 인스턴스를 나열합니다. 리소스 정리를 위해 인스턴스 ID(굵게 표시됨)를 기록해 둡니다.
aws servicediscovery list-instances \ --service-id
srv-utcrh6wavdkggqtk
출력값은 다음과 같습니다.
{ "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" } } ] }
-
서비스 검색 네임스페이스 및 서비스, ECS 클러스터 이름과 같은 추가 파라미터를 사용하여 서비스 검색 인스턴스에 대한 세부 정보를 쿼리합니다.
aws servicediscovery discover-instances \ --namespace-name tutorial \ --service-name myapplication \ --query-parameters ECS_CLUSTER_NAME=tutorial
-
다음 AWS CLI 명령을 사용하면 서비스 검색 서비스의 Route 53 호스팅 영역에서 생성된 DNS 레코드를 쿼리할 수 있습니다.
-
네임스페이스 ID를 사용하여 Route 53 호스팅 영역 ID가 포함된 네임스페이스에 대한 정보를 가져옵니다.
aws servicediscovery \ get-namespace --id
ns-uejictsjen2i4eeg
출력값은 다음과 같습니다.
{ "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" } } -
이전 단계에서 Route 53 호스팅 영역 ID를 사용하여(굵게 표시된 텍스트 참조) 해당 호스팅 영역에 대한 리소스 레코드 세트를 가져옵니다.
aws route53 list-resource-record-sets \ --hosted-zone-id
Z35JQ4ZFDRYPLV
-
-
dig
를 사용하여 VPC 내의 인스턴스에서 DNS를 쿼리할 수 있습니다.dig +short myapplication.tutorial
4단계: 정리
이 자습서를 완료한 후에 사용하지 않는 리소스에 대한 요금이 발생하는 것을 방지하기 위해 연결된 리소스를 정리합니다. 다음 단계를 따릅니다.
-
이전에 기록한 서비스 ID 및 인스턴스 ID를 사용하여 서비스 검색 서비스 인스턴스의 등록을 취소합니다.
aws servicediscovery deregister-instance \ --service-id
srv-utcrh6wavdkggqtk
\ --instance-id16becc26-8558-4af1-9fbd-f81be062a266
출력값은 다음과 같습니다.
{ "OperationId": "
xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv
" } -
이전 단계의 출력에서
OperationId
를 사용하여 서비스 검색 서비스 인스턴스의 등록이 성공적으로 취소되었는지 확인합니다.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" } } }
-
서비스 ID를 사용하여 서비스 검색 서비스를 삭제합니다.
aws servicediscovery delete-service \ --id
srv-utcrh6wavdkggqtk
-
네임스페이스 ID를 사용하여 서비스 검색 네임스페이스를 삭제합니다.
aws servicediscovery delete-namespace \ --id
ns-uejictsjen2i4eeg
출력값은 다음과 같습니다.
{ "OperationId": "
c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj
" } -
이전 단계의 출력에서
OperationId
를 사용하여 서비스 검색 네임스페이스가 성공적으로 삭제되었는지 확인합니다.aws servicediscovery get-operation \ --operation-id
c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj
출력값은 다음과 같습니다.
{ "Operation": { "Id": "
c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj
", "Type": "DELETE_NAMESPACE", "Status": "SUCCESS", "CreateDate": 1525984602.211, "UpdateDate": 1525984602.558, "Targets": { "NAMESPACE": "ns-rymlehshst7hhukh", "ROUTE_53_CHANGE_ID": "CJP2A2M86XW3O" } } } -
Amazon ECS 서비스에 대해 원하는 개수를
0
으로 업데이트합니다. 다음 단계에서 서비스를 삭제하려면 이를 반드시 수행해야 합니다.aws ecs update-service \ --cluster tutorial \ --service ecs-service-discovery \ --desired-count 0
-
Amazon ECS 서비스를 삭제합니다.
aws ecs delete-service \ --cluster tutorial \ --service ecs-service-discovery
-
Amazon ECS 클러스터를 삭제합니다.
aws ecs delete-cluster \ --cluster tutorial