Amazon ECS Service Connect 구성 요소

Amazon ECS Service Connect 구성 요소

Amazon ECS Service Connect를 사용하면 네트워크 요청을 받는 서버 애플리케이션(클라이언트-서버 서비스)을 실행하거나 요청을 보내는 클라이언트 애플리케이션(클라이언트 서비스)을 실행하도록 각 Amazon ECS 서비스를 구성해요.

출처: 문서

본문

Amazon ECS Service Connect를 사용하면 각 Amazon ECS 서비스를 네트워크 요청을 받는 서버 애플리케이션(클라이언트-서버 서비스)을 실행하도록 또는 요청을 만드는 클라이언트 애플리케이션(클라이언트 서비스)을 실행하도록 구성합니다. Service Connect 사용을 시작할 준비를 할 때는 클라이언트-서버 서비스로 시작하세요. 새 서비스나 기존 서비스에 Service Connect 구성을 추가할 수 있습니다. Amazon ECS는 네임스페이스에 Service Connect 엔드포인트를 만듭니다. 또한 Amazon ECS는 현재 실행 중인 작업을 교체하기 위해 서비스에 새 배포를 만듭니다. 기존 작업과 다른 애플리케이션, 외부 애플리케이션은 계속 기존 엔드포인트에 연결할 수 있습니다.

클라이언트-서버 서비스가 스케일 아웃으로 작업을 추가하면 클라이언트의 새 연결이 모든 작업 사이에서 균형을 이루게 됩니다. 클라이언트-서버 서비스가 업데이트되면 클라이언트의 새 연결이 새 버전의 작업 사이에서 균형을 이룹니다. 기존 작업은 새 엔드포인트를 해석하고 연결할 수 없습니다. 같은 네임스페이스에 Service Connect 구성이 있고 이 배포 이후 실행을 시작하는 새 작업만 이 엔드포인트를 해석하고 연결할 수 있습니다.

이는 서버 애플리케이션의 운영자가 언제든지 구성을 변경할 수 있지만, 클라이언트 애플리케이션의 운영자가 앱 구성을 언제 변경할지 결정한다는 것을 의미합니다. 네임스페이스의 엔드포인트 목록은 네임스페이스의 어떤 서비스가 배포될 때마다 변경될 수 있습니다. 기존 작업과 교체 작업은 가장 최근 배포 이후와 동일하게 계속 동작합니다.

다음 예시를 고려하세요.

첫째, 단일 AWS CloudFormation 템플릿과 단일 CloudFormation 스택에서 공용 인터넷에 공개되는 애플리케이션을 만든다고 가정하세요. 공개 검색과 연결 가능성은 CloudFormation이 마지막으로 만들어야 하며, 프론트엔드 클라이언트 서비스를 포함해야 합니다. 프론트엔드 클라이언트 서비스가 실행되고 공개되지만 백엔드가 없는 기간을 방지하려면 서비스가 이 순서로 생성되어야 합니다. 이는 그 기간 동안 공개에게 오류 메시지가 전송되지 않도록 제거합니다. AWS CloudFormation에서는 dependsOn을 사용해 여러 Amazon ECS 서비스를 병렬로 또는 동시에 만들 수 없음을 CloudFormation에 표시해야 합니다. 클라이언트 작업이 연결하는 각 백엔드 클라이언트-서버 서비스에 대해 프론트엔드 클라이언트 서비스에 dependsOn을 추가해야 합니다.

둘째, Service Connect 구성 없이 프론트엔드 서비스가 존재한다고 가정하세요. 작업이 기존 백엔드 서비스에 연결하고 있습니다. 먼저 프론트엔드가 DNS 또는 clientAlias에서 사용하는 것과 같은 이름으로 백엔드 서비스에 클라이언트-서버 Service Connect 구성을 추가하세요. 이는 새 배포를 만들므로, 모든 배포 롤백 감지 또는 AWS Management Console, AWS CLI, AWS SDK 및 기타 방법을 사용해 백엔드 서비스를 이전 배포 및 구성으로 롤백하고 되돌릴 수 있습니다. 백엔드 서비스의 성능과 동작이 만족스러우면 프론트엔드 서비스에 클라이언트 또는 클라이언트-서버 Service Connect 구성을 추가하세요. 새 배포의 작업만 해당 새 작업에 추가된 Service Connect 프록시를 사용합니다. 이 구성에 문제가 있으면 배포 롤백 감지 또는 AWS Management Console, AWS CLI, AWS SDK 및 기타 방법을 사용해 백엔드 서비스를 이전 배포 및 구성으로 롤백하고 되돌릴 수 있습니다.

