군침이 싹 도는 코딩

도커 이미지로 배포하는 법 본문

AWS/Lambda

도커 이미지로 배포하는 법

mugoori 2023. 4. 5. 11:23

1. VS code 에서 Dockerfile을 만든다.

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"]


2. VS code 에서 .dockerignore 파일을 만든다.

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

두 파일을 만들때 대소문자 구별해서 똑같이 만든다

3. VS code 에서 serverless.yml로 가서 코드를 수정한다

service: aws-two-api

frameworkVersion: '3'

custom:
  wsgi:
    app: app.app

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

functions:

  app:
    image:
      name: appimage
    events:
      - httpApi: '*'

이렇게 수정

4. VS code 에서 requirements.txt 파일로 가서 코드 수정

serverless-wsgi 추가하기
그 외 사용한 라이브러리 추가

5. VS code 에서 app.py 가서 코드 추가

import serverless_wsgi
import os
os.environ['JOBLIB_MULTIPROCESSING'] =  '0'
os.environ['HOME'] = '/tmp'


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

맨 밑에 이 부분 위에 추가 
if __name__ == '__main__' : 
    app.run()


/////////////


AWS IAM 사용자로 가서 권한을 추가한다 

AmazonEC2ContainerRegistryFullAccess


Elastic Container Registry 로 이동해서 리전을 서울로 바꾼다

레파지토리를 생성한다 
프라이빗 , 레파지토리 이름을 vsc serverless.yml의 서비스를 복붙한다 예) aws-two-api-app-dev

레파지토리를 체크하고 작업 > 권한 > 편집 > IAM 개체 배포하는 개체 선택 > 작업을 전부다 체크 > 저장

Repositories 로 간다 > 작업 > 권한 > 정책 JSON 편집 "ecr:GetAuthorizationToken", 넣기

배포


요약

1. docker 다운로드 후 실행
2. VS Code 파일 5개 수정
3. AWS에서 IAM 및 ECR 권한 설정
4. 터미널에서 $ sls deploy