docs and cleanup

This commit is contained in:
John MELEK 2025-05-26 18:18:55 +00:00
parent a866e5bddc
commit 8f39689a50
9 changed files with 332 additions and 632 deletions

114
README.md
View File

@ -152,31 +152,99 @@ Uses Google's Vertex AI multimodal embedding model for generating high-quality i
### Prerequisites ### Prerequisites
- Python 3.8+ - Python 3.8+
- Docker
- Google Cloud account with Firestore, Storage, Pub/Sub, Cloud Functions, Compute Engine, and Vision API enabled - Google Cloud account with Firestore, Storage, Pub/Sub, Cloud Functions, Compute Engine, and Vision API enabled
- Terraform (for infrastructure deployment) - Terraform (for infrastructure deployment): https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli
- gcloud CLI: https://cloud.google.com/sdk/docs/install
### Installation ### Deployment
#### 1. Clone the Repository
1. Clone the repository:
```bash ```bash
git clone {repo-url} git clone {repo-url}
cd {repo-name} cd {repo-name}
``` ```
2. Create and activate a virtual environment: #### 2. Configure Google Cloud Project
Set your Google Cloud project ID:
```bash
gcloud config set project PROJECT_ID
gcloud auth login
gcloud auth application-default login
gcloud auth configure-docker
```
Replace `PROJECT_ID` with your actual Google Cloud project ID.
#### 3. Configure Terraform Variables
Create your Terraform variables file from the example:
```bash
cp deployment/terraform/terraform.tfvars.example deployment/terraform/terraform.tfvars
```
Edit the variables file with your specific values.
#### 4. Download Service Account Credentials
Download the service account credentials for the project and save them as `firestore-credentials.json` in the root directory.
#### 5. Deploy Infrastructure
Deploy the complete infrastructure including VM, Cloud Functions, and all Google Cloud services:
```bash
./deployment/deploy.sh --build --deploy
```
#### 6. Seed Initial Data (Optional and requires to install the virtual environment first)
Initialize the database with sample data:
```bash
python ./scripts/seed_firestore.py
```
#### 7. Verify Deployment
Your API will be available at the Cloud Run URL provided after deployment. Check the deployment status and test the endpoints.
#### 8. Destroy Infrastructure (Optional)
To tear down all deployed resources:
```bash
./deployment/deploy.sh --destroy
```
### Local Development
#### 1. Setup Local Environment
Create and activate a virtual environment:
```bash ```bash
python -m venv venv python -m venv venv
source venv/bin/activate # Linux/macOS source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows venv\Scripts\activate # Windows
``` ```
3. Install dependencies: #### 2. Install Dependencies
```bash ```bash
pip install -r requirements.txt pip install -r requirements.txt
``` ```
4. Create a `.env` file with the following environment variables: #### 3. Configure Local Environment
```
Create a `.env` file for local development (use different values from production):
```env
# Project Environment Variables # Project Environment Variables
ENVIRONMENT=development ENVIRONMENT=development
LOG_LEVEL=DEBUG LOG_LEVEL=DEBUG
@ -186,41 +254,36 @@ Uses Google's Vertex AI multimodal embedding model for generating high-quality i
# Firestore settings # Firestore settings
FIRESTORE_PROJECT_ID=gen-lang-client-0424120530 FIRESTORE_PROJECT_ID=gen-lang-client-0424120530
FIRESTORE_DATABASE_NAME=contoso-imagedb FIRESTORE_DATABASE_NAME=contoso-imagedb-dev
FIRESTORE_CREDENTIALS_FILE=firestore-credentials.json FIRESTORE_CREDENTIALS_FILE=firestore-credentials.json
# Google Cloud Storage settings # Google Cloud Storage settings
GCS_BUCKET_NAME=contoso-images GCS_BUCKET_NAME=contoso-images-dev
GCS_CREDENTIALS_FILE=firestore-credentials.json GCS_CREDENTIALS_FILE=firestore-credentials.json
# Security settings # Security settings
API_KEY_SECRET=super-secret-key API_KEY_SECRET=local-dev-secret-key
API_KEY_EXPIRY_DAYS=365 API_KEY_EXPIRY_DAYS=30
# Vector Database settings # Vector Database settings (point to deployed VM or local instance)
QDRANT_PORT=6333 QDRANT_PORT=6333
QDRANT_HTTPS=false QDRANT_HTTPS=false
QDRANT_PREFER_GRPC=false QDRANT_PREFER_GRPC=false
``` ```
5. **Deploy Infrastructure** #### 4. Start Local Development Server
```bash
./deployment/deploy.sh --build --deploy
python ./scripts/seed_firestore.py
```
6. **Destroy Infrastructure**
```bash
./deployment/deploy.sh --destroy
```
7. **Local Development**
```bash ```bash
./scripts/start.sh ./scripts/start.sh
``` ```
8. **Local Testing** #### 5. Run Tests
```bash
source venv/Scripts/activate && python scripts/run_tests.py all
```
The local development server will be available at `http://localhost:8000` with API documentation at `http://localhost:8000/docs`.
## API Endpoints ## API Endpoints
@ -298,7 +361,6 @@ A **hybrid authentication model**:
1. **Public Management Endpoints**: Users, teams, and API key creation are **publicly accessible** for easy integration and setup 1. **Public Management Endpoints**: Users, teams, and API key creation are **publicly accessible** for easy integration and setup
2. **Protected Data Endpoints**: Image storage and search require **API key authentication** 2. **Protected Data Endpoints**: Image storage and search require **API key authentication**
### **Authentication & Pagination Status** ### **Authentication & Pagination Status**
| Endpoint Category | Authentication | Pagination Status | Notes | | Endpoint Category | Authentication | Pagination Status | Notes |

0
deployment/deploy.sh Normal file → Executable file
View File

View File

