- kubernetesadmin
- Datadog
- CKA
- Fargate
- containerorchestration
- SPF
- kubernetesstudyguide
- SAA-CO3
- Java
- eventbridge
- Kubernetes
- aws ses
- SMTP
- Certified Solutions Architect
- SAA-CO2
- nodeaffinity
- go
- cloudnative
- aws
- DevOps
- dMarc
- EKS
- kubernetesscheduling
- Lambda
- gochannel
- K8S
- DKIM
- JVM
- 메일 인증 프로토콜
- Today
- Total
DevOps Tasks
AWS ECS Service Connect 적용기 본문
AWS ECS 에 Service Connect 라는 새로운 기능을 출시하여 적용해보자.
Service Connect 란?
- Service Connect는 Amazon ECS 서비스의 프록시 컨테이너를 정의한다.
- 이러한 방식으로 동일한 taskdef.json 을 사용하여 Service Connect 구성이 서로 다른 여러 NameSpace 에서 동일한 애플리케이션을 실행
- Amazon ECS 서비스가 수행하는 각 작업은 해당 작업에서 프록시 컨테이너를 실행
- Service Connect는 동일한 네임스페이스 내의 Amazon ECS 서비스 간 연결에 적합
- Service Discovery 보다 빠른 배포 시간
AWS ECS 를 사용해서 서비스를 구축하는 경우 3가지 솔루션으로 구축할 수 있다.
1. ELB 는 고가용성을 위한 인프라 구성을 신중하게 계획해야 하며 추가 인프라 비용이 발생한다.
2. ECS Service Discovery 를 사용하려면 개발자가 트래픽 지표를 수집하고 네트워크 호출을 복원하기 위한 사용자 지정 애플리케이션 코드를 작성해야 하는 경우가 많다.
3. AWS App Mesh 와 같은 서비스 메시 솔루션은 고급 트래픽 모니터링 및 서비스 간 라우팅 기능을 갖추고 있음에도 불구하고 ECS 외부에서 실행된다.
AS-IS
- 기존 ECS 아키텍처라면 컨테이너 별로 ELB가 생성됨.
- 새로운 리소스 비용 및 복잡도가 증가함
- ECS Service 에 다수의 컨테이너가 있다면 하나의 컨테이너를 조작하기 위해 task 단위로 모든 컨테이너가 움직임
- 개별 컨테이너 단위로 오토 스케일링 할 수 없음 (멀티 컨테이너)
TO-BE
- Envoy 프록시를 사이드카 형태로 생성해 하나의 네트워크 층을 이루면서 작업 간 트래픽을 연결
- 외부 노출이 필요한 컨테이너에만 ALB 생성
- 개별 컨테이너 단위로 스케일링 가능
ECS Service Connect 기능을 키면 ECS Agent가 생성되어 사이드카 형태로 컨테이너가 하나 더 뜨게 된다.
해당 컨테이너는 envoy 기반 컨테이너로 프록시 역할을 담당한다.
고려사항
- Windows 지원 X
- Fargate Linux 플랫폼 Version 1.4.0 이상
- ECS 에이전트 Version 1.67.2 이상
- 롤링 배포만 지원 / Blue/Green 지원 X
- 동일한 계정의 CloudMap NameSpace 사용 가능
- 하나의 NameSpace
Architecture
- Service Connect 활성화 시 Service Connect Agent 가 사이드카 형태로 Active
- Application 끼리는 설정한 Service Connect DNS 주소로 통신
Deploy Step
- Client-Server Mode (BE)
- Client Mode (FE)
- Client-Server Mode 서비스의 Application 을 반드시 먼저 배포
- Service Connect 가 활성화된 상태에서 실행된 작업은 이미 NameSpace에 존재하는 엔드포인트를 확인할 수 있지만 작업 시작 후 NameSpace에 추가된 새 엔드포인트는 작업 구성에 추가되지 않음
- Client Mode 서비스의 작업이 먼저 배포된 경우 백엔드 서비스의 작업 엔드포인트는 탐색되지 않음
- 해당 순서에 맞춰 한 번의 배포가 끝난 후에 원하는 주기로 각 서비스 배포 가능
Deploy
"portMappings": [
{
"containerPort": ${SERVER_PORT},
"hostPort": ${SERVER_PORT},
"protocol": "tcp",
"name": "${SERVCE_NAME}",
"appProtocol": "http"
}
]
- 배포 전 taskdef.json에 port name 만 생성해주면 AWS 콘솔 상에서 Service Connect 기능을 키고 Client-Servcer Mode를 사용할 수 있다.
- 22년 12월 기술 발표 후에도 지속적으로 Docs도 업데이트되고 있다.
Amazon ECS Service Connect – 컨테이너 기반 마이크로서비스내 간편한 통신 기능 출시 | Amazon Web Services
마이크로서비스 아키텍처는 잘 정의된 API(애플리케이션 프로그래밍 인터페이스)를 통해 통신하는 소규모 독립 서비스로 구성된 애플리케이션을 만드는 소프트웨어 개발 접근 방식입니다. 이
aws.amazon.com
초기 사용을 할 때 Application Port 도 custom을 할 수 없었던 것으로 기억하지만 지속적으로 업데이트가 되고 있다.
동기 처리가 필요한 로직이 있지만 envoy 컨테이너의 Timeout 에 대한 부분이 아직 해결 중인 상태로 보여지며 아직 안정적인 상태는 아닌 것으로 보인다.
'AWS' 카테고리의 다른 글
DynamoDB 데이터를 AWS 데이터 파이프라인으로 QuickSight에서 시각화하기 (0) | 2024.08.04 |
---|---|
Event Driven Architecture with AWS Infra Monitoring (0) | 2024.08.04 |
AWS RDS Proxy 와 Serverless (1) | 2024.03.02 |
AWS Lambda 마스터리북 구매하기 (1) | 2024.01.05 |
AWS ECS Fargate 컨테이너에 노크하고 들어가기 (1) | 2023.12.24 |