[AWS] ECS 적응기

hyozkim·2021년 6월 10일
0

AWS

목록 보기
2/4
post-thumbnail

들어가면서 👋

사실 AWS를 사용하는 건 나의 선택도 아니었고 필수였다.

회사에서 AWS를 활용하여 서버를 운영할 것이 전제였고 그에 맞춰 공부해야만 하는 상황이었다.
그저 토이 프로젝트로 사용해본 수준이 아니라 실제 서비스에서 AWS를 사용하는 것은 경험이 적은 나에게 큰 부담이 아닐 수 없었다.

AWS 환경에서 서버와 관련된 모든 자원을 관리, 운영하고 무중단 배포까지 구축해나가는 일은 쉽지 않았다. AWS EC2, S3, RDS, ELB, ECS, ECR, NAT까지... 서버에 대한 이해는 물론이고, Docker, 네트워크도 폭넓게 이해하고 있어야 하며 무엇보다 AWS가 제공하는 용어들이 낯설기 때문에 이해하는데 많은 삽질이 필요했다.

국내에는 아직 AWS 관련 내용 정보, 블로그 등 찾기 어렵다.
AWS 공식 Document는 읽어봐도 어렵다... 부딪히며 배우는게 더 빠를수도 있다고 생각한다.

Spring Boot App 배포
AWS ECS 배포를 목적으로 작업을 하는데 있어서 순서대로 작성해나가겠습니다.

Docker

우선, 도커 용어, 이미지 생성, 컨테이너 실행에 대한 이해가 기본적으로 되어있어야 ECR,ECS에 대한 이해를 할 수 있다.

Docker vs 가상머신
가상머신은 운영체제 위에 하드웨어를 에뮬레이션하고 그 위에 운영체제를 올리고 프로세스를 실행하는 반면에, 도커 컨테이너는 하드웨어 에뮬레이션 없이 리눅스 커널을 공유해서 바로 프로세스를 실행한다.
Docker vs 가상머신 설명

Docker는 OS 환경에 영향을 받지 않아 한번 이미지를 만들어두면 어느 OS 환경에서도 별다른 세팅없이 실행될 수 있는 장점이 있어 백엔드 서버 개발자에게는 강력한 기술이다.

기본 명령어

  • docker build ${docker image:tag} . 컨테이너에 올리기전 build 완료된 app(jar,war,...) 이미지(복제본)을 생성.
  • docker images 생성된 이미지 조회.
  • docker run -it -p ${ex_port}:${in_port} ${docker image:tag} 이미지를 실행시켜 컨테이너로 실행.
  • docker ps 실행시킨 컨테이너 조회.

AWS ECR

AWS용 Docker Repository.

Github Repository처럼 사용하면 되는데 Docker Image를 저장하는 공간이다.
AWS에서 친절하게 푸시 명령을 제공한다. Docker를 할 줄 알아야함!

  1. ECR Repository를 생성.
  2. Spring Boot war/jar build.
  3. docker image 생성.
  4. docker run (Local Test 필수!)
  5. docker tag 생성.
  6. ECR Repository Push.

Taks Definition(작업 정의)

ECR에 이미지가 생성되면 생성된 이미지를 실행시키기 위해
호환성(ec2,fargate)
서버 CPU/Memory
vpc 네트워크
AWS Role
Argument Key:Value, ...
어떤 환경에서 이미지를 실행시킬건지 정의해야 한다.

예를 들어, docker run -it -p $EXTERNAL_PORT:$INTERNAL_PORT $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG 실행시킨다고 했을때 보안상 코드에 남기지 않는 정보(db계정,패스워드,외부key값 등) application.properties 주입이 필요할 건데 이를 정의할 수도 있다.

docker run 실행시 어떤 환경에서 할것인지에 대한 프레임을 만드는 과정이고 한번 만들어놓으면 ECR에 있는 이미지를 주구장창 원하는대로 만들어낼 수 있는것이다.

AWS ECS

Task Definition(작업정의)까지 생성완료되었으면 ECS 서비스를 만들어보자.

지금까지 이미지 생성, 환경 설정까지 마친 Application이 실제 실행될 서버를 배포하는 과정이다.

1. 클러스터 생성

우선 클러스터 생성시 종류에 대해서 다 활용해보지 않아서 잘 모르겠다.
실제 EC2 를 생성하지 않는 네트워킹 전용으로 만들었다.

2. 서비스 배포

크게 4가지 배포 구성 로드밸런싱 네트워킹 태그 으로 나뉜다.

다음과 같이 설정하여 배포할 수 있다.

  • 배포 구성
    Task Definition(작업정의) 버전(Ver)을 선택
    서비스 이름을 지정

  • 로드밸런싱
    Load Balancing 생성 - 대상 그룹 생성 or 지정
    HTTP(80)/HTTPS(443) SSL 적용 - AWS ACM

  • 네트워킹
    생성되는 서버 VPC SUBNET 보안그룹 지정

  • 태그 - 선택사항
    Optional ^^

마무리

최대한 간단하게 작성해보았지만 절대 간단하지 않다는 것은 한번 해보면 알 수 있다..

하지만 모든게 다 이해되고 나면 AWS가 제공하는 서비스가 얼마나 강력한지 실감할 수 있다.

이러한 공부를 하고 사용할 수 있게되는 과정은 힘들었지만 가치있는 공부를 한거 같아 뿌듯하다.

특히 ECS 서비스를 구축하는데 있어서 멘토님께 심심한 감사의 말씀을 전하고 싶고, 같이 고생한 팀원에게도 고마움을 전하고 싶다.

profile
차근차근 develog

0개의 댓글