ECS (Elastic Container Service)
- Docker 관리를 위한 Amazon 전용 플랫폼
- AWS에서 도커 컨테이너 실행 = ECS 클러스터에서 ECS 태스크 실행
- EC2 Launch 타입
- EC2 인스턴스에 대한 인프라를 직접 프로비저닝 및 관리해야함
- ECS 클러스터에 여러 EC2 인스턴스 (= ECS 태스크)
- 각 인스턴스는 ECS Agent를 실행해야함 (에이전트가 지정한 ECS 클러스터에 인스턴스 등록)
- ECS 클러스터에 새로운 도커 컨테이너 등록 시 각 EC2 인스턴스에 배포됨
- Fargate Launch 타입
- 서버리스 (프로비저닝, 관리 X)
- ECS 태스크를 정의 -> AWS에서 CPU와 RAM 요구사항을 토대로 ECS 태스크 실행
- 확장 시 태스크 수만 늘리면 됨
ECS - EC2 Instance Profile / IAM Roles
- EC2 Instance Profile
- ECS Agent에서만 사용
- 에이전트는 인스턴스 프로필을 사용해 ECS 서비스에 인스턴스 복원 / CloudWatch 컨테이너 로그 로깅 / ECR에서 도커 이미지 pull / 시크릿매니저, SSM Parameter Store에서 민감 정보 참조 API 호출
- ECS Task Role (Fargate에서도 동작)
- 태스크 별 구체적인 역할 생성
- S3 API 호출 실행 / DynamoDB API 호출 실행 각각 정의 가능
ECS - 로드밸런서 통합
- ALB는 각각 ECS 태스크에 직접 연결
- NLB는 높은 쓰루풋과 성능 / AWS Private Link 사용하는 경우 권장
- ELB는 Fargate 지원 X 권장 X
ECS - 태스크 정의
- ECS에게 도커 컨테이너를 어떻게 실행할지 정의하는 JSON 형식의 메타데이터
- 이미지 이름 / 컨테이너, 호스트(EC2 경우) 포트 바인딩 정보
- 컨테이너에 요구되는 CPU, Memory 정보
- 환경변수 / 네트워킹 정보 / IAM Role / 로그 설정 (CloudWatch)
- 태스크 정의 당 하나 이상의 컨테이너 정의 가능 (최대 10)
- 포트 바인딩
- EC2에서 컨테이너 포트 바인딩만 80으로 지정
- 이 때 호스트 포트는 무작위로 지정 (동적 호스트 포트 매핑)
- 앞단의 ALB가 ECS와 연결되어 있는 경우 동적 호스트 포트 매핑을 통해 자동 연결 가능
- 포트가 어떻게 바뀔지 모르므로 EC2 인스턴스 보안그룹은 ALB 보안그룹의 모든 포트 open
- Fargate의 경우 ENI를 통해 각각의 유니크 private IP를 가짐
- 동일한 컨테이너 포트 (80)
- ECS ENI 보안그룹은 ALB 보안그룹의 80 포트 open
- IAM Role
- 태스크 정의 당 IAM 역할이 할당
- 환경변수
- 테스크 정의는 환경 변수를 가질 수 있음
- 하드코딩 / SecretManager / SSM Parameter Store / S3 Bucket에서 가져오는 Bulk 환경변수 로딩
Reference
'Programming' 카테고리의 다른 글
[AWS, Certified Developer Associate] CloudFormation (0) | 2024.05.15 |
---|---|
[AWS, Certified Developer Associate] Elastic Beanstalk (0) | 2024.05.13 |
[AWS, Certified Developer Associate] CloudFront (0) | 2024.05.12 |
[AWS, Certified Developer Associate] S3 - 암호화, 액세스 포인트 (0) | 2024.05.10 |
[AWS, Certified Developer Associate] S3 - LifeCycle, 이벤트 알림, 성능, Select 및 Glacier Select, 객체 태그, 메타 데이터 (0) | 2024.05.10 |