본문 바로가기
programing/aws

[ AWS ECS ] python 웹 어플리케이션 배포하기

by 궈능비 2023. 1. 15.
728x90
반응형

***

이 글은 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이 리턴되게 만들었습니다.

test.zip
0.01MB

 

㉮ ecr에 docker image 빌드

ecr은 예전에 해본 적이 있기 때문에 패스하겠습니다.

2022.09.17 - [programing/aws] - [ aws ecr ] ecr 만들기

 

[ aws ecr ] ecr 만들기

순서입니다 1. 리포지토리 만들기 2. aws 설정하기 3. 리포지토리 권한 설정하기 4. iam 권한 설정하기 5. 리포지토리에 도커 이미지 빌드하기 리포지토리 만들기 ecs를 사용해보기 위해서 오늘은 ecr

kwon-eb.tistory.com

 

㉯ 클러스터 생성

> 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 만들기

 

[ aws S3 ] S3 (Simple Storage Service) bucket 만들기

aws s3를 이용해보려고 합니다 s3를 이용할 때는 버킷을 먼저 만들어줘야 합니다 버킷을 만들어 보겠습니다 우선 일반 구성부터 설정해줍니다 버킷 이름 : testbucket + 본인 이름(영어)으로 해줄게요

kwon-eb.tistory.com

 

RDS를 사용해보고 싶다면?

 

2023.01.12 - [programing/aws] - [ aws rds ] postgresql 데이터베이스 생성 및 연결, 삭제해 보기

 

[ aws RDS ] postgresql 데이터베이스 생성 및 연결, 삭제해보기

□ RDS 란? Amazon Relational Database Service(Amazon RDS)는 클라우드에서 데이터베이스를 설정, 운영 및 확장할 수 있는 관리형 서비스 모음입니다. MySQL과 호환되는 Amazon Aurora , PostgreSQL과 호환되는 Amazon Aur

kwon-eb.tistory.com

 

IAM를 사용해보고 싶다면?

2023.01.12 - [programing/aws] - [ aws IAM ] 유저 그룹, 유저 생성

 

[ aws IAM ] 유저 그룹, 유저 생성

aws에서 유저를 관리하는 기능을 사용해보려고 합니다. □ IAM 란? IAM은 사용자의 접근 권한을 관리하는 서비스입니다. IAM을 이용하면 사용자별로 AWS에서 제공하는 서비스들에 대해 권한을 지정

kwon-eb.tistory.com

 

aws에 클릭 몇 번으로 서비스를 배포해보고 싶다면?

 

2023.01.12 - [programing/aws] - [ AWS Elastic Beanstalk ] python 웹 애플리케이션 배포하기 - 샘플 어플리케이션

 

[ AWS Elastic Beanstalk ] python 웹 어플리케이션 배포하기 - 샘플 어플리케이션

□ AWS Elastic Beanstalk 란? 코드랑 원하는 구성만 제공하면 알아서 ec2, auto scaling, load balancing을 해주는 서비스 컨테이너화되지 않은 애플리케이션을 클라우드에 배포할 수 있습니다. 일일이 만들고

kwon-eb.tistory.com

 

***

728x90
반응형

댓글