Amazon ECS Service Connect 구성 요소 - Amazon Elastic Container Service

Amazon ECS Service Connect 구성 요소

Amazon ECS Service Connect를 사용하는 경우에는 네트워크 요청을 받는 서버 애플리케이션(클라이언트-서버 서비스)을 실행하거나 요청을 생성하는 클라이언트 애플리케이션(클라이언트 서비스)을 실행하도록 각 Amazon ECS 서비스를 구성합니다.

Service Connect 사용을 시작할 준비가 되면 클라이언트-서버 서비스로 시작합니다. 새 서비스 또는 기존 서비스에 Service Connect 구성을 추가할 수 있습니다. Amazon ECS는 네임스페이스에 Service Connect 엔드포인트를 생성합니다. 추가로 Amazon ECS는 서비스에 새 배포를 생성하여 현재 실행 중인 작업을 대체합니다.

기존 작업 및 기타 애플리케이션은 기존 엔드포인트 및 외부 애플리케이션에 계속 연결할 수 있습니다. 클라이언트-서버 서비스가 스케일 아웃을 통해 태스크를 추가하면 클라이언트의 새 연결이 모든 태스크 간에 즉시 밸런싱됩니다. 클라이언트-서버 서비스가 업데이트된 경우 클라이언트의 새 연결은 새 버전의 태스크 사이에서 밸런싱됩니다.

기존 작업은 확인할 수 없으며 새 엔드포인트에 연결할 수 없습니다. 동일한 네임스페이스에 Service Connect 구성이 있고 이 배포 이후에 실행을 시작하는 새 태스크만 이 엔드포인트를 확인하고 여기에 연결할 수 있습니다.

즉, 서버 애플리케이션 운영자가 언제든지 구성을 변경할 수 있더라도 클라이언트 애플리케이션 운영자가 앱 구성이 변경되는 시기를 결정합니다. 네임스페이스의 엔드포인트 목록은 네임스페이스의 서비스가 배포될 때마다 변경될 수 있습니다. 기존 태스크와 대체 태스크는 최근 배포 후에도 동일하게 작동합니다.

다음 예제를 살펴보세요.

먼저 퍼블릭 인터넷에서 사용할 수 있는 애플리케이션을 단일 AWS CloudFormation 템플릿 및 단일 AWS CloudFormation 스택으로 생성하고 있다고 가정해 보겠습니다. 공개 검색 및 연결 가능성은 프런트엔드 클라이언트 서비스를 포함하여 AWS CloudFormation에서 마지막으로 생성해야 합니다. 프런트엔드 클라이언트 서비스가 실행되고 퍼블릭에서 사용 가능하지만 백엔드는 사용할 수 없는 기간을 방지하려면 이 순서로 서비스를 생성해야 합니다. 이렇게 하면 해당 기간 동안 오류 메시지가 퍼블릭으로 전송되는 것을 방지할 수 있습니다. AWS CloudFormation에서는 dependsOn을 사용하여 AWS CloudFormation에 여러 Amazon ECS 서비스를 병렬로 또는 동시에 만들 수 없음을 나타내야 합니다. 클라이언트 작업이 연결되는 각 백엔드 클라이언트-서버 서비스의 프런트엔드 클라이언트 서비스에 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 캐시가 만료된 후 프런트엔드 또는 클라이언트 애플리케이션이 새 엔드포인트를 사용하고 엔드포인트 구성을 변경하기 시작하며, 일반적으로 몇 시간이 걸립니다.

네트워킹

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

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

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

애플리케이션이 Service Connect용으로 구성된 Amazon ECS 서비스로 전송하는 트래픽의 경우 Amazon VPC 및 서브넷에 사용 중인 containerPortingressPortOverride 포트 번호를 허용하는 라우팅 테이블 규칙 및 네트워크 ACL 규칙이 있어야 합니다.

