#!/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 PINECONE_API_KEY=${PINECONE_API_KEY:-""} PINECONE_ENVIRONMENT=${PINECONE_ENVIRONMENT:-""} PINECONE_INDEX_NAME=${PINECONE_INDEX_NAME:-"image-embeddings"} 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 "$PINECONE_API_KEY" ]; then echo "Warning: PINECONE_API_KEY not set. Function will not store embeddings." fi if [ -z "$PINECONE_ENVIRONMENT" ]; then echo "Warning: PINECONE_ENVIRONMENT not set. Function will not store embeddings." 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="PINECONE_API_KEY=$PINECONE_API_KEY,PINECONE_ENVIRONMENT=$PINECONE_ENVIRONMENT,PINECONE_INDEX_NAME=$PINECONE_INDEX_NAME" \ --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" # 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!"