포스트

Ec2 인스턴스를 Ecs에 연결하기

ECS에 ASG 연결하고 서비스를 띄운다고 해서 ASG의 EC2 인스턴스가 알아서 연결되는 것은 아니다.

ECS cluster

  • 컨테이너를 실행할 수 있는 서비스 Elastic Container Service인 ECS는 두 가지 유형으로 실행된다.
    • Fargate
    • EC2 Instnace (설정)
  • EC2 유형을 선택하면 Auto Scaling Group이 세팅되거나 세팅해야하며 사용할 인스턴스의 템플릿을 지정해 동적으로 늘리고 줄일 수 있다.

EC2 - ECS 연결

  • ECS와 EC2 인스턴스가 준비됐다면 이 둘을 연결해야한다.
  • ECS가 EC2를 인식하기 위해서는 ECS container Agent가 필요하다.
    • 마치 K8S의 kubelet처럼 데몬이고 관리하는 대상의 상태(health)나 metric 등을 보고한다.
  • 물론 ECS에서 작업을 실행할 때 ECS와 EC2의 항상 연결이 별도로 필요하지는 않다.
    • Amazon Linux 계열이나 agent가 이미 설정돼있는 AMI들이 존재하니 이를 사용해도 된다.
    • https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/ecs-optimized_AMI.html (Amazon ECS 최적화 Linux AMI)
  • 그러나 이 포스팅이 있는 이유는 custom AMI를 만들어 두려할 때 ECS 연결이 안되는 당황스러운 경우를 위함이다.

kubelet과 ECS container agent 비교

항목kubeletECS Container Agent
소속KubernetesAWS ECS
역할Pod 실행Task 실행
통신 대상API ServerECS svc
runtimecontainerd / CRI-ODocker / containerd

ECS Agent 설치하고 세팅하기

1
2
curl -O https://s3.ap-northeast-2.amazonaws.com/amazon-ecs-agent-ap-northeast-2/amazon-ecs-init-latest.x86_64.rpm
sudo yum localinstall -y amazon-ecs-init-latest.x86_64.rpm
  • 설정 파일 수정
    • /etc/ecs/ecs.config 파일에 ECS 클러스터 이름을 적어준다
    • bash ECS_CLUSTER=test-cluster
  • ECS agent 실행
  • 1
    2
    
    sudo systemctl start ecs # 지금 시작
    sudo systemctl enable ecs # EC2 인스턴스가 재시작 되면 자동 시작
    
  • 확인

ECS Auto Scaling Group

  • 위 방법처럼 직접 개별 ec2에서 설치하고 연결하는 방법도 있지만 개인 단위가 아닌 경우 ASG를 설정해 scale in and out 에 따라 자동으로 연결되게 하는 방법을 많이 사용할 것이다.
  • 다음 그림처럼 ASG를 구성하는 시작 템플릿의 “고급 세부 정보” 탭에 있는 “사용자 데이터 - 선택 사항“에 명령어들을 기입해서 연결할 수 있다.
    • 인스턴스가 시작될 때 수행되는 예약성 코드들이다.


ecs에 ec2가 연결 안될때마다 설정하는 사항이라 포스팅했다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.