본문 바로가기
AWS

[AWS] Docker Image로 수작업 배포 하는 방법

by dong_su 2023. 12. 14.

 

먼저, https://www.docker.com/get-started/ 에서 설치하고 실행 후 로그인한다.

 

-> Docker 로그인 할 때 이런 문제가 발생하면 터미널에 wsl.exe --install 실행


ECR(Elastic Container Registry)에 도커 이미지 업로드 가능하게 AWS 설정

 

-> AWS의 IAM의 유저에 위 권한 추가 후 ECR로 이동(region 확인)

 

-> 리포지토리 생성 클릭 - 프라이빗  체크 - 빈칸엔 AWS lambda의 서비스명-dev로 작성 후 생성 

 

-> 만든 리포지토리 체크 후 작업 탭에 권한 클릭 - 권한 편집에서 명령 추가 - IAM 개체텝에서  IAM 사용자명 검색 후 체크 

 

-> 20개 모두 체크 후 저장한다

 

-> 다시 정책 JSON 편집 클릭 - ecr:GetAuthorizationToken 권한도 추가로 설정해준다.


Serverless Flask 서버를 Docker Image로

 

FROM public.ecr.aws/lambda/python:3.9
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"]

 -> vscode로 배포 할 폴더를 열고 Dockerfile이라는 파일 생성, 위 코드를 그대로 적는다. (파이썬 버전 확인)

 

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

-> .dockerignore 파일 생성 후 위 코드 적는다.

 

service: 서비스명

frameworkVersion: '3'

custom:
  wsgi:
    app: app.app

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

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

-> serverless.yml 파일 위 코드로 수정

 

serverless-wsgi

-> requirements.txt 파일에 위 라이브러리 추가(추가 전에 이미 필요한 라이브러리들 있는 상태여야 한다.)

 

import serverless_wsgi

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

-> app.py 파일에 위 코드 추가하고 터미널에 sls deploy 실행, endpoint에 나온 주소로 테스트한다.

 

-> 정상 작동한 모습

 

-> AWS의 lambda 함수를 확인해보면 Docker로 배포한 경우엔 Image, 일반 서버리스로 배포하면 Zip으로 나온다.