Programming

[AWS, Certified Developer Associate] ECS

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

Udemy - AWS Certified Developer Associate 시험 합격을 위한 모든 것!