@ -4,6 +4,7 @@
provider "registry.terraform.io/hashicorp/archive" { provider "registry.terraform.io/hashicorp/archive" {
version = "2.7.1" version = "2.7.1"
hashes = [ hashes = [
"h1:62VrkalDPMKB9zerCBS4iKTbvxejwnAWn/XXYZZQWD4=",
"h1:RzToQiFwVaxcV0QmgbyaKgNOhqc6oLKiFyZTrQSGcog=", "h1:RzToQiFwVaxcV0QmgbyaKgNOhqc6oLKiFyZTrQSGcog=",
"zh:19881bb356a4a656a865f48aee70c0b8a03c35951b7799b6113883f67f196e8e", "zh:19881bb356a4a656a865f48aee70c0b8a03c35951b7799b6113883f67f196e8e",
"zh:2fcfbf6318dd514863268b09bbe19bfc958339c636bcbcc3664b45f2b8bf5cc6", "zh:2fcfbf6318dd514863268b09bbe19bfc958339c636bcbcc3664b45f2b8bf5cc6",
@ -23,6 +24,7 @@ provider "registry.terraform.io/hashicorp/archive" {
provider "registry.terraform.io/hashicorp/google" { provider "registry.terraform.io/hashicorp/google" {
version = "6.36.1" version = "6.36.1"
hashes = [ hashes = [
"h1:DTbEbqeeLHIC+hsNr+IsYk8Qt+UXrTtza0YttHrfHUg=",
"h1:rj3g00i0dH4VxXYO5xXJg188i6OXWbFUT6WmLbO5orY=", "h1:rj3g00i0dH4VxXYO5xXJg188i6OXWbFUT6WmLbO5orY=",
"zh:161d054bda352a286a997f80f3d59366d072377abc6777bfe8abacc2e10ac2bf", "zh:161d054bda352a286a997f80f3d59366d072377abc6777bfe8abacc2e10ac2bf",
"zh:314c38d8050036176031f691b533184c3578036085483fed877b3b139f887047", "zh:314c38d8050036176031f691b533184c3578036085483fed877b3b139f887047",

View File

@ -1 +0,0 @@
{"ID":"f7ebd466-aa1e-1c15-bedf-0f9c92044463","Operation":"OperationTypeApply","Info":"","Who":"DESKTOP\\habal@Desktop","Version":"1.10.1","Created":"2025-05-26T16:46:06.4288884Z","Path":"terraform.tfstate"}

View File

@ -1,7 +1,7 @@
{ {
"version": 4, "version": 4,
"terraform_version": "1.10.1", "terraform_version": "1.12.1",
"serial": 451, "serial": 482,
"lineage": "a183cd95-f987-8698-c6dd-84e933c394a5", "lineage": "a183cd95-f987-8698-c6dd-84e933c394a5",
"outputs": { "outputs": {
"cloud_function_name": { "cloud_function_name": {
@ -13,11 +13,11 @@
"type": "string" "type": "string"
}, },
"cloud_run_qdrant_host": { "cloud_run_qdrant_host": {
"value": "35.193.174.125", "value": "35.239.162.50",
"type": "string" "type": "string"
}, },
"cloud_run_qdrant_host_internal": { "cloud_run_qdrant_host_internal": {
"value": "10.128.0.7", "value": "10.128.0.10",
"type": "string" "type": "string"
}, },
"cloud_run_url": { "cloud_run_url": {
@ -32,8 +32,8 @@
"value": { "value": {
"cloud_run_url": "https://contoso-p64zpdtkta-uc.a.run.app", "cloud_run_url": "https://contoso-p64zpdtkta-uc.a.run.app",
"firestore_database": "contoso-imagedb", "firestore_database": "contoso-imagedb",
"qdrant_endpoint": "http://35.193.174.125:6333", "qdrant_endpoint": "http://35.239.162.50:6333",
"qdrant_host_ip": "35.193.174.125", "qdrant_host_ip": "35.239.162.50",
"static_ip_enabled": false, "static_ip_enabled": false,
"storage_bucket": "contoso-images" "storage_bucket": "contoso-images"
}, },
@ -62,11 +62,11 @@
"type": "string" "type": "string"
}, },
"qdrant_grpc_endpoint": { "qdrant_grpc_endpoint": {
"value": "http://35.193.174.125:6334", "value": "http://35.239.162.50:6334",
"type": "string" "type": "string"
}, },
"qdrant_http_endpoint": { "qdrant_http_endpoint": {
"value": "http://35.193.174.125:6333", "value": "http://35.239.162.50:6333",
"type": "string" "type": "string"
}, },
"storage_bucket_name": { "storage_bucket_name": {
@ -74,11 +74,11 @@
"type": "string" "type": "string"
}, },
"vector_db_vm_external_ip": { "vector_db_vm_external_ip": {
"value": "35.193.174.125", "value": "35.239.162.50",
"type": "string" "type": "string"
}, },
"vector_db_vm_internal_ip": { "vector_db_vm_internal_ip": {
"value": "10.128.0.7", "value": "10.128.0.10",
"type": "string" "type": "string"
}, },
"vector_db_vm_name": { "vector_db_vm_name": {
@ -98,16 +98,16 @@
"attributes": { "attributes": {
"exclude_symlink_directories": null, "exclude_symlink_directories": null,
"excludes": null, "excludes": null,
"id": "fe2be242d7b603458e099720b9d99e319952abb0", "id": "89f7ed751d329280db05b2b98b5018b0af9ece39",
"output_base64sha256": "+3DKsNV8OT4cv8S2rftR1Pe8UUHzJNn2hhWkS8FcN9I=", "output_base64sha256": "EJTnhfhxMekptx4HEzFKW+jo7mvd0K/ecHZr4CnvJCQ=",
"output_base64sha512": "2+zPRbyYxFDTa0LJz6TmZOajp10eJNQla9tK0S8d++4T6vXgt7nKSy81GO+V4ttWYopmipOvRYJe5YZ4WvmecA==", "output_base64sha512": "f2NkqpPZp+ZLfUvhzm+er2o5edUW9A6u0RsyKTSngTQs1DCF9OUpEoUgvPE+Pjwg5bZWk4XU1xIlGyuG60GMag==",
"output_file_mode": null, "output_file_mode": null,
"output_md5": "8e8a10dd705e45fe8645782a20d999a3", "output_md5": "7f6e38555ecabf16a324987982823b6e",
"output_path": "./function-source.zip", "output_path": "./function-source.zip",
"output_sha": "fe2be242d7b603458e099720b9d99e319952abb0", "output_sha": "89f7ed751d329280db05b2b98b5018b0af9ece39",
"output_sha256": "fb70cab0d57c393e1cbfc4b6adfb51d4f7bc5141f324d9f68615a44bc15c37d2", "output_sha256": "1094e785f87131e929b71e0713314a5be8e8ee6bddd0afde70766be029ef2424",
"output_sha512": "dbeccf45bc98c450d36b42c9cfa4e664e6a3a75d1e24d4256bdb4ad12f1dfbee13eaf5e0b7b9ca4b2f3518ef95e2db56628a668a93af45825ee586785af99e70", "output_sha512": "7f6364aa93d9a7e64b7d4be1ce6f9eaf6a3979d516f40eaed11b322934a781342cd43085f4e529128520bcf13e3e3c20e5b6569385d4d712251b2b86eb418c6a",
"output_size": 69764811, "output_size": 3871,
"source": [], "source": [],
"source_content": null, "source_content": null,
"source_content_filename": null, "source_content_filename": null,
@ -115,7 +115,8 @@
"source_file": null, "source_file": null,
"type": "zip" "type": "zip"
}, },
"sensitive_attributes": [] "sensitive_attributes": [],
"identity_schema_version": 0
} }
] ]
}, },
@ -148,7 +149,8 @@
"generative-language": "enabled" "generative-language": "enabled"
} }
}, },
"sensitive_attributes": [] "sensitive_attributes": [],
"identity_schema_version": 0
} }
] ]
}, },
@ -172,7 +174,7 @@
"effective_annotations": { "effective_annotations": {
"run.googleapis.com/ingress": "all", "run.googleapis.com/ingress": "all",
"run.googleapis.com/ingress-status": "all", "run.googleapis.com/ingress-status": "all",
"run.googleapis.com/operation-id": "2b1374b6-6b03-4d99-a76c-b8e751f46df0", "run.googleapis.com/operation-id": "0425a798-bd0b-4453-83ba-38983e678875",
"run.googleapis.com/urls": "[\"https://contoso-761163285547.us-central1.run.app\",\"https://contoso-p64zpdtkta-uc.a.run.app\"]", "run.googleapis.com/urls": "[\"https://contoso-761163285547.us-central1.run.app\",\"https://contoso-p64zpdtkta-uc.a.run.app\"]",
"serving.knative.dev/creator": "johnpccd3@gmail.com", "serving.knative.dev/creator": "johnpccd3@gmail.com",
"serving.knative.dev/lastModifier": "johnpccd3@gmail.com" "serving.knative.dev/lastModifier": "johnpccd3@gmail.com"
@ -184,12 +186,12 @@
"generation": 1, "generation": 1,
"labels": null, "labels": null,
"namespace": "gen-lang-client-0424120530", "namespace": "gen-lang-client-0424120530",
"resource_version": "AAY191YVk4g", "resource_version": "AAY2Deo4Uy8",
"self_link": "/apis/serving.knative.dev/v1/namespaces/761163285547/services/contoso", "self_link": "/apis/serving.knative.dev/v1/namespaces/761163285547/services/contoso",
"terraform_labels": { "terraform_labels": {
"goog-terraform-provisioned": "true" "goog-terraform-provisioned": "true"
}, },
"uid": "d8b0e29e-2db1-4f23-8b6c-d7238a9a5f89" "uid": "65c83cd2-1e60-4541-a922-6132aabb9311"
} }
], ],
"name": "contoso", "name": "contoso",
@ -216,14 +218,14 @@
"type": "RoutesReady" "type": "RoutesReady"
} }
], ],
"latest_created_revision_name": "contoso-00001-htg", "latest_created_revision_name": "contoso-00001-w6c",
"latest_ready_revision_name": "contoso-00001-htg", "latest_ready_revision_name": "contoso-00001-w6c",
"observed_generation": 1, "observed_generation": 1,
"traffic": [ "traffic": [
{ {
"latest_revision": true, "latest_revision": true,
"percent": 100, "percent": 100,
"revision_name": "contoso-00001-htg", "revision_name": "contoso-00001-w6c",
"tag": "", "tag": "",
"url": "" "url": ""
} }
@ -291,7 +293,7 @@
}, },
{ {
"name": "QDRANT_HOST", "name": "QDRANT_HOST",
"value": "35.193.174.125", "value": "35.239.162.50",
"value_from": [] "value_from": []
}, },
{ {
@ -308,16 +310,6 @@
"name": "QDRANT_PREFER_GRPC", "name": "QDRANT_PREFER_GRPC",
"value": "false", "value": "false",
"value_from": [] "value_from": []
},
{
"name": "VECTOR_DB_ENVIRONMENT",
"value": "gcp-starter",
"value_from": []
},
{
"name": "VECTOR_DB_INDEX_NAME",
"value": "image-embeddings",
"value_from": []
} }
], ],
"env_from": [], "env_from": [],
@ -379,47 +371,8 @@
} }
] ]
}, },
"sensitive_attributes": [ "sensitive_attributes": [],
[ "identity_schema_version": 0,
{
"type": "get_attr",
"value": "template"
},
{
"type": "index",
"value": {
"value": 0,
"type": "number"
}
},
{
"type": "get_attr",
"value": "spec"
},
{
"type": "index",
"value": {
"value": 0,
"type": "number"
}
},
{
"type": "get_attr",
"value": "containers"
},
{
"type": "index",
"value": {
"value": 0,
"type": "number"
}
},
{
"type": "get_attr",
"value": "env"
}
]
],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMiJ9", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMiJ9",
"dependencies": [ "dependencies": [
"google_compute_address.vector_db_static_ip", "google_compute_address.vector_db_static_ip",
@ -440,7 +393,7 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY191avNJc=", "etag": "BwY2DeqBDyE=",
"id": "v1/projects/gen-lang-client-0424120530/locations/us-central1/services/contoso/roles/run.invoker/allUsers", "id": "v1/projects/gen-lang-client-0424120530/locations/us-central1/services/contoso/roles/run.invoker/allUsers",
"location": "us-central1", "location": "us-central1",
"member": "allUsers", "member": "allUsers",
@ -449,6 +402,7 @@
"service": "v1/projects/gen-lang-client-0424120530/locations/us-central1/services/contoso" "service": "v1/projects/gen-lang-client-0424120530/locations/us-central1/services/contoso"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"google_cloud_run_service.contoso", "google_cloud_run_service.contoso",
@ -474,7 +428,7 @@
"automatic_update_policy": [ "automatic_update_policy": [
{} {}
], ],
"build": "projects/761163285547/locations/us-central1/builds/3804d611-8e49-491b-b994-4ed7fc528e92", "build": "projects/761163285547/locations/us-central1/builds/08578917-6013-4d38-9c9e-6cf438f1cbd4",
"docker_repository": "projects/gen-lang-client-0424120530/locations/us-central1/repositories/gcf-artifacts", "docker_repository": "projects/gen-lang-client-0424120530/locations/us-central1/repositories/gcf-artifacts",
"entry_point": "process_image_embedding", "entry_point": "process_image_embedding",
"environment_variables": {}, "environment_variables": {},
@ -488,7 +442,7 @@
{ {
"bucket": "gen-lang-client-0424120530-cloud-function-source", "bucket": "gen-lang-client-0424120530-cloud-function-source",
"generation": 1748186294324568, "generation": 1748186294324568,
"object": "function-source-8e8a10dd705e45fe8645782a20d999a3.zip" "object": "function-source-7f6e38555ecabf16a324987982823b6e.zip"
} }
] ]
} }
@ -508,13 +462,13 @@
"pubsub_topic": "projects/gen-lang-client-0424120530/topics/image-processing-topic", "pubsub_topic": "projects/gen-lang-client-0424120530/topics/image-processing-topic",
"retry_policy": "RETRY_POLICY_RETRY", "retry_policy": "RETRY_POLICY_RETRY",
"service_account_email": "761163285547-compute@developer.gserviceaccount.com", "service_account_email": "761163285547-compute@developer.gserviceaccount.com",
"trigger": "projects/gen-lang-client-0424120530/locations/us-central1/triggers/process-image-embedding-873142", "trigger": "projects/gen-lang-client-0424120530/locations/us-central1/triggers/process-image-embedding-093029",
"trigger_region": "us-central1" "trigger_region": "us-central1"
} }
], ],
"id": "projects/gen-lang-client-0424120530/locations/us-central1/functions/process-image-embedding", "id": "projects/gen-lang-client-0424120530/locations/us-central1/functions/process-image-embedding",
"kms_key_name": "", "kms_key_name": "",
"labels": null, "labels": {},
"location": "us-central1", "location": "us-central1",
"name": "process-image-embedding", "name": "process-image-embedding",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
@ -534,7 +488,7 @@
"PROJECT_ID": "gen-lang-client-0424120530", "PROJECT_ID": "gen-lang-client-0424120530",
"QDRANT_API_KEY": "", "QDRANT_API_KEY": "",
"QDRANT_COLLECTION": "image_vectors", "QDRANT_COLLECTION": "image_vectors",
"QDRANT_HOST": "35.193.174.125", "QDRANT_HOST": "35.239.162.50",
"QDRANT_HTTPS": "false", "QDRANT_HTTPS": "false",
"QDRANT_PORT": "6333", "QDRANT_PORT": "6333",
"VERTEX_AI_LOCATION": "us-central1" "VERTEX_AI_LOCATION": "us-central1"
@ -559,35 +513,11 @@
"goog-terraform-provisioned": "true" "goog-terraform-provisioned": "true"
}, },
"timeouts": null, "timeouts": null,
"update_time": "2025-05-25T15:20:42.834818284Z", "update_time": "2025-05-26T17:37:44.525533692Z",
"url": "https://us-central1-gen-lang-client-0424120530.cloudfunctions.net/process-image-embedding" "url": "https://us-central1-gen-lang-client-0424120530.cloudfunctions.net/process-image-embedding"
}, },
"sensitive_attributes": [ "sensitive_attributes": [],
[ "identity_schema_version": 0,
{
"type": "get_attr",
"value": "service_config"
},
{
"type": "index",
"value": {
"value": 0,
"type": "number"
}
},
{
"type": "get_attr",
"value": "environment_variables"
},
{
"type": "index",
"value": {
"value": "QDRANT_API_KEY",
"type": "string"
}
}
]
],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozNjAwMDAwMDAwMDAwLCJkZWxldGUiOjM2MDAwMDAwMDAwMDAsInVwZGF0ZSI6MzYwMDAwMDAwMDAwMH19", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozNjAwMDAwMDAwMDAwLCJkZWxldGUiOjM2MDAwMDAwMDAwMDAsInVwZGF0ZSI6MzYwMDAwMDAwMDAwMH19",
"dependencies": [ "dependencies": [
"data.archive_file.function_source", "data.archive_file.function_source",
@ -621,7 +551,7 @@
"protocol": "tcp" "protocol": "tcp"
} }
], ],
"creation_timestamp": "2025-05-24T14:09:17.159-07:00", "creation_timestamp": "2025-05-26T10:30:31.215-07:00",
"deny": [], "deny": [],
"description": "", "description": "",
"destination_ranges": [], "destination_ranges": [],
@ -648,6 +578,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9"
} }
] ]
@ -711,7 +642,7 @@
"can_ip_forward": false, "can_ip_forward": false,
"confidential_instance_config": [], "confidential_instance_config": [],
"cpu_platform": "Intel Broadwell", "cpu_platform": "Intel Broadwell",
"creation_timestamp": "2025-05-25T03:58:31.230-07:00", "creation_timestamp": "2025-05-26T10:30:45.304-07:00",
"current_status": "RUNNING", "current_status": "RUNNING",
"deletion_protection": false, "deletion_protection": false,
"description": "", "description": "",
@ -724,7 +655,7 @@
"hostname": "", "hostname": "",
"id": "projects/gen-lang-client-0424120530/zones/us-central1-a/instances/contoso-vector-db", "id": "projects/gen-lang-client-0424120530/zones/us-central1-a/instances/contoso-vector-db",
"instance_encryption_key": [], "instance_encryption_key": [],
"instance_id": "3665939918038714681", "instance_id": "7202785867853274026",
"key_revocation_action_type": "", "key_revocation_action_type": "",
"label_fingerprint": "vezUS-42LLM=", "label_fingerprint": "vezUS-42LLM=",
"labels": {}, "labels": {},
@ -738,7 +669,7 @@
{ {
"access_config": [ "access_config": [
{ {
"nat_ip": "35.193.174.125", "nat_ip": "35.239.162.50",
"network_tier": "PREMIUM", "network_tier": "PREMIUM",
"public_ptr_domain_name": "" "public_ptr_domain_name": ""
} }
@ -751,7 +682,7 @@
"name": "nic0", "name": "nic0",
"network": "https://www.googleapis.com/compute/v1/projects/gen-lang-client-0424120530/global/networks/default", "network": "https://www.googleapis.com/compute/v1/projects/gen-lang-client-0424120530/global/networks/default",
"network_attachment": "", "network_attachment": "",
"network_ip": "10.128.0.7", "network_ip": "10.128.0.10",
"nic_type": "", "nic_type": "",
"queue_count": 0, "queue_count": 0,
"stack_type": "IPV4_ONLY", "stack_type": "IPV4_ONLY",
@ -823,7 +754,7 @@
}, },
{ {
"type": "get_attr", "type": "get_attr",
"value": "disk_encryption_key_rsa" "value": "disk_encryption_key_raw"
} }
], ],
[ [
@ -840,16 +771,11 @@
}, },
{ {
"type": "get_attr", "type": "get_attr",
"value": "disk_encryption_key_raw" "value": "disk_encryption_key_rsa"
}
],
[
{
"type": "get_attr",
"value": "metadata_startup_script"
} }
] ]
], ],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiNiJ9", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiNiJ9",
"dependencies": [ "dependencies": [
"google_compute_address.vector_db_static_ip", "google_compute_address.vector_db_static_ip",
@ -875,8 +801,8 @@
"database_edition": "STANDARD", "database_edition": "STANDARD",
"delete_protection_state": "DELETE_PROTECTION_DISABLED", "delete_protection_state": "DELETE_PROTECTION_DISABLED",
"deletion_policy": "ABANDON", "deletion_policy": "ABANDON",
"earliest_version_time": "2025-05-25T14:17:09.893967Z", "earliest_version_time": "2025-05-26T17:30:34.654251Z",
"etag": "IKfR75n1vo0DMKrW4vCEvY0D", "etag": "IJPvj6vewY0DMLiE6qfXwY0D",
"id": "projects/gen-lang-client-0424120530/databases/contoso-imagedb", "id": "projects/gen-lang-client-0424120530/databases/contoso-imagedb",
"key_prefix": "", "key_prefix": "",
"location_id": "us-central1", "location_id": "us-central1",
@ -885,11 +811,12 @@
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"timeouts": null, "timeouts": null,
"type": "FIRESTORE_NATIVE", "type": "FIRESTORE_NATIVE",
"uid": "f4aa945b-2205-4f94-b903-57815519f2fc", "uid": "1b80214d-7fd4-4c54-9542-729c7225ed1f",
"update_time": "", "update_time": "",
"version_retention_period": "3600s" "version_retention_period": "3600s"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19",
"dependencies": [ "dependencies": [
"google_project_service.services" "google_project_service.services"
@ -907,13 +834,14 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY16WAsDU4=", "etag": "BwY2DU48jAs=",
"id": "gen-lang-client-0424120530/roles/eventarc.eventReceiver/serviceAccount:761163285547-compute@developer.gserviceaccount.com", "id": "gen-lang-client-0424120530/roles/eventarc.eventReceiver/serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com", "member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"role": "roles/eventarc.eventReceiver" "role": "roles/eventarc.eventReceiver"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"data.google_project.current" "data.google_project.current"
@ -931,13 +859,14 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY16WAsDU4=", "etag": "BwY2DU48jAs=",
"id": "gen-lang-client-0424120530/roles/datastore.user/serviceAccount:761163285547-compute@developer.gserviceaccount.com", "id": "gen-lang-client-0424120530/roles/datastore.user/serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com", "member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"role": "roles/datastore.user" "role": "roles/datastore.user"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"data.google_project.current" "data.google_project.current"
@ -955,13 +884,14 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY16WAsDU4=", "etag": "BwY2DU48jAs=",
"id": "gen-lang-client-0424120530/roles/pubsub.subscriber/serviceAccount:761163285547-compute@developer.gserviceaccount.com", "id": "gen-lang-client-0424120530/roles/pubsub.subscriber/serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com", "member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"role": "roles/pubsub.subscriber" "role": "roles/pubsub.subscriber"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"data.google_project.current" "data.google_project.current"
@ -979,13 +909,14 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY16WAsDU4=", "etag": "BwY2DU48jAs=",
"id": "gen-lang-client-0424120530/roles/storage.objectViewer/serviceAccount:761163285547-compute@developer.gserviceaccount.com", "id": "gen-lang-client-0424120530/roles/storage.objectViewer/serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com", "member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"role": "roles/storage.objectViewer" "role": "roles/storage.objectViewer"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"data.google_project.current" "data.google_project.current"
@ -1003,13 +934,14 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY16WAsDU4=", "etag": "BwY2DU48jAs=",
"id": "gen-lang-client-0424120530/roles/aiplatform.user/serviceAccount:761163285547-compute@developer.gserviceaccount.com", "id": "gen-lang-client-0424120530/roles/aiplatform.user/serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com", "member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"role": "roles/aiplatform.user" "role": "roles/aiplatform.user"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"data.google_project.current" "data.google_project.current"
@ -1035,6 +967,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1049,6 +982,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1063,6 +997,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1077,6 +1012,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1091,6 +1027,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1105,6 +1042,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1119,6 +1057,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1133,6 +1072,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1147,6 +1087,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1161,6 +1102,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1175,6 +1117,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
} }
] ]
@ -1228,6 +1171,7 @@
"topic": "projects/gen-lang-client-0424120530/topics/image-processing-topic-dlq" "topic": "projects/gen-lang-client-0424120530/topics/image-processing-topic-dlq"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19",
"dependencies": [ "dependencies": [
"google_pubsub_topic.image_processing_dlq" "google_pubsub_topic.image_processing_dlq"
@ -1272,6 +1216,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19"
} }
] ]
@ -1313,6 +1258,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19"
} }
] ]
@ -1327,7 +1273,7 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY16CEHGDA=", "etag": "BwY2DU48nbo=",
"id": "projects/gen-lang-client-0424120530/topics/image-processing-topic/roles/pubsub.publisher", "id": "projects/gen-lang-client-0424120530/topics/image-processing-topic/roles/pubsub.publisher",
"members": [ "members": [
"serviceAccount:761163285547-compute@developer.gserviceaccount.com" "serviceAccount:761163285547-compute@developer.gserviceaccount.com"
@ -1337,6 +1283,7 @@
"topic": "projects/gen-lang-client-0424120530/topics/image-processing-topic" "topic": "projects/gen-lang-client-0424120530/topics/image-processing-topic"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"data.google_project.current", "data.google_project.current",
@ -1365,9 +1312,10 @@
"name": "projects/gen-lang-client-0424120530/serviceAccounts/vector-db-sa@gen-lang-client-0424120530.iam.gserviceaccount.com", "name": "projects/gen-lang-client-0424120530/serviceAccounts/vector-db-sa@gen-lang-client-0424120530.iam.gserviceaccount.com",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"timeouts": null, "timeouts": null,
"unique_id": "115648202672357296665" "unique_id": "118261137128240596892"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozMDAwMDAwMDAwMDB9fQ==" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozMDAwMDAwMDAwMDB9fQ=="
} }
] ]
@ -1411,7 +1359,7 @@
"self_link": "https://www.googleapis.com/storage/v1/b/contoso-images", "self_link": "https://www.googleapis.com/storage/v1/b/contoso-images",
"soft_delete_policy": [ "soft_delete_policy": [
{ {
"effective_time": "2025-05-24T21:09:21.315Z", "effective_time": "2025-05-26T17:30:31.355Z",
"retention_duration_seconds": 604800 "retention_duration_seconds": 604800
} }
], ],
@ -1419,15 +1367,16 @@
"terraform_labels": { "terraform_labels": {
"goog-terraform-provisioned": "true" "goog-terraform-provisioned": "true"
}, },
"time_created": "2025-05-24T21:09:21.315Z", "time_created": "2025-05-26T17:30:31.355Z",
"timeouts": null, "timeouts": null,
"uniform_bucket_level_access": true, "uniform_bucket_level_access": true,
"updated": "2025-05-24T21:09:21.315Z", "updated": "2025-05-26T17:30:31.355Z",
"url": "gs://contoso-images", "url": "gs://contoso-images",
"versioning": [], "versioning": [],
"website": [] "website": []
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsInJlYWQiOjI0MDAwMDAwMDAwMCwidXBkYXRlIjoyNDAwMDAwMDAwMDB9LCJzY2hlbWFfdmVyc2lvbiI6IjMifQ==", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsInJlYWQiOjI0MDAwMDAwMDAwMCwidXBkYXRlIjoyNDAwMDAwMDAwMDB9LCJzY2hlbWFfdmVyc2lvbiI6IjMifQ==",
"dependencies": [ "dependencies": [
"google_project_service.services" "google_project_service.services"
@ -1474,7 +1423,7 @@
"self_link": "https://www.googleapis.com/storage/v1/b/gen-lang-client-0424120530-cloud-function-source", "self_link": "https://www.googleapis.com/storage/v1/b/gen-lang-client-0424120530-cloud-function-source",
"soft_delete_policy": [ "soft_delete_policy": [
{ {
"effective_time": "2025-05-24T21:47:35.399Z", "effective_time": "2025-05-26T17:30:31.392Z",
"retention_duration_seconds": 604800 "retention_duration_seconds": 604800
} }
], ],
@ -1482,15 +1431,16 @@
"terraform_labels": { "terraform_labels": {
"goog-terraform-provisioned": "true" "goog-terraform-provisioned": "true"
}, },
"time_created": "2025-05-24T21:47:35.399Z", "time_created": "2025-05-26T17:30:31.392Z",
"timeouts": null, "timeouts": null,
"uniform_bucket_level_access": true, "uniform_bucket_level_access": true,
"updated": "2025-05-24T21:47:35.399Z", "updated": "2025-05-26T17:30:31.392Z",
"url": "gs://gen-lang-client-0424120530-cloud-function-source", "url": "gs://gen-lang-client-0424120530-cloud-function-source",
"versioning": [], "versioning": [],
"website": [] "website": []
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsInJlYWQiOjI0MDAwMDAwMDAwMCwidXBkYXRlIjoyNDAwMDAwMDAwMDB9LCJzY2hlbWFfdmVyc2lvbiI6IjMifQ==", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsInJlYWQiOjI0MDAwMDAwMDAwMCwidXBkYXRlIjoyNDAwMDAwMDAwMDB9LCJzY2hlbWFfdmVyc2lvbiI6IjMifQ==",
"dependencies": [ "dependencies": [
"google_project_service.services" "google_project_service.services"
@ -1514,21 +1464,21 @@
"content_encoding": "", "content_encoding": "",
"content_language": "", "content_language": "",
"content_type": "application/zip", "content_type": "application/zip",
"crc32c": "cMTkTw==", "crc32c": "aWG2+g==",
"customer_encryption": [], "customer_encryption": [],
"detect_md5hash": "jooQ3XBeRf6GRXgqINmZow==", "detect_md5hash": "f244VV7KvxajJJh5goI7bg==",
"event_based_hold": false, "event_based_hold": false,
"generation": 1748186292978895, "generation": 1748280633915865,
"id": "gen-lang-client-0424120530-cloud-function-source-function-source-8e8a10dd705e45fe8645782a20d999a3.zip", "id": "gen-lang-client-0424120530-cloud-function-source-function-source-7f6e38555ecabf16a324987982823b6e.zip",
"kms_key_name": "", "kms_key_name": "",
"md5hash": "jooQ3XBeRf6GRXgqINmZow==", "md5hash": "f244VV7KvxajJJh5goI7bg==",
"md5hexhash": "8e8a10dd705e45fe8645782a20d999a3", "md5hexhash": "7f6e38555ecabf16a324987982823b6e",
"media_link": "https://storage.googleapis.com/download/storage/v1/b/gen-lang-client-0424120530-cloud-function-source/o/function-source-8e8a10dd705e45fe8645782a20d999a3.zip?generation=1748186292978895\u0026alt=media", "media_link": "https://storage.googleapis.com/download/storage/v1/b/gen-lang-client-0424120530-cloud-function-source/o/function-source-7f6e38555ecabf16a324987982823b6e.zip?generation=1748280633915865\u0026alt=media",
"metadata": null, "metadata": {},
"name": "function-source-8e8a10dd705e45fe8645782a20d999a3.zip", "name": "function-source-7f6e38555ecabf16a324987982823b6e.zip",
"output_name": "function-source-8e8a10dd705e45fe8645782a20d999a3.zip", "output_name": "function-source-7f6e38555ecabf16a324987982823b6e.zip",
"retention": [], "retention": [],
"self_link": "https://www.googleapis.com/storage/v1/b/gen-lang-client-0424120530-cloud-function-source/o/function-source-8e8a10dd705e45fe8645782a20d999a3.zip", "self_link": "https://www.googleapis.com/storage/v1/b/gen-lang-client-0424120530-cloud-function-source/o/function-source-7f6e38555ecabf16a324987982823b6e.zip",
"source": "./function-source.zip", "source": "./function-source.zip",
"storage_class": "STANDARD", "storage_class": "STANDARD",
"temporary_hold": false, "temporary_hold": false,
@ -1542,6 +1492,7 @@
} }
] ]
], ],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoyNDAwMDAwMDAwMDAsImRlbGV0ZSI6MjQwMDAwMDAwMDAwLCJ1cGRhdGUiOjI0MDAwMDAwMDAwMH19", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoyNDAwMDAwMDAwMDAsImRlbGV0ZSI6MjQwMDAwMDAwMDAwLCJ1cGRhdGUiOjI0MDAwMDAwMDAwMH19",
"dependencies": [ "dependencies": [
"data.archive_file.function_source", "data.archive_file.function_source",

View File

@ -1,7 +1,7 @@
{ {
"version": 4, "version": 4,
"terraform_version": "1.10.1", "terraform_version": "1.12.1",
"serial": 445, "serial": 479,
"lineage": "a183cd95-f987-8698-c6dd-84e933c394a5", "lineage": "a183cd95-f987-8698-c6dd-84e933c394a5",
"outputs": { "outputs": {
"cloud_function_name": { "cloud_function_name": {
@ -13,11 +13,11 @@
"type": "string" "type": "string"
}, },
"cloud_run_qdrant_host": { "cloud_run_qdrant_host": {
"value": "35.193.174.125", "value": "35.239.162.50",
"type": "string" "type": "string"
}, },
"cloud_run_qdrant_host_internal": { "cloud_run_qdrant_host_internal": {
"value": "10.128.0.7", "value": "10.128.0.10",
"type": "string" "type": "string"
}, },
"cloud_run_url": { "cloud_run_url": {
@ -32,8 +32,8 @@
"value": { "value": {
"cloud_run_url": "https://contoso-p64zpdtkta-uc.a.run.app", "cloud_run_url": "https://contoso-p64zpdtkta-uc.a.run.app",
"firestore_database": "contoso-imagedb", "firestore_database": "contoso-imagedb",
"qdrant_endpoint": "http://35.193.174.125:6333", "qdrant_endpoint": "http://35.239.162.50:6333",
"qdrant_host_ip": "35.193.174.125", "qdrant_host_ip": "35.239.162.50",
"static_ip_enabled": false, "static_ip_enabled": false,
"storage_bucket": "contoso-images" "storage_bucket": "contoso-images"
}, },
@ -62,11 +62,11 @@
"type": "string" "type": "string"
}, },
"qdrant_grpc_endpoint": { "qdrant_grpc_endpoint": {
"value": "http://35.193.174.125:6334", "value": "http://35.239.162.50:6334",
"type": "string" "type": "string"
}, },
"qdrant_http_endpoint": { "qdrant_http_endpoint": {
"value": "http://35.193.174.125:6333", "value": "http://35.239.162.50:6333",
"type": "string" "type": "string"
}, },
"storage_bucket_name": { "storage_bucket_name": {
@ -74,11 +74,11 @@
"type": "string" "type": "string"
}, },
"vector_db_vm_external_ip": { "vector_db_vm_external_ip": {
"value": "35.193.174.125", "value": "35.239.162.50",
"type": "string" "type": "string"
}, },
"vector_db_vm_internal_ip": { "vector_db_vm_internal_ip": {
"value": "10.128.0.7", "value": "10.128.0.10",
"type": "string" "type": "string"
}, },
"vector_db_vm_name": { "vector_db_vm_name": {
@ -98,16 +98,16 @@
"attributes": { "attributes": {
"exclude_symlink_directories": null, "exclude_symlink_directories": null,
"excludes": null, "excludes": null,
"id": "0cfb36e4e396f12e3ad2944c44b083bff2224ad5", "id": "89f7ed751d329280db05b2b98b5018b0af9ece39",
"output_base64sha256": "uMoV4IM2IuGcRtqeI7wbu3OsTmvDx1ohDDxkEE5NY9U=", "output_base64sha256": "EJTnhfhxMekptx4HEzFKW+jo7mvd0K/ecHZr4CnvJCQ=",
"output_base64sha512": "BQB+g3lC0+y5vOx6KHh4AWCeHk3D2nmdgE8JrFaiPlCWV6KsrMdANGyKeZ/aFmvGjbFw7MGQD4s0u/tn+viVAA==", "output_base64sha512": "f2NkqpPZp+ZLfUvhzm+er2o5edUW9A6u0RsyKTSngTQs1DCF9OUpEoUgvPE+Pjwg5bZWk4XU1xIlGyuG60GMag==",
"output_file_mode": null, "output_file_mode": null,
"output_md5": "b532cf3ff81d62dd7dec013e486931aa", "output_md5": "7f6e38555ecabf16a324987982823b6e",
"output_path": "./function-source.zip", "output_path": "./function-source.zip",
"output_sha": "0cfb36e4e396f12e3ad2944c44b083bff2224ad5", "output_sha": "89f7ed751d329280db05b2b98b5018b0af9ece39",
"output_sha256": "b8ca15e0833622e19c46da9e23bc1bbb73ac4e6bc3c75a210c3c64104e4d63d5", "output_sha256": "1094e785f87131e929b71e0713314a5be8e8ee6bddd0afde70766be029ef2424",
"output_sha512": "05007e837942d3ecb9bcec7a28787801609e1e4dc3da799d804f09ac56a23e509657a2acacc740346c8a799fda166bc68db170ecc1900f8b34bbfb67faf89500", "output_sha512": "7f6364aa93d9a7e64b7d4be1ce6f9eaf6a3979d516f40eaed11b322934a781342cd43085f4e529128520bcf13e3e3c20e5b6569385d4d712251b2b86eb418c6a",
"output_size": 69764346, "output_size": 3871,
"source": [], "source": [],
"source_content": null, "source_content": null,
"source_content_filename": null, "source_content_filename": null,
@ -115,7 +115,8 @@
"source_file": null, "source_file": null,
"type": "zip" "type": "zip"
}, },
"sensitive_attributes": [] "sensitive_attributes": [],
"identity_schema_version": 0
} }
] ]
}, },
@ -148,7 +149,8 @@
"generative-language": "enabled" "generative-language": "enabled"
} }
}, },
"sensitive_attributes": [] "sensitive_attributes": [],
"identity_schema_version": 0
} }
] ]
}, },
@ -172,7 +174,7 @@
"effective_annotations": { "effective_annotations": {
"run.googleapis.com/ingress": "all", "run.googleapis.com/ingress": "all",
"run.googleapis.com/ingress-status": "all", "run.googleapis.com/ingress-status": "all",
"run.googleapis.com/operation-id": "a9aeb6de-fdd6-43b2-93f8-8b7f72afab4c", "run.googleapis.com/operation-id": "fd6ae30c-0621-41c4-998b-cbf693bd98da",
"run.googleapis.com/urls": "[\"https://contoso-761163285547.us-central1.run.app\",\"https://contoso-p64zpdtkta-uc.a.run.app\"]", "run.googleapis.com/urls": "[\"https://contoso-761163285547.us-central1.run.app\",\"https://contoso-p64zpdtkta-uc.a.run.app\"]",
"serving.knative.dev/creator": "johnpccd3@gmail.com", "serving.knative.dev/creator": "johnpccd3@gmail.com",
"serving.knative.dev/lastModifier": "johnpccd3@gmail.com" "serving.knative.dev/lastModifier": "johnpccd3@gmail.com"
@ -184,12 +186,12 @@
"generation": 1, "generation": 1,
"labels": null, "labels": null,
"namespace": "gen-lang-client-0424120530", "namespace": "gen-lang-client-0424120530",
"resource_version": "AAY19MELEOc", "resource_version": "AAY2DdPXaEU",
"self_link": "/apis/serving.knative.dev/v1/namespaces/761163285547/services/contoso", "self_link": "/apis/serving.knative.dev/v1/namespaces/761163285547/services/contoso",
"terraform_labels": { "terraform_labels": {
"goog-terraform-provisioned": "true" "goog-terraform-provisioned": "true"
}, },
"uid": "8c8be11c-c607-4caa-a65e-c552ec445882" "uid": "d3664fe2-c0fc-40d5-90bd-93904dd237b1"
} }
], ],
"name": "contoso", "name": "contoso",
@ -216,14 +218,14 @@
"type": "RoutesReady" "type": "RoutesReady"
} }
], ],
"latest_created_revision_name": "contoso-00001-z4g", "latest_created_revision_name": "contoso-00001-v79",
"latest_ready_revision_name": "contoso-00001-z4g", "latest_ready_revision_name": "contoso-00001-v79",
"observed_generation": 1, "observed_generation": 1,
"traffic": [ "traffic": [
{ {
"latest_revision": true, "latest_revision": true,
"percent": 100, "percent": 100,
"revision_name": "contoso-00001-z4g", "revision_name": "contoso-00001-v79",
"tag": "", "tag": "",
"url": "" "url": ""
} }
@ -291,7 +293,7 @@
}, },
{ {
"name": "QDRANT_HOST", "name": "QDRANT_HOST",
"value": "35.193.174.125", "value": "35.239.162.50",
"value_from": [] "value_from": []
}, },
{ {
@ -308,16 +310,6 @@
"name": "QDRANT_PREFER_GRPC", "name": "QDRANT_PREFER_GRPC",
"value": "false", "value": "false",
"value_from": [] "value_from": []
},
{
"name": "VECTOR_DB_ENVIRONMENT",
"value": "gcp-starter",
"value_from": []
},
{
"name": "VECTOR_DB_INDEX_NAME",
"value": "image-embeddings",
"value_from": []
} }
], ],
"env_from": [], "env_from": [],
@ -379,47 +371,8 @@
} }
] ]
}, },
"sensitive_attributes": [ "sensitive_attributes": [],
[ "identity_schema_version": 0,
{
"type": "get_attr",
"value": "template"
},
{
"type": "index",
"value": {
"value": 0,
"type": "number"
}
},
{
"type": "get_attr",
"value": "spec"
},
{
"type": "index",
"value": {
"value": 0,
"type": "number"
}
},
{
"type": "get_attr",
"value": "containers"
},
{
"type": "index",
"value": {
"value": 0,
"type": "number"
}
},
{
"type": "get_attr",
"value": "env"
}
]
],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMiJ9", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMiJ9",
"dependencies": [ "dependencies": [
"google_compute_address.vector_db_static_ip", "google_compute_address.vector_db_static_ip",
@ -440,7 +393,7 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY19MG70Fs=", "etag": "BwY2DdQrt9Y=",
"id": "v1/projects/gen-lang-client-0424120530/locations/us-central1/services/contoso/roles/run.invoker/allUsers", "id": "v1/projects/gen-lang-client-0424120530/locations/us-central1/services/contoso/roles/run.invoker/allUsers",
"location": "us-central1", "location": "us-central1",
"member": "allUsers", "member": "allUsers",
@ -449,6 +402,7 @@
"service": "v1/projects/gen-lang-client-0424120530/locations/us-central1/services/contoso" "service": "v1/projects/gen-lang-client-0424120530/locations/us-central1/services/contoso"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"google_cloud_run_service.contoso", "google_cloud_run_service.contoso",
@ -474,7 +428,7 @@
"automatic_update_policy": [ "automatic_update_policy": [
{} {}
], ],
"build": "projects/761163285547/locations/us-central1/builds/ae88c918-6bb3-4aef-a56f-270f48f73049", "build": "projects/761163285547/locations/us-central1/builds/08578917-6013-4d38-9c9e-6cf438f1cbd4",
"docker_repository": "projects/gen-lang-client-0424120530/locations/us-central1/repositories/gcf-artifacts", "docker_repository": "projects/gen-lang-client-0424120530/locations/us-central1/repositories/gcf-artifacts",
"entry_point": "process_image_embedding", "entry_point": "process_image_embedding",
"environment_variables": {}, "environment_variables": {},
@ -487,8 +441,8 @@
"storage_source": [ "storage_source": [
{ {
"bucket": "gen-lang-client-0424120530-cloud-function-source", "bucket": "gen-lang-client-0424120530-cloud-function-source",
"generation": 1748175166697242, "generation": 1748186294324568,
"object": "function-source-b532cf3ff81d62dd7dec013e486931aa.zip" "object": "function-source-7f6e38555ecabf16a324987982823b6e.zip"
} }
] ]
} }
@ -508,13 +462,13 @@
"pubsub_topic": "projects/gen-lang-client-0424120530/topics/image-processing-topic", "pubsub_topic": "projects/gen-lang-client-0424120530/topics/image-processing-topic",
"retry_policy": "RETRY_POLICY_RETRY", "retry_policy": "RETRY_POLICY_RETRY",
"service_account_email": "761163285547-compute@developer.gserviceaccount.com", "service_account_email": "761163285547-compute@developer.gserviceaccount.com",
"trigger": "projects/gen-lang-client-0424120530/locations/us-central1/triggers/process-image-embedding-645734", "trigger": "projects/gen-lang-client-0424120530/locations/us-central1/triggers/process-image-embedding-093029",
"trigger_region": "us-central1" "trigger_region": "us-central1"
} }
], ],
"id": "projects/gen-lang-client-0424120530/locations/us-central1/functions/process-image-embedding", "id": "projects/gen-lang-client-0424120530/locations/us-central1/functions/process-image-embedding",
"kms_key_name": "", "kms_key_name": "",
"labels": null, "labels": {},
"location": "us-central1", "location": "us-central1",
"name": "process-image-embedding", "name": "process-image-embedding",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
@ -534,7 +488,7 @@
"PROJECT_ID": "gen-lang-client-0424120530", "PROJECT_ID": "gen-lang-client-0424120530",
"QDRANT_API_KEY": "", "QDRANT_API_KEY": "",
"QDRANT_COLLECTION": "image_vectors", "QDRANT_COLLECTION": "image_vectors",
"QDRANT_HOST": "35.193.174.125", "QDRANT_HOST": "35.239.162.50",
"QDRANT_HTTPS": "false", "QDRANT_HTTPS": "false",
"QDRANT_PORT": "6333", "QDRANT_PORT": "6333",
"VERTEX_AI_LOCATION": "us-central1" "VERTEX_AI_LOCATION": "us-central1"
@ -559,35 +513,11 @@
"goog-terraform-provisioned": "true" "goog-terraform-provisioned": "true"
}, },
"timeouts": null, "timeouts": null,
"update_time": "2025-05-25T12:15:22.215124150Z", "update_time": "2025-05-26T17:37:44.525533692Z",
"url": "https://us-central1-gen-lang-client-0424120530.cloudfunctions.net/process-image-embedding" "url": "https://us-central1-gen-lang-client-0424120530.cloudfunctions.net/process-image-embedding"
}, },
"sensitive_attributes": [ "sensitive_attributes": [],
[ "identity_schema_version": 0,
{
"type": "get_attr",
"value": "service_config"
},
{
"type": "index",
"value": {
"value": 0,
"type": "number"
}
},
{
"type": "get_attr",
"value": "environment_variables"
},
{
"type": "index",
"value": {
"value": "QDRANT_API_KEY",
"type": "string"
}
}
]
],
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozNjAwMDAwMDAwMDAwLCJkZWxldGUiOjM2MDAwMDAwMDAwMDAsInVwZGF0ZSI6MzYwMDAwMDAwMDAwMH19", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozNjAwMDAwMDAwMDAwLCJkZWxldGUiOjM2MDAwMDAwMDAwMDAsInVwZGF0ZSI6MzYwMDAwMDAwMDAwMH19",
"dependencies": [ "dependencies": [
"data.archive_file.function_source", "data.archive_file.function_source",
@ -621,7 +551,7 @@
"protocol": "tcp" "protocol": "tcp"
} }
], ],
"creation_timestamp": "2025-05-24T14:09:17.159-07:00", "creation_timestamp": "2025-05-26T10:30:31.215-07:00",
"deny": [], "deny": [],
"description": "", "description": "",
"destination_ranges": [], "destination_ranges": [],
@ -648,6 +578,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9"
} }
] ]
@ -711,7 +642,7 @@
"can_ip_forward": false, "can_ip_forward": false,
"confidential_instance_config": [], "confidential_instance_config": [],
"cpu_platform": "Intel Broadwell", "cpu_platform": "Intel Broadwell",
"creation_timestamp": "2025-05-25T03:58:31.230-07:00", "creation_timestamp": "2025-05-26T10:30:45.304-07:00",
"current_status": "RUNNING", "current_status": "RUNNING",
"deletion_protection": false, "deletion_protection": false,
"description": "", "description": "",
@ -724,7 +655,7 @@
"hostname": "", "hostname": "",
"id": "projects/gen-lang-client-0424120530/zones/us-central1-a/instances/contoso-vector-db", "id": "projects/gen-lang-client-0424120530/zones/us-central1-a/instances/contoso-vector-db",
"instance_encryption_key": [], "instance_encryption_key": [],
"instance_id": "3665939918038714681", "instance_id": "7202785867853274026",
"key_revocation_action_type": "", "key_revocation_action_type": "",
"label_fingerprint": "vezUS-42LLM=", "label_fingerprint": "vezUS-42LLM=",
"labels": {}, "labels": {},
@ -738,7 +669,7 @@
{ {
"access_config": [ "access_config": [
{ {
"nat_ip": "35.193.174.125", "nat_ip": "35.239.162.50",
"network_tier": "PREMIUM", "network_tier": "PREMIUM",
"public_ptr_domain_name": "" "public_ptr_domain_name": ""
} }
@ -751,7 +682,7 @@
"name": "nic0", "name": "nic0",
"network": "https://www.googleapis.com/compute/v1/projects/gen-lang-client-0424120530/global/networks/default", "network": "https://www.googleapis.com/compute/v1/projects/gen-lang-client-0424120530/global/networks/default",
"network_attachment": "", "network_attachment": "",
"network_ip": "10.128.0.7", "network_ip": "10.128.0.10",
"nic_type": "", "nic_type": "",
"queue_count": 0, "queue_count": 0,
"stack_type": "IPV4_ONLY", "stack_type": "IPV4_ONLY",
@ -823,7 +754,7 @@
}, },
{ {
"type": "get_attr", "type": "get_attr",
"value": "disk_encryption_key_rsa" "value": "disk_encryption_key_raw"
} }
], ],
[ [
@ -840,16 +771,11 @@
}, },
{ {
"type": "get_attr", "type": "get_attr",
"value": "disk_encryption_key_raw" "value": "disk_encryption_key_rsa"
}
],
[
{
"type": "get_attr",
"value": "metadata_startup_script"
} }
] ]
], ],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiNiJ9", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiNiJ9",
"dependencies": [ "dependencies": [
"google_compute_address.vector_db_static_ip", "google_compute_address.vector_db_static_ip",
@ -875,8 +801,8 @@
"database_edition": "STANDARD", "database_edition": "STANDARD",
"delete_protection_state": "DELETE_PROTECTION_DISABLED", "delete_protection_state": "DELETE_PROTECTION_DISABLED",
"deletion_policy": "ABANDON", "deletion_policy": "ABANDON",
"earliest_version_time": "2025-05-25T11:12:43.126081Z", "earliest_version_time": "2025-05-26T17:30:34.654251Z",
"etag": "IPjb6fzLvo0DMKrW4vCEvY0D", "etag": "IInb+u7cwY0DMLiE6qfXwY0D",
"id": "projects/gen-lang-client-0424120530/databases/contoso-imagedb", "id": "projects/gen-lang-client-0424120530/databases/contoso-imagedb",
"key_prefix": "", "key_prefix": "",
"location_id": "us-central1", "location_id": "us-central1",
@ -885,11 +811,12 @@
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"timeouts": null, "timeouts": null,
"type": "FIRESTORE_NATIVE", "type": "FIRESTORE_NATIVE",
"uid": "f4aa945b-2205-4f94-b903-57815519f2fc", "uid": "1b80214d-7fd4-4c54-9542-729c7225ed1f",
"update_time": "", "update_time": "",
"version_retention_period": "3600s" "version_retention_period": "3600s"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19",
"dependencies": [ "dependencies": [
"google_project_service.services" "google_project_service.services"
@ -907,13 +834,14 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY16WAsDU4=", "etag": "BwY2DU48jAs=",
"id": "gen-lang-client-0424120530/roles/eventarc.eventReceiver/serviceAccount:761163285547-compute@developer.gserviceaccount.com", "id": "gen-lang-client-0424120530/roles/eventarc.eventReceiver/serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com", "member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"role": "roles/eventarc.eventReceiver" "role": "roles/eventarc.eventReceiver"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"data.google_project.current" "data.google_project.current"
@ -931,13 +859,14 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY16WAsDU4=", "etag": "BwY2DU48jAs=",
"id": "gen-lang-client-0424120530/roles/datastore.user/serviceAccount:761163285547-compute@developer.gserviceaccount.com", "id": "gen-lang-client-0424120530/roles/datastore.user/serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com", "member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"role": "roles/datastore.user" "role": "roles/datastore.user"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"data.google_project.current" "data.google_project.current"
@ -955,13 +884,14 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY16WAsDU4=", "etag": "BwY2DU48jAs=",
"id": "gen-lang-client-0424120530/roles/pubsub.subscriber/serviceAccount:761163285547-compute@developer.gserviceaccount.com", "id": "gen-lang-client-0424120530/roles/pubsub.subscriber/serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com", "member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"role": "roles/pubsub.subscriber" "role": "roles/pubsub.subscriber"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"data.google_project.current" "data.google_project.current"
@ -979,13 +909,14 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY16WAsDU4=", "etag": "BwY2DU48jAs=",
"id": "gen-lang-client-0424120530/roles/storage.objectViewer/serviceAccount:761163285547-compute@developer.gserviceaccount.com", "id": "gen-lang-client-0424120530/roles/storage.objectViewer/serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com", "member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"role": "roles/storage.objectViewer" "role": "roles/storage.objectViewer"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"data.google_project.current" "data.google_project.current"
@ -1003,13 +934,14 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY16WAsDU4=", "etag": "BwY2DU48jAs=",
"id": "gen-lang-client-0424120530/roles/aiplatform.user/serviceAccount:761163285547-compute@developer.gserviceaccount.com", "id": "gen-lang-client-0424120530/roles/aiplatform.user/serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com", "member": "serviceAccount:761163285547-compute@developer.gserviceaccount.com",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"role": "roles/aiplatform.user" "role": "roles/aiplatform.user"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"data.google_project.current" "data.google_project.current"
@ -1035,6 +967,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1049,6 +982,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1063,6 +997,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1077,6 +1012,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1091,6 +1027,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1105,6 +1042,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1119,6 +1057,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1133,6 +1072,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1147,6 +1087,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1161,6 +1102,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
}, },
{ {
@ -1175,6 +1117,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0="
} }
] ]
@ -1228,6 +1171,7 @@
"topic": "projects/gen-lang-client-0424120530/topics/image-processing-topic-dlq" "topic": "projects/gen-lang-client-0424120530/topics/image-processing-topic-dlq"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19",
"dependencies": [ "dependencies": [
"google_pubsub_topic.image_processing_dlq" "google_pubsub_topic.image_processing_dlq"
@ -1272,6 +1216,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19"
} }
] ]
@ -1313,6 +1258,7 @@
"timeouts": null "timeouts": null
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19"
} }
] ]
@ -1327,7 +1273,7 @@
"schema_version": 0, "schema_version": 0,
"attributes": { "attributes": {
"condition": [], "condition": [],
"etag": "BwY16CEHGDA=", "etag": "BwY2DU48nbo=",
"id": "projects/gen-lang-client-0424120530/topics/image-processing-topic/roles/pubsub.publisher", "id": "projects/gen-lang-client-0424120530/topics/image-processing-topic/roles/pubsub.publisher",
"members": [ "members": [
"serviceAccount:761163285547-compute@developer.gserviceaccount.com" "serviceAccount:761163285547-compute@developer.gserviceaccount.com"
@ -1337,6 +1283,7 @@
"topic": "projects/gen-lang-client-0424120530/topics/image-processing-topic" "topic": "projects/gen-lang-client-0424120530/topics/image-processing-topic"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "bnVsbA==", "private": "bnVsbA==",
"dependencies": [ "dependencies": [
"data.google_project.current", "data.google_project.current",
@ -1365,9 +1312,10 @@
"name": "projects/gen-lang-client-0424120530/serviceAccounts/vector-db-sa@gen-lang-client-0424120530.iam.gserviceaccount.com", "name": "projects/gen-lang-client-0424120530/serviceAccounts/vector-db-sa@gen-lang-client-0424120530.iam.gserviceaccount.com",
"project": "gen-lang-client-0424120530", "project": "gen-lang-client-0424120530",
"timeouts": null, "timeouts": null,
"unique_id": "115648202672357296665" "unique_id": "118261137128240596892"
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozMDAwMDAwMDAwMDB9fQ==" "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozMDAwMDAwMDAwMDB9fQ=="
} }
] ]
@ -1411,7 +1359,7 @@
"self_link": "https://www.googleapis.com/storage/v1/b/contoso-images", "self_link": "https://www.googleapis.com/storage/v1/b/contoso-images",
"soft_delete_policy": [ "soft_delete_policy": [
{ {
"effective_time": "2025-05-24T21:09:21.315Z", "effective_time": "2025-05-26T17:30:31.355Z",
"retention_duration_seconds": 604800 "retention_duration_seconds": 604800
} }
], ],
@ -1419,15 +1367,16 @@
"terraform_labels": { "terraform_labels": {
"goog-terraform-provisioned": "true" "goog-terraform-provisioned": "true"
}, },
"time_created": "2025-05-24T21:09:21.315Z", "time_created": "2025-05-26T17:30:31.355Z",
"timeouts": null, "timeouts": null,
"uniform_bucket_level_access": true, "uniform_bucket_level_access": true,
"updated": "2025-05-24T21:09:21.315Z", "updated": "2025-05-26T17:30:31.355Z",
"url": "gs://contoso-images", "url": "gs://contoso-images",
"versioning": [], "versioning": [],
"website": [] "website": []
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsInJlYWQiOjI0MDAwMDAwMDAwMCwidXBkYXRlIjoyNDAwMDAwMDAwMDB9LCJzY2hlbWFfdmVyc2lvbiI6IjMifQ==", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsInJlYWQiOjI0MDAwMDAwMDAwMCwidXBkYXRlIjoyNDAwMDAwMDAwMDB9LCJzY2hlbWFfdmVyc2lvbiI6IjMifQ==",
"dependencies": [ "dependencies": [
"google_project_service.services" "google_project_service.services"
@ -1474,7 +1423,7 @@
"self_link": "https://www.googleapis.com/storage/v1/b/gen-lang-client-0424120530-cloud-function-source", "self_link": "https://www.googleapis.com/storage/v1/b/gen-lang-client-0424120530-cloud-function-source",
"soft_delete_policy": [ "soft_delete_policy": [
{ {
"effective_time": "2025-05-24T21:47:35.399Z", "effective_time": "2025-05-26T17:30:31.392Z",
"retention_duration_seconds": 604800 "retention_duration_seconds": 604800
} }
], ],
@ -1482,15 +1431,16 @@
"terraform_labels": { "terraform_labels": {
"goog-terraform-provisioned": "true" "goog-terraform-provisioned": "true"
}, },
"time_created": "2025-05-24T21:47:35.399Z", "time_created": "2025-05-26T17:30:31.392Z",
"timeouts": null, "timeouts": null,
"uniform_bucket_level_access": true, "uniform_bucket_level_access": true,
"updated": "2025-05-24T21:47:35.399Z", "updated": "2025-05-26T17:30:31.392Z",
"url": "gs://gen-lang-client-0424120530-cloud-function-source", "url": "gs://gen-lang-client-0424120530-cloud-function-source",
"versioning": [], "versioning": [],
"website": [] "website": []
}, },
"sensitive_attributes": [], "sensitive_attributes": [],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsInJlYWQiOjI0MDAwMDAwMDAwMCwidXBkYXRlIjoyNDAwMDAwMDAwMDB9LCJzY2hlbWFfdmVyc2lvbiI6IjMifQ==", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsInJlYWQiOjI0MDAwMDAwMDAwMCwidXBkYXRlIjoyNDAwMDAwMDAwMDB9LCJzY2hlbWFfdmVyc2lvbiI6IjMifQ==",
"dependencies": [ "dependencies": [
"google_project_service.services" "google_project_service.services"
@ -1514,21 +1464,21 @@
"content_encoding": "", "content_encoding": "",
"content_language": "", "content_language": "",
"content_type": "application/zip", "content_type": "application/zip",
"crc32c": "EgiVnQ==", "crc32c": "aWG2+g==",
"customer_encryption": [], "customer_encryption": [],
"detect_md5hash": "tTLPP/gdYt197AE+SGkxqg==", "detect_md5hash": "f244VV7KvxajJJh5goI7bg==",
"event_based_hold": false, "event_based_hold": false,
"generation": 1748174860755303, "generation": 1748280633915865,
"id": "gen-lang-client-0424120530-cloud-function-source-function-source-b532cf3ff81d62dd7dec013e486931aa.zip", "id": "gen-lang-client-0424120530-cloud-function-source-function-source-7f6e38555ecabf16a324987982823b6e.zip",
"kms_key_name": "", "kms_key_name": "",
"md5hash": "tTLPP/gdYt197AE+SGkxqg==", "md5hash": "f244VV7KvxajJJh5goI7bg==",
"md5hexhash": "b532cf3ff81d62dd7dec013e486931aa", "md5hexhash": "7f6e38555ecabf16a324987982823b6e",
"media_link": "https://storage.googleapis.com/download/storage/v1/b/gen-lang-client-0424120530-cloud-function-source/o/function-source-b532cf3ff81d62dd7dec013e486931aa.zip?generation=1748174860755303\u0026alt=media", "media_link": "https://storage.googleapis.com/download/storage/v1/b/gen-lang-client-0424120530-cloud-function-source/o/function-source-7f6e38555ecabf16a324987982823b6e.zip?generation=1748280633915865\u0026alt=media",
"metadata": {}, "metadata": {},
"name": "function-source-b532cf3ff81d62dd7dec013e486931aa.zip", "name": "function-source-7f6e38555ecabf16a324987982823b6e.zip",
"output_name": "function-source-b532cf3ff81d62dd7dec013e486931aa.zip", "output_name": "function-source-7f6e38555ecabf16a324987982823b6e.zip",
"retention": [], "retention": [],
"self_link": "https://www.googleapis.com/storage/v1/b/gen-lang-client-0424120530-cloud-function-source/o/function-source-b532cf3ff81d62dd7dec013e486931aa.zip", "self_link": "https://www.googleapis.com/storage/v1/b/gen-lang-client-0424120530-cloud-function-source/o/function-source-7f6e38555ecabf16a324987982823b6e.zip",
"source": "./function-source.zip", "source": "./function-source.zip",
"storage_class": "STANDARD", "storage_class": "STANDARD",
"temporary_hold": false, "temporary_hold": false,
@ -1542,6 +1492,7 @@
} }
] ]
], ],
"identity_schema_version": 0,
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoyNDAwMDAwMDAwMDAsImRlbGV0ZSI6MjQwMDAwMDAwMDAwLCJ1cGRhdGUiOjI0MDAwMDAwMDAwMH19", "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoyNDAwMDAwMDAwMDAsImRlbGV0ZSI6MjQwMDAwMDAwMDAwLCJ1cGRhdGUiOjI0MDAwMDAwMDAwMH19",
"dependencies": [ "dependencies": [
"data.archive_file.function_source", "data.archive_file.function_source",

View File

@ -1,15 +1,7 @@
project_id = "your-gcp-project-id" project_id = "gen-lang-client-0424120530"
region = "us-central1" region = "us-central1"
zone = "us-central1-a" zone = "us-central1-a"
storage_bucket_name = "your-app-storage-bucket" storage_bucket_name = "contoso-images"
firestore_db_name = "contoso-imagedb" firestore_db_name = "contoso-imagedb"
cloud_run_service_account = "service-account@gen-lang-client-xxx.iam.gserviceaccount.com"
# Vector Database Configuration cloud_function_service_account = "service-account@gen-lang-client-xxx.iam.gserviceaccount.com"
qdrant_api_key = "your-secure-api-key-here" # Optional: leave empty for no authentication
allowed_cidr_blocks = "YOUR_IP_ADDRESS/32" # Replace with your IP or network range
use_static_ip = false # Set to true if you want a static IP
# Secret Configuration (all optional - random values will be generated if not provided)
api_key_secret = "" # Optional: will generate random key if empty
gcs_credentials_json = "" # Optional: JSON content of GCS service account key
firestore_credentials_json = "" # Optional: JSON content of Firestore service account key

View File

@ -54,7 +54,6 @@ variable "cloud_function_service_account" {
variable "qdrant_api_key" { variable "qdrant_api_key" {
description = "API key for Qdrant vector database" description = "API key for Qdrant vector database"
type = string type = string
sensitive = true
default = "" default = ""
} }

View File

@ -1,256 +0,0 @@
# Build and Deployment Scripts
This directory contains scripts for building and deploying the Contoso API application.
## Prerequisites
- Docker installed and running
- For deployment: access to a container registry (e.g., DockerHub, Google Container Registry)
- For Cloud Run deployment: Google Cloud SDK (`gcloud`) installed and configured
## Scripts
### Build Script (`build.sh`)
Builds the Docker image for the Contoso API.
**Usage:**
```bash
# Basic usage (builds with default settings)
./scripts/build.sh
# Customize the image name
IMAGE_NAME=my-custom-name ./scripts/build.sh
# Customize the image tag
IMAGE_TAG=v1.0.0 ./scripts/build.sh
# Use a custom registry
REGISTRY=gcr.io/my-project ./scripts/build.sh
```
**Environment Variables:**
- `IMAGE_NAME`: Name for the Docker image (default: "contoso-api")
- `IMAGE_TAG`: Tag for the Docker image (default: "latest")
- `REGISTRY`: Container registry to use (default: empty, using DockerHub)
### Deploy Script (`deploy.sh`)
Pushes the built Docker image to a container registry and optionally deploys to Google Cloud Run.
**Usage:**
```bash
# Push to registry only
./scripts/deploy.sh
# Push to registry and deploy to Cloud Run
DEPLOY_TO_CLOUD_RUN=true PROJECT_ID=my-project-id ./scripts/deploy.sh
# Customize deployment settings
DEPLOY_TO_CLOUD_RUN=true PROJECT_ID=my-project-id REGION=us-west1 SERVICE_NAME=my-api ./scripts/deploy.sh
```
**Environment Variables:**
All variables from the build script, plus:
- `PROJECT_ID`: Google Cloud project ID (required for Cloud Run deployment)
- `REGION`: Google Cloud region (default: "us-central1")
- `SERVICE_NAME`: Name for the Cloud Run service (default: "contoso-api")
### Cloud Run Deployment Script (`deploy-to-cloud-run.sh`)
Deploys the application to Google Cloud Run using the service configuration file.
**Usage:**
```bash
# Deploy using existing service.yaml
PROJECT_ID=my-project-id ./scripts/deploy-to-cloud-run.sh
# Build, push, and deploy in one command
PROJECT_ID=my-project-id BUILD=true PUSH=true ./scripts/deploy-to-cloud-run.sh
# Customize the deployment
PROJECT_ID=my-project-id REGION=us-west1 IMAGE_TAG=v1.0.0 ./scripts/deploy-to-cloud-run.sh
```
**Environment Variables:**
- `PROJECT_ID`: Google Cloud project ID (required)
- `REGION`: Google Cloud region (default: "us-central1")
- `SERVICE_CONFIG`: Path to the service configuration file (default: "deployment/cloud-run/service.yaml")
- `IMAGE_NAME`: Name for the Docker image (default: "contoso-api")
- `IMAGE_TAG`: Tag for the Docker image (default: "latest")
- `REGISTRY`: Container registry to use (default: "gcr.io")
- `BUILD`: Set to "true" to build the image before deployment (default: "false")
- `PUSH`: Set to "true" to push the image before deployment (default: "false")
### Frontend Client Script (`client.sh`)
Manages the Contoso frontend client development, building, and deployment.
**Usage:**
```bash
# Start development server
./scripts/client.sh dev
# or
./scripts/client.sh serve
# Build production files
./scripts/client.sh build
# Deploy to static hosting
DEPLOY_TARGET=netlify ./scripts/client.sh deploy
# Clean build artifacts
./scripts/client.sh clean
# Install dependencies
./scripts/client.sh install
# Check code quality
./scripts/client.sh lint
# Run tests
./scripts/client.sh test
# Show help
./scripts/client.sh help
```
**Environment Variables:**
- `PORT`: Development server port (default: 8080)
- `HOST`: Development server host (default: localhost)
- `DEPLOY_TARGET`: Deployment target - netlify, vercel, s3, github, or manual (default: manual)
- `S3_BUCKET`: S3 bucket name (required for S3 deployment)
**Features:**
- **Development Server**: Starts a local HTTP server with CORS headers for frontend development
- **Production Build**: Creates optimized production files in `dist/` directory
- **Multiple Deployment Options**: Supports Netlify, Vercel, AWS S3, GitHub Pages, and manual deployment
- **Code Quality**: Integrates with ESLint, Stylelint, and HTML Tidy (if installed)
- **Dependency Management**: Handles Python virtual environment setup
- **Clean Build**: Removes build artifacts and cache files
**Deployment Targets:**
- `netlify`: Deploy using Netlify CLI
- `vercel`: Deploy using Vercel CLI
- `s3`: Deploy to AWS S3 bucket (requires AWS CLI and S3_BUCKET env var)
- `github`: Shows instructions for GitHub Pages deployment
- `manual`: Shows manual deployment instructions
## Example Workflows
### Basic workflow:
```bash
# Build and tag with version
IMAGE_TAG=v1.0.0 ./scripts/build.sh
# Deploy to Cloud Run
DEPLOY_TO_CLOUD_RUN=true PROJECT_ID=my-project-id IMAGE_TAG=v1.0.0 ./scripts/deploy.sh
```
### Using the Cloud Run config file:
```bash
# Build and deploy in one step
PROJECT_ID=my-project-id BUILD=true PUSH=true ./scripts/deploy-to-cloud-run.sh
```
### Frontend Development Workflow:
```bash
# Install dependencies
./scripts/client.sh install
# Start development server
./scripts/client.sh dev
# Build for production
./scripts/client.sh build
# Deploy to Netlify
DEPLOY_TARGET=netlify ./scripts/client.sh deploy
```
# Scripts Documentation
This directory contains utility scripts for the CONTOSO application.
## Database Seeding Scripts
### `seed_firestore.py`
This script initializes and seeds a Google Cloud Firestore database with initial data for the CONTOSO application. It creates teams, users, API keys, and sample image metadata.
#### Requirements
- Google Cloud project with Firestore enabled
- Google Cloud credentials configured on your machine
- Python 3.8+
- Required Python packages (listed in `requirements.txt`)
#### Setup
1. Make sure you have the Google Cloud SDK installed and configured with access to your project:
```bash
gcloud auth login
gcloud config set project YOUR_PROJECT_ID
```
2. If not using application default credentials, create a service account key file:
```bash
gcloud iam service-accounts create contoso-app
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID --member="serviceAccount:contoso-app@YOUR_PROJECT_ID.iam.gserviceaccount.com" --role="roles/datastore.user"
gcloud iam service-accounts keys create credentials.json --iam-account=contoso-app@YOUR_PROJECT_ID.iam.gserviceaccount.com
```
3. Set environment variables:
```bash
# Windows (CMD)
set DATABASE_TYPE=firestore
set GCS_CREDENTIALS_FILE=path/to/credentials.json
# Windows (PowerShell)
$env:DATABASE_TYPE="firestore"
$env:GCS_CREDENTIALS_FILE="path/to/credentials.json"
# Linux/macOS
export DATABASE_TYPE=firestore
export GCS_CREDENTIALS_FILE=path/to/credentials.json
```
#### Usage
Run the seeding script from the project root directory:
```bash
# Activate the Python virtual environment
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
# Run the script
python scripts/seed_firestore.py
```
#### Generated Data
The script will create the following data:
1. **Teams**:
- Contoso Development
- Marketing Team
- Customer Support
2. **Users**:
- Admin User (team: Contoso Development)
- Developer User (team: Contoso Development)
- Marketing User (team: Marketing Team)
- Support User (team: Customer Support)
3. **API Keys**:
- One API key per user (the keys will be output to the console, save them securely)
4. **Images**:
- Sample image metadata (3 images, one for each team)
#### Notes
- The script logs the generated API keys to the console. Save these keys somewhere secure as they won't be displayed again.
- If you need to re-run the script with existing data, use the `--force` flag to overwrite existing data.
- This script only creates metadata entries for images - it does not upload actual files to Google Cloud Storage.