1. Giriş
Genel Bakış
Cloud Run işlevleri, tanıdık GCF etkinlik paradigmalarını ve işlev imzasını kullanarak iş yüklerini dağıtmanın yeni bir yoludur. Cloud Run işlevleri, Cloud Run'da oluşturulan temel hizmet üzerinde doğrudan kontrol sahibi olmanızı sağlar. Bunun için kendi derleme sürecimizi ve dağıtım yapılandırmalarımızı kullanmaz.
Bu bölümde, bir Cloud Storage paketine yüklenen düz metin dosyasını özetlemek için Gemini'yi kullanan, Python'da olaya dayalı bir işlevin nasıl dağıtılacağını öğreneceksiniz.
Neler öğreneceksiniz?
- GCS paketine bir nesne yüklendiğinde tetiklenen etkinliğe dayalı Cloud Run işlevini dağıtma
- Cloud Storage'dan etkinlik almak ve Cloud Run işlevini çağırmak için uygun rollere sahip bir hizmet hesabı oluşturma
- Cloud Storage'a yüklenen düz metin bir dokümanı özetlemek için Gemini'yi kullanma
2. Ortam değişkenlerini ayarlama ve API'leri etkinleştirme
gcloud CLI'yi güncelleme
Bu codelab'de gcloud KSA'nın yeni bir sürümü yüklü olmalıdır. KSA'yı güncellemek için
gcloud components update
API'leri etkinleştir
Bu codelab'i kullanmaya başlamadan önce etkinleştirmeniz gereken birkaç API vardır. Bu kod laboratuvarının çalışması için aşağıdaki API'lerin kullanılması gerekir. Bu API'leri şu komutu çalıştırarak etkinleştirebilirsiniz:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ artifactregistry.googleapis.com \ eventarc.googleapis.com \ aiplatform.googleapis.com
Ortam değişkenlerini ayarlama
Bu codelab boyunca kullanılacak ortam değişkenleri ayarlayabilirsiniz.
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. Depolama alanı paketi ve hizmet hesabı oluşturma
Storage paketi oluşturma
Aşağıdaki komutu çalıştırarak bir Cloud Storage paketi oluşturabilirsiniz:
gsutil mb -l us-central1 gs://$BUCKET_NAME
Hizmet hesabı oluşturma
Bu örnekte, Cloud Storage'dan etkinlik almak ve Cloud Run işlevini çağırmak için gerekli EventArc izinlerine ve Cloud Run çağırıcı rolüne sahip bir hizmet hesabı oluşturacaksınız.
İlk olarak hizmet hesabını oluşturun.
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"
Ardından, tetikleyicinin etkinlik sağlayıcılardan etkinlik alabilmesi için projedeki Eventarc Etkinlik Alıcısı rolünü (roles/eventarc.eventReceiver), Eventarc tetikleyicinizle ilişkili hizmet hesabına verin.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
Ardından, hizmeti çağırabilmesi için hizmet hesabına Cloud Run çağırıcısı rolünü verin.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
Ardından, hizmet hesabına Gemini'ye çağrı gönderebilmesi için AI Platform Kullanıcısı rolünü verin.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role="roles/aiplatform.user"
Ayrıca, hizmet hesabına dosyaya erişebilmesi için Depolama Nesnesi Görüntüleyen rolü verin.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role="roles/storage.objectViewer"
Cloud Pub/Sub'ın kimlik jetonları oluşturabilmesi için projenizde roles/iam.serviceAccountTokenCreator rolüne sahip olması gerekir.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Tetikleyicinizin, Cloud Storage üzerinden etkinlik alabilmesi için Google Cloud Storage hizmet hesabına roles/pubsub.publisher rolünün verilmesi gerekir.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
4. İşlevi oluşturma ve dağıtma
İlk olarak, kaynak kodu için bir dizin oluşturun ve bu dizin için cd'yi kullanın.
mkdir $SERVICE_NAME && cd $_
Ardından, aşağıdaki içeriğe sahip bir requirements.txt
dosyası oluşturun:
functions-framework==3.* google-cloud-aiplatform==1.63.* google-cloud-storage==2.16.*
Ardından, aşağıdaki içeriğe sahip bir main.py
dosyası oluşturun:
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}")
Artık aşağıdaki komutu çalıştırarak Cloud Run işlevini dağıtabilirsiniz:
gcloud beta run deploy $SERVICE_NAME \ --source . \ --function hello_gcs \ --region $REGION \ --no-allow-unauthenticated \ --service-account $SERVICE_ACCOUNT_ADDRESS
Önemli:
--source
işareti, Cloud Run'a işlevi çalıştırılabilir container tabanlı bir hizmette derlemesini bildirmek için kullanılır--function
işareti (yeni), yeni hizmetin giriş noktasını çağrılmasını istediğiniz işlev imzası olarak ayarlamak için kullanılır.- (isteğe bağlı) işlevinizin herkese açık olarak çağrılamasını önlemek için
--no-allow-unauthenticated
"Kaynaktan dağıtım için, derlenmiş container'ları depolamak üzere bir Artifact Registry Docker deposu gerekir. [<BÖLGENİZ>] bölgesinde [cloud-run-source-deploy] adlı bir depo oluşturulacak." Depoyu oluşturmak için varsayılan "Evet"i kabul edin.
Aşağıdaki komutu çalıştırarak yeni hizmetinizi crf-vertexai-codelab
görüntüleyebilirsiniz:
gcloud beta run services describe $SERVICE_NAME --region $REGION
5. Etkinlik oluşturma
Google Cloud Storage'da her nesne tamamlandığında işlevimize mesaj göndermek için bir Eventarc tetikleyicisi oluşturabiliriz:
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
işareti için paket adınızda gs:// ön ekini kullanmadığınızdan emin olun.
If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent.
hatası görürseniz tekrar denemeden önce lütfen birkaç dakika bekleyin.
Eventarc'ı kullanarak Cloud Storage'dan Tetikleyici hizmetini ayarlamayla ilgili ayrıntılı bir eğiticiyi buradaki Cloud Run belgelerinde bulabilirsiniz: https://cloud.google.com/run/docs/tutorials/eventarc
6. İşlevi Test Etme
İşlevimiz dağıtıldı ve bir tetikleyici oluşturuldu. Artık işlevi çağırmaya hazırız.
Bir dosya oluşturun ve dosyayı Cloud Storage paketinize yükleyin. Bu işlemi Cloud Console web arayüzünden veya gsutil CLI aracını kullanarak (ör.
gsutil cp <YOUR_PLAIN_TEXT_FILE> gs://$BUCKET_NAME
Dosya başarıyla yüklendiğinde bir etkinlik oluşturulur ve işleviniz, düz metin dosyasını özetlemek için Gemini'yi çağırır. Özet günlüklere yazdırılır.
Cloud Run hizmetinin günlüklerini Cloud Console'da görüntüleyebilir veya aşağıdaki komutu çalıştırabilirsiniz:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE_NAME AND textPayload: Response"
Örneğin, gizli önizleme sonuçları için Cloud Run işlevleri kullanıcı rehberini düz metin dosyasıyla yüklediğinizde aşağıdaki bilgiler günlüklere yazdırılır:
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. Tebrikler!
Codelab'i tamamladığınız için tebrikler.
Cloud Run işlevleri ile ilgili dokümanları incelemenizi öneririz.
Ele aldığımız konular
- Bir GCS paketine nesne yüklendiğinde tetiklenen etkinlik odaklı bir Cloud Run işlevi dağıtma
- Cloud Storage'dan etkinlik almak ve Cloud Run işlevini çağırmak için uygun rollere sahip bir hizmet hesabı oluşturma
- Cloud Storage'a yüklenen düz metin bir dokümanı özetlemek için Gemini'yi kullanma
8. Temizleme
Yanlışlıkla ödeme yapılmasını önlemek için (örneğin, bu Cloud Run hizmeti yanlışlıkla ücretsiz kademede aylık Cloud Run çağrısı tahsisatınızdan daha fazla sayıda çağrılırsa) Cloud Run hizmetini veya 2. adımda oluşturduğunuz projeyi silebilirsiniz.
Cloud Run hizmetlerini silmek için https://console.cloud.google.com/run/ adresindeki Cloud Run Cloud Console'a gidin ve bu kod laboratuvarında oluşturduğunuz crf-vertexai-codelab
hizmetini silin.
Projenin tamamını silmeyi seçerseniz https://console.cloud.google.com/cloud-resource-manager adresine gidip 2. adımda oluşturduğunuz projeyi seçin ve Sil'i tıklayın. Projeyi silerseniz Cloud SDK'nızdaki projeleri değiştirmeniz gerekir. gcloud projects list
komutunu çalıştırarak mevcut tüm projelerin listesini görüntüleyebilirsiniz.