Service Connect 대신 DNS 기반의 다른 서비스 검색 시스템을 사용하면 로컬 DNS 캐시가 만료된 후(일반적으로 여러 시간이 걸림) 프론트엔드나 클라이언트 애플리케이션이 새 엔드포인트와 변경된 엔드포인트 구성을 사용하기 시작합니다.

네트워킹(Networking)

기본적으로 Service Connect 프록시는 작업 정의 포트 매핑의 containerPort에서 수신 대기합니다. 보안 그룹 규칙은 클라이언트가 실행될 서브넷에서 이 포트로 들어오는(ingress) 트래픽을 허용해야 합니다.

Service Connect 서비스 구성에서 포트 번호를 설정해도 Service Connect 프록시가 수신 대기하는 클라이언트-서버 서비스의 포트는 변경되지 않습니다. 이 포트 번호를 설정하면 Amazon ECS는 클라이언트 서비스가 연결하는 엔드포인트의 포트를 해당 작업 내부의 Service Connect 프록시에서 변경합니다. 클라이언트 서비스의 프록시는 containerPort를 사용해 클라이언트-서버 서비스의 프록시에 연결합니다.

Service Connect 프록시가 수신 대기하는 포트를 변경하려면 클라이언트-서버 서비스의 Service Connect 구성에서 ingressPortOverride를 변경하세요. 이 포트 번호를 변경하면 이 서비스로의 트래픽에 사용되는 이 포트의 인바운드 트래픽을 허용해야 합니다.

Service Connect용으로 구성된 Amazon ECS 서비스로 애플리케이션이 보내는 트래픽은 Amazon VPC와 서브넷에 사용 중인 containerPort와 ingressPortOverride 포트 번호를 허용하는 경로 테이블 규칙과 네트워크 ACL 규칙이 필요합니다.

Service Connect를 사용해 VPC 사이에서 트래픽을 보낼 수 있습니다. 경로 테이블 규칙, 네트워크 ACL, 보안 그룹에 대한 동일한 요구 사항이 두 VPC 모두에 적용됩니다. 예를 들어 두 클러스터가 서로 다른 VPC에서 작업을 만듭니다. 각 클러스터의 서비스가 같은 네임스페이스를 사용하도록 구성되었습니다. 이 두 서비스의 애플리케이션은 VPC DNS 구성 없이 네임스페이스의 모든 엔드포인트를 해석할 수 있습니다. 그러나 VPC 피어링, VPC 또는 서브넷 경로 테이블, VPC 네트워크 ACL이 containerPort와 ingressPortOverride 포트 번호의 트래픽을 허용하지 않으면 프록시는 연결할 수 없습니다.

bridge 네트워킹 모드를 사용하는 작업의 경우 상위 동적 포트 범위의 트래픽을 허용하는 인바운드 규칙이 있는 보안 그룹을 만들고, 그 보안 그룹을 Service Connect 클러스터의 모든 EC2 인스턴스에 할당해야 합니다.

Service Connect 프록시

Service Connect 구성으로 서비스를 만들거나 업데이트하면 Amazon ECS는 각 새 작업이 시작될 때 새 컨테이너를 추가합니다. 별도의 컨테이너를 사용하는 이 패턴을 사이드카(sidecar)라고 합니다. 이 컨테이너는 작업 정의에 없으며 구성할 수 없습니다. Amazon ECS가 서비스의 컨테이너 구성을 관리합니다. 이를 통해 Service Connect 없이 여러 서비스, 네임스페이스, 작업 간에 동일한 작업 정의를 재사용할 수 있습니다.

프록시 리소스

  • 작업 정의의 경우 CPU와 메모리 매개변수를 설정해야 합니다. Service Connect 프록시 컨테이너를 위해 작업 CPU와 메모리에 추가 256 CPU 유닛과 최소 64 MiB 메모리를 추가할 것을 권장합니다. AWS Fargate에서 설정할 수 있는 최소 메모리 양은 512 MiB입니다. Amazon EC2에서는 작업 정의 메모리가 필요합니다.
  • 서비스의 경우 Service Connect 구성에서 로그 구성을 설정합니다.
  • 이 서비스의 작업이 최대 부하에서 초당 500개 이상의 요청을 받을 것으로 예상하면 Service Connect 프록시 컨테이너를 위해 이 작업 정의에서 작업 CPU에 512 CPU 유닛을 추가할 것을 권장합니다.
  • 네임스페이스에 100개 이상의 Service Connect 서비스를 만들거나 네임스페이스 내의 모든 Amazon ECS 서비스에 걸쳐 총 2000개 이상의 작업을 만들 것으로 예상하면 Service Connect 프록시 컨테이너를 위해 작업 메모리에 128 MiB 메모리를 추가할 것을 권장합니다. 이는 네임스페이스의 모든 Amazon ECS 서비스가 사용하는 모든 작업 정의에서 수행해야 합니다.

