Serverless하게 코드를 실행할 수 있는 AWS의 Lambda와 같은 기능의 서비스가 NCP에는 Cloud Functions
라는 이름으로 존재한다.
전체적인 기능은 비슷하지만 조금 사용해보면서 AWS와 비교해 아래와 같은 부족한 점들을 볼 수 있었다.
이 외에도 아직까진 역사도 길고 많은 개발이 이루어진 Lambda에 비해 부족한 점이 더 있겠지만 눈에 띄는 불편함들은 위와 같았다. 하지만 비슷한 성격의 코드들을 한데 묶을 수 있는 package
라는 기능은 Lambda에는 없는 것이어서 나름 신선했다.
이번 글에서는 외부 라이브러리를 포함한 Python 코드를 Cloud Functions에 업로드하고 실행해보는 과정을 간단하게 다루어 볼 것이다.
가상환경 생성 > 필요 라이브러리 설치 > 코드 작성 > 라이브러리 정보 + 코드 포함하여 zip 파일로 만듦
virtualenv virtualenv
source virtualenv/bin/activate
pip install pyjokes
pip install trino
__main__.py
파일내에 main
이라는 이름을 가진 함수 아래에 코드를 작성해주어야 한다. 아래는 쿠버네티스상에서 작동하는 Trino DB 클러스터에서 테이블 목록을 조회하는 함수이다.(라이브러리 테스트겸 pyjoke도 설치하여 내용 하나를 같이 return 시켜보았다.)from trino.dbapi import connect
from trino.auth import BasicAuthentication
import pyjokes
def main(args):
conn = connect(
host = [trino 사이트 주소],
port = 443,
user = [USER Name],
auth=BasicAuthentication([USER Name], [USER Password]),
http_scheme="https",
catalog = "lakehouse",
schema = "testschema",
)
cur = conn.cursor()
cur.execute("SHOW TABLES FROM lakehouse.testschema")
rows = cur.fetchall()
return {"joke": pyjokes.get_joke(),
"trino":rows}
zip -r trino.zip virtualenv __main__.py
action 생성 > 소스코드 > 파일
선택하여 앞에서 생성한 trino.zip 파일을 업로드 해준다.실행
버튼을 눌러서 테스트 실행을 해주면 작성한 코드의 return 값을 볼 수 있다.로컬에서 필요한 라이브러리들 import 후 테스트 한 다음 코드 정리해서 업로드시키면 간단하게 함수 생성이 완료
되기 때문에 종종 사용하게 될 것 같다.최대 액션 소스 코드의 크기가 38MB로 제한
되어 있기 때문에 너무 많은 라이브러리들이 설치된 코드는 배포가 제한될 수 있으니 유의해야 한다.