

# 서비스 검색을 사용하여 Amazon ECS 서비스를 DNS 이름으로 연결
<a name="service-discovery"></a>

Amazon ECS 서비스는 Amazon ECS 서비스 검색을 사용하도록 구성할 수도 있습니다. 서비스 검색은 AWS Cloud Map API 태스크를 사용하여 Amazon ECS 서비스에 대한 HTTP 및 DNS 네임스페이스를 관리합니다. 자세한 내용은 *AWS Cloud Map 개발자 안내서*의 [AWS Cloud Map란 무엇입니까?](https://docs.aws.amazon.com/cloud-map/latest/dg/Welcome.html)를 참조하세요.

서비스 검색은 다음 AWS 리전에서 사용할 수 있습니다.


| 리전 이름 | 리전 | 
| --- | --- | 
|  미국 동부(버지니아 북부)  |  us-east-1  | 
|  미국 동부(오하이오)  |  us-east-2  | 
|  미국 서부(캘리포니아 북부)  |  us-west-1  | 
|  미국 서부(오리건)  |  us-west-2  | 
|  아프리카(케이프타운)  |  af-south-1  | 
|  아시아 태평양(홍콩)  |  ap-east-1  | 
|  아시아 태평양(타이베이)  |  ap-east-2  | 
|  아시아 태평양(뭄바이)  |  ap-south-1  | 
|  아시아 태평양(하이데라바드)  |  ap-south-2  | 
|  아시아 태평양(도쿄)  |  ap-northeast-1  | 
|  아시아 태평양(서울)  |  ap-northeast-2  | 
|  아시아 태평양(오사카)  |  ap-northeast-3  | 
|  아시아 태평양(싱가포르)  |  ap-southeast-1  | 
|  아시아 태평양(시드니)  |  ap-southeast-2  | 
|  아시아 태평양(자카르타)  |  ap-southeast-3  | 
|  아시아 태평양(멜버른)  |  ap-southeast-4  | 
|  아시아 태평양(말레이시아)  |  ap-southeast-5  | 
|  아시아 태평양(뉴질랜드)  |  ap-southeast-6  | 
|  아시아 태평양(태국)  |  ap-southeast-7  | 
|  캐나다(중부)  |  ca-central-1  | 
|  캐나다 서부(캘거리)  |  ca-west-1  | 
|  중국(베이징)  |  cn-north-1  | 
|  중국(닝샤)  |  cn-northwest-1  | 
|  유럽(프랑크푸르트)  |  eu-central-1  | 
|  유럽(취리히)  |  eu-central-2  | 
|  유럽(아일랜드)  |  eu-west-1  | 
|  유럽(런던)  |  eu-west-2  | 
|  유럽(파리)  |  eu-west-3  | 
|  유럽(밀라노)  |  eu-south-1  | 
|  유럽(스톡홀름)  |  eu-north-1  | 
|  이스라엘(텔아비브)  |  il-central-1  | 
|  유럽(스페인)  |  eu-south-2  | 
|  중동(UAE)  |  me-central-1  | 
|  멕시코(중부)  |  mx-central-1  | 
|  중동(바레인)  |  me-south-1  | 
|  남아메리카(상파울루)  |  sa-east-1  | 
|  AWS GovCloud(미국 동부)  |  us-gov-east-1  | 
|  AWS GovCloud(미국 서부)  |  us-gov-west-1  | 

## 서비스 검색 개념
<a name="service-discovery-concepts"></a>

서비스 검색은 다음과 같은 구성 요소로 이루어집니다.
+ **서비스 검색 네임스페이스**: 트래픽을 라우팅할 동일한 도메인 이름(예: `example.com`)을 공유하는 서비스 검색 서비스의 논리적 그룹입니다. `aws servicediscovery create-private-dns-namespace` 명령을 직접 호출하거나 Amazon ECS 콘솔을 사용하여 네임스페이스를 생성할 수 있습니다. `aws servicediscovery list-namespaces` 명령을 사용하여 현재 계정에서 생성한 네임스페이스에 대한 요약 정보를 볼 수 있습니다. 서비스 검색 명령에 대한 자세한 정보는 *AWS Cloud Map(서비스 검색) AWS CLI 참조 가이드*의 `[create-private-dns-namespace](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/create-private-dns-namespace.html)` 및 `[list-namespaces](https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/list-namespaces.html)`를 참조하세요.
+ **서비스 검색 서비스**: 서비스 검색 네임스페이스 내에 존재하며 네임스페이스에 대한 서비스 이름과 DNS 구성으로 구성되어 있습니다. 핵심 구성 요소는 다음과 같습니다.
  + **서비스 레지스트리**: DNS 또는 AWS Cloud Map API 태스크를 통해 서비스를 검색하고 서비스 연결에 사용할 수 있는 하나 이상의 가용 엔드포인트를 가져올 수 있도록 허용합니다.
+ **서비스 검색 인스턴스**: 서비스 검색 서비스 내에 존재하며 서비스 디렉터리의 각 Amazon ECS 서비스와 연결된 속성들로 구성됩니다.
  + **인스턴스 속성**: 다음 메타데이터는 서비스 검색을 사용하도록 구성된 각 Amazon ECS 서비스에 대한 사용자 지정 속성으로 추가됩니다.
    + **`AWS_INSTANCE_IPV4`** – `A` 레코드의 경우, DNS 쿼리 및 AWS Cloud Map에 응답하여 Route 53이 반환하는 IPv4 주소는 인스턴스 세부 정보(예: `192.0.2.44`)를 검색할 때 반환됩니다.
    + **`AWS_INSTANCE_IPV6`** – `AAAA` 레코드의 경우 DNS 쿼리 및 AWS Cloud Map에 응답하여 Route 53이 반환하는 IPv6 주소는 인스턴스 세부 정보(예: ` 2001:0db8:85a3:0000:0000:abcd:0001:2345`)를 검색할 때 반환됩니다. Amazon ECS 듀얼 스택 서비스에 대해 `AWS_INSTANCE_IPv4` 및 `AWS_INSTANCE_IPv6`가 모두 추가됩니다. Amazon ECS IPv6 전용 서비스에 대해서는 `AWS_INSTANCE_IPv6`만 추가됩니다.
    + **`AWS_INSTANCE_PORT`** – 서비스 검색 서비스와 연계된 포트 값입니다.
    + **`AVAILABILITY_ZONE`** – 작업이 시작된 가용 영역입니다. EC2를 사용하는 태스크의 경우 이는 컨테이너 인스턴스가 존재하는 가용 영역입니다. Fargate를 사용하는 태스크의 경우 이는 탄력적 네트워크 인터페이스가 존재하는 가용 영역입니다.
    + **`REGION`** – 작업이 존재하는 리전입니다.
    + **`ECS_SERVICE_NAME`** – 작업이 속한 Amazon ECS 서비스의 이름입니다.
    + **`ECS_CLUSTER_NAME`** – 작업이 속한 Amazon ECS 클러스터의 이름입니다.
    + **`EC2_INSTANCE_ID`** – 작업이 배치된 컨테이너 인스턴스의 ID입니다. 태스크에서 Fargate를 사용하는 경우 이 사용자 지정 속성은 추가되지 않습니다.
    + **`ECS_TASK_DEFINITION_FAMILY`** – 작업에서 사용하는 태스크 정의 패밀리입니다.
    + **`ECS_TASK_SET_EXTERNAL_ID`** – 작업 세트가 외부 배포를 위해 생성되고 서비스 검색 레지스트리와 연관되는 경우 `ECS_TASK_SET_EXTERNAL_ID` 속성에는 작업 세트의 외부 ID가 포함됩니다.
+ **Amazon ECS 상태 확인**: Amazon ECS는 컨테이너 수준의 상태 확인을 정기적으로 수행합니다. 상태 확인을 전달하지 않는 엔드포인트는 DNS 라우팅에서 제거되고 비정상으로 상태가 표시됩니다.

## 서비스 검색 고려 사항
<a name="service-discovery-considerations"></a>

서비스 검색을 사용할 때는 다음 사항을 고려해야 합니다.
+ 플랫폼 버전 v1.1.0 이상을 사용 중인 Fargate의 작업에 대해 서비스 검색이 지원됩니다. 자세한 내용은 [Amazon ECS에 대한 Fargate 플랫폼 버전](platform-fargate.md) 섹션을 참조하세요.
+ 서비스 검색을 사용하도록 구성된 서비스는 서비스당 작업 수가 1,000개로 제한됩니다. 이는 Route 53 서비스 할당량 때문입니다.
+ Amazon ECS 콘솔의 서비스 생성 워크플로는 서비스를 프라이빗 DNS 네임스페이스에 등록하는 것만 지원합니다. AWS Cloud Map 프라이빗 DNS 네임스페이스가 생성되면 Route 53 프라이빗 호스팅 영역이 자동으로 생성됩니다.
+ DNS 확인에 성공하려면 VPC DNS 속성을 구성해야 합니다. 속성을 구성하는 방법에 대한 자세한 정보는 *Amazon VPC 사용 설명서*의 [VPC에서 DNS 지원](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support)을 참조하세요.
+ Amazon ECS는 공유 AWS Cloud Map 네임스페이스에 서비스 등록을 지원하지 않습니다.
+ 서비스 검색 서비스용으로 생성된 DNS 레코드는 퍼블릭 네임스페이스가 사용될 때도 퍼블릭 IP 주소 대신 항상 작업의 프라이빗 IP 주소로 등록합니다.
+ 서비스 검색을 위해서는 작업에서 `awsvpc`, `bridge` 또는 `host` 네트워크 모드(`none`는 지원되지 않음)를 지정해야 합니다.
+ 서비스 태스크 정의가 `awsvpc` 네트워크 모드를 사용하는 경우 각 서비스 태스크에 대해 `SRV` 또는 `A` 레코드를 임의로 조합해 생성할 수 있습니다. `SRV` 레코드를 사용하는 경우 포트가 필요합니다. 서비스가 듀얼 스택 서브넷을 사용하는 경우 `AAAA` 레코드를 추가로 생성할 수 있습니다. 서비스가 IPv6 전용 서브넷을 사용하는 경우 `A` 레코드를 생성할 수 없습니다.
+ 서비스 태스크 정의에서 `bridge` 또는 `host` 네트워크 모드를 사용하는 경우 SRV 레코드는 유일하게 지원되는 DNS 레코드 유형입니다. 각 서비스 태스크에 대한 SRV 레코드를 생성합니다. SRV 레코드는 태스크 정의로부터 컨테이너 이름과 컨테이너 포트 조합을 지정해야 합니다.
+ 서비스 검색 서비스를 위한 DNS 레코드는 VPC 내에서 쿼리가 가능합니다. 이들은 `<service-discovery-service-name>.<service-discovery-namespace>` 형식을 사용합니다.
+ 서비스 이름에 대해 DNS 쿼리를 수행할 때 `A` 및 `AAAA` 레코드는 태스크에 해당하는 IP 주소 세트를 반환합니다. `SRV` 레코드는 각 태스크에 대한 IP 주소 및 포트 세트를 반환합니다.
+ 정상 레코드가 8개 이하일 경우 Route 53은 모든 DNS 쿼리에 모든 정상 레코드로 응답합니다.
+ 모든 레코드가 비정상일 경우 Route 53는 최대 8개의 비정상 레코드로 DNS 쿼리에 응답합니다.
+ 로드 밸런서를 사용하는 서비스에 대한 서비스 검색을 구성할 수 있지만, 서비스 검색 트래픽은 항상 로드 밸런서가 아닌 태스크로 라우팅됩니다.
+ 서비스 검색은 Classic Load Balancer의 사용을 지원하지 않습니다.
+ 서비스 검색 서비스에 대해 Amazon ECS가 관리하는 컨테이너 수준의 상태 확인을 사용하는 것이 좋습니다.
  + **HealthCheckCustomConfig**—Amazon ECS가 사용자를 대신하여 상태 확인을 관리합니다. Amazon ECS는 컨테이너와 상태 확인, 태스크 상태의 정보를 사용하여 AWS Cloud Map을 통해 상태를 업데이트합니다. 서비스 검색 서비스를 생성할 때 `--health-check-custom-config` 파라미터를 사용하여 이를 지정합니다. 자세한 정보는 *AWS Cloud Map API 참조*의 [HealthCheckCustomConfig](https://docs.aws.amazon.com/cloud-map/latest/api/API_HealthCheckCustomConfig.html)를 참조하세요.
+ 서비스 검색이 사용될 때 생성되는 AWS Cloud Map 리소스는 수동으로 정리해야 합니다.
+ 작업과 인스턴스는 컨테이너 상태 확인이 값을 반환할 때까지 `UNHEALTHY`로 등록됩니다. 상태 확인을 통과하면 상태가 `HEALTHY`로 업데이트됩니다. 컨테이너 상태 확인이 실패하면 서비스 검색 인스턴스의 등록이 취소됩니다.

## 서비스 검색 가격
<a name="service-discovery-pricing"></a>

Amazon ECS 서비스 검색을 사용하는 고객들에게는 Route 53 리소스 및 AWS Cloud Map 검색 API 작업에 대해 요금이 부과됩니다. 여기에는 서비스 레지스트리에 대한 Route 53 호스팅 영역 및 쿼리 생성을 위한 비용이 포함됩니다. 자세한 정보는 *AWS Cloud Map 개발자 안내서*의 [AWS Cloud Map 요금](https://docs.aws.amazon.com/cloud-map/latest/dg/cloud-map-pricing.html)을 참조하세요.

Amazon ECS는 컨테이너 수준의 상태 확인을 수행하고 이를 AWS Cloud Map 사용자 지정 상태 확인 API 작업에 공개합니다. 고객들은 추가 비용 없이 이를 사용할 수 있습니다. 공개된 태스크에 대해 추가적인 네트워크 상태 확인을 구성하는 경우에는 이러한 상태 확인에 대해 요금이 부과됩니다.