Service Connect를 사용하여 VPC 간에 트래픽을 보낼 수 있습니다. 라우팅 테이블 규칙, 네트워크 ACL, 보안 그룹에 대한 동일한 요구 사항이 두 VPC에 모두 적용됩니다.

예를 들어, 두 개의 클러스터는 서로 다른 VPC에서 작업을 생성합니다. 각 클러스터의 서비스는 동일한 네임스페이스를 사용하도록 구성됩니다. 이 두 서비스의 애플리케이션은 VPC DNS 구성 없이 네임스페이스의 모든 엔드포인트를 확인할 수 있습니다. 하지만 VPC 피어링, VPC 또는 서브넷 라우팅 테이블, VPC 네트워크 ACL이 containerPortingressPortOverride 포트 번호의 트래픽을 허용하는 경우를 제외하면 프록시를 연결할 수 없습니다.

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

Service Connect 프록시

Service Connect 구성을 사용하여 서비스를 생성하거나 업데이트하는 경우 Amazon ECS는 새 태스크가 시작될 때마다 새 컨테이너를 추가합니다. 별도의 컨테이너를 사용하는 이러한 패턴을 sidecar라고 합니다. 이 컨테이너는 작업 정의에 없으며 구성할 수 없습니다. Amazon ECS는 서비스에서 컨테이너 구성을 관리합니다. 이렇게 하면 Service Connect 없이도 여러 서비스, 네임스페이스, 태스크 간에 동일한 태스크 정의를 재사용할 수 있습니다.

프록시 리소스
  • 태스크 정의의 경우 CPU 및 메모리 파라미터를 설정해야 합니다.

    Service Connect 프록시 컨테이너용 작업 CPU 및 메모리에 256개의 추가 CPU 유닛과 최소 64MiB의 메모리를 추가하는 것이 좋습니다. AWS Fargate에서 설정할 수 있는 최소 메모리양은 512MiB입니다. Amazon EC2에는 태스크 정의 메모리가 필요합니다.

  • 서비스의 경우 Service Connect 구성에서 로그 구성을 설정합니다.

  • 이 서비스의 작업이 피크 부하 시 초당 500개 이상의 요청을 받을 것으로 예상되는 경우 이 작업 정의에서 Service Connect 프록시 컨테이너에 대한 작업 CPU에 512개의 CPU 유닛을 추가하는 것이 좋습니다.

  • 네임스페이스에서 100개 이상의 Service Connect 서비스를 생성하거나 네임스페이스 내의 모든 Amazon ECS 서비스에서 총 2000개 이상의 작업을 생성할 것으로 예상되는 경우 Service Connect 프록시 컨테이너의 작업 메모리에 128MiB의 메모리를 추가하는 것이 좋습니다. 네임스페이스의 모든 Amazon ECS 서비스에서 사용하는 모든 작업 정의에서 이 작업을 수행해야 합니다.

프록시 구성

애플리케이션은 수행 중인 동일한 작업에서 사이드카 컨테이너의 프록시에 연결합니다. Amazon ECS는 애플리케이션이 동일한 네임스페이스의 엔드포인트 이름에 연결되는 경우에만 애플리케이션이 프록시에 연결되도록 태스크와 컨테이너를 구성합니다. 다른 모든 트래픽은 프록시를 사용하지 않습니다. 다른 트래픽에는 동일한 VPC의 IP 주소, AWS 서비스 엔드포인트 및 외부 트래픽이 포함됩니다.

로드 밸런싱

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

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

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

이상치 탐지

이 기능은 프록시에 있는 이전에 실패한 연결에 대한 데이터를 사용하여 연결이 실패한 호스트에 새 연결이 전송되지 않도록 합니다. 서비스 연결은 프록시의 이상치 탐지 기능을 구성하여 수동 상태 확인을 제공합니다.

