AWS ECS 생성 (fargate) 및 ALB 연결
생성 순서
1. ALB 생성 및 대상 그룹 생성
2. ECS 클러스터 생성
3. ECS 작업 생성
4. ECS 서비스 생성, health check 확인
1. ALB 생성 및 대상 그룹 생성
(0). 대상 그룹 생성 > ECS에 적용하려면 인스턴스가 아닌 IP Address로 생성 > health check 는 status 200을 응답해 줄 수 있는 health check용 url을 하나 만들어 등록, spring boot actuator를 사용하면 /actuator/health 를 path로 입력하면 됨.
(1). console > 보안 그룹 > 로드 밸런서용 보안 그룹 추가 모든 소스( 0.0.0.0/0 ) 에 대해 80, 443 포트를 허용한다.
(2). console > 로드밸런서 메뉴 > 로드밸런서 생성 > Application Load Balancer 생성
(3). (1) 에서 생성한 보안그룹을 추가하고 ACM을 생성했다면, 443포트도 리스너 추가, 안 했다면 일단 80만 리스너에 (0)에서 생성한
대상그룹을 추가하여 생성
AWS 모든 작업을 하며 항상 생각하여 할 부분은 보안 그룹. 서로 다른 보안 그룹에 특정 포트에 접근하기 위해서는
인바운드 규칙 특정 포트에 대해 사용자 정의로 접근 가능하게할 보안그룹 ID를 추가해 줘야함
여기서는 ALB에서 ECS로 접근이 가능해야하므로 ECS 보안그룹 인바운드 규칙 생성 시 WAS포트에 ALB의 보안그룹을 추가해주자.
2. ECS 클러스터 생성
(0). ECS 메뉴 > 클러스터 > 클러스터 생성 > fargate를 사용할 것 이기 때문에 네트워킹 전용으로 생성
3. ECS 작업 생성
(0). ECS 메뉴 > 작업 정의 > 새 작업 정의 생성 > fargate 선택 > 다음
(1). IAM > 역할 > 역할 추가 > 역할명 ECSTaskExecutionRole > 사용사례 Elastic Container Service >
Elastic Container Service Task 선택 > 정책에 AmazonECSTaskExecutionRolePolicy 추가하여 역할 생성
(2). 태스크 역할 ECSTaskExecutionRole 선택, 운영체제 리눅스, 작업 cpu, 메모리 선택
(3). 컨테이너 추가 > 이미지, 포트 매핑, 컨테이너 실행 시 환경변수도 지정 가능 ex) SPRING_PROFILES_ACTIVE=dev
(4). 작업 생성
4. ECS 서비스 생성, health check 및 로그 확인
(0). 작업 정의 > 생성한 작업 체크 후 > 작업 (셀렉트박스) > 서비스 생성
(1). 시작 유형 > fargate , 서비스 이름, 작업 개 수 입력 후 다음
(2). 클러스터 VPC 및 서브넷 선택
(3). 미리 생성해둔 어플리케이션 로드밸런서 선택 및 대상 그룹 선택
(4). 오토스케일링 여부 확인 후 생성
서비스 로그확인은 ECS 메뉴의 클러스터 > 클러스터 명 클릭 > 서비스 명 클릭 > 로그 탭에서 로그 확인 가능
Health Check가 잘 동작하는지는 ALB 메뉴 > 대상 그룹 > 생성한 대상그룹 이름 클릭 > health checks 탭에서 확인가능
연결이 잘 되었는지 확인은 로드밸런서의 도메인 이름으로 접근해보면 알 수 있다.
안 되면 위의 로그 및 health cheks 탭의 에러를 확인할 것
health checks에서 404나면 path 혹은 포트가 맞지 않는 것
timeout 나면 보안 그룹 설정을 다시 확인 해볼 것 ELB에서 ECS의 컨테이너 포트로 접근가능한지..
*** 중요
서비스 생성 시 healthCheck 상태유예기간이 0이면 컨테이너가 계속 재 실행됨. 아마도.. 헬스 체크 몇 번해보고 안되서 대상그룹에서 재 실행 시키는 듯
상태유예기간을 4000 정도로 설정하면 정상동작