삽질을 끝내고 드디어 ecs에서 정상적으로 배포를 성공했다...
docker container가 정상적으로 동작하는지 로컬에서는 테스트해보았지만 실제 EC2에서는 테스트할 방법을 찾지 못해 실제 환경에서 docker container가 뜨는지 알 수 없었다.
ecs service에 연결한 alb가 unhealthy를 반환하여 계속해서 task가 죽어버렸지만 이유를 찾지 못했다.
ecs가 어떻게 ecr의 이미지를 가져와 ec2에서 컨테이너로 관리해주는지 원리를 알지 못했다.
public subnet에 bastion host를 두어 ssh를 통해 접속한 뒤, private subnet에 있는 ec2에 한번더 ssh를 통해 접속하여 ecs container instance 내에 직접 접속할 수 있었다.
보안그룹 설정 문제
alb 에서오는 모든 트래픽을 container instance 가 받을 수 있도록 인바운드 설정을 해주어 해결하였다.
docker container가 ECS EC2 instance에서는 실행되지 않는 문제
로컬에서는 docker container가 잘 뜨지만 ec2에서는 잘 뜨지 않았다.
docker container가 환경에 따라 다르게 동작하는가?
-> ARM 아키텍쳐를 사용하는 나의 맥북과 x86-64를 사용하는 EC2에서 도커 엔진의 동작이 달라 로컬에서 잘 빌드된 이미지더라도 환경에 따라 다른 결과를 나타낼 수 있었다.
-> docker command에 --platform linux/amd64 옵션을 주어 ec2와 동일한 운영체제 상에서 이미지를 빌드하여 해결할 수 있었다.
ecs가 ec2 container instance를 인식하는 방법
ecs-optimized AMI를 사용하여 ec2를 띄우면 container instance로 알아서 인식이 된다.
해당 ec2에 들어가 docker ps 를 입력해보면 ecs-agent 라는 container가 동작하고 있다.
해당 container가 ecs, ecr 과의 연결 등 모든 부분을 처리해준다
아직 nginx, spring 만 구성하였기에 front와의 연동을 제대로 확인하지 못했다.
하나의 ec2 내에서 여러 task가 실행될 때, spring container의 port를 고정 값으로 주었기 때문에 사용중인 port라는 에러 메시지와 함께 task가 죽어버린다.
ecr에 이미지가 변경되어도 ecs에서 감지하여 재 배포를 하지 못한다.
github action을 통해 ecr에 이미지를 업로드하는 과정을 자동화하지 못했다.
다음편에 계속...