Amazon Web Services 한국 블로그

Amazon ECS Service Connect – 컨테이너 기반 마이크로서비스내 간편한 통신 기능 출시

마이크로서비스 아키텍처는 잘 정의된 API(애플리케이션 프로그래밍 인터페이스)를 통해 통신하는 소규모 독립 서비스로 구성된 애플리케이션을 만드는 소프트웨어 개발 접근 방식입니다. 이 방식은 널리 알려져 있습니다. 고객이 모놀리스 애플리케이션을 마이크로서비스로 분리하기 시작하자 문제가 발생했습니다. 다른 마이크로서비스와 내부적으로 통신하려면 전문 네트워킹 지식이 필요했기 때문입니다.

Amazon Elastic Container Services(Amazon ECS) 고객은 서비스-투-서비스를 위한 여러 솔루션을 보유하고 있지만 각 솔루션에는 몇 가지 도전 과제와 복잡한 문제가 있습니다. 1) ELB(Elastic Load Balancing)는 고가용성을 위한 인프라 구성을 신중하게 계획해야 하며 추가 인프라 비용이 발생합니다. 2) Amazon ECS Service Discovery를 사용하려면 개발자가 트래픽 지표를 수집하고 네트워크 호출을 복원하기 위한 사용자 지정 애플리케이션 코드를 작성해야 하는 경우가 많습니다. 3) AWS App Mesh와 같은 서비스 메시 솔루션은 고급 트래픽 모니터링 및 서비스 간 라우팅 기능을 갖추고 있음에도 불구하고 Amazon ECS 외부에서 실행됩니다.

오늘 복원력이 뛰어난 분산 애플리케이션 구축 및 운영을 간소화하는 새로운 기능인 Amazon ECS Service Connect의 정식 출시를 발표합니다. ECS Service Connect는 여러 ECS 클러스터와 Virtual Private Cloud(VPC)에 구축된 간편한 네트워크 설정과 원활한 서비스 통신을 제공합니다. ECS 서비스 통신에 레질리언스 계층을 추가하고 애플리케이션 코드를 변경하지 않고도 트래픽 인사이트를 얻을 수 있습니다.

ECS Service Connect를 사용하면 AWS Cloud Map에서 제공하는 네임스페이스를 사용하여 논리적 이름으로 서비스를 참조 및 연결하고 로드 밸런서를 배포 및 구성하지 않고도 ECS 작업 간에 트래픽을 자동으로 분산할 수 있습니다. 각 ECS 서비스에 대해 상태 확인, 503 오류에 대한 자동 재시도, Connection Draining 등 트래픽 복구를 위한 몇 가지 안전 기본값을 설정할 수 있습니다. 또한 Amazon ECS 콘솔은 운영 편의성과 간소화된 디버깅을 위한 실시간 네트워크 트래픽 지표가 포함된 사용하기 쉬운 대시보드를 제공합니다.

Amazon ECS Service Connect 시작하기
ECS Service Connect를 시작하려면 ECS 클러스터 생성의 일부로 네임스페이스를 지정하거나 Cloud Map에서 네임스페이스를 생성할 수 있습니다. 네임스페이스는 서비스를 구조화하는 방법을 나타내며 서로 다른 VPC에 있는 여러 ECS 클러스터에 걸쳐 확장될 수 있습니다. 특정 네임스페이스에 속한 모든 ECS 서비스는 기존 네트워크 수준 접속을 제공하는 경우 네임스페이스의 기존 서비스와 통신할 수 있습니다.

Amazon ECS 콘솔의 왼쪽 탐색 창을 보면 네임스페이스의 Cloud Map 네임스페이스 목록이 있습니다. 네임스페이스를 선택하면 데이터베이스 서비스(db-mysql, db-redis) 및 백엔드 서비스(webui, appserver)를 사용하는 두 개의 서로 다른 ECS 클러스터에서 동일한 네임스페이스를 사용하는 서비스 목록이 표시됩니다.

ECS 클러스터를 생성할 때 네트워킹 설정의 기본 네임스페이스에 있는 네임스페이스 중 하나를 선택할 수 있습니다. ECS 서비스 연결은 AWS FargateAmazon EC2 인스턴스 모두에서 실행되는 모든 새로운 ECS 서비스에 사용할 수 있습니다. 기존 서비스를 모두 활성화하려면 ECS에 최적화된 Amazon Machine Image(AMI)의 새 버전이나 ECS 서비스 연결을 지원하는 새 Fargate 에이전트를 사용하여 재배포해야 합니다.

또는 서비스 검색 목적으로 serviceConnect 파라미터와 기본 Cloud Map 네임스페이스 이름을 사용하여 AWS Command Line Interface(AWS CLI)를 통해 클러스터를 간단히 생성할 수 있습니다.

$ aws ecs create-cluster
     --cluster "svc-cluster-2"
     --serviceConnect {
       "defaultNamespace": "svc-namespace"
}

