본문 바로가기
파이썬(Python)

Google Cloud Functions 사용하기 - Python 코드 배포하기

by 기계공학 주인장 2025. 1. 21.
반응형

이전 포스팅에서 Cloud Functions를 사용하기 위한 셋업을 진행했습니다.

 

https://android-developer.tistory.com/105

 

Google Cloud Functions 사용하기 - 기초 Cloud CLI 셋업

파이썬으로 정기적으로 스크립트를 실행하고 싶어서 AWS의 Lamda와 Google Cloud Functions를 비교해본 결과 Google Cloud Functions가 좀 더 제 목적에 맞는거 같아 Google Cloud Functions를 사용해보기로 했습니

android-developer.tistory.com

 

이번 포스팅에서는 파이썬 코드를 셋업한 Cloud Functions에 업로드하는 방법에 대해 알아보겠습니다.


파이썬 코드를 Google Cloud Functions에 배포하기

다음 정식 문서를 따라하면서 조금씩 나아가보겠습니다.

 

https://cloud.google.com/functions/docs/create-deploy-gcloud?hl=ko#functions-prepare-environment-python

 

Google Cloud CLI를 사용하여 Cloud Run 함수 만들기  |  Cloud Run functions Documentation

Cloud Shell 및 Google Cloud CLI를 사용하여 HTTP Cloud Run 함수를 만들고 배포합니다.

cloud.google.com

 

저는 개인적으로 사용할 파이썬 프로젝트를 사용할 예정이지만

 

연습용으로 테스트 해보고싶은 분들은

 

구글에서 제공하는 예시 파이썬 프로젝트를 사용할 수 있습니다.

 

https://github.com/GoogleCloudPlatform/python-docs-samples

 

GitHub - GoogleCloudPlatform/python-docs-samples: Code samples used on cloud.google.com

Code samples used on cloud.google.com. Contribute to GoogleCloudPlatform/python-docs-samples development by creating an account on GitHub.

github.com

 

사용하실 분은 위 코드를 Clone 하여 그대로 사용해도 무방합니다.

 

저는 제가 만든 Python 프로젝트를 이용해서 Cloud Functions에서 실행해보겠습니다.

 

참고로 클라우드 함수에서 지원되는 파이썬 버전은 다음과 같습니다.

 

https://cloud.google.com/appengine/docs/flexible/lifecycle/support-schedule?hl=ko#python

 

런타임 지원 일정  |  Google App Engine flexible environment docs  |  Google Cloud

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 런타임 지원 일정 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지에서는 런타

cloud.google.com

 

가능하면 작성중인 파이썬 버전과 클라우드 함수에 넣을 파이썬 버전을 일치시키는게 좋습니다.

 

저는 둘 다 3.12 버전으로 일치시켰습니다.


 

1. 해당 프로젝트의 main.py를 확인하고 분석

 

프로젝트의 내부 모습은 다음과 같습니다.

 

main.py
import functions_framework
from flask import jsonify
from show_name import get_name, format_name


@functions_framework.http
def hello_get(request):
    """HTTP Cloud Function.
    Args:
        request (flask.Request): The request object.
    Returns:
        JSON response containing formatted names
    """
    try:
        # show_name.py에서 이름 리스트 가져오기
        names = get_name()

        # 각 이름을 format_name 함수를 사용해 포맷팅
        formatted_names = [format_name(name) for name in names]

        response_data = {
            'status': 'success',
            'data': formatted_names
        }

        return jsonify(response_data)

    except Exception as e:
        return jsonify({
            'status': 'error',
            'message': str(e)
        }), 500

 

firend_name.py
def get_name():
    names = ["Alice", "Bob", "Charlie", "David"]
    return names


def format_name(name):
    return f"Hello, {name}!"

 

(참고로 위 파일을 디버그 모드로 출력하면 다음과 같이 출력됩니다. - 디버깅 모드로 실행하는 방법은 Flask를 사용합니다.)

 

예상 결과

 

프로젝트 코드를 만들었으면 다음 커맨드를 실행해서 requirements.txt를 생성합니다.

 