프록시 구성

애플리케이션은 애플리케이션이 있는 것과 같은 작업의 사이드카 컨테이너에 있는 프록시에 연결합니다. Amazon ECS가 작업과 컨테이너를 구성해 애플리케이션은 같은 네임스페이스의 엔드포인트 이름에 연결될 때만 프록시에 연결합니다. 다른 모든 트래픽은 프록시를 사용하지 않습니다. 다른 트래픽에는 같은 VPC의 IP 주소, AWS 서비스 엔드포인트, 외부 트래픽이 포함됩니다.

로드 밸런싱

Service Connect는 프록시가 Service Connect 엔드포인트의 작업 사이에서 라운드 로빈 전략으로 로드 밸런싱하도록 구성합니다. 연결이 발생하는 작업에 있는 로컬 프록시는 엔드포인트를 제공하는 클라이언트-서버 서비스의 작업 중 하나를 선택합니다.

예를 들어 local이라는 네임스페이스에서 클라이언트 서비스로 구성된 서비스에서 WordPress를 실행하는 작업을 생각해 보세요. MySQL 데이터베이스를 실행하는 작업 2개가 있는 다른 서비스가 있습니다. 이 서비스는 같은 네임스페이스에서 Service Connect를 통해 mysql이라는 엔드포인트를 제공하도록 구성되었습니다. WordPress 작업에서 WordPress 애플리케이션은 엔드포인트 이름을 사용해 데이터베이스에 연결합니다. 이 이름에 대한 연결은 같은 작업의 사이드카 컨테이너에서 실행되는 프록시로 갑니다. 그러면 프록시는 라운드 로빈 전략을 사용해 두 MySQL 작업 중 하나에 연결할 수 있습니다.

로드 밸런싱 전략: 라운드 로빈

이상치 감지(Outlier detection)

이 기능은 프록시가 가진 이전 실패 연결에 대한 데이터를 사용해 실패 연결이 있던 호스트로 새 연결을 보내지 않도록 합니다. Service Connect는 프록시의 이상치 감지 기능을 구성해 수동 상태 확인을 제공합니다. 이전 예시를 사용해 프록시는 두 MySQL 작업 중 하나에 연결할 수 있습니다. 프록시가 특정 MySQL 작업에 여러 연결을 만들었고 마지막 30초 안에 연결 중 5개 이상이 실패했다면 프록시는 30~300초 동안 해당 MySQL 작업을 피합니다.

재시도(Retries)

Service Connect는 프록시가 프록시를 통과하고 실패한 연결을 재시도하도록 구성하고, 두 번째 시도는 이전 연결의 호스트를 피합니다. 이를 통해 Service Connect를 통한 각 연결이 일회성 이유로 실패하지 않도록 보장합니다. 재시도 횟수: 2.

시간 초과(Timeout)

Service Connect는 프록시가 클라이언트-서버 애플리케이션이 응답하기까지 최대 시간을 기다리도록 구성합니다. 기본 시간 초과 값은 15초이며 업데이트할 수 있습니다.

선택적 매개변수:

  • idleTimeout – 연결이 유휴 상태로 유지되는 시간(초). 값 0은 idleTimeout을 비활성화합니다. HTTP/HTTP2/GRPC의 idleTimeout 기본값은 5분입니다. TCP의 idleTimeout 기본값은 1시간입니다.
  • perRequestTimeout – 요청당 업스트림이 완전한 응답으로 응답할 때까지 기다리는 시간. 값 0은 perRequestTimeout을 끕니다. 이는 애플리케이션 컨테이너의 appProtocol이 HTTP/HTTP2/GRPC일 때만 설정할 수 있습니다. 기본값은 15초입니다.

참고: idleTimeout이 perRequestTimeout보다 작은 시간으로 설정되면 perRequestTimeout이 아니라 idleTimeout에 도달할 때 연결이 닫힙니다.

고려 사항

Service Connect를 사용할 때 다음을 고려하세요.

  • Fargate에서 실행되는 작업은 Service Connect를 사용하려면 Fargate Linux 플랫폼 버전 1.4.0 이상을 사용해야 합니다.
  • 컨테이너 인스턴스의 Amazon ECS 에이전트 버전은 1.67.2 이상이어야 합니다.
  • 컨테이너 인스턴스는 Service Connect를 사용하려면 Amazon ECS-optimized Amazon Linux 2023 AMI 버전 20230428 이상 또는 Amazon ECS-optimized Amazon Linux 2 AMI 버전 2.0.20221115를 실행해야 합니다. 이러한 버전에는 Amazon ECS 컨테이너 에이전트 외에 Service Connect 에이전트가 있습니다.

더 알아보기 (Learn more)