[NCP] Python 코드 Cloud Function 생성 방법

NewNewDaddy·2024년 1월 28일
0

Ncloud

목록 보기
5/8
post-thumbnail

🔹 0. INTRO

  • Serverless하게 코드를 실행할 수 있는 AWS의 Lambda와 같은 기능의 서비스가 NCP에는 Cloud Functions 라는 이름으로 존재한다.

  • 전체적인 기능은 비슷하지만 조금 사용해보면서 AWS와 비교해 아래와 같은 부족한 점들을 볼 수 있었다.

    • 외부 라이브러리를 Import하여 사용할 수 있는 Layer 기능의 부재 (코드와 함께 zip 파일로 업로드 해야함)
    • 실행 코드 수정시 반드시 "수정" 이라는 버튼을 눌러서 개별 UI로 접근해서 수정해야함
    • 외부 라이브러리와 함께 zip 파일로 업로드시 실행 코드를 UI상에서 볼 수 없음
  • 이 외에도 아직까진 역사도 길고 많은 개발이 이루어진 Lambda에 비해 부족한 점이 더 있겠지만 눈에 띄는 불편함들은 위와 같았다. 하지만 비슷한 성격의 코드들을 한데 묶을 수 있는 package라는 기능은 Lambda에는 없는 것이어서 나름 신선했다.

  • 이번 글에서는 외부 라이브러리를 포함한 Python 코드를 Cloud Functions에 업로드하고 실행해보는 과정을 간단하게 다루어 볼 것이다.

🔹 1. 코드 작성

  • Windows 환경이냐 Mac or Linux 환경이냐에 따라 zip 파일 생성 방법이 약간씩 다른데 전체적으로는 아래와 같이 비슷한 흐름으로 생성을 하게 된다.

    가상환경 생성 > 필요 라이브러리 설치 > 코드 작성 > 라이브러리 정보 + 코드 포함하여 zip 파일로 만듦

  • 관련 내용은 Docs에 잘 나와있으며 아래 예제는 Linux 환경 기준으로 작성되었다.

📍 1. 가상환경 생성

virtualenv virtualenv
source virtualenv/bin/activate

📍 2. 필요한 라이브러리 설치

pip install pyjokes
pip install trino

📍 3. __main__.py 파일 생성 후 코드 작성

  • import가 잘 되기 위해서는 반드시 __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}

📍 4. zip 파일로 압축

  • 아래 명령을 통해 작성한 코드와 pip install로 설치한 라이브러리들의 정보들을 묶어 하나의 zip 파일로 만든다.

    zip -r trino.zip virtualenv __main__.py

🔹 2. Cloud Functions 생성

  • action 생성 > 소스코드 > 파일 선택하여 앞에서 생성한 trino.zip 파일을 업로드 해준다.
  • 생성 후 실행 버튼을 눌러서 테스트 실행을 해주면 작성한 코드의 return 값을 볼 수 있다.

🔹 3. OUTRO

  • AWS Lambda에 비해 디테일들에서 부족한 점이 있었지만 부가 기능들을 많이 사용하지 않고 기능에만 집중해서 사용한다면 오히려 군더더기 없다는 느낌을 받을 수 있을 정도로 생성부터 실행까지의 과정이 아주 깔끔했다.
  • Lambda는 외부 라이브러리 업로드를 위해 Layer를 생성하게되면 규칙들도 따라야하고 처음에 했을 때는 잘 적용이 되지 않는 경우도 종종 있었는데 Cloud Functions는 그냥 코드와 함께 zip 파일로 한번에 올려야하기 때문에 과정이 단순하고 직관적이어서 좋았던 것 같다.(물론 aws도 이런 과정으로 업로드가 가능하다.)
  • 로컬에서 필요한 라이브러리들 import 후 테스트 한 다음 코드 정리해서 업로드시키면 간단하게 함수 생성이 완료되기 때문에 종종 사용하게 될 것 같다.
  • 단, 최대 액션 소스 코드의 크기가 38MB로 제한되어 있기 때문에 너무 많은 라이브러리들이 설치된 코드는 배포가 제한될 수 있으니 유의해야 한다.

🔹 4. 참고자료

profile
데이터 엔지니어의 작업공간 / #PYTHON #SPARK #AWS #NCLOUD

0개의 댓글