이전 예제를 사용하여 프록시는 MySQL 태스크 중 하나에 연결할 수 있습니다. 프록시가 특정 MySQL 작업에 여러 번 연결했는데 지난 30초간 5개 이상의 연결이 실패한 경우 프록시는 30~300초간 해당 MySQL 작업을 방지합니다.

재시도

서비스 연결은 프록시를 통과하여 실패한 연결을 다시 시도하도록 프록시를 구성하고, 두 번째 시도에서는 이전 연결의 호스트를 사용하지 않습니다. 이렇게 하면 서비스 연결을 통한 각 연결이 일회성 이유로 실패하지 않게 됩니다.

재시도 횟수: 2

제한 시간

서비스 연결은 클라이언트-서버 애플리케이션이 응답할 때까지 최대 시간을 대기하도록 프록시를 구성합니다. 기본 제한 시간 값은 15초이지만 업데이트할 수 있습니다.

선택적 파라미터:

idleTimeout - 유휴 상태에서 연결이 활성 상태로 유지되는 시간(초)입니다. 값이 0이면 idleTimeout이 비활성화됩니다.

HTTP/HTTP2/GRPCidleTimeout 기본값은 5분입니다.

TCPidleTimeout 기본값은 1시간입니다.

perRequestTimeout - 업스트림이 요청당 완전한 응답으로 응답할 때까지 기다리는 시간입니다. 값이 0이면 perRequestTimeout이 꺼집니다. 애플리케이션 컨테이너에 대한 appProtocolHTTP/HTTP2/GRPC인 경우에만 설정할 수 있습니다. 기본값은 15초입니다.

참고

idleTimeoutperRequestTimeout보다 짧은 시간으로 설정되는 경우 perRequestTimeout가 아닌 idleTimeout에 도달하면 연결이 닫힙니다.

