Cara menggunakan fungsi Cloud Run dan Gemini untuk meringkas file teks yang diupload ke bucket Cloud Storage

1. Pengantar

Ringkasan

Fungsi Cloud Run adalah cara baru untuk men-deploy workload menggunakan paradigma eventing dan tanda tangan fungsi GCF yang sudah dikenal. Alih-alih menggunakan proses build dan konfigurasi deployment yang kami sarankan, Cloud Run Functions memberi Anda kontrol langsung atas Layanan yang mendasarinya yang dibuat di Cloud Run.

Di bagian ini, Anda akan mempelajari cara men-deploy fungsi berbasis peristiwa di Python yang menggunakan Gemini untuk meringkas file teks biasa yang diupload ke bucket Cloud Storage.

Yang akan Anda pelajari

  • Cara men-deploy fungsi Cloud Run berbasis peristiwa yang dipicu setiap kali objek diupload ke bucket GCS
  • Cara membuat akun layanan dengan peran yang tepat untuk menerima peristiwa dari Cloud Storage dan memanggil fungsi Cloud Run
  • Cara menggunakan Gemini untuk meringkas dokumen teks biasa yang diupload ke Cloud Storage

2. Menyiapkan variabel lingkungan dan mengaktifkan API

Mengupdate gcloud CLI

Codelab ini memerlukan penginstalan gcloud CLI versi terbaru. Anda dapat mengupdate CLI dengan menjalankan

gcloud components update

Mengaktifkan API

Sebelum Anda dapat mulai menggunakan codelab ini, ada beberapa API yang perlu diaktifkan. Codelab ini memerlukan penggunaan API berikut. Anda dapat mengaktifkan API tersebut dengan menjalankan perintah berikut:

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    storage.googleapis.com \
    artifactregistry.googleapis.com \
    eventarc.googleapis.com \
    aiplatform.googleapis.com

Menyiapkan variabel lingkungan

Anda dapat menetapkan variabel lingkungan yang akan digunakan di seluruh codelab ini.

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. Buat Bucket Storage dan Akun Layanan

Membuat bucket penyimpanan

Anda dapat membuat bucket Cloud Storage dengan menjalankan perintah berikut:

gsutil mb -l us-central1 gs://$BUCKET_NAME

Membuat akun layanan

Untuk contoh ini, Anda akan membuat akun layanan dengan izin EventArc yang diperlukan dan peran pemanggil Cloud Run untuk menerima peristiwa dari Cloud Storage dan memanggil fungsi Cloud Run.

Pertama, buat akun layanan.

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"

Selanjutnya, berikan peran Eventarc Event Receiver (roles/eventarc.eventReceiver) pada project ke akun layanan yang terkait dengan pemicu Eventarc Anda agar pemicu dapat menerima peristiwa dari penyedia peristiwa.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/eventarc.eventReceiver

Kemudian, berikan peran pemanggil Cloud Run ke akun layanan agar akun tersebut dapat memanggil fungsi.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/run.invoker

Sekarang, berikan peran AI Platform User kepada akun layanan agar dapat melakukan panggilan ke Gemini.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
    --role="roles/aiplatform.user"

Kemudian, berikan peran Storage Object Viewer ke akun layanan agar dapat mengakses file.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
    --role="roles/storage.objectViewer"

Cloud Pub/Sub memerlukan peran roles/iam.serviceAccountTokenCreator di project Anda untuk membuat token identitas.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
  --role=roles/iam.serviceAccountTokenCreator

Pemicu Anda memerlukan peran roles/pubsub.publisher yang diberikan ke akun layanan Google Cloud Storage untuk menerima peristiwa melalui Cloud Storage.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \
  --role=roles/pubsub.publisher

4. Membuat dan men-deploy fungsi

Pertama, buat direktori untuk kode sumber dan cd ke direktori tersebut.

mkdir $SERVICE_NAME && cd $_

Kemudian, buat file requirements.txt dengan konten berikut:

functions-framework==3.*
google-cloud-aiplatform==1.63.*
google-cloud-storage==2.16.*

Selanjutnya, buat file main.py dengan konten berikut:

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}")