이 명령은 AWS를 대신하여 네임스페이스가 있는 ECS 클러스터를 생성합니다. 기존 Cloud Map 네임스페이스를 사용하려면 여기에 기존 네임스페이스의 이름을 전달하면 됩니다.

다음으로 작업 정의를 사용하여 서비스를 생성하고 ECS Service Connect를 사용하여 웹 사용자 인터페이스 서버를 노출해 보겠습니다.

$ aws ecs create-service
--cluster "svc-cluster-2"
--service-name "webui"
--task-definition "webui-svc-cluster"
--serviceConnect {
  "enabled": true,
  "namespace": "svc-namespace",
  "services":
   [
      {
         "portName": "webui-port",
         "discoveryName": "webui-svc",
         "clientAliases": [
           {
              "port": 80, // *Required *//
              "dnsName": "webui-svc-domain" // * Optional *//
            }
        }
     ]
   ]
}

이 명령에서 portName은 컨테이너 포트에 대한 참조를 나타내며 clientAliases는 포트 번호와 DNS 이름을 할당하여 엔드포인트에서 사용되는 검색 이름을 재정의합니다. 각 서비스에는 프로토콜, DNS 이름 및 포트가 포함된 엔드포인트 URL이 있습니다. 작업 정의 또는 ECS 서비스 구성에서 프로토콜 및 포트 이름을 선택할 수 있습니다. 예를 들어 엔드포인트는 http://webui:80, grpc://appserver:8080 또는 http://db-redis:8888일 수 있습니다.

ECS 콘솔에서 svc-cluster-2 clusterwebui 서비스에 대한 이러한 ECS Service Connect의 구성을 볼 수 있습니다.

보시다시피 고가용성을 위해 동일한 clientAlias 및 네임스페이스 이름을 사용하여 여러 클러스터에서 동일한 워크로드를 실행할 수 있습니다. ECS Service Connect는 ECS 작업에 대한 트래픽을 지능적으로 로드 밸런싱합니다. 서로 다른 ECS 클러스터에서 실행되는 서비스에 연결하려면 서로 통신해야 하는 모든 ECS 서비스에 동일한 네임스페이스 이름을 지정해야 합니다. ECS Service Connect를 사용하면 동일한 네임스페이스에 있는 다른 모든 서비스에서 서비스를 검색할 수 있습니다.

가시성 데이터를 통한 서비스 복원력 개선
ECS Service Connect 가시성 기능을 사용하여 트래픽 지표를 수집할 수 있습니다. 기본적으로 각 ECS 서비스에 대해 인바운드 및 아웃바운드 트래픽 볼륨과 함께 정상 및 비정상 엔드포인트의 수를 확인할 수 있습니다.

ECS 서비스 커넥트는 HTTP/1, HTTP/2, gRPC 및 TCP 프로토콜을 지원합니다. 따라서 요청 수, HTTP 오류 수, 평균 호출 지연 시간을 수집할 수 있습니다. gRPC 및 TCP의 경우 총 활성 연결 수를 확인할 수 있습니다. 이러한 모든 지표는 사용자 지정 로그 라우팅을 통해 Amazon CloudWatch 또는 기타 AWS 분석 서비스로 푸시됩니다.

고급 메뉴에서 문제 발생 시 디버깅에 도움이 되도록 ECS Service Connect Agent 로그를 게시할 수 있습니다.

이러한 지표는 CloudWatch 콘솔의 원래 인터페이스에서만 볼 수 있습니다. CloudWatch 콘솔을 사용할 때는 원래 인터페이스로 전환하여 ECS 그룹 아래에 있는 ‘검색 이름’ 및 ‘대상 검색 이름’의 추가 지표 차원을 확인하세요.

기본 설정은 복원력이 뛰어난 애플리케이션을 구축하기 위한 출발점을 제공하며, AWS Management Console 또는 전용 ECS API를 사용하여 장애, 지연 시간 급증 및 네트워크 변동이 애플리케이션 동작에 미치는 영향을 제한하도록 파라미터를 미세하게 조정할 수 있습니다.

정식 출시
Amazon ECS 서비스 연결은 Amazon ECS를 사용할 수 있는 중국을 제외한 모든 상용 지역에서 사용할 수 있습니다. ECS Service Connect는 인프라 프로비저닝, 코드 배포 및 서비스 모니터링을 위해 AWS CloudFormation, AWS CDK, AWS CopilotAWS Proton에서 완벽하게 지원됩니다. 자세한 내용은 Amazon ECS 개발자 안내서를 참조하세요.

저의 동료 두 명, 시니어 컨테이너 스페셜리스트 SA Hemanth AVS 씨와 시니어 DevOps 컨설턴트인 Satya Vajrapu 씨는 ECS Service Connect의 예시를 시연하기 위한 실습 워크숍을 준비했습니다. AWS re:Invent 2022에 참석하셨을 때 CON303 Amazon ECS와 함께 네트워킹, 서비스 메시 및 서비스 디스커버리에 참여해 보세요.

체험해 보고 Amazon ECS용 AWS re:Post 또는 일반 AWS Support 연락처로 피드백을 보내주세요.

Channy