ALB 적용하지 않고 ECS 생성 및 설정
도커 이미지가 올라갈 ECR까지 생성이 완료되면 이제 ECR에서 이미지를 pull 받아서 배포할 ECS를 생성해 보자. 이번 글에서는 로드 밸런서를 적용하지 않은 ECS 생성하는 방법을 작성해 볼 것이다.
1. Task 정의하기
1-1. ECS 좌측의 메뉴바에서 [태스크 정의] 버튼을 클릭한다.
1-2. 우측의 [새 태스크 정의 생성] 버튼을 클릭한다.
1-3. 그다음 이동한 페이지 좌측에서 왼쪽 위의 [새로운 ECS 환경]을 체크 해제한다.
- 태스크 정의를 할 때는 예전 ECS 환경에서 하는 게 더 다양한 옵션과 컨트롤이 가능하기 때문에 오류가 날 가능성이 적다.
1-4. 시작 유형 호환성을 선택한다.
- EC2를 선택한다.
1-5. 작업 및 컨테이너 정의를 구성한다.
- 여기서는 '태스크 정의 이름'만 적고 나머지는 default로 둔다.
1-6. 작업 실행 IAM 역할도 그냥 default로 둔다.
1-7. 다음으로 '작업 크기'를 설정한다.
- 메모리는 512MB, CPU는 256으로 설정했다.
- 나는 Spring Boot API 서버 하나 올릴 거 기 때문에 이런 크기를 줬다. 각자 상황에 맞게 값을 수정해 줘도 된다.
1-8. 다음으로 '컨테이너 정의'를 한다.
- 하단의 [컨테이너 추가] 버튼을 누른다.
1-8-1. 컨테이너 추가 화면으로 이동
- 아래와 같이 컨테이너 이름을 적고 ECR에서 이미지의 URI를 복사해서 '이미지' 항목에 넣는다.
- (이미지 URI는 AWS > ECR 메뉴에서 확인 가능하다.)
- 메모리 제한은 건드리지 않고 하단의 포트 매핑에 docker 이미지로 실행할 80 포트(http), 8081 포트(tomcat)를 열어준다.
1-8-2. 스크롤 내려서 스토리지 및 로깅 화면
- 이외의 하단의 '고급 컨테이너 구성 > 스토리지 및 로깅'에서 '로그 구성'에 'Auto-configure CloudWatch Logs'만 체크를 해주고 오른쪽 하단의 '추가' 버튼을 눌러서 컨테이너 설정을 저장한다.
1-9. 나머지 하단의 설정은 다 default로 두고 [생성] 버튼을 누른다.
1-10. 생성이 완료되면 아래와 같이 나온다.
2. ECS 클러스터 생성
- 태스크를 만들었으니 이제 ECS 클러스터를 만들어보자.
- (여기서부터는 다시 왼쪽의 메뉴바에서 [새로운 ECS 환경]을 체크한다.)
2-1. 좌측 메뉴바에서 [클러스터]를 클릭한다.
- 이후 우측 상단의 [클러스터 생성] 버튼을 클릭한다.
2-2. '클러스터 구성'에서 클러스터 이름과 기본 네임스페이스를 적는다.
2-3. 이후 '인프라'를 세팅한다.
- 태스크 정의를 EC2로 생성했기 때문에 클러스터 인프라도 Amazon EC2 인스턴스를 선택한다.
- 운영 체제/아키텍처에서 Amazon Linux 2023과 Amazon Linux 2중 아무거나 선택해도 큰 차이는 없다. 그러나 안정성과 장기 지원이 필요하다면 Amazon Linux 2가 더 적합할 수 있다.
- EC2 인스턴스 유형은 각자 프로젝트에 맞는 유형을 선택하면 된다.
- 원하는 용량은 기본 최소 0, 최대 5로 설정되어 있었지만 나는 스케일 업/다운이 필요하지 않아서 최소 1, 최대 1로 설정해 줬다
2-4. 다음으로 '네트워크' 설정을 한다.
- VPC는 기본값으로 설정했다.
- 보안 그룹도 기본값으로 설정했다.
2-5. 하단의 [클러스터 생성] 버튼을 누르면 다음과 같이 페이지가 이동된다. (생성 대기시간이 있다.)
2-6. 클러스터가 생성이 완료되고 'EC2' 대시보드로 들어오면 새로운 인스턴스가 생성된 모습을 볼 수 있다.
- 새로 생긴 인스턴스 ID를 클릭해서 들어가서 하단의 '태그' 탭을 클릭한다.
- Key, Value에서 ECS-Cluster라는 것을 확인할 수 있다.
2-7. 다시 ECS 대시보드로 넘어와서 방금 생성한 클러스터를 클릭한다.
- 스크롤 내려서 '인프라' 탭을 확인해 보면 용량 공급자와 컨테이너 인스턴스 목록을 확인할 수 있다.
3. Service 생성
3-1. 클러스터 하단의 서비스 목록에서 [생성]을 클릭한다.
3-2. '환경'에서 컴퓨팅 옵션을 선택한다.
- 우리는 클러스터를 EC2로 만들어 줬으니 컴퓨팅 옵션에 시작 유형을 EC2로 선택한다.
- (지금 클러스터명이 다른 이유는 캡처를 못해서 다른 클러스터 모습을 캡처해서 그렇다...)
3-3. 배포 구성을 선택한다. '패밀리'에는 처음에 정의했던 '태스크 정의'를 선택하면 된다. 이후 서비스 이름을 작성한다.
- 배포 옵션은 default 그대로 사용한다.
3-4. 그 외의 항목은 전부 default로 설정한다. 그리고 하단의 [생성] 버튼을 누르면 클러스터 개요로 이동되고 오랜 기다림이 시작된다.
3-5. 생성된 클러스터에 들어가서 '태스크' 탭을 확인한다. 클러스터 하단의 태스크를 확인한다.
- 태스크 실행까지 오래 걸리기 때문에 빨리 확인하고 싶으면 '원하는 상태 필터링'을 '모든 원하는 상태'로 선택하고 새로고침 하면 된다.
- '서비스' 탭도 확인하면 서비스가 잘 실행된 것을 알 수 있다.
4. 배포 확인
4-1. 서비스가 제대로 배포가 된 걸 확인하고 싶다면 '인프라' 탭에서 '컨테이너 인스턴스' 목록에 있는 인스턴스를 클릭한다.
- 일단 컨테이너 인스턴스의 상태가 '활성'으로 떠있으니 정상 작동하는 모습을 확인할 수 있다.
4-2. 그리고 하단으로 내리면 '네트워킹' 항목이 있는데 여기서 '퍼블릭 DNS'에 접속하면 제대로 배포가 된 모습을 확인할 수 있다.
- (포트는 Task 정의할 때 작성한 포트로 접속하면 된다.)
5. 마무리
일단 여기까지 오는데도 엄청난 시행착오를 겪었다. 일단 가장 기본에 가깝게 로드 밸런스도 안 쓰고 VPC도 기본을 사용해서 ECS 배포에 성공하긴 했다.
이후에 로드 밸런스를 사용해서 ECS를 배포 성공한 상황도 포스팅해야겠다.
'AWS' 카테고리의 다른 글
[AWS] CodePipeline을 이용한 CI/CD (1) - 파이프 라인 생성 (0) | 2023.10.31 |
---|---|
[AWS] ECS 생성5 - ECS 생성 및 설정 (w ALB) (0) | 2023.10.31 |
[AWS] ECS 생성3 - ALB 세팅하기 (0) | 2023.10.30 |
[AWS] ECS 생성2 - ECR 생성하기 (M1 Mac 적용) - exec /usr/bin/java: exec format error 에러 해결 (1) | 2023.10.30 |
[AWS] ECS 생성1 - ECR 생성하기 (M1 Mac 제외) (0) | 2023.10.30 |