64 lines
2.2 KiB
Bash
64 lines
2.2 KiB
Bash
#!/bin/bash
|
|
|
|
# Deployment script that ensures APIs are enabled before deploying Cloud Functions
|
|
set -e
|
|
|
|
echo "🚀 Starting Terraform deployment with API enablement..."
|
|
|
|
# Get project ID from terraform.tfvars or environment
|
|
PROJECT_ID=${GOOGLE_CLOUD_PROJECT:-$(grep 'project_id' terraform.tfvars | cut -d'"' -f2)}
|
|
|
|
if [ -z "$PROJECT_ID" ]; then
|
|
echo "❌ Error: PROJECT_ID not found. Set GOOGLE_CLOUD_PROJECT or ensure terraform.tfvars has project_id"
|
|
exit 1
|
|
fi
|
|
|
|
echo "📋 Project ID: $PROJECT_ID"
|
|
|
|
# Step 1: Enable APIs first
|
|
echo "🔧 Step 1: Enabling required APIs..."
|
|
terraform apply -target=google_project_service.services -auto-approve
|
|
|
|
# Step 2: Wait for APIs to propagate
|
|
echo "⏳ Step 2: Waiting for APIs to propagate (30 seconds)..."
|
|
sleep 30
|
|
|
|
# Step 3: Verify critical APIs are enabled
|
|
echo "✅ Step 3: Verifying API enablement..."
|
|
REQUIRED_APIS=(
|
|
"cloudfunctions.googleapis.com"
|
|
"eventarc.googleapis.com"
|
|
"pubsub.googleapis.com"
|
|
"cloudbuild.googleapis.com"
|
|
)
|
|
|
|
for api in "${REQUIRED_APIS[@]}"; do
|
|
echo " Checking $api..."
|
|
if gcloud services list --enabled --project="$PROJECT_ID" --filter="name:$api" --format="value(name)" | grep -q "$api"; then
|
|
echo " ✅ $api is enabled"
|
|
else
|
|
echo " ❌ $api is not enabled yet, waiting longer..."
|
|
sleep 15
|
|
fi
|
|
done
|
|
|
|
# Step 4: Deploy infrastructure
|
|
echo "🏗️ Step 4: Deploying infrastructure..."
|
|
terraform apply -target=google_storage_bucket.app_bucket -target=google_firestore_database.database -target=google_compute_instance.vector_db_vm -auto-approve
|
|
|
|
# Step 5: Deploy Pub/Sub resources
|
|
echo "📨 Step 5: Deploying Pub/Sub resources..."
|
|
terraform apply -target=google_pubsub_topic.image_processing -target=google_pubsub_topic.image_processing_dlq -auto-approve
|
|
|
|
# Step 6: Deploy Cloud Function
|
|
echo "⚡ Step 6: Deploying Cloud Function..."
|
|
terraform apply -target=google_cloudfunctions2_function.image_processor -auto-approve
|
|
|
|
# Step 7: Deploy remaining resources
|
|
echo "🎯 Step 7: Deploying remaining resources..."
|
|
terraform apply -auto-approve
|
|
|
|
echo "🎉 Deployment completed successfully!"
|
|
echo ""
|
|
echo "📊 Deployment Summary:"
|
|
terraform output deployment_summary 2>/dev/null || echo " Run 'terraform output' to see all outputs" |