API 개발/Docker & AWS ECR API 대용량 배포

Docker : (2) 로컬 환경 배포 방법 (Dockerfile 생성) & Error 정리

신강희 2024. 5. 28. 10:50
728x90

< (2) 로컬 환경 배포 방법 (Dockerfile 생성)

& Error 정리 >

 

# 기본 설정 완료 배포하려는 서버 폴더 VScode로 열고 Dockerfile 생성 (resources 안에 생성하면 안되고 최상위에 생성하여야함.. 캡처후에 옴김)

- 생성하면 자동으로 Docker 설치 안내팝업 뜨는데 설치! 혹시 안뜬다면 검색하여서 설치

 

# Dockerfile 안에 코드 작성!

- 버전은 실행하려는 환경에 맞게 수정!

# Docker 메뉴얼대로 작성하는것!
FROM public.ecr.aws/lambda/python:3.10
COPY . ${LAMBDA_TASK_ROOT}
COPY requirements.txt .

RUN yum -y install gcc
RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"

CMD ["app.handler"]

 

# 다음은 .dockerignore 파일 생성! (다른 폴더안에 생성하면 오류뜸.. 꼭 최상위에 생성할것..!)

- 업로드 예외로 처리할 항목들 작성

__pycache__/
.git/
.serverless/
.gitignore
.dockerignore
serverless.yml

 

# 이제 serverless.yml 안에 구문을 추가해줘야 한다!

- serverless 수정할때마다 service: 명칭도 수정해주어야 lambda 함수에 추가되니 주의하자!

- provider functions 부분 수정

- 이전에 작성해있던 플러그인은 지워준다 (다른 위치에 작성할거임!)

service: aws-movie-server

frameworkVersion: '3'

custom:
  wsgi:
    app: app.app

provider:
  name: aws
  region : ap-northeast-2
  ecr:
    images:
      appimage:
        path: ./

functions:
  api:
    image: 
      name: appimage
    timeout: 30
    events:
      - httpApi: '*'

 

# 아까 삭제하였던 플러그인은 requirements.txt에 작성해준다!

Flask==1.1.4
Werkzeug==1.0.1
markupsafe==2.0.1

serverless-wsgi

flask-restful
mysql-connector-python
psycopg-binary
passlib
flask-jwt-extended
email-validator

numpy
pandas

 

# CMD창을 열고 플러그인 설치해 주고 app.pyimport 까지 해줘야함

pip install serverless-wsgi

 

# 그리고, Docker handler 사용을 위한 함수도 app.py 하단에 작성 추가!

def handler(event, context) :
    return serverless_wsgi.handle_request(app, event, context)

 

# 이제 sls deploy로 로컬환경에서 서버 배포를 실행해본다!

- 오류가 진짜 엄청나게 많이 난다.. 원인이 너무 많아서 지금까지 발생된 오류만 정리!

 

1) Docker가 실행되어있어야 한다! 로그인까지 되어있어야함

2) Dockerfile과 .dockerignore가 최상위 폴더 위치에 생성되어 있어야함

3) 기존에 이미 배포되어있는 서버가있으면 중복 배포가 안되는 경우가 있음

- sls remove를 하고 다시 재배포

4) 용량이 꽤 많이 들어서 여유용량이 없으면 배포가 안되는경우가 있다.

- 대략 10~20GB정도 여유가 있어야 문제가 발생되지 않는것 같음

 

다음 게시글로 계속~!

 

반응형