Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
Amazon ECS Fargate로 컨테이너 서비스 실행 1 - ECR Push 까지
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2024-01-27
2024-01-27
1238
 ### AMAZON ECS Amazon ECS(Elastic Container Service)는 AWS의 컨테이너 오케스트레이션 서비스다. ECS를 사용하면 컨테이너 기술을 사용해서 애플리케이션을 쉽게 배포 및 운영 할 수 있다. AWS의 관리형 kubernetes 서비스인 EKS와 같은 위치에 있는 서비스라고 할 수 있다.EKS에 비하면 매우 매우 간단하고 쉽게 사용 할 수 있다. Docker를 사용 할 수 있다면, 어렵지 않게 사용할 수 있는 쉬운 서비스다. 수많은 애플리케이션으로 이루어진 MSA 서비스가 아니고, kubernetes를 운영할 인력이 없다면, 관리/운영/비용 측면에서 ECS도 좋은 선택이다. ### 아키텍처 우리가 만들 애플리케이션 아키텍처는 아래와 같다.  개발자가 데스크탑 PC에서 애플리케이션 도커 이미지를 build 하고, 이미지를 도커 저장소인 ECR에 PUSH 한다. 그리고 ECS Fargate를 이용해서 VPC에 서비스를 배포 한다. 이 문서는 2개로 나뉜다. 1. 데스크탑 PC에서 Docker Image를 빌드하고 ECR까지 Push 한다. : 이번에 다룰 내용 2. ECS Fargate로 ECR의 Docker Image로 부터 애플리케이션을 전개 : 다음번에 다룰 내용 이번 문서에서 다룰 내용은 아래와 같다. 1. Python flask 테스트 애플리케이션 준비 2. Python flask 애플리케이션 Docker image build 3. ECR Docker registry 설정 4. AWS CLI 환경 설정 5. IAM User 생성 및 Access Key 발급 6. ECR Push ### ECS 구성요소 1. 클러스터(Cluster): ECS는 경량이긴 하지만 **컨테이너 오케스트레이션 서비스**로 클러스터를 구성한다. 클러스터는 EC2 인스턴스로 구성할 수 있으며, **AWS Fargate**를 선택할 경우 서버리스로 구성할 수도 있다. 2. Task Definition: 컨테이너화된 애플리케이션의 실행방법을 정의하고 있는 JSON 형식의 문서다. 여기에는 어떤 이미지에서 컨테이너를 실행할지, 네트워크 설정, 리소스 크기 등을 설정할 수 있다. 3. Task: Task는 Task Definition의 내용에 따라 실행되는 컨테이너다. 클러스터를 구성하는 EC2에서 실행되거나 Fargate일 경우 서버리스로 실행된다. 4. Service: 서비스는 Task를 관리하는 역할을 한다. 로드밸런싱, Auto Scaling과 같은 기능을 이용해서 Task를 관리한다. ### 테스트 애플리케이션 테스트를 위해서 간단한 python flask 애플리케이션을 준비했다. 파일의 이름은 **app.py**다. ```python from flask import Flask app=Flask(__name__) app.route("/") def home(): return "Hello, World!" app.run(host="0.0.0.0", port=5000) ``` 의존성을 설치하기 위해서 **requirements.txt** 파일을 만들었다. ``` flask ``` pip로 의존성을 설치하자. ```shell pip install -r requirements.txt ``` 애플리케이션을 실행한다. ``` $ python app.py * Serving Flask app 'app' * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000 * Running on http://192.168.35.77:5000 Press CTRL+C to quit ``` 애플리케이션 개발이 끝났으니, 이 애플리케이션을 도커 이미지로 만들어보자. ### Docker Image 만들기 테스트 애플리케이션을 도커 이미지로 만들기 위해서 **Dockerfile**을 생성했다. ```Dockerfile FROM python:3.9-slim WORKDIR /opt/app COPY . /opt/app RUN pip install -r requirements.txt CMD ["python3", "app.py"] ``` build 명령으로 docker image를 만든다. ```shell docker build -t joinc/hello-flask:latest . ``` ### ECR Docker registry 설정 AWS Management Console에서 "Amazon ECR > Private registry > Repositories" 로 이동해서 **Create repository**를 선택한다.  Public(누구나 접근 할 수 있도록)할게 아니므로 **Private**로 설정한다. 그리고 Repository name을 설정한다. 여기에서는 joinc/hello-flask 로 설정했다. Create respository 버튼을 클릭하면 저장소가 만들어진다.  새로운 도커 이미지 저장소가 만들어진 것을 확인할 수 있다.  도커 이미지를 선택하고 **View push commands**를 선택하면, 도커 이미지의 빌드, (도커 저장소)로그인, 태깅, Push 명령을 확인 할 수 있다.  ### AWS CLI 설치 AWS 서비스를 다루기 위해서 AWS CLI 툴을 설치한다. 자세한 내용은 [AWS 공식문서](https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html)를 참고하자. 아래 명령을 실행해서 AWS CLI를 설치한다. ``` curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install ``` 잘 설치됐는지 확인한다. ``` $ aws --version aws-cli/2.13.31 Python/3.11.6 Linux/6.5.0-14-generic exe/x86_64.ubuntu.23 prompt/off ``` 여기까지 하면 기본 설치는 끝이다. 바로 다음으로 넘어가면 된다. AWS CLI와 관련된 자세한 내용이 궁금하다면 [AWS CLI 설치 및 credential 설정](https://www.joinc.co.kr/w/man/12/aws/cli) 문서를 참고하자. ### ECR 사용을 위한 IAM User 등록 Private ECR 저장소를 사용하기 위해서는 ECR 로그인을 해야 하는데, 이때 IAM 권한이 필요하다. ECR에 로그인하고 이미지를 Push, Get 할 수 있는 IAM User를 만들어보자. **IAM > Users**로 이동해서 **Create user**를 클릭한다.  User name을 설정한다.  ECR 접근을 위한 Permission을 설정한다. ECR에 대한 모든 권한을 가지는 **AmazonEC2ContainerRegistryFullAccess** 를 선택한다.  이제 API를 호출하기 위해서 **Security credentials**를 설정한다. ecr-test-iam-user를 선택한 후, Security credentials 탭으로 이동한다.  **Create access key**로 Access key를 발급받는다.  **aws cli** 툴로 사용하므로 Command Line Interface 타입을 선택한다.  Access Key를 다운로드 한다.  aws configure 명령을 이용해서 credentials를 설정한다. ``` $ aws configure AWS Access Key ID [****************JMPR]: AKIAQ************************** AWS Secret Access Key [****************gwxW]: 73Ms************************** Default region name [ap-northeast-2]: Default output format [json]: json ``` configure 명령을 이용하면 default profile을 덮어쓰므로 .aws/config와 .aws/credentials를 백업하도록 한다. ecr에 잘 접근하는지 테스트를 해보자. ``` aws ecr describe-repositories --output=text ``` ### ECR Push ECR command에 가이드한 명령들로 Push 하면 된다. docker image를 빌드한다. ``` docker build -t joinc/hello-flask:latest . ``` ecr 로그인을 한다. ``` $ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 0163********.dkr.ecr.ap-northeast-2.amazonaws.com WARNING! Your password will be stored unencrypted in /home/yundream/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded ``` Image 태깅을 한다. ``` docker tag joinc/hello-flask:latest 0163******.dkr.ecr.ap-northeast-2.amazonaws.com/joinc/hello-flask:latest ``` Image를 Push 한다. ``` docker push 0168******.dkr.ecr.ap-northeast-2.amazonaws.com/joinc/hello-flask:latest ``` ECR에 등록된 이미지를 확인해보자.  ### 정리 이렇게 해서 도커 이미지를 ECR까지 Push 했다. 다음 문서에서 ECS Fargate를 이용해서 도커 애플리케이션을 인터넷에서 사용할 수 있도록 배포해보자.
Recent Posts
MLOps with Joinc - Kubeflow 설치
Vertex Gemini 기반 AI 에이전트 개발 05. 첫 번째 LLM 애플리케이션 개발
LLama-3.2-Vision 테스트
Vertex Gemini 기반 AI 에이전트 개발 04. 프롬프트 엔지니어링
Vertex Gemini 기반 AI 에이전트 개발 03. Vertex AI Gemini 둘러보기
Vertex Gemini 기반 AI 에이전트 개발 02. 생성 AI에 대해서
Vertex Gemini 기반 AI 에이전트 개발 01. 소개
Vertex Gemini 기반 AI 에이전트 개발-소개
생성 AI 모델 Flux.1 설치 및 사용
GPT를 이용한 Reranker 테스트
Archive Posts
Tags
aws
cloud
docker
ecs
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags