1. 소개
개요
Cloud Run Functions는 익숙한 GCF 이벤트 패러다임과 함수 서명을 사용하여 워크로드를 배포하는 새로운 방법입니다. Cloud Run Functions를 사용하면 Google의 의견이 반영된 빌드 프로세스 및 배포 구성 대신 Cloud Run에서 생성된 기본 서비스를 직접 제어할 수 있습니다.
이 섹션에서는 Gemini를 사용하여 Cloud Storage 버킷에 업로드된 일반 텍스트 파일을 요약하는 Python에서 이벤트 기반 함수를 배포하는 방법을 알아봅니다.
학습할 내용
- 객체가 GCS 버킷에 업로드될 때마다 트리거되는 이벤트 기반 Cloud Run 함수를 배포하는 방법
- Cloud Storage에서 이벤트를 수신하고 Cloud Run 함수를 호출하는 데 적절한 역할이 있는 서비스 계정을 만드는 방법
- Gemini를 사용하여 Cloud Storage에 업로드된 일반 텍스트 문서를 요약하는 방법
2. 환경 변수 설정 및 API 사용 설정
gcloud CLI 업데이트
이 Codelab에서는 최신 버전의 gcloud CLI가 설치되어 있어야 합니다. CLI를 업데이트하려면 다음을 실행합니다.
gcloud components update
API 사용 설정
이 Codelab을 사용하기 전에 사용 설정해야 하는 API가 몇 개 있습니다. 이 Codelab에서는 다음 API를 사용해야 합니다. 다음 명령어를 실행하여 이러한 API를 사용 설정할 수 있습니다.
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com \
eventarc.googleapis.com \
aiplatform.googleapis.com
환경 변수 설정
이 Codelab 전체에서 사용할 환경 변수를 설정할 수 있습니다.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION, e.g. us-central1> gcloud config set project $PROJECT_ID PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_NAME=crf-vertexai-codelab BUCKET_NAME=$PROJECT_ID-$SERVICE_NAME TRIGGER_NAME=$SERVICE_NAME-trigger
3. 스토리지 버킷 및 서비스 계정 만들기
스토리지 버킷 만들기
다음 명령어를 실행하여 Cloud Storage 버킷을 만들 수 있습니다.
gsutil mb -l us-central1 gs://$BUCKET_NAME
서비스 계정 만들기
이 예에서는 Cloud Storage에서 이벤트를 수신하고 Cloud Run 함수를 호출하는 데 필요한 EventArc 권한과 Cloud Run 호출자 역할이 있는 서비스 계정을 만듭니다.
먼저 서비스 계정을 만듭니다.
SERVICE_ACCOUNT="crf-vertexai-codelab" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run functions Eventarc service account"
그런 다음 트리거가 이벤트 제공업체에서 이벤트를 수신할 수 있도록 프로젝트에 Eventarc 트리거와 연결된 서비스 계정에 대해 Eventarc 이벤트 수신자 역할 (roles/eventarc.eventReceiver)을 부여합니다.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
그런 다음 함수를 호출할 수 있도록 서비스 계정에 Cloud Run 호출자 역할을 부여합니다.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
이제 Gemini를 호출할 수 있도록 서비스 계정에 AI Platform 사용자 역할을 부여합니다.
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
--role="roles/aiplatform.user"
그리고 서비스 계정에 스토리지 객체 뷰어 역할을 부여하여 파일에 액세스할 수 있도록 합니다.
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
--role="roles/storage.objectViewer"
Cloud Pub/Sub에서 ID 토큰을 만들려면 프로젝트에 역할 roles/iam.serviceAccountTokenCreator가 있어야 합니다.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
트리거에서 Cloud Storage를 통해 이벤트를 수신하려면 Google Cloud Storage 서비스 계정에 역할 roles/pubsub.publisher가 부여되어야 합니다.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
4. 함수 만들기 및 배포
먼저 소스 코드의 디렉터리를 만들고 해당 디렉터리로 cd합니다.
mkdir $SERVICE_NAME && cd $_
그런 다음 다음 콘텐츠로 requirements.txt 파일을 만듭니다.
functions-framework==3.* google-cloud-aiplatform==1.63.* google-cloud-storage==2.16.*
다음으로 다음 콘텐츠로 main.py 파일을 만듭니다.
import functions_framework
import vertexai
from vertexai.generative_models import GenerativeModel
from google.cloud import storage
vertexai.init(project="<YOUR_PROJECT_ID>", location="us-central1")
model = GenerativeModel(
model_name="gemini-1.5-pro-001",
system_instruction=[
"Summarize the following document in a single sentence. Do not respond with more than one sentence.",
],
)
# Triggered by a change in a storage bucket
@functions_framework.cloud_event
def hello_gcs(cloud_event):
data = cloud_event.data
# download the file
storage_client = storage.Client()
blob = storage_client.bucket(data["bucket"]).get_blob(data["name"])
#print(blob)
doc = blob.download_as_text()
contents = [doc]
response = model.generate_content(contents)
print(response.text)
print(f"Response from Model: {response.text}")
이제 다음 명령어를 실행하여 Cloud Run 함수를 배포할 수 있습니다.
gcloud beta run deploy $SERVICE_NAME \
--source . \
--function hello_gcs \
--region $REGION \
--no-allow-unauthenticated \
--service-account $SERVICE_ACCOUNT_ADDRESS
다음 사항을 참고하세요.
--source플래그는 Cloud Run에 함수를 실행 가능한 컨테이너 기반 서비스로 빌드하도록 지시하는 데 사용됩니다.--function플래그 (신규)는 호출할 함수 서명이 되도록 새 서비스의 진입점을 설정하는 데 사용됩니다.- (선택사항)
--no-allow-unauthenticated는 함수가 공개적으로 호출되지 않도록 합니다.
'소스에서 배포하려면 빌드된 컨테이너를 저장할 Artifact Registry Docker 저장소가 필요합니다. 리전[<YOUR_REGION>] 에 [cloud-run-source-deploy]라는 저장소가 생성됩니다.'라는 메시지가 표시될 수 있습니다. 기본값인 '예'를 수락하여 저장소를 만듭니다.
다음 명령어를 실행하여 새 서비스 crf-vertexai-codelab을 볼 수 있습니다.
gcloud beta run services describe $SERVICE_NAME --region $REGION
5. 이벤트 만들기
객체가 Google Cloud Storage에서 완료될 때마다 함수에 메시지를 전송하는 Eventarc 트리거를 만들 수 있습니다.
BUCKET_REGION=$REGION
gcloud eventarc triggers create $TRIGGER_NAME \
--location=$REGION \
--destination-run-service=$SERVICE_NAME \
--destination-run-region=$BUCKET_REGION \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=$BUCKET_NAME" \
--service-account=$SERVICE_ACCOUNT_ADDRESS
--event-filters 플래그의 경우 버킷 이름에 gs:// 프리픽스를 사용하지 마세요.
If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent. 오류가 표시되면 몇 분 정도 기다린 후 다시 시도하세요.
Eventarc를 사용하여 Cloud Storage에서 트리거 서비스를 설정하는 방법에 관한 자세한 튜토리얼은 Cloud Run 문서(https://cloud.google.com/run/docs/tutorials/eventarc)에서 확인할 수 있습니다.
6. 함수 테스트
함수가 배포되고 트리거가 생성되었으므로 이제 함수를 호출할 수 있습니다.
파일을 만들고 Cloud Storage 버킷에 업로드합니다. Cloud Console 웹 인터페이스를 통해 또는 gsutil CLI 도구를 사용하여 이 작업을 수행할 수 있습니다(예:).
gsutil cp <YOUR_PLAIN_TEXT_FILE> gs://$BUCKET_NAME
파일이 성공적으로 업로드되면 이벤트가 생성되고 함수가 Gemini를 호출하여 일반 텍스트 파일을 요약합니다. 요약이 로그에 출력됩니다.
Cloud Run 서비스의 Cloud Console에서 로그를 보거나 다음 명령어를 실행할 수 있습니다.
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE_NAME AND textPayload: Response"
예를 들어 비공개 미리보기용 Cloud Run Functions 사용자 가이드의 일반 텍스트 파일을 업로드하면 로그에 다음과 같이 출력됩니다.
Response from Model: Cloud Run functions offer a new way to deploy serverless workloads with familiar Google Cloud Functions paradigms while providing control over the underlying Cloud Run service.
7. 축하합니다.
축하합니다. Codelab을 완료했습니다.
Cloud Run Functions 문서를 검토하는 것이 좋습니다.
학습한 내용
- 객체가 GCS 버킷에 업로드될 때마다 트리거되는 이벤트 기반 Cloud Run 함수를 배포하는 방법
- Cloud Storage에서 이벤트를 수신하고 Cloud Run 함수를 호출하는 데 적절한 역할이 있는 서비스 계정을 만드는 방법
- Gemini를 사용하여 Cloud Storage에 업로드된 일반 텍스트 문서를 요약하는 방법
8. 삭제
의도치 않은 요금이 청구되지 않도록 하려면(예: 이 Cloud Run 서비스가 무료 등급의 월별 Cloud Run 호출 할당량보다 더 많이 호출되는 경우) Cloud Run 서비스를 삭제하거나 2단계에서 만든 프로젝트를 삭제하면 됩니다.
Cloud Run 서비스를 삭제하려면 https://console.cloud.google.com/run/에서 Cloud Run Cloud Console로 이동하여 이 Codelab에서 만든 crf-vertexai-codelab 서비스를 삭제합니다.
전체 프로젝트를 삭제하려면 https://console.cloud.google.com/cloud-resource-manager로 이동하여 2단계에서 만든 프로젝트를 선택하고 '삭제'를 선택합니다. 프로젝트를 삭제하면 Cloud SDK에서 프로젝트를 변경해야 합니다. gcloud projects list를 실행하여 사용 가능한 모든 프로젝트의 목록을 볼 수 있습니다.