Amazon ECS 서비스 상호 연결하기
Amazon ECS 서비스 상호 연결하기
Amazon ECS 태스크에서 실행되는 애플리케이션은 종종 인터넷에서 연결을 받거나, Amazon ECS 서비스에서 실행되는 다른 애플리케이션에 연결해야 해요. 인터넷에서 외부 연결이 필요하다면 Elastic Load Balancing 사용을 권장합니다. 통합된 로드 밸런싱에 대한 자세한 내용은 "Use load balancing to distribute Amazon ECS service traffic"을 참고하세요.
출처: 문서
본문
Amazon ECS 태스크에서 실행되는 애플리케이션은 종종 인터넷에서 연결을 받거나, Amazon ECS 서비스에서 실행되는 다른 애플리케이션에 연결해야 합니다. 인터넷에서 외부 연결이 필요하다면 Elastic Load Balancing을 권장합니다.
애플리케이션이 Amazon ECS 서비스에서 실행되는 다른 애플리케이션에 연결해야 한다면, Amazon ECS는 로드 밸런서 없이 이를 수행하는 다음 방법을 제공합니다.
Amazon ECS Service Connect
Service Connect를 권장합니다. 이는 서비스 디스커버리, 연결성, 트래픽 모니터링을 위한 Amazon ECS 구성을 제공해요. Service Connect를 사용하면 애플리케이션은 짧은 이름(short names)과 표준 포트로 같은 클러스터, 다른 클러스터, 같은 AWS Region의 VPC를 가로질러 Amazon ECS 서비스에 연결할 수 있습니다.
Service Connect를 사용하면 Amazon ECS가 서비스 디스커버리의 모든 부분을 관리합니다. 발견 가능한 이름 생성, 태스크가 시작·중지될 때 각 태스크의 엔트리를 동적으로 관리, 이름을 발견하도록 구성된 각 태스크에서 에이전트 실행이 그 예입니다. 애플리케이션은 DNS 이름의 표준 기능을 사용해 이름을 조회하고 연결할 수 있어요. 애플리케이션이 이미 이렇게 한다면 Service Connect를 사용하기 위해 애플리케이션을 수정할 필요가 없습니다.
각 서비스와 태스크 정의 안에 전체 구성을 제공하면, Amazon ECS가 각 서비스 배포에서 이 구성의 변경을 관리해 배포의 모든 태스크가 동일하게 동작하도록 보장합니다.
예를 들어 서비스 디스커버리로서 DNS의 흔한 문제는 마이그레이션 제어입니다. DNS 이름을 새 교체 IP 주소를 가리키도록 바꾸면, 모든 클라이언트가 새 서비스를 사용하기 시작하는 데 최대 TTL 시간이 걸릴 수 있어요. Service Connect를 사용하면 클라이언트 배포가 클라이언트 태스크를 교체해 구성을 업데이트합니다. 배포 서킷 브레이커와 다른 배포 구성을 구성해 다른 배포와 같은 방식으로 Service Connect 변경에 영향을 줄 수 있습니다.
자세한 내용은 "Use Service Connect to connect Amazon ECS services with short names"을 참고하세요.
Amazon ECS 서비스 디스커버리
서비스 간 통신의 또 다른 방법은 서비스 디스커버리를 사용한 직접 통신입니다. 이 방식에서는 AWS Cloud Map 서비스 디스커버리 통합을 Amazon ECS와 함께 사용할 수 있어요. 서비스 디스커버리를 사용하면 Amazon ECS가 시작된 태스크 목록을 AWS Cloud Map에 동기화하며, AWS Cloud Map이 특정 서비스의 하나 이상 태스크의 내부 IP 주소로 해석되는 DNS 호스트 이름을 유지합니다. Amazon VPC의 다른 서비스는 이 DNS 호스트 이름을 사용해 내부 IP 주소로 다른 컨테이너에 직접 트래픽을 보낼 수 있습니다.
이 서비스 간 통신 방식은 낮은 지연 시간을 제공합니다. 컨테이너 사이에 추가 구성 요소가 없고, 트래픽이 한 컨테이너에서 다른 컨테이너로 직접 이동하기 때문입니다.
이 방식은 각 태스크가 고유 IP 주소를 갖는 awsvpc 네트워크 모드를 사용할 때 적합합니다. 대부분의 소프트웨어는 IP 주소로 직접 해석되는 DNS A 레코드만 지원합니다. awsvpc 네트워크 모드를 사용할 때 각 태스크의 IP 주소는 A 레코드입니다. 그러나 bridge 네트워크 모드를 사용하면 여러 컨테이너가 같은 IP 주소를 공유할 수 있습니다. 게다가 동적 포트 매핑은 컨테이너가 그 단일 IP 주소에서 무작위로 포트 번호를 할당받게 합니다. 이 시점에는 A 레코드만으로는 서비스 디스커버리에 충분하지 않습니다. SRV 레코드도 사용해야 합니다. 이 레코드 유형은 IP 주소와 포트 번호를 모두 추적할 수 있지만, 애플리케이션을 적절히 구성해야 합니다. 사용하는 일부 사전 빌드 애플리케이션은 SRV 레코드를 지원하지 않을 수 있습니다.
awsvpc 네트워크 모드의 또 다른 장점은 각 서비스에 고유한 보안 그룹이 있다는 것입니다. 이 보안 그룹을 구성해 해당 서비스와 통신해야 하는 특정 업스트림 서비스의 인바운드 연결만 허용할 수 있어요.
서비스 디스커버리를 사용한 직접 서비스 간 통신의 주요 단점은 재시도와 연결 실패 처리를 위해 추가 로직을 구현해야 한다는 것입니다. DNS 레코드에는 캐시되는 기간을 제어하는 TTL(time-to-live)이 있습니다. DNS 레코드가 업데이트되고 캐시가 만료되어 애플리케이션이 최신 버전의 DNS 레코드를 가져오는 데 시간이 걸립니다. 따라서 애플리케이션이 더 이상 존재하지 않는 다른 컨테이너를 가리키도록 DNS 레코드를 해석하게 될 수 있어요. 애플리케이션은 재시도를 처리하고 잘못된 백엔드를 무시하는 로직이 있어야 합니다.
자세한 내용은 "Use service discovery to connect Amazon ECS services with DNS names"을 참고하세요.
Amazon VPC Lattice
Amazon VPC Lattice는 관리형 애플리케이션 네트워킹 서비스로, Amazon ECS 고객이 코드를 수정하지 않고 AWS 컴퓨팅 서비스, VPC, 계정에 걸쳐 구축된 애플리케이션을 관측·보안·모니터링하는 데 사용합니다.
VPC Lattice는 컴퓨팅 리소스의 모음인 대상 그룹(target groups)을 사용합니다. 이러한 대상이 애플리케이션·서비스를 실행하며 Amazon EC2 인스턴스, IP 주소, Lambda 함수, Application Load Balancer가 될 수 있습니다. Amazon ECS 서비스를 VPC Lattice 대상 그룹에 연결하면, Amazon ECS 태스크를 VPC Lattice의 IP 대상으로 활성화할 수 있게 됩니다. 등록된 서비스의 태스크가 시작될 때 Amazon ECS가 태스크를 VPC Lattice 대상 그룹에 자동으로 등록합니다.
자세한 내용은 "Use Amazon VPC Lattice to connect, observe, and secure your Amazon ECS services"를 참고하세요.
네트워크 모드 호환성 표
다음 표는 이러한 옵션과 태스크 네트워크 모드 간의 호환성을 다룹니다. 표에서 "client"는 Amazon ECS 태스크 안에서 연결을 만드는 애플리케이션을 의미합니다.
| 상호 연결 옵션 | Bridged | awsvpc | Host |
|---|---|---|---|
| 서비스 디스커버리 | 예, 단 hostPort 없는 DNS의 SRV 레코드를 클라이언트가 알아야 함 |
예 | 예, 단 hostPort 없는 DNS의 SRV 레코드를 클라이언트가 알아야 함 |
| Service Connect | 예 | 예 | 아니요 |
| VPC Lattice | 예 | 예 | 예 |
더 알아보기 (Learn more)
- Service Connect와 서비스 디스커버리에 대한 자세한 내용은 AWS 공식 문서를 참고해 주세요.