읽기 전

  • 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
  • 개인적으로 사용해보면서 배운 점을 정리한 글입니다.

AWS Lambda Layer 외부 모듈 업로드

참고 링크 - Serverless | AWS Lambda Layer 외부 모듈 import하기
의존성을 요구하지 않는 module의 경우 기존 포스팅처럼 pip install [module 이름] -t [설치경로]로 설치 후 layer에 업로드하면 해결이 된다.
다만, 문제는 psycopg2 module처럼 libpq 의존성 등 lambda가 동작하는 Amazon Machine Image에 module이 의존하는 패키지가 없다면 단순히 module 파일만을 업로드 했을 때 import 에러가 발생한다.

Environment_Poetry_01

그렇다면 문제를 해결하기 위해서 업로드하는 layer 파일에 곧바로 import할 수 있도록 리눅스에서 빌드를 해야할 것 같다. 그런데 뭔가 리눅스를 따로 올리자니 귀찮고 그냥 로컬 환경에서 빌드를 할 수 있는 방법에 대해 고민해본 결과 wsl로 가능하지 않을까 생각이 들었다. 우선 이번 포스팅에선 Poetry로 module을 관리하는 방법에 대해 기록하려 한다.

Poetry 사용하기

Poetry 설치

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
위 명령어를 입력하면 설치된다.

Poetry 프로젝트 추가/관리

Poetry 설치를 완료했다면 다음 명령어를 실행해 프로젝트를 생성한다. 실행 시 폴더 하단에 [프로젝트 이름] 폴더를 생성하면서 다음의 구조로 만들어준다.

poetry new [프로젝트 이름]

Environment_Poetry_02)Environment_Poetry_03

poetry new [프로젝트 이름]

poetry-demo
├── [프로젝트 이름].toml
├── README.rst
├── poetry_demo
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_poetry_demo.py
  • [프로젝트 이름].toml
    • poetry.lock
      어찌보면 pip가 아니라 poetry로 python module을 관리하게 된 요인이다. 프로젝트에 정의된 module과 의존성을 해당 파일에 모아 관리하게끔 해준다. 그러므로 이 파일만 제대로 배포된다면 해당 프로젝트를 받는 모든 인원이 동일한 개발 환경으로 통일할 수 있음을 의미한다.
      참고! 만약 lock 파일이 없다면 [프로젝트 이름].toml에 명시된 의존성을 해결하고 module은 최신 버전으로 다운로드 한다. 이후 자체적으로 lock 파일을 생성하므로 반드시 repository에 커밋하여 다른 팀원들이 동일한 환경에서 개발할 수 있게끔 해야 한다. poetry.lock 파일과 project.toml 파일에 명시된 환경이 일치하지 않는다면 경고를 출력하기 때문이다.
  • 프로젝트의 의존성을 관리하는 파일이다. 괜히 임의로 추가할 필요 없이 커맨드라인으로 module의 의존성을 해결할 수 있기 때문에 가급적 건들지 말자.

Poetry 모듈 추가/관리

  • module 설치
    pip install과 동일 기능으로 poetry add [module 이름]을 하면 자동적으로 프로젝트 환경을 명시한 파일들을 수정하면서 추가한다.
  • module 확인
    module이 설치가 되었는지, 해당 module은 어떤 의존성을 가지고 있는지 확인하려면 poetry show 명령어를 사용하면 된다.

특정 module에 대한 정보와 의존성 정보를 함께 조회하려면 poetry show [module 이름] 명령어를 사용한다.

Poetry 모듈 export

lambda layer에 올린다던가 module을 패키징하여 배포하고 싶을 수 있다. 이 경우 poetry에 설치한 모듈과 그 module이 요구하는 의존 패키지를 requirements.txt 형태로 추출한 뒤 pip를 사용해 특정 디렉토리에 저장하면 될 것 같다.
추출하는 코드는 다음과 같다.
poetry export -f requirements.txt > requirements.txt
그리고 추출한 requirements.txt를 사용해 pip 명령어를 다음과 같이 입력하면 특정 폴더에 poetry가 관리하던 모든 module을 설치할 수 있다.
pip install -r [경로]/requirements.txt -t [원하는 module 설치 경로]

다음 포스팅에서는 psycopg2 module을 빌드하여 layer에 업로드 후 rds에 query request하여 response를 수신하는 과정까지 수행하는 내부 모듈을 작성해보려 한다.

+ Recent posts