NAVER Cloud

Cloud Function deployment package in Python

한크크 2020. 10. 12. 21:48

Cloud Function 을 통해 API 를 만드는 테스트를 진행중인데, 매일 하나씩 고비가 생기는 것 같다. 

네이버클라우드플랫폼의 Cloud. Function 을 통해서 실행시킬 Python 코드를 Jupyter notebook 에서 테스트를 하고 나서 Cloud Fuction 에서 돌려보려고 하니 아래와 같이 에러가 발생했다. 

["2020-10-12T12:14:26.14680968Z  stderr: Traceback (most recent call last):",
 "2020-10-12T12:14:26.14684808Z  stderr: File \"pythonrunner.py\",line 87, in run",
 "2020-10-12T12:14:26.146853189Z stderr: exec(self.fn, self.global_context)",
 "2020-10-12T12:14:26.146857021Z stderr: File \"__main__.py\", line 1, in <module>",
 "2020-10-12T12:14:26.146860965Z stderr: ModuleNotFoundError: No module named 'pymysql'"]

그렇다! notebook 에서도 테스트 할 때 pip install 로 pymysql 라이브러리를 설치했었다. 

Cloud Function 에서는 과연 pymysql 을 어떻게 설치해야 할까..? 

 

이런 저런 방법을 찾다가 예전에 같은 회사 총괄님이 운영중인 커뮤니티에서 아래와 같은 글을 발견했다. 

https://sarc.io/index.php/aws/805-aws-lambda-zip-python

 

AWS Lambda(람다)에 Zip 형식의 Python(파이썬) 프로그램 배포하기

[{"id":"1","listid":"1","parentid":"0","videosource":"youtube","videoid":"KiwjxNKXfxY","imageurl":"https:\/\/i.ytimg.com\/vi\/KiwjxNKXfxY\/default.jpg,120,90;https:\/\/i.ytimg.com\/vi\/KiwjxNKXfxY\/mqdefault.jpg,320,180;https:\/\/i.ytimg.com\/vi\/KiwjxNKXf

sarc.io

python 라이브러리 파일을 같이 다운받아서 압축하여 업로드 해야 한다는 말이다. 

위 링크에 해설대로만 해서 잘 됐으면 링크만 걸려고 했는데, 네이버클라우드플랫폼은 좀 차이가 있는지 다른 부분이 있어 정리해 보면.. 

 

1. python library 를 다운 받을 서버 또는 PC 에 접속한다. 나는 cf 라는 디렉토리를 생성했다. 

mkdir /cf
cd /cf

 

2. Cloud Function 을 통해 수행할 코드를 __main__.py 와 함께 업로드 한다. 

나는 코드가 짧아서 __main__.py 안에 모든 내용을 넣었다. 

그리고 코드가 수행되는데 필요한 라이브러리를 __main__.py 파일이 있는 같은 경로에 다운로드 한다. (이 부분이 위에 링크와 다른 부분이었다. 링크의 가이드에서는 라이브러리 용 디렉토리를 따로 생성했는데, 이렇게 했더니 계속 동일하게 패키지를 찾지 못했다.)

# /cf 디렉토리에서 실행
pip install pymysql -t ./

라이브러리 파일이 다운로드 된 것을 확인할 수 있다.

 

3. ZIP 압축 

# /cf 에서 수행
zip -r cf10.zip ./

 

4. 압축된 파일을 Cloud Function 에서 실행

소스코드 파일 재업로드

이제 pymysql 모듈이 없다는 에러가 발생하지 않고 정상적으로 코드가 실행된다 야호!

반응형