[ECS] Service Connect
Amazon ECS Service Connect는 서비스 간 통신을 간편하게 설정하고 모니터링할 수 있게 합니다.
개요
Amazon ECS Service Connect는 서비스 간 통신을 단순화하고 관리하는 기능입니다. 이를 통해 서비스 검색과 서비스 메시를 ECS 구성 내에서 구축할 수 있습니다.
Service Connect의 주요 특징은 다음과 같습니다.
- 서비스 배포에서 관리하는 각 서비스 내부의 전체 구성 제공: 서비스 간 통신에 필요한 복잡한 설정을 ECS 구성 내에서 처리합니다.
- VPC DNS 구성에 의존하지 않는 네임스페이스 내 서비스 참조 방식: 서비스 이름만으로 간편하게 다른 서비스를 호출할 수 있습니다.
- 애플리케이션 모니터링을 위한 표준화된 지표 및 로그: 모든 서비스 연결에 대한 성능 지표와 로그를 제공하여 손쉽게 모니터링할 수 있습니다.

예시를 통해 살펴보면
- WordPress와 MySQL 두 서비스가 서로 연결되어야 하는 상황입니다.
- Service Connect를 사용하면 WordPress 컨테이너 내에서
mysql --host=mysql
명령만으로 MySQL 서비스에 연결할 수 있습니다. mysql
이라는 약식 이름은 동일한 작업의 서비스 연결 프록시에 연결되고, 이 프록시는 로드 밸런싱과 이상값 탐지가 구성된Cloud Map
을 통해 적절한 MySQL 작업에 연결합니다.- 두 프록시 모두 연결 성능을 보고하므로, Amazon ECS 및 Amazon CloudWatch 콘솔에서 성능 지표를 확인할 수 있습니다.
용어
- 포트 이름 (Port Name)
- 작업 정의(Task Definition) 내에서 특정 포트 매핑(Port Mapping)에 할당하는 이름.
- Service Connect에서만 사용.
- 예:
http-port
,database-port
- 클라이언트 별칭 (Client Alias)
- Amazon ECS 서비스 구성에서 엔드포인트(Endpoint)에 사용되는 포트 번호와 DNS 이름을 할당하는 설정.
- Service Connect를 사용하는 클라이언트 서비스가 이 별칭을 사용하여 서비스에 접근.
- 검색 이름(Discovery Name)이 제공되지 않으면, 클라이언트 별칭이 엔드포인트 이름보다 우선함.
- 예:
api:80
,db:5432
serviceName:8080
에서serviceName
이 클라이언트 별칭에 해당.
- 검색 이름 (Discovery Name)
- 작업 정의에서 지정된 포트에 대해 생성되는 선택적 중간 이름.
- AWS Cloud Map 서비스를 생성하는 데 사용.
- 이름이 제공되지 않으면 작업 정의의 포트 이름이 사용.
- AWS Cloud Map에서 서비스 검색을 위한 별칭. (Service Connect 프록시가 이 이름을 사용하여 실제 서비스의 IP 주소와 포트를 찾음)
- AWS Cloud Map 서비스 이름은 네임스페이스 내에서 고유해야 함.
- 엔드포인트 (Endpoint)
- API 또는 웹 사이트에 연결하기 위한 URL.
- 프로토콜, DNS 이름, 포트로 구성.
- Service Connect 엔드포인트:
- Amazon ECS 서비스에 연결하는 엔드포인트를 생성하고, Amazon ECS 서비스에서 엔드포인트에 연결할 작업을 구성.
- URL은 프로토콜, DNS 이름, 포트를 포함.
- 포트는 컨테이너 이미지 내의 애플리케이션과 일치해야 함.
- 예:
http://blog:80
,grpc://checkout:8080
,http://_db.production.internal:99
- Service Connect 서비스 (Service Connect Service)
- Amazon ECS 서비스의 단일 엔드포인트 구성.
- Service Connect 구성의 일부.
- 네임스페이스 (Namespace)
- Service Connect와 함께 사용할 AWS Cloud Map 네임스페이스의 약식 이름 또는 전체 ARN.
- Amazon ECS 서비스 및 클러스터와 같은 AWS 리전에 있어야 함.
- Service Connect는 AWS Cloud Map 네임스페이스를 서로 통신하는 Amazon ECS 작업의 논리적 그룹으로 사용.
- 클라이언트 서비스 (Client Service)
- 네트워크 클라이언트 애플리케이션을 실행하는 서비스.
- 네임스페이스가 구성되어 있어야 함.
- 서비스의 각 작업은 Service Connect 프록시 컨테이너를 통해 네임스페이스의 모든 엔드포인트를 검색하고 연결할 수 있음.
- 예: 프런트엔드, 리버스 프록시, 로드 밸런서
- 클라이언트-서버 서비스 (Client-Server Service)
- 네트워크 또는 웹 서비스 애플리케이션을 실행하는 Amazon ECS 서비스.
- 네임스페이스와 하나 이상의 엔드포인트가 구성되어 있어야 함.
- Service Connect 프록시 컨테이너는 엔드포인트 이름과 포트에서 수신 대기하여 트래픽을 작업의 앱 컨테이너로 보냄.
- 예: 백엔드, 미들웨어, 비즈니스 티어, 대부분의 마이크로서비스
테스트

주의점
Service Connect를 설정하고 프론트엔드가 백엔드 API보다 먼저 배포되면, 그리고 백엔드 서비스가 배포된 후에도 프론트엔드는 여전히 백엔드 API를 찾을 수 없습니다. 그 이유는 프론트엔드 작업이 시작 시점에 엔드포인트를 조회하고, 그 이후에는 새로운 엔드포인트를 동적으로 갱신하지 않기 때문입니다.