고려 사항

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

  • Service Connect를 사용하려면 Fargate에서 실행되는 태스크가 Fargate Linux 플랫폼 버전 1.4.0 이상을 사용해야 합니다.

  • 컨테이너 인스턴스의 Amazon ECS 에이전트 버전은 1.67.2 이상이어야 합니다.

  • 서비스 연결을 사용하려면 컨테이너 인스턴스가 Amazon ECS 최적화 Amazon Linux 2023 AMI 버전 20230428 이상 또는 Amazon ECS 최적화 Amazon Linux 2 AMI 버전 2.0.20221115를 실행해야 합니다. 이러한 버전에는 Amazon ECS 컨테이너 에이전트 외에 서비스 연결 에이전트가 있습니다. 서비스 연결 에이전트에 대한 자세한 내용은 GitHub의 Amazon ECS Service Connect Agent를 참조하세요.

  • 컨테이너 인스턴스에 리소스 arn:aws:ecs:region:0123456789012:task-set/cluster/*에 대한 ecs:Poll 권한이 있어야 합니다. ecsInstanceRole을 사용하는 경우에는 권한을 더 추가할 필요가 없습니다. AmazonEC2ContainerServiceforEC2Role 관리형 정책에 필요한 권한이 있습니다. 자세한 내용은 Amazon ECS 컨테이너 인스턴스 IAM 역할 단원을 참조하십시오.

  • 롤링 배포를 사용하는 서비스만 Service Connect에서 지원됩니다.

  • bridge 네트워크 모드를 사용하고 Service Connect를 사용하는 작업은 hostname 컨테이너 정의 파라미터를 지원하지 않습니다.

  • 작업 정의는 Service Connect를 사용하는 작업 메모리 제한을 설정해야 합니다. 자세한 내용은 Service Connect 프록시 단원을 참조하십시오.

  • 컨테이너 메모리 제한을 설정하는 태스크 정의는 지원되지 않습니다.

    컨테이너에 컨테이너 메모리 제한을 설정할 수 있지만 작업 메모리 제한을 컨테이너 메모리 제한의 합보다 큰 값으로 설정해야 합니다. 컨테이너 제한에 할당되지 않은 작업 제한의 추가 CPU 및 메모리는 Service Connect 프록시 컨테이너 및 컨테이너 제한을 설정하지 않은 다른 컨테이너에서 사용됩니다. 자세한 내용은 Service Connect 프록시 단원을 참조하십시오.

  • 동일한 AWS 계정의 동일한 리전에서 모든 AWS Cloud Map 네임스페이스를 사용하도록 Service Connect를 구성할 수 있습니다.

  • 각 서비스는 하나의 네임스페이스에만 속할 수 있습니다.

  • 서비스에서 생성하는 태스크만 지원됩니다.

  • 모든 엔드포인트는 네임스페이스 내에서 고유해야 합니다.

  • 모든 검색 이름은 네임스페이스 내에서 고유해야 합니다.

  • 애플리케이션이 새 엔드포인트를 확인하기 전에 기존 서비스를 다시 배포해야 합니다. 최신 배포 후 네임스페이스에 추가된 새 엔드포인트는 작업 구성에 추가되지 않습니다. 자세한 내용은 Amazon ECS Service Connect 구성 요소 단원을 참조하십시오.

  • Service Connect는 클러스터가 삭제될 때 네임스페이스를 삭제하지 않습니다. AWS Cloud Map에서 네임스페이스를 삭제해야 합니다.

  • Application Load Balancer 트래픽은 기본적으로 awsvpc 네트워크 모드에서 Service Connect 에이전트를 통해 라우팅됩니다. 서비스 이외의 트래픽이 Service Connect 에이전트를 우회하도록 하려면 Service Connect 서비스 구성에서 ingressPortOverride 파라미터를 사용합니다.

Service Connect는 다음을 지원하지 않습니다.
  • Windows 컨테이너

  • HTTP 1.0

  • 독립 실행형 작업

  • 블루/그린 및 외부 배포 유형을 사용하는 서비스

  • Amazon ECS Anywhere용 External 컨테이너 인스턴스는 Service Connect에서 지원되지 않습니다.

  • PPv2

Service Connect 사용 가능 리전

Amazon ECS Service Connect는 다음 AWS 리전에서 사용할 수 있습니다.

리전 이름 리전

미국 동부(오하이오)

us-east-2

미국 동부(버지니아 북부)

us-east-1

미국 서부(캘리포니아 북부)

us-west-1

미국 서부(오레곤)

us-west-2

아프리카(케이프타운)

af-south-1

아시아 태평양(홍콩)

ap-east-1

아시아 태평양(자카르타)

ap-southeast-3

아시아 태평양(뭄바이)

ap-south-1

아시아 태평양(하이데라바드)

ap-south-2

아시아 태평양(오사카)

ap-northeast-3

아시아 태평양(서울)

ap-northeast-2

아시아 태평양(싱가포르)

ap-southeast-1

아시아 태평양(시드니)

ap-southeast-2

아시아 태평양(멜버른)

ap-southeast-4

아시아 태평양(말레이시아)

ap-southeast-5

아시아 태평양(도쿄)

ap-northeast-1

캐나다(중부)

ca-central-1

캐나다 서부(캘거리)

ca-west-1

중국(베이징)

cn-north-1(참고: 이 리전에서는 TLS for Service Connect를 사용할 수 없음)

중국(닝샤)

cn-northwest-1(참고: 이 리전에서는 TLS for Service Connect를 사용할 수 없음)

유럽(프랑크푸르트)

eu-central-1

유럽(아일랜드)

eu-west-1

유럽(런던)

eu-west-2

유럽(파리)

eu-west-3

유럽(밀라노)

eu-south-1

유럽(스페인)

eu-south-2

유럽(스톡홀름)

eu-north-1

유럽(취리히)

eu-central-2

이스라엘(텔아비브)

il-central-1

중동(바레인)

me-south-1

중동(UAE)

me-central-1

남아메리카(상파울루)

sa-east-1