pip freeze > requirements.txt

 

업로드 할 때 requirements.txt가 있는지 확인하고 올리기 때문에 업로드할 때 반드시 필요한 파일입니다.

 

이제 준비가 끝났으니 위 두 파일을 Cloud Functions에 업로드 해보겠습니다.

 


2. 파이썬 코드를 Cloud Functions에 업로드 하기(배포하기)

 

프로젝트의 루트 디렉토리에서 다음과 같은 커맨드로 Cloud Functions에 업로드 할 수 있습니다.

 

gcloud functions deploy python-http-function \
--gen2 \
--runtime=python312 \
--region=asia-northeast1 \
--source=. \
--entry-point=hello_get \
--trigger-http \
--memory=256MB \
--timeout=60s \
--min-instances=0 \
--max-instances=10

 

위 커맨드를 설명하면 다음과 같습니다.

 

  • python-http-function: 해당 이름으로 함수를 등록합니다. (한 번 배포 후에는 변경할 수 없습니다.)
  • --gen2: 2세대 Cloud Functions를 사용하게 한다.
  • --runtime: Cloud Functions에서 동작하는 환경을 의미합니다.
  • --region: 동작할 서버의 위치를 지정합니다.
  • --source: 어떤 디렉토리의 코드를 업로드할지 (여기서는 ./ 으로 전부 업로드함)
  • --entry-point: 호출되었을 때 함수의 시작점을 지정 (어느 함수를 처음으로 시작할지)
  • --trigger-http: HTTP 요청으로 함수를 트리거 하도록 설정

나머지 항목들은 생략해도 기본값을 갖고 있는 항목들입니다.

 

참고로 반드시 Google Cloud가 올바른 프로젝트를 선택한 상태이어야합니다.

 

 

참고로 다음과 같은 커맨드로 현재 선택되어있는 Cloud 프로젝트를 알 수 있습니다.

 

gcloud config get-value project

 

 

자세한 내용은 제가 이전에 작성한 포스팅을 참조하시길 바랍니다.

 

https://android-developer.tistory.com/105

 

Google Cloud Functions 사용하기 - 기초 Cloud CLI 셋업

파이썬으로 정기적으로 스크립트를 실행하고 싶어서 AWS의 Lamda와 Google Cloud Functions를 비교해본 결과 Google Cloud Functions가 좀 더 제 목적에 맞는거 같아 Google Cloud Functions를 사용해보기로 했습니

android-developer.tistory.com

 

해당 커맨드를 실시하면 다음과 같은 응답을 볼 수 있습니다.

 

--allow-unauthenticated로 함수를 호출할 수 있을지 묻는중

 

y를 선택하여 인증 없이 함수를 호출하게 할 수 있지만

 

구글에서는 테스트용으로 만들었더라도 하지 인증 없이 호출하는 것은 권장하지 않고 있습니다.

 

 

성공적으로 업로드 되었다면 다음과 같은 결과를 확인할 수 있습니다. 

 

 

이제 구글 클라우드 콘솔에서 다음과 같이 업로드된 Functions를 확인할 수 있습니다.

 


Google Cloud Functions 사용하여 Python 코드 배포하기

정리하면 다음과 같습니다.

 

  1. 파이썬 코드 작성
  2. 필요한 패키지 설치
  3. requirements.txt에 패키지 내용 담기
  4. gcloud 커맨드로 Cloud Functions에 업로드 하기

 

다음 포스팅에서는 업로드한 함수를 호출하는 방법과 삭제하는 방법에 대해 알아보겠습니다.

 

https://android-developer.tistory.com/107

 

Google Cloud Functions 사용하기 - 인증 호출으로 코드 실행하기

이전 포스팅에서 Python 코드를 Cloud Functions에 업로드하는 작업을 했습니다. https://android-developer.tistory.com/106 Google Cloud Functions 사용하기 - Python 코드 배포하기이전 포스팅에서 Cloud Functions를 사용

android-developer.tistory.com

 

반응형


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


댓글