이전 포스팅에서 Cloud Functions를 사용하기 위한 셋업을 진행했습니다.
https://android-developer.tistory.com/105
이번 포스팅에서는 파이썬 코드를 셋업한 Cloud Functions에 업로드하는 방법에 대해 알아보겠습니다.
파이썬 코드를 Google Cloud Functions에 배포하기
다음 정식 문서를 따라하면서 조금씩 나아가보겠습니다.
저는 개인적으로 사용할 파이썬 프로젝트를 사용할 예정이지만
연습용으로 테스트 해보고싶은 분들은
구글에서 제공하는 예시 파이썬 프로젝트를 사용할 수 있습니다.
https://github.com/GoogleCloudPlatform/python-docs-samples
사용하실 분은 위 코드를 Clone 하여 그대로 사용해도 무방합니다.
저는 제가 만든 Python 프로젝트를 이용해서 Cloud Functions에서 실행해보겠습니다.
참고로 클라우드 함수에서 지원되는 파이썬 버전은 다음과 같습니다.
https://cloud.google.com/appengine/docs/flexible/lifecycle/support-schedule?hl=ko#python
가능하면 작성중인 파이썬 버전과 클라우드 함수에 넣을 파이썬 버전을 일치시키는게 좋습니다.
저는 둘 다 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
해당 커맨드를 실시하면 다음과 같은 응답을 볼 수 있습니다.
y를 선택하여 인증 없이 함수를 호출하게 할 수 있지만
구글에서는 테스트용으로 만들었더라도 하지 인증 없이 호출하는 것은 권장하지 않고 있습니다.
성공적으로 업로드 되었다면 다음과 같은 결과를 확인할 수 있습니다.
이제 구글 클라우드 콘솔에서 다음과 같이 업로드된 Functions를 확인할 수 있습니다.
Google Cloud Functions 사용하여 Python 코드 배포하기
정리하면 다음과 같습니다.
- 파이썬 코드 작성
- 필요한 패키지 설치
- requirements.txt에 패키지 내용 담기
- gcloud 커맨드로 Cloud Functions에 업로드 하기
다음 포스팅에서는 업로드한 함수를 호출하는 방법과 삭제하는 방법에 대해 알아보겠습니다.
https://android-developer.tistory.com/107
'파이썬(Python)' 카테고리의 다른 글
poetry으로 파이썬으로 패키지 버전 관리하기 - 기초 (0) | 2025.01.26 |
---|---|
Google Cloud Functions 사용하기 - 인증 호출으로 코드 실행하기 (1) | 2025.01.23 |
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
댓글