74 lines
2.3 KiB
Bash
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!" |