20191209 TIL - AWS Lambda (3) - 람다에서 python 패키지 사용하기

박경연 (돌진어흥이)·2019년 12월 14일
5

aws Lambda

목록 보기
3/4

콘다가 해주던 가상환경 관리....를 어떻게?

만약 내가 람다로 크롤링을 진행하는 함수를 작성하여 실행시켜야 한다고 가정해보자, 처음에 해야할 일은 너무나도 당연하게 가상환경 생성 -> 필요한 패키지 설치이다. 하지만 람다는 이미 서버가 돌아가고있고, 돌아가고있는 내 로컬에 서버를 돌리는게 아니니 당연히 람다에서는 셀레늄 같은 패키지가 깔려있지 않다. 그럼 람다 함수에서 필요한 패키지는 어떻게 쓸 수 있을까?

zip파일로 업로드

  1. 임의의 빈 폴더에 pip를 이용해 패키지를 설치해준다. 다만 명령어는 다음과 같다
pip install <"PACKAGE_NAME"> -t .
  1. 명령을 실행시키면 해당 폴더의 하위 폴더에 패키지들이 주르륵 깔린다.

  2. 이 주르륵 깔린 패키지의 파일들을 선택하여 하나의 zip파일로 묶어준다.

  3. 다음 사진과 같이 .zip 파일 업로드를 선택하여 묶어준 zip 파일을 선택하여 업로드한다.
    스크린샷, 2019-12-14 18-38-16.png

  4. 업로드가 완료되면 파일 목록에 패키지 파일과 폴더들이 보이고, 그 이후에는 기존에 쓰던것 처럼 import를 통해 패키지를 사용하는것이 가능하다.

Layer에 업로드

첫번째 방법은 다음과 같은 상황에서 문제를 겪는다.

  • 여러 함수에서 해당 패키지를 임포트하여 사용해야할 때
  • 올려야 할 패키지의 종류가 늘어나고 용량이 꽤나 커졌을 경우

Layer에 업로드 하는 방법은 방법은 앞에서 언급한 문제들 중 여러 함수에서 공통으로 임포트해야할 때의 문제를 없애주며, 용량이 너무 커지지 않는다면 여러종류의 패키지를 올려야하는 문제도 어느정도 해결해준다. 용량에 제한 없이 패키지를 업로드하여 관리하고싶다면 S3을 사용해야 하는데, 이부분은 필자도 시도해보지 않은 부분이라, 추후에 시도하여 구현한다면 포스팅하겠다.

  1. 이번에도 pip를 이용해 패키지를 폴더에 설치해준다.

  2. 동일하게 압축하되 압축파일 아래에 python이라는 폴더를 만들어 압축해준다.

  3. 람다함수 밑의 Layers를 클릭한다.

스크린샷, 2019-12-14 19-21-51.png

  1. Add a Layer 클릭.

스크린샷, 2019-12-14 19-23-32.png

  1. Layer를 먼저 생성해주어야 하기때문에 계층을 먼저 클릭해준다.

스크린샷, 2019-12-14 19-26-29.png

  1. 계층 생성 터치

스크린샷, 2019-12-14 19-28-06.png

  1. 이름, 설명, 런타임등 필요한 정보를 입력하고 만들어놓은 zip파일을 업로드한 후 생성을 누른다.

스크린샷, 2019-12-14 19-30-13.png

  1. Layer가 생성된 것을 확인한 후 다시 람다함수의 Layer에서 Add a Layer를 선택해준다.

스크린샷, 2019-12-14 19-32-12.png

  1. 방금 만든 myLayer를 선택해주고 버전은 처음이므로 하나 밖에 존재하지 않는다. 레이어에 변경사항이 있을 때마다 버전이 늘어나는데 늘어나면 늘어나는 대로 최근 버전을 업로드해주면 된다.

스크린샷, 2019-12-14 19-32-29.png

  1. 레이어 또한 변경사항이다. Save를 잊지말자

스크린샷, 2019-12-14 19-35-24.png

  1. 이제 레이어가 올라갔으니 코드에서
import selenium
import requests
from mysql.connector import Errors

이와 같이 설치한 패키지들을 임포트하여 사용하는것이 가능하다.

profile
Back-end Developer, pursuing to be a steadily improving person.

0개의 댓글