2025-05-24 17:31:54 +02:00

74 lines
2.3 KiB
Bash

#!/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!"