Files
2026-07-13 13:30:30 +08:00

123 lines
4.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Load env variables
source ./env.sh
# pubsub access for Cloud Function GCS trigger
echo "Adding function permissions"
SERVICE_ACCOUNT="$(gcloud storage service-agent --project="$PROJECT_ID")"
gcloud projects add-iam-policy-binding "$PROJECT_ID" \
--member="serviceAccount:${SERVICE_ACCOUNT}" \
--role='roles/pubsub.publisher'
# Create GCS buckets
echo "Creating GCS buckets"
gcloud storage buckets create gs://"${PROJECT_ID}"-docs --location="${REGION}" \
--project="${PROJECT_ID}" --uniform-bucket-level-access
gcloud storage buckets create gs://"${PROJECT_ID}"-docs-metadata --location="${REGION}" \
--project="${PROJECT_ID}" --uniform-bucket-level-access
gcloud storage buckets create gs://"${PROJECT_ID}"-doc-ai --location="${REGION}" \
--project="${PROJECT_ID}" --uniform-bucket-level-access
# Create pubsub topic
echo "Creating pubsub topic"
gcloud pubsub topics create "${PROJECT_ID}"-doc-ready --project="${PROJECT_ID}"
# Create VPC connector for cloud function
echo "Creating VPC connector for cloud functions"
gcloud compute networks vpc-access connectors create vpc-connector --region="${REGION}" \
--network=demo-vpc \
--range=10.8.0.0/28 \
--project="${PROJECT_ID}" \
--machine-type=e2-micro
# Create Document AI processor
echo "Creating Document AI processor"
echo '{"type": "OCR_PROCESSOR","displayName": "document-text-extraction"}' >request.json
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://us-documentai.googleapis.com/v1/projects/${PROJECT_ID}/locations/us/processors"
DOC_AI_PROCESSOR_NAME=$(curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://us-documentai.googleapis.com/v1/projects/${PROJECT_ID}/locations/us/processors" |
jq '.processors | .[] | select(.displayName=="document-text-extraction").name')
DOC_AI_PROCESSOR_ID=${DOC_AI_PROCESSOR_NAME##*/}
DOC_AI_PROCESSOR_ID=${DOC_AI_PROCESSOR_ID:0:-1}
# Create functions
# jscpd:ignore-start
echo "Creating Cloud Function: analyze-prospectus"
gcloud functions deploy analyze-prospectus \
--gen2 \
--region="${REGION}" \
--runtime=python311 \
--source="./function-scripts/analyze-prospectus" \
--entry-point="analyze_prospectus" \
--set-env-vars="REGION=${REGION},ZONE=${ZONE},PROJECT_ID=${PROJECT_ID}" \
--set-secrets "ALLOYDB_PASSWORD=alloydb-password-${PROJECT_ID}:1" \
--egress-settings=private-ranges-only \
--vpc-connector=vpc-connector \
--timeout=540s \
--run-service-account="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--service-account="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--trigger-service-account="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--concurrency=1 \
--max-instances=100 \
--ingress-settings=all \
--memory=2gi \
--cpu=2000m \
--trigger-topic="${PROJECT_ID}-doc-ready"
sleep 10
echo "Creating Cloud Function: write-metadata"
gcloud functions deploy write-metadata \
--gen2 \
--region="${REGION}" \
--runtime=python311 \
--source="./function-scripts/write-metadata" \
--entry-point="write_metadata" \
--set-env-vars="PROJECT_ID=${PROJECT_ID}" \
--timeout=60s \
--run-service-account="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--service-account="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--trigger-service-account="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--concurrency=1 \
--max-instances=100 \
--ingress-settings=all \
--memory=256Mi \
--cpu=.5 \
--trigger-bucket="${PROJECT_ID}-docs"
sleep 10
echo "Creating Cloud Function: process-pdf"
gcloud functions deploy process-pdf \
--gen2 \
--region="${REGION}" \
--runtime=python311 \
--source="./function-scripts/process-pdf" \
--entry-point="process_pdf" \
--set-env-vars="REGION=${REGION},ZONE=${ZONE},PROJECT_ID=${PROJECT_ID},PROCESSOR_ID=${DOC_AI_PROCESSOR_ID},IP_TYPE=private" \
--set-secrets "ALLOYDB_PASSWORD=alloydb-password-${PROJECT_ID}:1" \
--egress-settings=private-ranges-only \
--vpc-connector=vpc-connector \
--timeout=540s \
--run-service-account="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--service-account="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--trigger-service-account="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--concurrency=1 \
--max-instances=100 \
--ingress-settings=all \
--memory=2gi \
--cpu=2000m \
--trigger-bucket="${PROJECT_ID}-docs"
# jscpd:ignore-end