Sekarang Anda dapat men-deploy fungsi Cloud Run dengan menjalankan perintah berikut:

gcloud beta run deploy $SERVICE_NAME \
      --source . \
      --function hello_gcs \
      --region $REGION \
      --no-allow-unauthenticated \
      --service-account $SERVICE_ACCOUNT_ADDRESS

Harap perhatikan hal berikut:

  • Flag --source digunakan untuk memberi tahu Cloud Run agar membangun fungsi ke dalam layanan berbasis container yang dapat dijalankan
  • Flag --function (baru) digunakan untuk menetapkan titik entri layanan baru menjadi tanda tangan fungsi yang ingin Anda panggil
  • (opsional) --no-allow-unauthenticated untuk mencegah fungsi Anda dapat dipanggil secara publik

Anda mungkin ditanya "Men-deploy dari sumber memerlukan repositori Docker Artifact Registry untuk menyimpan container yang di-build. Repositori bernama [cloud-run-source-deploy] di region [<YOUR_REGION>] akan dibuat." Setujui default ya untuk membuat repositori.

Anda dapat melihat layanan baru crf-vertexai-codelab dengan menjalankan perintah berikut:

gcloud beta run services describe $SERVICE_NAME --region $REGION

5. Membuat peristiwa

Kita dapat membuat pemicu Eventarc untuk mengirim pesan ke fungsi kita setiap kali objek diselesaikan di Google Cloud Storage:

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

Perhatikan untuk tanda --event-filters, jangan gunakan awalan gs:// dalam nama bucket Anda.

Jika Anda melihat error If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent., tunggu beberapa menit sebelum mencoba lagi.

Tutorial mendetail tentang penyiapan layanan Pemicu dari Cloud Storage menggunakan Eventarc dapat ditemukan dalam dokumentasi Cloud Run di sini: https://cloud.google.com/run/docs/tutorials/eventarc

6. Menguji Fungsi

Setelah fungsi di-deploy dan pemicu dibuat, kita siap memanggil fungsi.

Buat file dan upload ke bucket Cloud Storage Anda. Anda dapat melakukannya melalui antarmuka web Konsol Cloud, atau menggunakan alat CLI gsutil, misalnya

gsutil cp <YOUR_PLAIN_TEXT_FILE> gs://$BUCKET_NAME

Setelah file berhasil diupload, peristiwa akan dibuat dan fungsi Anda akan memanggil Gemini untuk meringkas file teks biasa. Ringkasan akan dicetak ke log.

Anda dapat melihat log di Cloud Console untuk layanan Cloud Run, atau menjalankan perintah berikut:

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE_NAME AND textPayload: Response"

Misalnya, mengupload file teks biasa dari panduan pengguna Cloud Run Functions untuk pratinjau pribadi akan menghasilkan output berikut yang dicetak ke log:

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. Selamat!

Selamat, Anda telah menyelesaikan codelab.

Sebaiknya tinjau dokumentasi untuk Cloud Run Functions

Yang telah kita bahas

  • Cara men-deploy fungsi Cloud Run berbasis peristiwa yang dipicu setiap kali objek diupload ke bucket GCS
  • Cara membuat akun layanan dengan peran yang tepat untuk menerima peristiwa dari Cloud Storage dan memanggil fungsi Cloud Run
  • Cara menggunakan Gemini untuk meringkas dokumen teks biasa yang diupload ke Cloud Storage

8. Pembersihan

Untuk menghindari biaya yang tidak disengaja (misalnya, jika layanan Cloud Run ini tidak sengaja dipanggil lebih banyak daripada alokasi pemanggilan Cloud Run bulanan Anda di tingkat gratis), Anda dapat menghapus layanan Cloud Run atau menghapus project yang Anda buat di Langkah 2.

Untuk menghapus layanan Cloud Run, buka Konsol Cloud Run di https://console.cloud.google.com/run/, lalu hapus layanan crf-vertexai-codelab yang Anda buat di codelab ini.

Jika Anda memilih untuk menghapus seluruh project, Anda dapat membuka https://console.cloud.google.com/cloud-resource-manager, memilih project yang Anda buat di Langkah 2, lalu memilih Hapus. Jika menghapus project, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list.