#!/bin/bash # Cloud Function deployment script for image processing set -e # Configuration PROJECT_ID=${GOOGLE_CLOUD_PROJECT:-"your-project-id"} FUNCTION_NAME="process-image-embedding" REGION=${REGION:-"us-central1"} PUBSUB_TOPIC=${PUBSUB_TOPIC:-"image-processing-topic"} MEMORY=${MEMORY:-"512MB"} TIMEOUT=${TIMEOUT:-"540s"} # Environment variables for the function QDRANT_HOST=${QDRANT_HOST:-""} QDRANT_PORT=${QDRANT_PORT:-"6333"} QDRANT_API_KEY=${QDRANT_API_KEY:-""} QDRANT_COLLECTION=${QDRANT_COLLECTION:-"image_vectors"} echo "Deploying Cloud Function: $FUNCTION_NAME" echo "Project: $PROJECT_ID" echo "Region: $REGION" echo "Pub/Sub Topic: $PUBSUB_TOPIC" # Check if required environment variables are set if [ -z "$QDRANT_HOST" ]; then echo "Warning: QDRANT_HOST not set. Function will not store embeddings." echo "Please set QDRANT_HOST to your vector database VM's external IP address." fi # Deploy the function gcloud functions deploy $FUNCTION_NAME \ --gen2 \ --runtime=python311 \ --region=$REGION \ --source=. \ --entry-point=process_image_embedding \ --trigger-topic=$PUBSUB_TOPIC \ --memory=$MEMORY \ --timeout=$TIMEOUT \ --set-env-vars="QDRANT_HOST=$QDRANT_HOST,QDRANT_PORT=$QDRANT_PORT,QDRANT_API_KEY=$QDRANT_API_KEY,QDRANT_COLLECTION=$QDRANT_COLLECTION" \ --retry \ --max-instances=10 \ --min-instances=0 echo "Cloud Function deployed successfully!" echo "Function name: $FUNCTION_NAME" echo "Trigger: Pub/Sub topic '$PUBSUB_TOPIC'" echo "Region: $REGION" echo "Qdrant Host: $QDRANT_HOST" # Set up retry policy for the Pub/Sub subscription SUBSCRIPTION_NAME="${PUBSUB_TOPIC}-subscription" echo "Configuring retry policy for subscription: $SUBSCRIPTION_NAME" # Check if subscription exists, create if not if ! gcloud pubsub subscriptions describe $SUBSCRIPTION_NAME --project=$PROJECT_ID >/dev/null 2>&1; then echo "Creating Pub/Sub subscription: $SUBSCRIPTION_NAME" gcloud pubsub subscriptions create $SUBSCRIPTION_NAME \ --topic=$PUBSUB_TOPIC \ --project=$PROJECT_ID fi # Update subscription with retry policy (max 3 retries) gcloud pubsub subscriptions update $SUBSCRIPTION_NAME \ --max-retry-delay=600s \ --min-retry-delay=10s \ --max-delivery-attempts=3 \ --project=$PROJECT_ID echo "Retry policy configured: max 3 delivery attempts" echo "Deployment complete!"