***
이 글은 docker에 대해서 어느 정도의 지식이 있다는 가정 하에 쓰인 글입니다.
개인 공부 용도로 작성된 글이기때문에 틀린 개념이 있을 수 있습니다.
***
□ AWS ECS 란?
컨테이너화된 애플리케이션을 클라우드에 배포할 수 있습니다.
ecs의 기본 구조입니다.
조금 설명을 해보자면 이렇게 될 것 같습니다.
1. docker image를 가지고 (aws ecr)
2. docker container를 작성합니다. (task definition)
3. docker-compose 파일에 container별로 설정을 추가한 뒤에 (service)
4. container가 전부 작성되어 있는 docker-compose 파일을 실행합니다. (cluster)
하나씩 조금 더 자세하게 설명해보겠습니다.
· ECR
도커 이미지를 관리하는 서비스입니다.
리포지토리가 있고 이미지를 리포지토리에 저장하는 방식입니다.
쉽게 그냥 도커 이미지 저장소라고 생각하면 됩니다.
· task
ecs를 사용하는 최소 단위입니다.
쉽게 도커 이미지 1개라고 생각하면 될 것 같습니다.
· task definition
말 그대로 task 정의입니다.
도커 이미지를 사용해 도커 컨테이너를 만들 때 필요한 port정의 또는 환경변수 또는 로그 등등의 설정을 말합니다.
· service
task definition을 가져와서 실행시키는 방법 중 하나입니다.
docker-compose.yml 파일에 기재되어 있는 컨테이너 하나라고 생각하면 될 것 같습니다.
task를 한 번에 몇 개 실행할 건지 관리는 어떻게 할 건지를 정할 수 있습니다.
auto scaling, load balancing도 여기서 해줍니다.
· cluster
task나 service의 그룹입니다.
완성된 docker-compose.yml 파일이라고 생각하면 될 것 같습니다.
□ AWS ECS로 python 웹 애플리케이션 배포하기
저는 django로 한번 해보겠습니다.
제가 사용한 django 웹 애플리케이션입니다.
그냥 대충 8000으로 json이 리턴되게 만들었습니다.
㉮ ecr에 docker image 빌드
ecr은 예전에 해본 적이 있기 때문에 패스하겠습니다.
2022.09.17 - [programing/aws] - [ aws ecr ] ecr 만들기
㉯ 클러스터 생성
> ecs > 클러스터 > 클러스터 만들기 클릭!
> ec2 linux + 네트워킹 클릭!
㉯-1 클러스터 템플릿 선택
클러스터 이름 : test
㉯-2 인스턴스 설정
프로비저닝 모델 : 온디맨드 인스턴스
EC2 인스턴스 유형 : t3.micro
인스턴스 수 : 1
㉯-3 네트워크
포트 범위 : 저는 8000으로 도커파일을 만들었기 때문에 8000으로 바꾸겠습니다.
클러스터를 생성하게 되면 바로 ec2가 만들어집니다.
ec2로 가보면 하나가 실행 중인 것을 알 수 있습니다.
㉰ 작업 정의하기
> ecs > 작업 정의> 새 태스크 정의 작성 클릭!
> EC2 클릭!
㉰-1 부팅 유형 호환성 선택
태스크 정의 이름 : test_1
㉰-2 컨테이너 정의
컨테이너 추가 클릭!
컨테이너 이름 : test_1
이미지 : ecr의 url
메모리 제한 : 하드 제한 , 128
포트매핑 : 호스트, 컨테이너 둘 다 8000으로 해주세요
이렇게 추가가 되었으면 만들어주세요
㉱ 서비스 정의하기
> ecs > 클러스터 > 아까 만들었던 test 클릭!
> 서비스 > 만들기 클릭!
㉱-1 서비스 설정
나머지는 스킵하고 그냥 넘어가주세요
서비스를 작성하고 조금만 기다리면
이런 식으로 작업이 나올 겁니다.
마지막 상태가 RUNNING 이 될 때까지 기다려주세요.
㉲ 확인하기
서비스까지 설정이 끝났다면 이제 ec2로 가주세요.
ec2의 퍼블릭 도메인을 확인한 뒤에 바로 구글에 퍼블릭도메인:8000을 쳐보면
이런 식으로 연결이 된 것을 확인할 수 있습니다.
㉳ 서비스를 하나 더 추가해서 확인해 보기
하나의 클러스터에 여러 개의 서비스를 추가하는 것도 가능합니다.
저는 포트 80으로 동작하는 서비스를 하나 더 추가해 보겠습니다.
그러기 위해서는 우선 ec2의 인바운드 규칙을 추가해야 합니다.
㉳-1 EC2에 인바운드 규칙 추가하기
이런 식으로 80 포트를 추가해 주세요.
㉳-2 태스크 정의 추가하기
태스크 이름 : test_2
포트매핑 : 호스트 : 80, 컨테이너 : 8000
나머지는 동일하게 하겠습니다.
㉳-3 서비스 추가하기
이제 서비스를 하나 더 작성하겠습니다.
작성되었고 RUNNING인지 확인해 주세요
㉳-4 확인하기
다시 url을 입력하겠습니다. 구글에 퍼블릭도메인:80을 쳐보면
80 포트도 연결된 것을 확인할 수 있습니다.
㉴ 종료하기
지금까지 만들었던 서비스, 클러스터, 태스크 정의를 전부 삭제해 주면 됩니다.
클러스터를 삭제하면 ec2까지 자동으로 지워집니다.
***
S3를 사용해보고 싶다면?
2022.09.03 - [programing/aws] - [ aws S3 ] S3 (Simple Storage Service) bucket 만들기
RDS를 사용해보고 싶다면?
2023.01.12 - [programing/aws] - [ aws rds ] postgresql 데이터베이스 생성 및 연결, 삭제해 보기
IAM를 사용해보고 싶다면?
2023.01.12 - [programing/aws] - [ aws IAM ] 유저 그룹, 유저 생성
aws에 클릭 몇 번으로 서비스를 배포해보고 싶다면?
2023.01.12 - [programing/aws] - [ AWS Elastic Beanstalk ] python 웹 애플리케이션 배포하기 - 샘플 어플리케이션
***
'programing > aws' 카테고리의 다른 글
[ Lambda ] aws lambda 만들어보기 (0) | 2023.06.28 |
---|---|
[ aws ] VPC(virtual private cloud)란? (0) | 2023.01.18 |
[ AWS Elastic Beanstalk ] python 웹 어플리케이션 배포하기 - 샘플 어플리케이션 (0) | 2023.01.12 |
[ aws RDS ] postgresql 데이터베이스 생성 및 연결, 삭제해보기 (0) | 2023.01.12 |
[ aws IAM ] 유저 그룹, 유저 생성 (0) | 2023.01.12 |
댓글