클라우드

[CLOUD] 3-Tier Architecture Server 배포 - ECS + Fargate

예림밈 2025. 5. 24. 20:51
728x90
지난 포스팅은, EC2에 Springboot jar 파일을 복사해서 배포하는 방식으로 구성해봤다. 이번 포스팅은 ECS + Fargate 방식으로 배포하는 과정을 알아보려고 한다. 

 

 

시작하기 전에 앞서, 간단한 개념은 여기에 정리했으니 참고하면 좋을 것 같다. 🍀

1. ECS + Fargate 배포

1. Dockerfile 생성

# OpenJDK 17 사용 
FROM openjdk:17-jdk

# JAR 파일을 컨테이너에 복사
COPY build/libs/blog-0.0.1-SNAPSHOT.jar app.jar

# 실행 명령
ENTRYPOINT ["java","-jar","/app.jar"]

 

2. 빌드

docker build -t blog .

 

3. AWS ECR에 이미지 업로드

- 원하는 이름으로 리포지토리 생성

- 이때 리포지토리 이름 잘 기억하기!

 

 

4. AWS CLI로 ECR 로그인

aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com

 

5. 태그 붙이기

- 이때, Dockerfile에서 생성한 이미지 이름을 갖고와야 함 (나는 blog:latest 로 이미지 생성했었음)

docker tag blog:latest <account-id>.dkr.ecr.<region>.amazonaws.com/blog:latest

 

6. 이미지 푸시

- AWS ECR 레포지토리에 이미지 푸시해주기

docker push <account-id>.dkr.ecr.<region>.amazonaws.com/blog:latest

 

7. ECS 클러스터 생성

클러스터 이름 생성

- 인프라 : AWS Fargate 선택 

 

⚠️ 이때, 나는 에러가 발생했다 .⸝⸝ʚ̴̶̷̆ ̯ʚ̴̶̷̆⸝⸝ 

핵심 문구만 살펴보자면,   Please verify that the ECS service linked role exists.  

➡️ 즉, IAM role 문제이다.

 

IAM 콘솔 창에 들어가보니, AWSServiceRoleForECS 역할 (AWS ECS 서비스가 필요로 하는 권한을 제공하는 역할) 에 권한 정책이 없으면 문제가 생긴다고 한다. ECS 권한 정책을 추가해주니까 성공적으로 클러스터 생성이 완료됐다. 

클러스터 생성 성공

 


2. ECS 설정

1. Tesk Definition

1. 태스크 정의 클릭 : ECS 콘솔 창 접속 후 왼쪽에 위치

 

2. Task 이름 정의 : blog-task

3. AWS Fargate 클릭

4. 운영 체제 / 아키텍처 : Linux/ARM64 (*운영체제 주의!!)

  • MAC에서 Docker 이미지를 빌드했기 때문에, 빌드한 이미지는 ARM 아키텍처용으로 생성된다.
  • 따라서 Fargate도 ARM 아키텍처에서 실행 가능하도록  Linux/ARM64를 선택해야 한다.
  • 만약, x86으로 설정하면 Fagate 실행 시 exec format error  를 만나게 된다.
  • 혹은, Mac에서 멀티 아키텍처 이미지로 빌드하는 방법도 있다. 

5. CPU / 메모리 설정 : 1 vCPU / 3 GB( 테스트 용이라 아주 작게 설정했다.)

 

6. 컨테이너 이름 및 이미지 URL 설정 : 앞서 ECR에 올린 이미지 URL 복붙

7. (선택사항) 환경 변수 설정 : Springboot 서버에 DB 연결을 했어야 했기 때문에 환경 변수를 추가적으로 설정했다. 

  • 다음 세 가지를 추가해주고 값도 넣어준다. 
SPRING_DATASOURCE_URL
SPRING_DATASOURCE_USERNAME
SPRING_DATASOURCE_PASSWORD

application.yaml

 

 

8. 클러스터 서비스 생성 

  • 만들어준 클러스터에 들어가면 서비스 생성란 클릭

 

  • 앞서 생성한 태스크 클릭

 

  • VPC/서브넷/보안그룹 설정 : 나는 앞서 생성한 VPC/ 서브넷 / 보안 그룹 선택해주었다.

 

9. 서비스 생성 완료

 

10. 생성된 태스크 확인 및 퍼블릭 IP 확인 : x.xx.xxx.96

 

11.  퍼블릭 IP 접속 테스트

 


자잘한 에러가 많아서 생각보다 시간이 좀 걸렸지만, 또 그 과정속에서 배웠으니 만족한다. ^^

다음엔 Github 액션으로 자동 배포까지 해보자!