diff --git a/.github/workflows/terraform-gcp.yml b/.github/workflows/terraform-gcp.yml new file mode 100644 index 0000000..b5c8594 --- /dev/null +++ b/.github/workflows/terraform-gcp.yml @@ -0,0 +1,56 @@ +name: Terraform GCP Deployment + +on: + push: + branches: [ feat/terraform-setup-init ] + # paths: + # - 'infra/envs/dev/**' + pull_request: + branches: [ feat/terraform-setup-init ] + # paths: + # - 'infra/envs/dev/**' + +env: + TF_WORKSPACE: dev + WORKING_DIRECTORY: infra/envs/dev + +jobs: + terraform: + name: Terraform + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Auth to GCP + uses: google-github-actions/auth@v2 + with: + credentials_json: ${{ secrets.GCP_SA_KEY }} + + - name: Setup Terraform + uses: hashicorp/setup-terraform@v3 + with: + terraform_version: "1.7.0" + + - name: Terraform Format + working-directory: ${{ env.WORKING_DIRECTORY }} + run: terraform fmt -check + + - name: Terraform Init + working-directory: ${{ env.WORKING_DIRECTORY }} + run: terraform init + + - name: Terraform Plan + working-directory: ${{ env.WORKING_DIRECTORY }} + # if: github.event_name == 'pull_request' + run: terraform plan -no-color + continue-on-error: true + + - name: Terraform Apply + working-directory: ${{ env.WORKING_DIRECTORY }} + # if: github.ref == 'refs/heads/main' && github.event_name == 'push' + run: terraform apply -auto-approve \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7c62574..a48fef9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,7 @@ backend/credentials/* # Env files -.env \ No newline at end of file +.env + +# Terraform files +.terraform/ \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile index 6b2846b..420a538 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -9,4 +9,4 @@ COPY . . RUN deno cache main.ts -CMD ["run", "--allow-net", "--allow-read", "--allow-env", "--allow-write", "main.ts"] \ No newline at end of file +CMD ["run", "--allow-net", "--allow-read", "--allow-env", "--allow-write", "--allow-sys", "main.ts"] \ No newline at end of file diff --git a/backend/config.ts b/backend/config.ts index c06bf28..a49d569 100644 --- a/backend/config.ts +++ b/backend/config.ts @@ -13,10 +13,6 @@ export const config = { secret: Deno.env.get("SESSION_SECRET") || "your-secret-key", }, postgres: { - user: Deno.env.get("POSTGRES_USER") || "postgres", - password: Deno.env.get("POSTGRES_PASSWORD") || "postgres", - db: Deno.env.get("POSTGRES_DB") || "postgres", - host: Deno.env.get("POSTGRES_HOST") || "database", - port: parseInt(Deno.env.get("POSTGRES_PORT") || "5432"), + connectionString: Deno.env.get("POSTGRES_CONNECTION_STRING") || "", }, }; diff --git a/backend/db/index.ts b/backend/db/index.ts index 724c488..eaaa4b8 100644 --- a/backend/db/index.ts +++ b/backend/db/index.ts @@ -21,11 +21,7 @@ export interface Queries { export async function DB(): Promise { const { Pool } = pg; const pool = new Pool({ - user: config.postgres.user, - password: config.postgres.password, - host: config.postgres.host, - port: config.postgres.port, - database: config.postgres.db, + connectionString: config.postgres.connectionString, }); const client = await pool.connect(); diff --git a/backend/docker.sh b/backend/docker.sh new file mode 100644 index 0000000..3421ad2 --- /dev/null +++ b/backend/docker.sh @@ -0,0 +1,12 @@ +#!/bin/bash +if [ "$1" == "dev" ]; then + ENV="dev" +elif [ "$1" == "prod" ]; then + ENV="prod" +else + echo "Invalid environment: $1" + exit 1 +fi + +docker buildx build --platform linux/amd64 -t europe-west1-docker.pkg.dev/driplet-core-$ENV/driplet-repository/driplet:latest . +docker push europe-west1-docker.pkg.dev/driplet-core-$ENV/driplet-repository/driplet:latest diff --git a/backend/handlers/collect.ts b/backend/handlers/collect.ts index 288399b..1eacd05 100644 --- a/backend/handlers/collect.ts +++ b/backend/handlers/collect.ts @@ -1,5 +1,5 @@ import { express, STATUS_CODE } from "../deps.ts"; -import { publishMessage, type EventMessage } from "../pubsub/pubsub.ts"; +import { type EventMessage, publishMessage } from "../pubsub/pubsub.ts"; import { PubSub } from "npm:@google-cloud/pubsub@4.1.0"; import { config } from "../config.ts"; import { Buffer } from "node:buffer"; @@ -19,16 +19,16 @@ export async function POST_collect( ) { const { event } = req.body; - if (!event || typeof event !== 'object') { - res.status(STATUS_CODE.BadRequest).send({ - message: "Event is required and must be an object" + if (!event || typeof event !== "object") { + res.status(STATUS_CODE.BadRequest).send({ + message: "Event is required and must be an object", }); return; } if (!req.user?.id) { - res.status(STATUS_CODE.Unauthorized).send({ - message: "User must be authenticated" + res.status(STATUS_CODE.Unauthorized).send({ + message: "User must be authenticated", }); return; } @@ -41,12 +41,13 @@ export async function POST_collect( try { const messageId = await publishMessage(messageData); - res.status(STATUS_CODE.OK).send({ + res.status(STATUS_CODE.OK).send({ message: "Event collected successfully", messageId, }); + return; } catch (error) { - l.error('Failed to publish message:', { + l.error("Failed to publish message:", { error: error.message, event: messageData, }); @@ -55,9 +56,4 @@ export async function POST_collect( }); return; } - - res.status(STATUS_CODE.InternalServerError).send({ - message: "Failed to collect event", - error: error.message, - }); -} \ No newline at end of file +} diff --git a/infra/envs/dev/.terraform.lock.hcl b/infra/envs/dev/.terraform.lock.hcl new file mode 100644 index 0000000..d6a2ae9 --- /dev/null +++ b/infra/envs/dev/.terraform.lock.hcl @@ -0,0 +1,80 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/google" { + version = "6.9.0" + constraints = "6.9.0" + hashes = [ + "h1:KUDx+m/KfVYyqsZDf0/h9JpWSFZXPWF+2rn37DBEC58=", + "zh:53e9d7ffed63e2accff949ac7ca348d03be3e404e0b18c93ec596bcb52bac97a", + "zh:6cbaf7e40fba2cff3d3fe4b3213de81c6157e327e996febad6949949b104b6ae", + "zh:74562331eae7c88a8f934eb05971c361081c6e23d7a4564d1b11206558c037ed", + "zh:ac65f1507886d92858ddeeff710c7dab942437c7421c63c1c7aeb139f2bb44af", + "zh:b4a562b7c497661cd6c972097fea12449f183bb7e11bf6c62a750cc97bd3407e", + "zh:b9cdc22e59c47604492bdf3e4d123037e2f5dd0f8a0ec0cf0b81fda165dd8581", + "zh:c3f146d739b88de32339fb0091898bc9ad0aa3b257c8db4526076476c78e467a", + "zh:c7567999d7563913360598bca4c9fce59f43e3a45726da4fa3f6d2752469c486", + "zh:f3451c149844709713301641a5a2cfbf8add4abda927a457c5a2d67fa565887b", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:f7df50451a534f59c472a190fc2e49caaed9ebdb22bd0b6e4fe2be423ce3a7a5", + "zh:fd41e513b9546f2ab6b2cc36de36f4cd8ae3eb04ba3fca9b308ec6e387837366", + ] +} + +provider "registry.terraform.io/hashicorp/google-beta" { + version = "6.11.2" + hashes = [ + "h1:mIEGB9MXyiljLjenYDFOYrPv1KymKY6CLfNDvyte4F4=", + "zh:02fda0d27adce977c2007bca3f69c62c75eae511df43091c09a826e962e66530", + "zh:34d3ec551cb53619e93f00b05aa5ad511137f9e0c370191aec6a3cf127696028", + "zh:5d2e07787d5430ab5ad9aa047fe21535641e99f6ac654dc5575e4d9b4ba864b8", + "zh:76b6f7dc870a6c91796336824de43b0bf001782199b834329c3fbba9e0f7dd51", + "zh:8a0d782f88cf9e9770fed44e2768e78ca9943d2ee9f584c684426e56c333217d", + "zh:9694c7b9e1e1799a44db25f4c7e858f9573c5b8a387056e9b4fa8b90c9389df5", + "zh:9c2914d4bfe7ad4376b16b679bd7c7eec473f8fab1e7c0236741f3024859fec6", + "zh:9cfd82d8e474976d21c4fd1b73b225d348d9ea311dcc2e11a987768319292a81", + "zh:d62767e8ae4b6122adf50cc05065b9c91df6ec25acf7afeb3ed6786ee6fb7ccc", + "zh:e48779c09b885fe5f2af8837ced76dde23f0e8a7f37145ea9fb5a90616d05a0b", + "zh:e8a3dd541e7bb89b5acb886f382aa2f84b172df5718c6ee531e260bdf80ffa14", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + ] +} + +provider "registry.terraform.io/hashicorp/null" { + version = "3.2.3" + hashes = [ + "h1:I0Um8UkrMUb81Fxq/dxbr3HLP2cecTH2WMJiwKSrwQY=", + "zh:22d062e5278d872fe7aed834f5577ba0a5afe34a3bdac2b81f828d8d3e6706d2", + "zh:23dead00493ad863729495dc212fd6c29b8293e707b055ce5ba21ee453ce552d", + "zh:28299accf21763ca1ca144d8f660688d7c2ad0b105b7202554ca60b02a3856d3", + "zh:55c9e8a9ac25a7652df8c51a8a9a422bd67d784061b1de2dc9fe6c3cb4e77f2f", + "zh:756586535d11698a216291c06b9ed8a5cc6a4ec43eee1ee09ecd5c6a9e297ac1", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:9d5eea62fdb587eeb96a8c4d782459f4e6b73baeece4d04b4a40e44faaee9301", + "zh:a6355f596a3fb8fc85c2fb054ab14e722991533f87f928e7169a486462c74670", + "zh:b5a65a789cff4ada58a5baffc76cb9767dc26ec6b45c00d2ec8b1b027f6db4ed", + "zh:db5ab669cf11d0e9f81dc380a6fdfcac437aea3d69109c7aef1a5426639d2d65", + "zh:de655d251c470197bcbb5ac45d289595295acb8f829f6c781d4a75c8c8b7c7dd", + "zh:f5c68199f2e6076bce92a12230434782bf768103a427e9bb9abee99b116af7b5", + ] +} + +provider "registry.terraform.io/hashicorp/random" { + version = "3.6.3" + constraints = "3.6.3" + hashes = [ + "h1:zG9uFP8l9u+yGZZvi5Te7PV62j50azpgwPunq2vTm1E=", + "zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451", + "zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8", + "zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe", + "zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1", + "zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36", + "zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30", + "zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615", + "zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad", + "zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556", + "zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0", + ] +} diff --git a/infra/envs/dev/main.tf b/infra/envs/dev/main.tf new file mode 100644 index 0000000..a971c2d --- /dev/null +++ b/infra/envs/dev/main.tf @@ -0,0 +1,30 @@ +# Provider configuration +provider "google" { + project = var.project_id + region = var.region +} +locals { + driplet_image = "europe-west1-docker.pkg.dev/${var.project_id}/${var.artifact_registry_repository_id}/${var.image_name}:${var.image_tag}" + service_account_email = "driplet-service-account@${var.project_id}.iam.gserviceaccount.com" +} + +module "main" { + source = "../../modules" + + project_id = var.project_id + region = var.region + domain = var.domain + network_name = var.network_name + subnet_ranges = var.subnet_ranges + database_instance_name = var.database_instance_name + database_user = var.database_user + cloud_run_service_name = var.cloud_run_service_name + driplet_image = local.driplet_image + oauth_run_callback_url = var.oauth_run_callback_url + pubsub_topic_client_events = var.pubsub_topic_client_events + artifact_registry_repository_id = var.artifact_registry_repository_id + service_account_email = local.service_account_email + bigquery_dataset = var.bigquery_dataset + bigquery_table = var.bigquery_table + pubsub_subscription_client_events = var.pubsub_subscription_client_events +} diff --git a/infra/envs/dev/terraform.tfstate b/infra/envs/dev/terraform.tfstate new file mode 100644 index 0000000..acb588b --- /dev/null +++ b/infra/envs/dev/terraform.tfstate @@ -0,0 +1,2360 @@ +{ + "version": 4, + "terraform_version": "1.5.7", + "serial": 203, + "lineage": "370b3a46-8dc1-e1c1-3856-2a363060576d", + "outputs": {}, + "resources": [ + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "artifact_registry", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/artifactregistry.googleapis.com", + "project": "driplet-core-dev", + "service": "artifactregistry.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "bigquery", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/bigquery.googleapis.com", + "project": "driplet-core-dev", + "service": "bigquery.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "cloud_run", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/run.googleapis.com", + "project": "driplet-core-dev", + "service": "run.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "cloud_sql", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/sqladmin.googleapis.com", + "project": "driplet-core-dev", + "service": "sqladmin.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "compute", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/compute.googleapis.com", + "project": "driplet-core-dev", + "service": "compute.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "iam", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/iam.googleapis.com", + "project": "driplet-core-dev", + "service": "iam.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "pubsub", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/pubsub.googleapis.com", + "project": "driplet-core-dev", + "service": "pubsub.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "secret_manager", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/secretmanager.googleapis.com", + "project": "driplet-core-dev", + "service": "secretmanager.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "service_networking", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/servicenetworking.googleapis.com", + "project": "driplet-core-dev", + "service": "servicenetworking.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.bigquery", + "mode": "managed", + "type": "google_bigquery_dataset", + "name": "dataset", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "access": [ + { + "dataset": [], + "domain": "", + "group_by_email": "", + "iam_member": "", + "role": "OWNER", + "routine": [], + "special_group": "", + "user_by_email": "timo.weiser@codify.ch", + "view": [] + }, + { + "dataset": [], + "domain": "", + "group_by_email": "", + "iam_member": "", + "role": "OWNER", + "routine": [], + "special_group": "projectOwners", + "user_by_email": "", + "view": [] + }, + { + "dataset": [], + "domain": "", + "group_by_email": "", + "iam_member": "", + "role": "READER", + "routine": [], + "special_group": "projectReaders", + "user_by_email": "", + "view": [] + }, + { + "dataset": [], + "domain": "", + "group_by_email": "", + "iam_member": "", + "role": "WRITER", + "routine": [], + "special_group": "projectWriters", + "user_by_email": "", + "view": [] + } + ], + "creation_time": 1731914878775, + "dataset_id": "source", + "default_collation": "", + "default_encryption_configuration": [], + "default_partition_expiration_ms": 0, + "default_table_expiration_ms": 0, + "delete_contents_on_destroy": false, + "description": "", + "effective_labels": { + "environment": "dev", + "goog-terraform-provisioned": "true", + "managed_by": "terraform" + }, + "etag": "+Yy+c5s2ut6kgJjw91WD9A==", + "external_dataset_reference": [], + "friendly_name": "", + "id": "projects/driplet-core-dev/datasets/source", + "is_case_insensitive": false, + "labels": { + "environment": "dev", + "managed_by": "terraform" + }, + "last_modified_time": 1731914878775, + "location": "EU", + "max_time_travel_hours": "168", + "project": "driplet-core-dev", + "resource_tags": {}, + "self_link": "https://bigquery.googleapis.com/bigquery/v2/projects/driplet-core-dev/datasets/source", + "storage_billing_model": "", + "terraform_labels": { + "environment": "dev", + "goog-terraform-provisioned": "true", + "managed_by": "terraform" + }, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.iam.google_project_iam_member.driplet_service_cloudsql_connector", + "module.main.module.iam.google_project_iam_member.driplet_service_pubsub_publisher", + "module.main.module.iam.google_project_iam_member.pubsub_bigquery_access", + "module.main.module.iam.google_project_iam_member.pubsub_bigquery_writer", + "module.main.module.iam.google_project_service_identity.pubsub", + "module.main.module.iam.google_service_account.driplet_service_account" + ] + } + ] + }, + { + "module": "module.main.module.bigquery", + "mode": "managed", + "type": "google_bigquery_table", + "name": "table", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "biglake_configuration": [], + "clustering": null, + "creation_time": 1731914880456, + "dataset_id": "source", + "deletion_protection": false, + "description": "", + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "encryption_configuration": [], + "etag": "jYALrRGHdNUS5srL9r/QnA==", + "expiration_time": 0, + "external_data_configuration": [], + "friendly_name": "", + "id": "projects/driplet-core-dev/datasets/source/tables/client_events", + "labels": {}, + "last_modified_time": 1731914880724, + "location": "EU", + "materialized_view": [], + "max_staleness": "", + "num_bytes": 0, + "num_long_term_bytes": 0, + "num_rows": 0, + "project": "driplet-core-dev", + "range_partitioning": [], + "require_partition_filter": false, + "resource_tags": {}, + "schema": "[{\"description\":\"The data\",\"mode\":\"NULLABLE\",\"name\":\"data\",\"type\":\"STRING\"}]", + "self_link": "https://bigquery.googleapis.com/bigquery/v2/projects/driplet-core-dev/datasets/source/tables/client_events", + "table_constraints": [], + "table_id": "client_events", + "table_replication_info": [], + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "time_partitioning": [], + "type": "TABLE", + "view": [] + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.bigquery.google_bigquery_dataset.dataset", + "module.main.module.iam.google_project_iam_member.driplet_service_cloudsql_connector", + "module.main.module.iam.google_project_iam_member.driplet_service_pubsub_publisher", + "module.main.module.iam.google_project_iam_member.pubsub_bigquery_access", + "module.main.module.iam.google_project_iam_member.pubsub_bigquery_writer", + "module.main.module.iam.google_project_service_identity.pubsub", + "module.main.module.iam.google_service_account.driplet_service_account" + ] + } + ] + }, + { + "module": "module.main.module.compute", + "mode": "managed", + "type": "google_cloud_run_service_iam_member", + "name": "service_invoker", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYm5aWRZz0=", + "id": "v1/projects/driplet-core-dev/locations/europe-west1/services/driplet-service/roles/run.invoker/allUsers", + "location": "europe-west1", + "member": "allUsers", + "project": "driplet-core-dev", + "role": "roles/run.invoker", + "service": "v1/projects/driplet-core-dev/locations/europe-west1/services/driplet-service" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.compute", + "mode": "managed", + "type": "google_cloud_run_v2_service", + "name": "driplet_service", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "annotations": {}, + "binary_authorization": [], + "client": "", + "client_version": "", + "conditions": [ + { + "execution_reason": "", + "last_transition_time": "2024-11-14T20:53:39.690485Z", + "message": "", + "reason": "", + "revision_reason": "", + "severity": "", + "state": "CONDITION_SUCCEEDED", + "type": "RoutesReady" + }, + { + "execution_reason": "", + "last_transition_time": "2024-11-14T20:53:38.476899Z", + "message": "", + "reason": "", + "revision_reason": "", + "severity": "", + "state": "CONDITION_SUCCEEDED", + "type": "ConfigurationsReady" + } + ], + "create_time": "2024-11-14T20:53:15.971600Z", + "creator": "timo.weiser@codify.ch", + "custom_audiences": [], + "delete_time": "", + "deletion_protection": false, + "description": "", + "effective_annotations": {}, + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "etag": "\"CLvG2bkGEIDhpc8D/cHJvamVjdHMvZHJpcGxldC1jb3JlLWRldi9sb2NhdGlvbnMvZXVyb3BlLXdlc3QxL3NlcnZpY2VzL2RyaXBsZXQtc2VydmljZQ\"", + "expire_time": "", + "generation": "1", + "id": "projects/driplet-core-dev/locations/europe-west1/services/driplet-service", + "ingress": "INGRESS_TRAFFIC_INTERNAL_LOAD_BALANCER", + "invoker_iam_disabled": false, + "labels": {}, + "last_modifier": "timo.weiser@codify.ch", + "latest_created_revision": "projects/driplet-core-dev/locations/europe-west1/services/driplet-service/revisions/driplet-service-00001-2pv", + "latest_ready_revision": "projects/driplet-core-dev/locations/europe-west1/services/driplet-service/revisions/driplet-service-00001-2pv", + "launch_stage": "GA", + "location": "europe-west1", + "name": "driplet-service", + "observed_generation": "1", + "project": "driplet-core-dev", + "reconciling": false, + "scaling": [], + "template": [ + { + "annotations": {}, + "containers": [ + { + "args": [], + "command": [], + "depends_on": [], + "env": [ + { + "name": "GOOGLE_CALLBACK_URL", + "value": "https://dev.driplet.codify.ch/auth/google/callback", + "value_source": [] + }, + { + "name": "GOOGLE_CLIENT_ID", + "value": "", + "value_source": [ + { + "secret_key_ref": [ + { + "secret": "projects/driplet-core-dev/secrets/oauth2-client-id", + "version": "latest" + } + ] + } + ] + }, + { + "name": "GOOGLE_CLIENT_SECRET", + "value": "", + "value_source": [ + { + "secret_key_ref": [ + { + "secret": "projects/driplet-core-dev/secrets/oauth2-client-secret", + "version": "latest" + } + ] + } + ] + }, + { + "name": "GOOGLE_PROJECT_ID", + "value": "driplet-core-dev", + "value_source": [] + }, + { + "name": "GOOGLE_PUBSUB_TOPIC_CLIENT_EVENTS", + "value": "client-events", + "value_source": [] + }, + { + "name": "POSTGRES_CONNECTION_STRING", + "value": "postgresql://driplet_application_user:alAu4IcNF1kqO11CmAggictObY4LgVUgFGJVrFn2hJLQKGY9BOFLCfweSy20CNYX@/postgres?host=/cloudsql/driplet-core-dev:europe-west1:driplet-application-db", + "value_source": [] + }, + { + "name": "PUBSUB_PROJECT_ID", + "value": "driplet-core-dev", + "value_source": [] + }, + { + "name": "SESSION_SECRET", + "value": "", + "value_source": [ + { + "secret_key_ref": [ + { + "secret": "projects/driplet-core-dev/secrets/session-secret", + "version": "latest" + } + ] + } + ] + } + ], + "image": "europe-west1-docker.pkg.dev/driplet-core-dev/driplet-repository/driplet:latest", + "liveness_probe": [], + "name": "", + "ports": [ + { + "container_port": 1991, + "name": "http1" + } + ], + "resources": [ + { + "cpu_idle": true, + "limits": { + "cpu": "1000m", + "memory": "512Mi" + }, + "startup_cpu_boost": false + } + ], + "startup_probe": [ + { + "failure_threshold": 1, + "grpc": [], + "http_get": [], + "initial_delay_seconds": 0, + "period_seconds": 240, + "tcp_socket": [ + { + "port": 1991 + } + ], + "timeout_seconds": 240 + } + ], + "volume_mounts": [ + { + "mount_path": "/cloudsql", + "name": "cloudsql" + } + ], + "working_dir": "" + } + ], + "encryption_key": "", + "execution_environment": "", + "labels": {}, + "max_instance_request_concurrency": 80, + "revision": "", + "scaling": [ + { + "max_instance_count": 100, + "min_instance_count": 0 + } + ], + "service_account": "driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "session_affinity": false, + "timeout": "300s", + "volumes": [ + { + "cloud_sql_instance": [ + { + "instances": [ + "driplet-core-dev:europe-west1:driplet-application-db" + ] + } + ], + "gcs": [], + "name": "cloudsql", + "nfs": [], + "secret": [] + } + ], + "vpc_access": [] + } + ], + "terminal_condition": [ + { + "execution_reason": "", + "last_transition_time": "2024-11-14T20:53:39.718061Z", + "message": "", + "reason": "", + "revision_reason": "", + "severity": "", + "state": "CONDITION_SUCCEEDED", + "type": "Ready" + } + ], + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "timeouts": null, + "traffic": [ + { + "percent": 100, + "revision": "", + "tag": "", + "type": "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST" + } + ], + "traffic_statuses": [ + { + "percent": 100, + "revision": "", + "tag": "", + "type": "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST", + "uri": "" + } + ], + "uid": "fe620220-5698-4eaa-a6a6-d4dccbbf8d3b", + "update_time": "2024-11-14T20:53:15.971600Z", + "uri": "https://driplet-service-ecl72yiw7a-ew.a.run.app" + }, + "sensitive_attributes": [ + [ + { + "type": "get_attr", + "value": "template" + }, + { + "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": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.compute", + "mode": "managed", + "type": "google_project_service", + "name": "cloud_run", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/run.googleapis.com", + "project": "driplet-core-dev", + "service": "run.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.database", + "mode": "managed", + "type": "google_sql_database_instance", + "name": "driplet_application_db", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "available_maintenance_versions": [ + "POSTGRES_17_0.R20241011.00_03" + ], + "clone": [], + "connection_name": "driplet-core-dev:europe-west1:driplet-application-db", + "database_version": "POSTGRES_17", + "deletion_protection": true, + "dns_name": "", + "encryption_key_name": null, + "first_ip_address": "35.205.187.58", + "id": "driplet-application-db", + "instance_type": "CLOUD_SQL_INSTANCE", + "ip_address": [ + { + "ip_address": "35.205.187.58", + "time_to_retire": "", + "type": "PRIMARY" + }, + { + "ip_address": "35.195.112.136", + "time_to_retire": "", + "type": "OUTGOING" + } + ], + "maintenance_version": "POSTGRES_17_0.R20241011.00_01", + "master_instance_name": "", + "name": "driplet-application-db", + "private_ip_address": "", + "project": "driplet-core-dev", + "psc_service_attachment_link": "", + "public_ip_address": "35.205.187.58", + "region": "europe-west1", + "replica_configuration": [], + "restore_backup_context": [], + "root_password": null, + "self_link": "https://sqladmin.googleapis.com/sql/v1beta4/projects/driplet-core-dev/instances/driplet-application-db", + "server_ca_cert": [ + { + "cert": "-----BEGIN CERTIFICATE-----\nMIIDfzCCAmegAwIBAgIBADANBgkqhkiG9w0BAQsFADB3MS0wKwYDVQQuEyQzZjI3\nMzYxNC1mNjgxLTRjOTktYTc4OC1mYWM5NjM3N2IwMjExIzAhBgNVBAMTGkdvb2ds\nZSBDbG91ZCBTUUwgU2VydmVyIENBMRQwEgYDVQQKEwtHb29nbGUsIEluYzELMAkG\nA1UEBhMCVVMwHhcNMjQxMTE0MTk1NzIwWhcNMzQxMTEyMTk1ODIwWjB3MS0wKwYD\nVQQuEyQzZjI3MzYxNC1mNjgxLTRjOTktYTc4OC1mYWM5NjM3N2IwMjExIzAhBgNV\nBAMTGkdvb2dsZSBDbG91ZCBTUUwgU2VydmVyIENBMRQwEgYDVQQKEwtHb29nbGUs\nIEluYzELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\nAQC8nFekUlY/8ZSQrTXcofxh49KsSXGtg9pC/s3dbnMmrKG+EO6AJAsdiIxPfnZb\nLS3TCgM29Mzi7HaCzsWd36/toOpZ6H56/VxW/hNLyAvqM9TnP83bJRTuGbnoMFe/\nXgSX2MO7Tmon4dO7eMzPXUxbgg5dWmHo5VZmoGWuM3bJjFdPsQLeaMC96ztaxbC7\nXV22gEKmv/t4i7od80sJFN5hrc/y/rWA3O0xqAoBZJqujBk8pWbSsX/6+ZnyfnUT\n9agwdau/qGy5muJtIobPxHyHYZaLsccFSISNGO8Oa65r5kXNk8vvc2ggKJY+8O4C\n90JGBzUZiGbfRf89kNwc1RtNAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQAw\nDQYJKoZIhvcNAQELBQADggEBABCK8uMK1VW5YwRPQNRe7ErX561ZGUznYIj92YUc\n1H91QSeT/hVuI/vus0jEjpEw2V8TFv1nacc6QihKW+hYUh/qe5m36BgczsoDezWt\nGR6yAEowAGNBo4h87/K8kZjd92u7MH+Akm7orhrHu9I2Wr1WNdxCkIC3OYhd/dww\nxdtAzjacznAw2bHzuuoFntl0KZ+p5aUelNuLyvT/Y2KpzuPZTFs93YcdIHL/BswS\nvyxQ6tgei/Y3EI2p1gTtcDDc8uR95vcPdQhyceXA/yFbL2IFwS6ta0/MIqF2yQcs\nsAaMntx1e3SkWsWFlpwp08O/Oz9G2eU2u81kVvx+FnudGys=\n-----END CERTIFICATE-----", + "common_name": "C=US,O=Google\\, Inc,CN=Google Cloud SQL Server CA,dnQualifier=3f273614-f681-4c99-a788-fac96377b021", + "create_time": "2024-11-14T19:57:20.804Z", + "expiration_time": "2034-11-12T19:58:20.804Z", + "sha1_fingerprint": "d3ea46e6c93215eddf1f6f0e46ef868acb11d716" + } + ], + "service_account_email_address": "p195952802985-yi0v76@gcp-sa-cloud-sql.iam.gserviceaccount.com", + "settings": [ + { + "activation_policy": "ALWAYS", + "active_directory_config": [], + "advanced_machine_features": [], + "availability_type": "ZONAL", + "backup_configuration": [ + { + "backup_retention_settings": [ + { + "retained_backups": 15, + "retention_unit": "COUNT" + } + ], + "binary_log_enabled": false, + "enabled": true, + "location": "", + "point_in_time_recovery_enabled": true, + "start_time": "10:00", + "transaction_log_retention_days": 14 + } + ], + "collation": "", + "connector_enforcement": "NOT_REQUIRED", + "data_cache_config": [ + { + "data_cache_enabled": true + } + ], + "database_flags": [ + { + "name": "cloudsql.iam_authentication", + "value": "on" + } + ], + "deletion_protection_enabled": false, + "deny_maintenance_period": [], + "disk_autoresize": true, + "disk_autoresize_limit": 0, + "disk_size": 10, + "disk_type": "PD_SSD", + "edition": "ENTERPRISE_PLUS", + "enable_dataplex_integration": false, + "enable_google_ml_integration": false, + "insights_config": [], + "ip_configuration": [ + { + "allocated_ip_range": "", + "authorized_networks": [], + "enable_private_path_for_google_cloud_services": false, + "ipv4_enabled": true, + "private_network": "", + "psc_config": [], + "server_ca_mode": "GOOGLE_MANAGED_INTERNAL_CA", + "ssl_mode": "ALLOW_UNENCRYPTED_AND_ENCRYPTED" + } + ], + "location_preference": [ + { + "follow_gae_application": "", + "secondary_zone": "", + "zone": "europe-west1-d" + } + ], + "maintenance_window": [], + "password_validation_policy": [], + "pricing_plan": "PER_USE", + "sql_server_audit_config": [], + "tier": "db-perf-optimized-N-2", + "time_zone": "", + "user_labels": {}, + "version": 6 + } + ], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo1NDAwMDAwMDAwMDAwLCJkZWxldGUiOjU0MDAwMDAwMDAwMDAsInVwZGF0ZSI6NTQwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.database", + "mode": "managed", + "type": "google_sql_user", + "name": "driplet_application_db_user", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "deletion_policy": null, + "host": "", + "id": "driplet_application_user//driplet-application-db", + "instance": "driplet-application-db", + "name": "driplet_application_user", + "password": "alAu4IcNF1kqO11CmAggictObY4LgVUgFGJVrFn2hJLQKGY9BOFLCfweSy20CNYX", + "password_policy": [], + "project": "driplet-core-dev", + "sql_server_user_details": [], + "timeouts": null, + "type": "" + }, + "sensitive_attributes": [ + [ + { + "type": "get_attr", + "value": "password" + } + ] + ], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwLCJ1cGRhdGUiOjYwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.random_password.driplet_application_db_password" + ] + } + ] + }, + { + "module": "module.main.module.database", + "mode": "managed", + "type": "random_password", + "name": "driplet_application_db_password", + "provider": "provider[\"registry.terraform.io/hashicorp/random\"]", + "instances": [ + { + "schema_version": 3, + "attributes": { + "bcrypt_hash": "$2a$10$KctjPjIZDuRCsKE2aPvcQeSw1kIykWvt1UbqevhvpIfSvzHFS4A4a", + "id": "none", + "keepers": null, + "length": 64, + "lower": true, + "min_lower": 5, + "min_numeric": 0, + "min_special": 0, + "min_upper": 5, + "number": true, + "numeric": true, + "override_special": null, + "result": "alAu4IcNF1kqO11CmAggictObY4LgVUgFGJVrFn2hJLQKGY9BOFLCfweSy20CNYX", + "special": false, + "upper": true + }, + "sensitive_attributes": [], + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.iam", + "mode": "managed", + "type": "google_project_iam_member", + "name": "driplet_service_cloudsql_connector", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYnNH9DIlw=", + "id": "driplet-core-dev/roles/cloudsql.client/serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/cloudsql.client" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.iam.google_service_account.driplet_service_account" + ] + } + ] + }, + { + "module": "module.main.module.iam", + "mode": "managed", + "type": "google_project_iam_member", + "name": "driplet_service_pubsub_publisher", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYnNH9DIlw=", + "id": "driplet-core-dev/roles/pubsub.admin/serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/pubsub.admin" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.iam.google_service_account.driplet_service_account" + ] + } + ] + }, + { + "module": "module.main.module.iam", + "mode": "managed", + "type": "google_project_iam_member", + "name": "pubsub_bigquery_access", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYnNH9DIlw=", + "id": "driplet-core-dev/roles/bigquery.dataEditor/serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/bigquery.dataEditor" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.iam.google_service_account.driplet_service_account" + ] + } + ] + }, + { + "module": "module.main.module.iam", + "mode": "managed", + "type": "google_project_iam_member", + "name": "pubsub_bigquery_writer", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYnNH9DIlw=", + "id": "driplet-core-dev/roles/bigquery.dataEditor/serviceAccount:service-195952802985@gcp-sa-pubsub.iam.gserviceaccount.com", + "member": "serviceAccount:service-195952802985@gcp-sa-pubsub.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/bigquery.dataEditor" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.iam.google_project_service_identity.pubsub" + ] + } + ] + }, + { + "module": "module.main.module.iam", + "mode": "managed", + "type": "google_project_service_identity", + "name": "pubsub", + "provider": "provider[\"registry.terraform.io/hashicorp/google-beta\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "email": "service-195952802985@gcp-sa-pubsub.iam.gserviceaccount.com", + "id": "projects/driplet-core-dev/services/pubsub.googleapis.com", + "member": "serviceAccount:service-195952802985@gcp-sa-pubsub.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "service": "pubsub.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMH19" + } + ] + }, + { + "module": "module.main.module.iam", + "mode": "managed", + "type": "google_service_account", + "name": "driplet_service_account", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "account_id": "driplet-service-account", + "create_ignore_already_exists": null, + "description": "", + "disabled": false, + "display_name": "Driplet Service Account", + "email": "driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "id": "projects/driplet-core-dev/serviceAccounts/driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "name": "projects/driplet-core-dev/serviceAccounts/driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "timeouts": null, + "unique_id": "108709542517555473549" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozMDAwMDAwMDAwMDB9fQ==" + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_backend_service", + "name": "driplet_backend", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "affinity_cookie_ttl_sec": 0, + "backend": [ + { + "balancing_mode": "UTILIZATION", + "capacity_scaler": 1, + "description": "", + "group": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/regions/europe-west1/networkEndpointGroups/driplet-service-neg", + "max_connections": 0, + "max_connections_per_endpoint": 0, + "max_connections_per_instance": 0, + "max_rate": 0, + "max_rate_per_endpoint": 0, + "max_rate_per_instance": 0, + "max_utilization": 0 + } + ], + "cdn_policy": [], + "circuit_breakers": [], + "compression_mode": "", + "connection_draining_timeout_sec": 300, + "consistent_hash": [], + "creation_timestamp": "2024-11-14T12:53:58.874-08:00", + "custom_request_headers": [], + "custom_response_headers": [], + "description": "", + "edge_security_policy": "", + "enable_cdn": false, + "fingerprint": "j_pVdHz9chw=", + "generated_id": 1922738204471713161, + "health_checks": [], + "iap": [], + "id": "projects/driplet-core-dev/global/backendServices/driplet-cloud-run-backend", + "ip_address_selection_policy": "", + "load_balancing_scheme": "EXTERNAL", + "locality_lb_policies": [], + "locality_lb_policy": "", + "log_config": [], + "name": "driplet-cloud-run-backend", + "outlier_detection": [], + "port_name": "http", + "project": "driplet-core-dev", + "protocol": "HTTP", + "security_policy": "", + "security_settings": [], + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/backendServices/driplet-cloud-run-backend", + "service_lb_policy": "", + "session_affinity": "NONE", + "strong_session_affinity_cookie": [], + "timeout_sec": 30, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.network.google_compute_region_network_endpoint_group.driplet_service_neg", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_firewall", + "name": "ingress", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "allow": [ + { + "ports": [ + "80", + "443" + ], + "protocol": "tcp" + } + ], + "creation_timestamp": "2024-11-14T11:58:14.543-08:00", + "deny": [], + "description": "", + "destination_ranges": [], + "direction": "INGRESS", + "disabled": false, + "enable_logging": null, + "id": "projects/driplet-core-dev/global/firewalls/allow-http-https", + "log_config": [], + "name": "allow-http-https", + "network": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/networks/driplet-vpc", + "priority": 1000, + "project": "driplet-core-dev", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/firewalls/allow-http-https", + "source_ranges": [ + "0.0.0.0/0" + ], + "source_service_accounts": [], + "source_tags": [], + "target_service_accounts": [], + "target_tags": [], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.network.google_compute_network.driplet_vpc_network" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_global_address", + "name": "new_loadbalancer_ip", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "address": "34.8.81.159", + "address_type": "EXTERNAL", + "creation_timestamp": "2024-11-14T12:04:37.760-08:00", + "description": "", + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "id": "projects/driplet-core-dev/global/addresses/loadbalancer-ip", + "ip_version": "", + "label_fingerprint": "vezUS-42LLM=", + "labels": {}, + "name": "loadbalancer-ip", + "network": "", + "prefix_length": 0, + "project": "driplet-core-dev", + "purpose": "", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/addresses/loadbalancer-ip", + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_global_forwarding_rule", + "name": "driplet_http_forwarding_rule", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "base_forwarding_rule": "", + "description": "", + "effective_labels": {}, + "id": "projects/driplet-core-dev/global/forwardingRules/driplet-http-forwarding-rule", + "ip_address": "34.8.81.159", + "ip_protocol": "TCP", + "ip_version": "", + "label_fingerprint": "42WmSpB8rSM=", + "labels": {}, + "load_balancing_scheme": "EXTERNAL", + "metadata_filters": [], + "name": "driplet-http-forwarding-rule", + "network": "", + "no_automate_dns_zone": null, + "port_range": "80-80", + "project": "driplet-core-dev", + "psc_connection_id": "", + "psc_connection_status": "", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/forwardingRules/driplet-http-forwarding-rule", + "service_directory_registrations": [], + "source_ip_ranges": [], + "subnetwork": "", + "target": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/targetHttpProxies/http-proxy", + "terraform_labels": {}, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.network.google_compute_backend_service.driplet_backend", + "module.main.module.network.google_compute_global_address.new_loadbalancer_ip", + "module.main.module.network.google_compute_region_network_endpoint_group.driplet_service_neg", + "module.main.module.network.google_compute_target_http_proxy.driplet_http_proxy", + "module.main.module.network.google_compute_url_map.driplet_url_map", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_global_forwarding_rule", + "name": "driplet_https_forwarding_rule", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "base_forwarding_rule": "", + "description": "", + "effective_labels": {}, + "id": "projects/driplet-core-dev/global/forwardingRules/driplet-https-forwarding-rule", + "ip_address": "34.8.81.159", + "ip_protocol": "TCP", + "ip_version": "", + "label_fingerprint": "42WmSpB8rSM=", + "labels": {}, + "load_balancing_scheme": "EXTERNAL", + "metadata_filters": [], + "name": "driplet-https-forwarding-rule", + "network": "", + "no_automate_dns_zone": null, + "port_range": "443-443", + "project": "driplet-core-dev", + "psc_connection_id": "", + "psc_connection_status": "", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/forwardingRules/driplet-https-forwarding-rule", + "service_directory_registrations": [], + "source_ip_ranges": [], + "subnetwork": "", + "target": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/targetHttpsProxies/driplet-https-proxy", + "terraform_labels": {}, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.network.google_compute_backend_service.driplet_backend", + "module.main.module.network.google_compute_global_address.new_loadbalancer_ip", + "module.main.module.network.google_compute_managed_ssl_certificate.driplet_ssl_cert", + "module.main.module.network.google_compute_region_network_endpoint_group.driplet_service_neg", + "module.main.module.network.google_compute_target_https_proxy.driplet_https_proxy", + "module.main.module.network.google_compute_url_map.driplet_url_map", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_managed_ssl_certificate", + "name": "driplet_ssl_cert", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "certificate_id": 5704097514326321466, + "creation_timestamp": "2024-11-14T12:04:37.665-08:00", + "description": "", + "expire_time": "2025-02-12T12:43:02.000-08:00", + "id": "projects/driplet-core-dev/global/sslCertificates/driplet-ssl-cert", + "managed": [ + { + "domains": [ + "dev.driplet.codify.ch" + ] + } + ], + "name": "driplet-ssl-cert", + "project": "driplet-core-dev", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/sslCertificates/driplet-ssl-cert", + "subject_alternative_names": [ + "dev.driplet.codify.ch" + ], + "timeouts": null, + "type": "MANAGED" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_network", + "name": "driplet_vpc_network", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "auto_create_subnetworks": false, + "delete_default_routes_on_create": false, + "description": "", + "enable_ula_internal_ipv6": false, + "gateway_ipv4": "", + "id": "projects/driplet-core-dev/global/networks/driplet-vpc", + "internal_ipv6_range": "", + "mtu": 0, + "name": "driplet-vpc", + "network_firewall_policy_enforcement_order": "AFTER_CLASSIC_FIREWALL", + "numeric_id": "1879149307234085039", + "project": "driplet-core-dev", + "routing_mode": "REGIONAL", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/networks/driplet-vpc", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_region_network_endpoint_group", + "name": "driplet_service_neg", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "app_engine": [], + "cloud_function": [], + "cloud_run": [ + { + "service": "driplet-service", + "tag": "", + "url_mask": "" + } + ], + "description": "", + "id": "projects/driplet-core-dev/regions/europe-west1/networkEndpointGroups/driplet-service-neg", + "name": "driplet-service-neg", + "network": "", + "network_endpoint_type": "SERVERLESS", + "project": "driplet-core-dev", + "psc_target_service": "", + "region": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/regions/europe-west1", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/regions/europe-west1/networkEndpointGroups/driplet-service-neg", + "subnetwork": "", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_subnetwork", + "name": "driplet_vpc_subnet", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "creation_timestamp": "2024-11-14T11:58:16.739-08:00", + "description": "", + "external_ipv6_prefix": "", + "fingerprint": null, + "gateway_address": "10.0.1.1", + "id": "projects/driplet-core-dev/regions/europe-west1/subnetworks/driplet-subnet", + "internal_ipv6_prefix": "", + "ip_cidr_range": "10.0.1.0/24", + "ipv6_access_type": "", + "ipv6_cidr_range": "", + "log_config": [], + "name": "driplet-subnet", + "network": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/networks/driplet-vpc", + "private_ip_google_access": false, + "private_ipv6_google_access": "DISABLE_GOOGLE_ACCESS", + "project": "driplet-core-dev", + "purpose": "PRIVATE", + "region": "europe-west1", + "reserved_internal_range": "", + "role": "", + "secondary_ip_range": [], + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/regions/europe-west1/subnetworks/driplet-subnet", + "send_secondary_ip_range_if_empty": null, + "stack_type": "IPV4_ONLY", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.network.google_compute_network.driplet_vpc_network" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_target_http_proxy", + "name": "driplet_http_proxy", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "creation_timestamp": "2024-11-14T13:00:39.531-08:00", + "description": "", + "http_keep_alive_timeout_sec": 0, + "id": "projects/driplet-core-dev/global/targetHttpProxies/http-proxy", + "name": "http-proxy", + "project": "driplet-core-dev", + "proxy_bind": false, + "proxy_id": 3310992331709864472, + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/targetHttpProxies/http-proxy", + "timeouts": null, + "url_map": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/urlMaps/driplet-url-map" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.network.google_compute_backend_service.driplet_backend", + "module.main.module.network.google_compute_region_network_endpoint_group.driplet_service_neg", + "module.main.module.network.google_compute_url_map.driplet_url_map", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_target_https_proxy", + "name": "driplet_https_proxy", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "certificate_manager_certificates": [], + "certificate_map": "", + "creation_timestamp": "2024-11-14T13:00:39.590-08:00", + "description": "", + "http_keep_alive_timeout_sec": 0, + "id": "projects/driplet-core-dev/global/targetHttpsProxies/driplet-https-proxy", + "name": "driplet-https-proxy", + "project": "driplet-core-dev", + "proxy_bind": false, + "proxy_id": 2864095568607304216, + "quic_override": "NONE", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/targetHttpsProxies/driplet-https-proxy", + "server_tls_policy": "", + "ssl_certificates": [ + "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/sslCertificates/driplet-ssl-cert" + ], + "ssl_policy": "", + "timeouts": null, + "tls_early_data": "DISABLED", + "url_map": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/urlMaps/driplet-url-map" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.network.google_compute_backend_service.driplet_backend", + "module.main.module.network.google_compute_managed_ssl_certificate.driplet_ssl_cert", + "module.main.module.network.google_compute_region_network_endpoint_group.driplet_service_neg", + "module.main.module.network.google_compute_url_map.driplet_url_map", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_url_map", + "name": "driplet_url_map", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "creation_timestamp": "2024-11-14T13:00:28.072-08:00", + "default_route_action": [], + "default_service": "", + "default_url_redirect": [ + { + "host_redirect": "", + "https_redirect": true, + "path_redirect": "", + "prefix_redirect": "", + "redirect_response_code": "", + "strip_query": true + } + ], + "description": "", + "fingerprint": "B6nsvwyRsow=", + "header_action": [], + "host_rule": [ + { + "description": "", + "hosts": [ + "*" + ], + "path_matcher": "catch-all" + } + ], + "id": "projects/driplet-core-dev/global/urlMaps/driplet-url-map", + "map_id": 6014141634237422083, + "name": "driplet-url-map", + "path_matcher": [ + { + "default_route_action": [], + "default_service": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/backendServices/driplet-cloud-run-backend", + "default_url_redirect": [], + "description": "", + "header_action": [], + "name": "catch-all", + "path_rule": [], + "route_rules": [] + } + ], + "project": "driplet-core-dev", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/urlMaps/driplet-url-map", + "test": [], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.network.google_compute_backend_service.driplet_backend", + "module.main.module.network.google_compute_region_network_endpoint_group.driplet_service_neg", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.pubsub", + "mode": "managed", + "type": "google_pubsub_subscription", + "name": "bigquery_subscription", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "ack_deadline_seconds": 600, + "bigquery_config": [ + { + "drop_unknown_fields": true, + "service_account_email": "", + "table": "driplet-core-dev.source.client_events", + "use_table_schema": false, + "use_topic_schema": false, + "write_metadata": false + } + ], + "cloud_storage_config": [], + "dead_letter_policy": [], + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "enable_exactly_once_delivery": false, + "enable_message_ordering": false, + "expiration_policy": [ + { + "ttl": "2678400s" + } + ], + "filter": "", + "id": "projects/driplet-core-dev/subscriptions/client-events-bigquery", + "labels": {}, + "message_retention_duration": "604800s", + "name": "client-events-bigquery", + "project": "driplet-core-dev", + "push_config": [], + "retain_acked_messages": false, + "retry_policy": [], + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "timeouts": null, + "topic": "projects/driplet-core-dev/topics/client-events" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.pubsub.google_pubsub_topic.client_events" + ] + } + ] + }, + { + "module": "module.main.module.pubsub", + "mode": "managed", + "type": "google_pubsub_topic", + "name": "client_events", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "id": "projects/driplet-core-dev/topics/client-events", + "ingestion_data_source_settings": [], + "kms_key_name": "", + "labels": {}, + "message_retention_duration": "604800s", + "message_storage_policy": [], + "name": "client-events", + "project": "driplet-core-dev", + "schema_settings": [], + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19" + } + ] + }, + { + "module": "module.main.module.registry", + "mode": "managed", + "type": "google_artifact_registry_repository", + "name": "driplet_registry", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "cleanup_policies": [ + { + "action": "DELETE", + "condition": [ + { + "newer_than": "", + "older_than": "432000s", + "package_name_prefixes": [], + "tag_prefixes": [], + "tag_state": "ANY", + "version_name_prefixes": [] + } + ], + "id": "delete_old_images", + "most_recent_versions": [] + }, + { + "action": "KEEP", + "condition": [], + "id": "keep_last_2_versions", + "most_recent_versions": [ + { + "keep_count": 2, + "package_name_prefixes": [] + } + ] + } + ], + "cleanup_policy_dry_run": false, + "create_time": "2024-11-14T19:58:02.943016Z", + "description": "Driplet Repository", + "docker_config": [], + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "format": "DOCKER", + "id": "projects/driplet-core-dev/locations/europe-west1/repositories/driplet-repository", + "kms_key_name": "", + "labels": {}, + "location": "europe-west1", + "maven_config": [], + "mode": "STANDARD_REPOSITORY", + "name": "driplet-repository", + "project": "driplet-core-dev", + "remote_repository_config": [], + "repository_id": "driplet-repository", + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "timeouts": null, + "update_time": "2024-11-14T20:52:59.325843Z", + "virtual_repository_config": [] + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19" + } + ] + }, + { + "module": "module.main.module.secrets", + "mode": "managed", + "type": "google_secret_manager_secret", + "name": "oauth2_client_id", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "annotations": {}, + "create_time": "2024-11-14T20:05:31.673532Z", + "effective_annotations": {}, + "effective_labels": { + "component": "driplet", + "goog-terraform-provisioned": "true", + "managed": "terraform" + }, + "expire_time": "", + "id": "projects/driplet-core-dev/secrets/oauth2-client-id", + "labels": { + "component": "driplet", + "managed": "terraform" + }, + "name": "projects/195952802985/secrets/oauth2-client-id", + "project": "driplet-core-dev", + "replication": [ + { + "auto": [], + "user_managed": [ + { + "replicas": [ + { + "customer_managed_encryption": [], + "location": "europe-west1" + } + ] + } + ] + } + ], + "rotation": [], + "secret_id": "oauth2-client-id", + "terraform_labels": { + "component": "driplet", + "goog-terraform-provisioned": "true", + "managed": "terraform" + }, + "timeouts": null, + "topics": [], + "ttl": null, + "version_aliases": {}, + "version_destroy_ttl": "" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.secrets", + "mode": "managed", + "type": "google_secret_manager_secret", + "name": "oauth2_client_secret", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "annotations": {}, + "create_time": "2024-11-14T20:04:38.902279Z", + "effective_annotations": {}, + "effective_labels": { + "component": "driplet", + "goog-terraform-provisioned": "true", + "managed": "terraform" + }, + "expire_time": "", + "id": "projects/driplet-core-dev/secrets/oauth2-client-secret", + "labels": { + "component": "driplet", + "managed": "terraform" + }, + "name": "projects/195952802985/secrets/oauth2-client-secret", + "project": "driplet-core-dev", + "replication": [ + { + "auto": [], + "user_managed": [ + { + "replicas": [ + { + "customer_managed_encryption": [], + "location": "europe-west1" + } + ] + } + ] + } + ], + "rotation": [], + "secret_id": "oauth2-client-secret", + "terraform_labels": { + "component": "driplet", + "goog-terraform-provisioned": "true", + "managed": "terraform" + }, + "timeouts": null, + "topics": [], + "ttl": null, + "version_aliases": {}, + "version_destroy_ttl": "" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.secrets", + "mode": "managed", + "type": "google_secret_manager_secret", + "name": "session_secret", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "annotations": {}, + "create_time": "2024-11-14T20:04:39.987444Z", + "effective_annotations": {}, + "effective_labels": { + "component": "driplet", + "goog-terraform-provisioned": "true", + "managed": "terraform" + }, + "expire_time": "", + "id": "projects/driplet-core-dev/secrets/session-secret", + "labels": { + "component": "driplet", + "managed": "terraform" + }, + "name": "projects/195952802985/secrets/session-secret", + "project": "driplet-core-dev", + "replication": [ + { + "auto": [], + "user_managed": [ + { + "replicas": [ + { + "customer_managed_encryption": [], + "location": "europe-west1" + } + ] + } + ] + } + ], + "rotation": [], + "secret_id": "session-secret", + "terraform_labels": { + "component": "driplet", + "goog-terraform-provisioned": "true", + "managed": "terraform" + }, + "timeouts": null, + "topics": [], + "ttl": null, + "version_aliases": {}, + "version_destroy_ttl": "" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.secrets", + "mode": "managed", + "type": "google_secret_manager_secret_iam_member", + "name": "oauth2_client_id_member", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYm5PkK3Es=", + "id": "projects/driplet-core-dev/secrets/oauth2-client-id/roles/secretmanager.secretAccessor/serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/secretmanager.secretAccessor", + "secret_id": "projects/driplet-core-dev/secrets/oauth2-client-id" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id" + ] + } + ] + }, + { + "module": "module.main.module.secrets", + "mode": "managed", + "type": "google_secret_manager_secret_iam_member", + "name": "oauth2_client_secret_member", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYm5PXip14=", + "id": "projects/driplet-core-dev/secrets/oauth2-client-secret/roles/secretmanager.secretAccessor/serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/secretmanager.secretAccessor", + "secret_id": "projects/driplet-core-dev/secrets/oauth2-client-secret" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret" + ] + } + ] + }, + { + "module": "module.main.module.secrets", + "mode": "managed", + "type": "google_secret_manager_secret_iam_member", + "name": "session_auth_secret", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYm5PX0ons=", + "id": "projects/driplet-core-dev/secrets/session-secret/roles/secretmanager.secretAccessor/serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/secretmanager.secretAccessor", + "secret_id": "projects/driplet-core-dev/secrets/session-secret" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.session_secret" + ] + } + ] + } + ], + "check_results": null +} diff --git a/infra/envs/dev/terraform.tfstate.backup b/infra/envs/dev/terraform.tfstate.backup new file mode 100644 index 0000000..cd54cd1 --- /dev/null +++ b/infra/envs/dev/terraform.tfstate.backup @@ -0,0 +1,2412 @@ +{ + "version": 4, + "terraform_version": "1.5.7", + "serial": 200, + "lineage": "370b3a46-8dc1-e1c1-3856-2a363060576d", + "outputs": {}, + "resources": [ + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "artifact_registry", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/artifactregistry.googleapis.com", + "project": "driplet-core-dev", + "service": "artifactregistry.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "bigquery", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/bigquery.googleapis.com", + "project": "driplet-core-dev", + "service": "bigquery.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "cloud_run", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/run.googleapis.com", + "project": "driplet-core-dev", + "service": "run.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "cloud_sql", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/sqladmin.googleapis.com", + "project": "driplet-core-dev", + "service": "sqladmin.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "compute", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/compute.googleapis.com", + "project": "driplet-core-dev", + "service": "compute.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "iam", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/iam.googleapis.com", + "project": "driplet-core-dev", + "service": "iam.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "pubsub", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/pubsub.googleapis.com", + "project": "driplet-core-dev", + "service": "pubsub.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "secret_manager", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/secretmanager.googleapis.com", + "project": "driplet-core-dev", + "service": "secretmanager.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.api", + "mode": "managed", + "type": "google_project_service", + "name": "service_networking", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/servicenetworking.googleapis.com", + "project": "driplet-core-dev", + "service": "servicenetworking.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=" + } + ] + }, + { + "module": "module.main.module.bigquery", + "mode": "managed", + "type": "google_bigquery_dataset", + "name": "dataset", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "access": [ + { + "dataset": [], + "domain": "", + "group_by_email": "", + "iam_member": "", + "role": "OWNER", + "routine": [], + "special_group": "", + "user_by_email": "timo.weiser@codify.ch", + "view": [] + }, + { + "dataset": [], + "domain": "", + "group_by_email": "", + "iam_member": "", + "role": "OWNER", + "routine": [], + "special_group": "projectOwners", + "user_by_email": "", + "view": [] + }, + { + "dataset": [], + "domain": "", + "group_by_email": "", + "iam_member": "", + "role": "READER", + "routine": [], + "special_group": "projectReaders", + "user_by_email": "", + "view": [] + }, + { + "dataset": [], + "domain": "", + "group_by_email": "", + "iam_member": "", + "role": "WRITER", + "routine": [], + "special_group": "projectWriters", + "user_by_email": "", + "view": [] + } + ], + "creation_time": 1731914878775, + "dataset_id": "source", + "default_collation": "", + "default_encryption_configuration": [], + "default_partition_expiration_ms": 0, + "default_table_expiration_ms": 0, + "delete_contents_on_destroy": false, + "description": "", + "effective_labels": { + "environment": "dev", + "goog-terraform-provisioned": "true", + "managed_by": "terraform" + }, + "etag": "+Yy+c5s2ut6kgJjw91WD9A==", + "external_dataset_reference": [], + "friendly_name": "", + "id": "projects/driplet-core-dev/datasets/source", + "is_case_insensitive": false, + "labels": { + "environment": "dev", + "managed_by": "terraform" + }, + "last_modified_time": 1731914878775, + "location": "EU", + "max_time_travel_hours": "168", + "project": "driplet-core-dev", + "resource_tags": {}, + "self_link": "https://bigquery.googleapis.com/bigquery/v2/projects/driplet-core-dev/datasets/source", + "storage_billing_model": "", + "terraform_labels": { + "environment": "dev", + "goog-terraform-provisioned": "true", + "managed_by": "terraform" + }, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.iam.google_project_iam_member.driplet_service_cloudsql_connector", + "module.main.module.iam.google_project_iam_member.driplet_service_pubsub_publisher", + "module.main.module.iam.google_project_iam_member.pubsub_bigquery_access", + "module.main.module.iam.google_project_iam_member.pubsub_bigquery_writer", + "module.main.module.iam.google_project_service_identity.pubsub", + "module.main.module.iam.google_service_account.driplet_service_account" + ] + } + ] + }, + { + "module": "module.main.module.bigquery", + "mode": "managed", + "type": "google_bigquery_table", + "name": "table", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "biglake_configuration": [], + "clustering": null, + "creation_time": 1731914880456, + "dataset_id": "source", + "deletion_protection": false, + "description": "", + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "encryption_configuration": [], + "etag": "jYALrRGHdNUS5srL9r/QnA==", + "expiration_time": 0, + "external_data_configuration": [], + "friendly_name": "", + "id": "projects/driplet-core-dev/datasets/source/tables/client_events", + "labels": {}, + "last_modified_time": 1731914880724, + "location": "EU", + "materialized_view": [], + "max_staleness": "", + "num_bytes": 0, + "num_long_term_bytes": 0, + "num_rows": 0, + "project": "driplet-core-dev", + "range_partitioning": [], + "require_partition_filter": false, + "resource_tags": {}, + "schema": "[{\"description\":\"The data\",\"mode\":\"NULLABLE\",\"name\":\"data\",\"type\":\"STRING\"}]", + "self_link": "https://bigquery.googleapis.com/bigquery/v2/projects/driplet-core-dev/datasets/source/tables/client_events", + "table_constraints": [], + "table_id": "client_events", + "table_replication_info": [], + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "time_partitioning": [], + "type": "TABLE", + "view": [] + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.bigquery.google_bigquery_dataset.dataset", + "module.main.module.iam.google_project_iam_member.driplet_service_cloudsql_connector", + "module.main.module.iam.google_project_iam_member.driplet_service_pubsub_publisher", + "module.main.module.iam.google_project_iam_member.pubsub_bigquery_access", + "module.main.module.iam.google_project_iam_member.pubsub_bigquery_writer", + "module.main.module.iam.google_project_service_identity.pubsub", + "module.main.module.iam.google_service_account.driplet_service_account" + ] + } + ] + }, + { + "module": "module.main.module.compute", + "mode": "managed", + "type": "google_cloud_run_service_iam_member", + "name": "service_invoker", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYm5aWRZz0=", + "id": "v1/projects/driplet-core-dev/locations/europe-west1/services/driplet-service/roles/run.invoker/allUsers", + "location": "europe-west1", + "member": "allUsers", + "project": "driplet-core-dev", + "role": "roles/run.invoker", + "service": "v1/projects/driplet-core-dev/locations/europe-west1/services/driplet-service" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.compute", + "mode": "managed", + "type": "google_cloud_run_v2_service", + "name": "driplet_service", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "annotations": {}, + "binary_authorization": [], + "client": "", + "client_version": "", + "conditions": [ + { + "execution_reason": "", + "last_transition_time": "2024-11-14T20:53:39.690485Z", + "message": "", + "reason": "", + "revision_reason": "", + "severity": "", + "state": "CONDITION_SUCCEEDED", + "type": "RoutesReady" + }, + { + "execution_reason": "", + "last_transition_time": "2024-11-14T20:53:38.476899Z", + "message": "", + "reason": "", + "revision_reason": "", + "severity": "", + "state": "CONDITION_SUCCEEDED", + "type": "ConfigurationsReady" + } + ], + "create_time": "2024-11-14T20:53:15.971600Z", + "creator": "timo.weiser@codify.ch", + "custom_audiences": [], + "delete_time": "", + "deletion_protection": false, + "description": "", + "effective_annotations": {}, + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "etag": "\"CLvG2bkGEIDhpc8D/cHJvamVjdHMvZHJpcGxldC1jb3JlLWRldi9sb2NhdGlvbnMvZXVyb3BlLXdlc3QxL3NlcnZpY2VzL2RyaXBsZXQtc2VydmljZQ\"", + "expire_time": "", + "generation": "1", + "id": "projects/driplet-core-dev/locations/europe-west1/services/driplet-service", + "ingress": "INGRESS_TRAFFIC_INTERNAL_LOAD_BALANCER", + "invoker_iam_disabled": false, + "labels": {}, + "last_modifier": "timo.weiser@codify.ch", + "latest_created_revision": "projects/driplet-core-dev/locations/europe-west1/services/driplet-service/revisions/driplet-service-00001-2pv", + "latest_ready_revision": "projects/driplet-core-dev/locations/europe-west1/services/driplet-service/revisions/driplet-service-00001-2pv", + "launch_stage": "GA", + "location": "europe-west1", + "name": "driplet-service", + "observed_generation": "1", + "project": "driplet-core-dev", + "reconciling": false, + "scaling": [], + "template": [ + { + "annotations": {}, + "containers": [ + { + "args": [], + "command": [], + "depends_on": [], + "env": [ + { + "name": "GOOGLE_CALLBACK_URL", + "value": "https://dev.driplet.codify.ch/auth/google/callback", + "value_source": [] + }, + { + "name": "GOOGLE_CLIENT_ID", + "value": "", + "value_source": [ + { + "secret_key_ref": [ + { + "secret": "projects/driplet-core-dev/secrets/oauth2-client-id", + "version": "latest" + } + ] + } + ] + }, + { + "name": "GOOGLE_CLIENT_SECRET", + "value": "", + "value_source": [ + { + "secret_key_ref": [ + { + "secret": "projects/driplet-core-dev/secrets/oauth2-client-secret", + "version": "latest" + } + ] + } + ] + }, + { + "name": "GOOGLE_PROJECT_ID", + "value": "driplet-core-dev", + "value_source": [] + }, + { + "name": "GOOGLE_PUBSUB_TOPIC_CLIENT_EVENTS", + "value": "client-events", + "value_source": [] + }, + { + "name": "POSTGRES_CONNECTION_STRING", + "value": "postgresql://driplet_application_user:alAu4IcNF1kqO11CmAggictObY4LgVUgFGJVrFn2hJLQKGY9BOFLCfweSy20CNYX@/postgres?host=/cloudsql/driplet-core-dev:europe-west1:driplet-application-db", + "value_source": [] + }, + { + "name": "PUBSUB_PROJECT_ID", + "value": "driplet-core-dev", + "value_source": [] + }, + { + "name": "SESSION_SECRET", + "value": "", + "value_source": [ + { + "secret_key_ref": [ + { + "secret": "projects/driplet-core-dev/secrets/session-secret", + "version": "latest" + } + ] + } + ] + } + ], + "image": "europe-west1-docker.pkg.dev/driplet-core-dev/driplet-repository/driplet:latest", + "liveness_probe": [], + "name": "", + "ports": [ + { + "container_port": 1991, + "name": "http1" + } + ], + "resources": [ + { + "cpu_idle": true, + "limits": { + "cpu": "1000m", + "memory": "512Mi" + }, + "startup_cpu_boost": false + } + ], + "startup_probe": [ + { + "failure_threshold": 1, + "grpc": [], + "http_get": [], + "initial_delay_seconds": 0, + "period_seconds": 240, + "tcp_socket": [ + { + "port": 1991 + } + ], + "timeout_seconds": 240 + } + ], + "volume_mounts": [ + { + "mount_path": "/cloudsql", + "name": "cloudsql" + } + ], + "working_dir": "" + } + ], + "encryption_key": "", + "execution_environment": "", + "labels": {}, + "max_instance_request_concurrency": 80, + "revision": "", + "scaling": [ + { + "max_instance_count": 100, + "min_instance_count": 0 + } + ], + "service_account": "driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "session_affinity": false, + "timeout": "300s", + "volumes": [ + { + "cloud_sql_instance": [ + { + "instances": [ + "driplet-core-dev:europe-west1:driplet-application-db" + ] + } + ], + "gcs": [], + "name": "cloudsql", + "nfs": [], + "secret": [] + } + ], + "vpc_access": [] + } + ], + "terminal_condition": [ + { + "execution_reason": "", + "last_transition_time": "2024-11-14T20:53:39.718061Z", + "message": "", + "reason": "", + "revision_reason": "", + "severity": "", + "state": "CONDITION_SUCCEEDED", + "type": "Ready" + } + ], + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "timeouts": null, + "traffic": [ + { + "percent": 100, + "revision": "", + "tag": "", + "type": "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST" + } + ], + "traffic_statuses": [ + { + "percent": 100, + "revision": "", + "tag": "", + "type": "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST", + "uri": "" + } + ], + "uid": "fe620220-5698-4eaa-a6a6-d4dccbbf8d3b", + "update_time": "2024-11-14T20:53:15.971600Z", + "uri": "https://driplet-service-ecl72yiw7a-ew.a.run.app" + }, + "sensitive_attributes": [ + [ + { + "type": "get_attr", + "value": "template" + }, + { + "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": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.compute", + "mode": "managed", + "type": "google_project_service", + "name": "cloud_run", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "disable_dependent_services": null, + "disable_on_destroy": true, + "id": "driplet-core-dev/run.googleapis.com", + "project": "driplet-core-dev", + "service": "run.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMCwidXBkYXRlIjoxMjAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.database", + "mode": "managed", + "type": "google_sql_database_instance", + "name": "driplet_application_db", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "available_maintenance_versions": [ + "POSTGRES_17_0.R20241011.00_03" + ], + "clone": [], + "connection_name": "driplet-core-dev:europe-west1:driplet-application-db", + "database_version": "POSTGRES_17", + "deletion_protection": true, + "dns_name": "", + "encryption_key_name": null, + "first_ip_address": "35.205.187.58", + "id": "driplet-application-db", + "instance_type": "CLOUD_SQL_INSTANCE", + "ip_address": [ + { + "ip_address": "35.205.187.58", + "time_to_retire": "", + "type": "PRIMARY" + }, + { + "ip_address": "35.195.112.136", + "time_to_retire": "", + "type": "OUTGOING" + } + ], + "maintenance_version": "POSTGRES_17_0.R20241011.00_01", + "master_instance_name": "", + "name": "driplet-application-db", + "private_ip_address": "", + "project": "driplet-core-dev", + "psc_service_attachment_link": "", + "public_ip_address": "35.205.187.58", + "region": "europe-west1", + "replica_configuration": [], + "restore_backup_context": [], + "root_password": null, + "self_link": "https://sqladmin.googleapis.com/sql/v1beta4/projects/driplet-core-dev/instances/driplet-application-db", + "server_ca_cert": [ + { + "cert": "-----BEGIN CERTIFICATE-----\nMIIDfzCCAmegAwIBAgIBADANBgkqhkiG9w0BAQsFADB3MS0wKwYDVQQuEyQzZjI3\nMzYxNC1mNjgxLTRjOTktYTc4OC1mYWM5NjM3N2IwMjExIzAhBgNVBAMTGkdvb2ds\nZSBDbG91ZCBTUUwgU2VydmVyIENBMRQwEgYDVQQKEwtHb29nbGUsIEluYzELMAkG\nA1UEBhMCVVMwHhcNMjQxMTE0MTk1NzIwWhcNMzQxMTEyMTk1ODIwWjB3MS0wKwYD\nVQQuEyQzZjI3MzYxNC1mNjgxLTRjOTktYTc4OC1mYWM5NjM3N2IwMjExIzAhBgNV\nBAMTGkdvb2dsZSBDbG91ZCBTUUwgU2VydmVyIENBMRQwEgYDVQQKEwtHb29nbGUs\nIEluYzELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\nAQC8nFekUlY/8ZSQrTXcofxh49KsSXGtg9pC/s3dbnMmrKG+EO6AJAsdiIxPfnZb\nLS3TCgM29Mzi7HaCzsWd36/toOpZ6H56/VxW/hNLyAvqM9TnP83bJRTuGbnoMFe/\nXgSX2MO7Tmon4dO7eMzPXUxbgg5dWmHo5VZmoGWuM3bJjFdPsQLeaMC96ztaxbC7\nXV22gEKmv/t4i7od80sJFN5hrc/y/rWA3O0xqAoBZJqujBk8pWbSsX/6+ZnyfnUT\n9agwdau/qGy5muJtIobPxHyHYZaLsccFSISNGO8Oa65r5kXNk8vvc2ggKJY+8O4C\n90JGBzUZiGbfRf89kNwc1RtNAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQAw\nDQYJKoZIhvcNAQELBQADggEBABCK8uMK1VW5YwRPQNRe7ErX561ZGUznYIj92YUc\n1H91QSeT/hVuI/vus0jEjpEw2V8TFv1nacc6QihKW+hYUh/qe5m36BgczsoDezWt\nGR6yAEowAGNBo4h87/K8kZjd92u7MH+Akm7orhrHu9I2Wr1WNdxCkIC3OYhd/dww\nxdtAzjacznAw2bHzuuoFntl0KZ+p5aUelNuLyvT/Y2KpzuPZTFs93YcdIHL/BswS\nvyxQ6tgei/Y3EI2p1gTtcDDc8uR95vcPdQhyceXA/yFbL2IFwS6ta0/MIqF2yQcs\nsAaMntx1e3SkWsWFlpwp08O/Oz9G2eU2u81kVvx+FnudGys=\n-----END CERTIFICATE-----", + "common_name": "C=US,O=Google\\, Inc,CN=Google Cloud SQL Server CA,dnQualifier=3f273614-f681-4c99-a788-fac96377b021", + "create_time": "2024-11-14T19:57:20.804Z", + "expiration_time": "2034-11-12T19:58:20.804Z", + "sha1_fingerprint": "d3ea46e6c93215eddf1f6f0e46ef868acb11d716" + } + ], + "service_account_email_address": "p195952802985-yi0v76@gcp-sa-cloud-sql.iam.gserviceaccount.com", + "settings": [ + { + "activation_policy": "ALWAYS", + "active_directory_config": [], + "advanced_machine_features": [], + "availability_type": "ZONAL", + "backup_configuration": [ + { + "backup_retention_settings": [ + { + "retained_backups": 15, + "retention_unit": "COUNT" + } + ], + "binary_log_enabled": false, + "enabled": true, + "location": "", + "point_in_time_recovery_enabled": true, + "start_time": "10:00", + "transaction_log_retention_days": 14 + } + ], + "collation": "", + "connector_enforcement": "NOT_REQUIRED", + "data_cache_config": [ + { + "data_cache_enabled": true + } + ], + "database_flags": [ + { + "name": "cloudsql.iam_authentication", + "value": "on" + } + ], + "deletion_protection_enabled": false, + "deny_maintenance_period": [], + "disk_autoresize": true, + "disk_autoresize_limit": 0, + "disk_size": 10, + "disk_type": "PD_SSD", + "edition": "ENTERPRISE_PLUS", + "enable_dataplex_integration": false, + "enable_google_ml_integration": false, + "insights_config": [], + "ip_configuration": [ + { + "allocated_ip_range": "", + "authorized_networks": [], + "enable_private_path_for_google_cloud_services": false, + "ipv4_enabled": true, + "private_network": "", + "psc_config": [], + "server_ca_mode": "GOOGLE_MANAGED_INTERNAL_CA", + "ssl_mode": "ALLOW_UNENCRYPTED_AND_ENCRYPTED" + } + ], + "location_preference": [ + { + "follow_gae_application": "", + "secondary_zone": "", + "zone": "europe-west1-d" + } + ], + "maintenance_window": [], + "password_validation_policy": [], + "pricing_plan": "PER_USE", + "sql_server_audit_config": [], + "tier": "db-perf-optimized-N-2", + "time_zone": "", + "user_labels": {}, + "version": 6 + } + ], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo1NDAwMDAwMDAwMDAwLCJkZWxldGUiOjU0MDAwMDAwMDAwMDAsInVwZGF0ZSI6NTQwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.database", + "mode": "managed", + "type": "google_sql_user", + "name": "driplet_application_db_user", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "deletion_policy": null, + "host": "", + "id": "driplet_application_user//driplet-application-db", + "instance": "driplet-application-db", + "name": "driplet_application_user", + "password": "alAu4IcNF1kqO11CmAggictObY4LgVUgFGJVrFn2hJLQKGY9BOFLCfweSy20CNYX", + "password_policy": [], + "project": "driplet-core-dev", + "sql_server_user_details": [], + "timeouts": null, + "type": "" + }, + "sensitive_attributes": [ + [ + { + "type": "get_attr", + "value": "password" + } + ] + ], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwLCJ1cGRhdGUiOjYwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.random_password.driplet_application_db_password" + ] + } + ] + }, + { + "module": "module.main.module.database", + "mode": "managed", + "type": "random_password", + "name": "driplet_application_db_password", + "provider": "provider[\"registry.terraform.io/hashicorp/random\"]", + "instances": [ + { + "schema_version": 3, + "attributes": { + "bcrypt_hash": "$2a$10$KctjPjIZDuRCsKE2aPvcQeSw1kIykWvt1UbqevhvpIfSvzHFS4A4a", + "id": "none", + "keepers": null, + "length": 64, + "lower": true, + "min_lower": 5, + "min_numeric": 0, + "min_special": 0, + "min_upper": 5, + "number": true, + "numeric": true, + "override_special": null, + "result": "alAu4IcNF1kqO11CmAggictObY4LgVUgFGJVrFn2hJLQKGY9BOFLCfweSy20CNYX", + "special": false, + "upper": true + }, + "sensitive_attributes": [], + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.iam", + "mode": "managed", + "type": "google_project_iam_member", + "name": "driplet_service_cloudsql_connector", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYnLD99VxA=", + "id": "driplet-core-dev/roles/cloudsql.client/serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/cloudsql.client" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.iam.google_service_account.driplet_service_account" + ] + } + ] + }, + { + "module": "module.main.module.iam", + "mode": "managed", + "type": "google_project_iam_member", + "name": "driplet_service_pubsub_publisher", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYnLD99VxA=", + "id": "driplet-core-dev/roles/pubsub.admin/serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/pubsub.admin" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.iam.google_service_account.driplet_service_account" + ] + } + ] + }, + { + "module": "module.main.module.iam", + "mode": "managed", + "type": "google_project_iam_member", + "name": "pubsub_bigquery_access", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYnLD99VxA=", + "id": "driplet-core-dev/roles/bigquery.dataEditor/serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/bigquery.dataEditor" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.iam.google_service_account.driplet_service_account" + ] + } + ] + }, + { + "module": "module.main.module.iam", + "mode": "managed", + "type": "google_project_iam_member", + "name": "pubsub_bigquery_writer", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYnLD99VxA=", + "id": "driplet-core-dev/roles/bigquery.dataEditor/serviceAccount:service-195952802985@gcp-sa-pubsub.iam.gserviceaccount.com", + "member": "serviceAccount:service-195952802985@gcp-sa-pubsub.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/bigquery.dataEditor" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.iam.google_project_service_identity.pubsub" + ] + } + ] + }, + { + "module": "module.main.module.iam", + "mode": "managed", + "type": "google_project_service_identity", + "name": "pubsub", + "provider": "provider[\"registry.terraform.io/hashicorp/google-beta\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "email": "service-195952802985@gcp-sa-pubsub.iam.gserviceaccount.com", + "id": "projects/driplet-core-dev/services/pubsub.googleapis.com", + "member": "serviceAccount:service-195952802985@gcp-sa-pubsub.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "service": "pubsub.googleapis.com", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjYwMDAwMDAwMDAwMH19" + } + ] + }, + { + "module": "module.main.module.iam", + "mode": "managed", + "type": "google_service_account", + "name": "driplet_service_account", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "account_id": "driplet-service-account", + "create_ignore_already_exists": null, + "description": "", + "disabled": false, + "display_name": "Driplet Service Account", + "email": "driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "id": "projects/driplet-core-dev/serviceAccounts/driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "name": "projects/driplet-core-dev/serviceAccounts/driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "timeouts": null, + "unique_id": "108709542517555473549" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozMDAwMDAwMDAwMDB9fQ==" + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_backend_service", + "name": "driplet_backend", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "affinity_cookie_ttl_sec": 0, + "backend": [ + { + "balancing_mode": "UTILIZATION", + "capacity_scaler": 1, + "description": "", + "group": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/regions/europe-west1/networkEndpointGroups/driplet-service-neg", + "max_connections": 0, + "max_connections_per_endpoint": 0, + "max_connections_per_instance": 0, + "max_rate": 0, + "max_rate_per_endpoint": 0, + "max_rate_per_instance": 0, + "max_utilization": 0 + } + ], + "cdn_policy": [], + "circuit_breakers": [], + "compression_mode": "", + "connection_draining_timeout_sec": 300, + "consistent_hash": [], + "creation_timestamp": "2024-11-14T12:53:58.874-08:00", + "custom_request_headers": [], + "custom_response_headers": [], + "description": "", + "edge_security_policy": "", + "enable_cdn": false, + "fingerprint": "j_pVdHz9chw=", + "generated_id": 1922738204471713161, + "health_checks": [], + "iap": [], + "id": "projects/driplet-core-dev/global/backendServices/driplet-cloud-run-backend", + "ip_address_selection_policy": "", + "load_balancing_scheme": "EXTERNAL", + "locality_lb_policies": [], + "locality_lb_policy": "", + "log_config": [], + "name": "driplet-cloud-run-backend", + "outlier_detection": [], + "port_name": "http", + "project": "driplet-core-dev", + "protocol": "HTTP", + "security_policy": "", + "security_settings": [], + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/backendServices/driplet-cloud-run-backend", + "service_lb_policy": "", + "session_affinity": "NONE", + "strong_session_affinity_cookie": [], + "timeout_sec": 30, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.network.google_compute_region_network_endpoint_group.driplet_service_neg", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_firewall", + "name": "ingress", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 1, + "attributes": { + "allow": [ + { + "ports": [ + "80", + "443" + ], + "protocol": "tcp" + } + ], + "creation_timestamp": "2024-11-14T11:58:14.543-08:00", + "deny": [], + "description": "", + "destination_ranges": [], + "direction": "INGRESS", + "disabled": false, + "enable_logging": null, + "id": "projects/driplet-core-dev/global/firewalls/allow-http-https", + "log_config": [], + "name": "allow-http-https", + "network": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/networks/driplet-vpc", + "priority": 1000, + "project": "driplet-core-dev", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/firewalls/allow-http-https", + "source_ranges": [ + "0.0.0.0/0" + ], + "source_service_accounts": [], + "source_tags": [], + "target_service_accounts": [], + "target_tags": [], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.network.google_compute_network.driplet_vpc_network" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_global_address", + "name": "new_loadbalancer_ip", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "address": "34.8.81.159", + "address_type": "EXTERNAL", + "creation_timestamp": "2024-11-14T12:04:37.760-08:00", + "description": "", + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "id": "projects/driplet-core-dev/global/addresses/loadbalancer-ip", + "ip_version": "", + "label_fingerprint": "vezUS-42LLM=", + "labels": {}, + "name": "loadbalancer-ip", + "network": "", + "prefix_length": 0, + "project": "driplet-core-dev", + "purpose": "", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/addresses/loadbalancer-ip", + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_global_forwarding_rule", + "name": "driplet_http_forwarding_rule", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "base_forwarding_rule": "", + "description": "", + "effective_labels": {}, + "id": "projects/driplet-core-dev/global/forwardingRules/driplet-http-forwarding-rule", + "ip_address": "34.8.81.159", + "ip_protocol": "TCP", + "ip_version": "", + "label_fingerprint": "42WmSpB8rSM=", + "labels": {}, + "load_balancing_scheme": "EXTERNAL", + "metadata_filters": [], + "name": "driplet-http-forwarding-rule", + "network": "", + "no_automate_dns_zone": null, + "port_range": "80-80", + "project": "driplet-core-dev", + "psc_connection_id": "", + "psc_connection_status": "", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/forwardingRules/driplet-http-forwarding-rule", + "service_directory_registrations": [], + "source_ip_ranges": [], + "subnetwork": "", + "target": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/targetHttpProxies/http-proxy", + "terraform_labels": {}, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.network.google_compute_backend_service.driplet_backend", + "module.main.module.network.google_compute_global_address.new_loadbalancer_ip", + "module.main.module.network.google_compute_region_network_endpoint_group.driplet_service_neg", + "module.main.module.network.google_compute_target_http_proxy.driplet_http_proxy", + "module.main.module.network.google_compute_url_map.driplet_url_map", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_global_forwarding_rule", + "name": "driplet_https_forwarding_rule", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "base_forwarding_rule": "", + "description": "", + "effective_labels": {}, + "id": "projects/driplet-core-dev/global/forwardingRules/driplet-https-forwarding-rule", + "ip_address": "34.8.81.159", + "ip_protocol": "TCP", + "ip_version": "", + "label_fingerprint": "42WmSpB8rSM=", + "labels": {}, + "load_balancing_scheme": "EXTERNAL", + "metadata_filters": [], + "name": "driplet-https-forwarding-rule", + "network": "", + "no_automate_dns_zone": null, + "port_range": "443-443", + "project": "driplet-core-dev", + "psc_connection_id": "", + "psc_connection_status": "", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/forwardingRules/driplet-https-forwarding-rule", + "service_directory_registrations": [], + "source_ip_ranges": [], + "subnetwork": "", + "target": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/targetHttpsProxies/driplet-https-proxy", + "terraform_labels": {}, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.network.google_compute_backend_service.driplet_backend", + "module.main.module.network.google_compute_global_address.new_loadbalancer_ip", + "module.main.module.network.google_compute_managed_ssl_certificate.driplet_ssl_cert", + "module.main.module.network.google_compute_region_network_endpoint_group.driplet_service_neg", + "module.main.module.network.google_compute_target_https_proxy.driplet_https_proxy", + "module.main.module.network.google_compute_url_map.driplet_url_map", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_managed_ssl_certificate", + "name": "driplet_ssl_cert", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "certificate_id": 5704097514326321466, + "creation_timestamp": "2024-11-14T12:04:37.665-08:00", + "description": "", + "expire_time": "2025-02-12T12:43:02.000-08:00", + "id": "projects/driplet-core-dev/global/sslCertificates/driplet-ssl-cert", + "managed": [ + { + "domains": [ + "dev.driplet.codify.ch" + ] + } + ], + "name": "driplet-ssl-cert", + "project": "driplet-core-dev", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/sslCertificates/driplet-ssl-cert", + "subject_alternative_names": [ + "dev.driplet.codify.ch" + ], + "timeouts": null, + "type": "MANAGED" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxODAwMDAwMDAwMDAwLCJkZWxldGUiOjE4MDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_network", + "name": "driplet_vpc_network", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "auto_create_subnetworks": false, + "delete_default_routes_on_create": false, + "description": "", + "enable_ula_internal_ipv6": false, + "gateway_ipv4": "", + "id": "projects/driplet-core-dev/global/networks/driplet-vpc", + "internal_ipv6_range": "", + "mtu": 0, + "name": "driplet-vpc", + "network_firewall_policy_enforcement_order": "AFTER_CLASSIC_FIREWALL", + "numeric_id": "1879149307234085039", + "project": "driplet-core-dev", + "routing_mode": "REGIONAL", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/networks/driplet-vpc", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_region_network_endpoint_group", + "name": "driplet_service_neg", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "app_engine": [], + "cloud_function": [], + "cloud_run": [ + { + "service": "driplet-service", + "tag": "", + "url_mask": "" + } + ], + "description": "", + "id": "projects/driplet-core-dev/regions/europe-west1/networkEndpointGroups/driplet-service-neg", + "name": "driplet-service-neg", + "network": "", + "network_endpoint_type": "SERVERLESS", + "project": "driplet-core-dev", + "psc_target_service": "", + "region": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/regions/europe-west1", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/regions/europe-west1/networkEndpointGroups/driplet-service-neg", + "subnetwork": "", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDB9fQ==", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_subnetwork", + "name": "driplet_vpc_subnet", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "creation_timestamp": "2024-11-14T11:58:16.739-08:00", + "description": "", + "external_ipv6_prefix": "", + "fingerprint": null, + "gateway_address": "10.0.1.1", + "id": "projects/driplet-core-dev/regions/europe-west1/subnetworks/driplet-subnet", + "internal_ipv6_prefix": "", + "ip_cidr_range": "10.0.1.0/24", + "ipv6_access_type": "", + "ipv6_cidr_range": "", + "log_config": [], + "name": "driplet-subnet", + "network": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/networks/driplet-vpc", + "private_ip_google_access": false, + "private_ipv6_google_access": "DISABLE_GOOGLE_ACCESS", + "project": "driplet-core-dev", + "purpose": "PRIVATE", + "region": "europe-west1", + "reserved_internal_range": "", + "role": "", + "secondary_ip_range": [], + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/regions/europe-west1/subnetworks/driplet-subnet", + "send_secondary_ip_range_if_empty": null, + "stack_type": "IPV4_ONLY", + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.network.google_compute_network.driplet_vpc_network" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_target_http_proxy", + "name": "driplet_http_proxy", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "creation_timestamp": "2024-11-14T13:00:39.531-08:00", + "description": "", + "http_keep_alive_timeout_sec": 0, + "id": "projects/driplet-core-dev/global/targetHttpProxies/http-proxy", + "name": "http-proxy", + "project": "driplet-core-dev", + "proxy_bind": false, + "proxy_id": 3310992331709864472, + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/targetHttpProxies/http-proxy", + "timeouts": null, + "url_map": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/urlMaps/driplet-url-map" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.network.google_compute_backend_service.driplet_backend", + "module.main.module.network.google_compute_region_network_endpoint_group.driplet_service_neg", + "module.main.module.network.google_compute_url_map.driplet_url_map", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_target_https_proxy", + "name": "driplet_https_proxy", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "certificate_manager_certificates": [], + "certificate_map": "", + "creation_timestamp": "2024-11-14T13:00:39.590-08:00", + "description": "", + "http_keep_alive_timeout_sec": 0, + "id": "projects/driplet-core-dev/global/targetHttpsProxies/driplet-https-proxy", + "name": "driplet-https-proxy", + "project": "driplet-core-dev", + "proxy_bind": false, + "proxy_id": 2864095568607304216, + "quic_override": "NONE", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/targetHttpsProxies/driplet-https-proxy", + "server_tls_policy": "", + "ssl_certificates": [ + "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/sslCertificates/driplet-ssl-cert" + ], + "ssl_policy": "", + "timeouts": null, + "tls_early_data": "DISABLED", + "url_map": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/urlMaps/driplet-url-map" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.network.google_compute_backend_service.driplet_backend", + "module.main.module.network.google_compute_managed_ssl_certificate.driplet_ssl_cert", + "module.main.module.network.google_compute_region_network_endpoint_group.driplet_service_neg", + "module.main.module.network.google_compute_url_map.driplet_url_map", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.network", + "mode": "managed", + "type": "google_compute_url_map", + "name": "driplet_url_map", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "creation_timestamp": "2024-11-14T13:00:28.072-08:00", + "default_route_action": [], + "default_service": "", + "default_url_redirect": [ + { + "host_redirect": "", + "https_redirect": true, + "path_redirect": "", + "prefix_redirect": "", + "redirect_response_code": "", + "strip_query": true + } + ], + "description": "", + "fingerprint": "B6nsvwyRsow=", + "header_action": [], + "host_rule": [ + { + "description": "", + "hosts": [ + "*" + ], + "path_matcher": "catch-all" + } + ], + "id": "projects/driplet-core-dev/global/urlMaps/driplet-url-map", + "map_id": 6014141634237422083, + "name": "driplet-url-map", + "path_matcher": [ + { + "default_route_action": [], + "default_service": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/backendServices/driplet-cloud-run-backend", + "default_url_redirect": [], + "description": "", + "header_action": [], + "name": "catch-all", + "path_rule": [], + "route_rules": [] + } + ], + "project": "driplet-core-dev", + "self_link": "https://www.googleapis.com/compute/v1/projects/driplet-core-dev/global/urlMaps/driplet-url-map", + "test": [], + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.compute.google_cloud_run_v2_service.driplet_service", + "module.main.module.database.google_sql_database_instance.driplet_application_db", + "module.main.module.database.google_sql_user.driplet_application_db_user", + "module.main.module.database.random_password.driplet_application_db_password", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.network.google_compute_backend_service.driplet_backend", + "module.main.module.network.google_compute_region_network_endpoint_group.driplet_service_neg", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret", + "module.main.module.secrets.google_secret_manager_secret.session_secret", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_id_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.oauth2_client_secret_member", + "module.main.module.secrets.google_secret_manager_secret_iam_member.session_auth_secret" + ] + } + ] + }, + { + "module": "module.main.module.oauth", + "mode": "managed", + "type": "null_resource", + "name": "create_oauth_client1", + "provider": "provider[\"registry.terraform.io/hashicorp/null\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "2008742667478530464", + "triggers": null + }, + "sensitive_attributes": [], + "dependencies": [ + "module.main.module.iam.google_project_iam_member.driplet_service_cloudsql_connector", + "module.main.module.iam.google_project_iam_member.driplet_service_pubsub_publisher", + "module.main.module.iam.google_project_iam_member.pubsub_bigquery_access", + "module.main.module.iam.google_project_iam_member.pubsub_bigquery_writer", + "module.main.module.iam.google_project_service_identity.pubsub", + "module.main.module.iam.google_service_account.driplet_service_account" + ] + } + ] + }, + { + "module": "module.main.module.oauth", + "mode": "managed", + "type": "null_resource", + "name": "create_oauth_credentials", + "provider": "provider[\"registry.terraform.io/hashicorp/null\"]", + "instances": [ + { + "status": "tainted", + "schema_version": 0, + "attributes": { + "id": "7255705589981383360", + "triggers": null + }, + "sensitive_attributes": [], + "dependencies": [ + "module.main.module.iam.google_project_iam_member.driplet_service_cloudsql_connector", + "module.main.module.iam.google_project_iam_member.driplet_service_pubsub_publisher", + "module.main.module.iam.google_project_iam_member.pubsub_bigquery_access", + "module.main.module.iam.google_project_iam_member.pubsub_bigquery_writer", + "module.main.module.iam.google_project_service_identity.pubsub", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.oauth.null_resource.create_oauth_client1" + ] + } + ] + }, + { + "module": "module.main.module.pubsub", + "mode": "managed", + "type": "google_pubsub_subscription", + "name": "bigquery_subscription", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "ack_deadline_seconds": 600, + "bigquery_config": [ + { + "drop_unknown_fields": true, + "service_account_email": "", + "table": "driplet-core-dev.source.client_events", + "use_table_schema": false, + "use_topic_schema": false, + "write_metadata": false + } + ], + "cloud_storage_config": [], + "dead_letter_policy": [], + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "enable_exactly_once_delivery": false, + "enable_message_ordering": false, + "expiration_policy": [ + { + "ttl": "2678400s" + } + ], + "filter": "", + "id": "projects/driplet-core-dev/subscriptions/client-events-bigquery", + "labels": {}, + "message_retention_duration": "604800s", + "name": "client-events-bigquery", + "project": "driplet-core-dev", + "push_config": [], + "retain_acked_messages": false, + "retry_policy": [], + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "timeouts": null, + "topic": "projects/driplet-core-dev/topics/client-events" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.pubsub.google_pubsub_topic.client_events" + ] + } + ] + }, + { + "module": "module.main.module.pubsub", + "mode": "managed", + "type": "google_pubsub_topic", + "name": "client_events", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "id": "projects/driplet-core-dev/topics/client-events", + "ingestion_data_source_settings": [], + "kms_key_name": "", + "labels": {}, + "message_retention_duration": "604800s", + "message_storage_policy": [], + "name": "client-events", + "project": "driplet-core-dev", + "schema_settings": [], + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19" + } + ] + }, + { + "module": "module.main.module.registry", + "mode": "managed", + "type": "google_artifact_registry_repository", + "name": "driplet_registry", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "cleanup_policies": [ + { + "action": "DELETE", + "condition": [ + { + "newer_than": "", + "older_than": "432000s", + "package_name_prefixes": [], + "tag_prefixes": [], + "tag_state": "ANY", + "version_name_prefixes": [] + } + ], + "id": "delete_old_images", + "most_recent_versions": [] + }, + { + "action": "KEEP", + "condition": [], + "id": "keep_last_2_versions", + "most_recent_versions": [ + { + "keep_count": 2, + "package_name_prefixes": [] + } + ] + } + ], + "cleanup_policy_dry_run": false, + "create_time": "2024-11-14T19:58:02.943016Z", + "description": "Driplet Repository", + "docker_config": [], + "effective_labels": { + "goog-terraform-provisioned": "true" + }, + "format": "DOCKER", + "id": "projects/driplet-core-dev/locations/europe-west1/repositories/driplet-repository", + "kms_key_name": "", + "labels": {}, + "location": "europe-west1", + "maven_config": [], + "mode": "STANDARD_REPOSITORY", + "name": "driplet-repository", + "project": "driplet-core-dev", + "remote_repository_config": [], + "repository_id": "driplet-repository", + "terraform_labels": { + "goog-terraform-provisioned": "true" + }, + "timeouts": null, + "update_time": "2024-11-14T20:52:59.325843Z", + "virtual_repository_config": [] + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19" + } + ] + }, + { + "module": "module.main.module.secrets", + "mode": "managed", + "type": "google_secret_manager_secret", + "name": "oauth2_client_id", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "annotations": {}, + "create_time": "2024-11-14T20:05:31.673532Z", + "effective_annotations": {}, + "effective_labels": { + "component": "driplet", + "goog-terraform-provisioned": "true", + "managed": "terraform" + }, + "expire_time": "", + "id": "projects/driplet-core-dev/secrets/oauth2-client-id", + "labels": { + "component": "driplet", + "managed": "terraform" + }, + "name": "projects/195952802985/secrets/oauth2-client-id", + "project": "driplet-core-dev", + "replication": [ + { + "auto": [], + "user_managed": [ + { + "replicas": [ + { + "customer_managed_encryption": [], + "location": "europe-west1" + } + ] + } + ] + } + ], + "rotation": [], + "secret_id": "oauth2-client-id", + "terraform_labels": { + "component": "driplet", + "goog-terraform-provisioned": "true", + "managed": "terraform" + }, + "timeouts": null, + "topics": [], + "ttl": null, + "version_aliases": {}, + "version_destroy_ttl": "" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.secrets", + "mode": "managed", + "type": "google_secret_manager_secret", + "name": "oauth2_client_secret", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "annotations": {}, + "create_time": "2024-11-14T20:04:38.902279Z", + "effective_annotations": {}, + "effective_labels": { + "component": "driplet", + "goog-terraform-provisioned": "true", + "managed": "terraform" + }, + "expire_time": "", + "id": "projects/driplet-core-dev/secrets/oauth2-client-secret", + "labels": { + "component": "driplet", + "managed": "terraform" + }, + "name": "projects/195952802985/secrets/oauth2-client-secret", + "project": "driplet-core-dev", + "replication": [ + { + "auto": [], + "user_managed": [ + { + "replicas": [ + { + "customer_managed_encryption": [], + "location": "europe-west1" + } + ] + } + ] + } + ], + "rotation": [], + "secret_id": "oauth2-client-secret", + "terraform_labels": { + "component": "driplet", + "goog-terraform-provisioned": "true", + "managed": "terraform" + }, + "timeouts": null, + "topics": [], + "ttl": null, + "version_aliases": {}, + "version_destroy_ttl": "" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.secrets", + "mode": "managed", + "type": "google_secret_manager_secret", + "name": "session_secret", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "annotations": {}, + "create_time": "2024-11-14T20:04:39.987444Z", + "effective_annotations": {}, + "effective_labels": { + "component": "driplet", + "goog-terraform-provisioned": "true", + "managed": "terraform" + }, + "expire_time": "", + "id": "projects/driplet-core-dev/secrets/session-secret", + "labels": { + "component": "driplet", + "managed": "terraform" + }, + "name": "projects/195952802985/secrets/session-secret", + "project": "driplet-core-dev", + "replication": [ + { + "auto": [], + "user_managed": [ + { + "replicas": [ + { + "customer_managed_encryption": [], + "location": "europe-west1" + } + ] + } + ] + } + ], + "rotation": [], + "secret_id": "session-secret", + "terraform_labels": { + "component": "driplet", + "goog-terraform-provisioned": "true", + "managed": "terraform" + }, + "timeouts": null, + "topics": [], + "ttl": null, + "version_aliases": {}, + "version_destroy_ttl": "" + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking" + ] + } + ] + }, + { + "module": "module.main.module.secrets", + "mode": "managed", + "type": "google_secret_manager_secret_iam_member", + "name": "oauth2_client_id_member", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYm5PkK3Es=", + "id": "projects/driplet-core-dev/secrets/oauth2-client-id/roles/secretmanager.secretAccessor/serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/secretmanager.secretAccessor", + "secret_id": "projects/driplet-core-dev/secrets/oauth2-client-id" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_id" + ] + } + ] + }, + { + "module": "module.main.module.secrets", + "mode": "managed", + "type": "google_secret_manager_secret_iam_member", + "name": "oauth2_client_secret_member", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYm5PXip14=", + "id": "projects/driplet-core-dev/secrets/oauth2-client-secret/roles/secretmanager.secretAccessor/serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/secretmanager.secretAccessor", + "secret_id": "projects/driplet-core-dev/secrets/oauth2-client-secret" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.oauth2_client_secret" + ] + } + ] + }, + { + "module": "module.main.module.secrets", + "mode": "managed", + "type": "google_secret_manager_secret_iam_member", + "name": "session_auth_secret", + "provider": "module.main.provider[\"registry.terraform.io/hashicorp/google\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "condition": [], + "etag": "BwYm5PX0ons=", + "id": "projects/driplet-core-dev/secrets/session-secret/roles/secretmanager.secretAccessor/serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "member": "serviceAccount:driplet-service-account@driplet-core-dev.iam.gserviceaccount.com", + "project": "driplet-core-dev", + "role": "roles/secretmanager.secretAccessor", + "secret_id": "projects/driplet-core-dev/secrets/session-secret" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "module.main.module.api.google_project_service.artifact_registry", + "module.main.module.api.google_project_service.bigquery", + "module.main.module.api.google_project_service.cloud_run", + "module.main.module.api.google_project_service.cloud_sql", + "module.main.module.api.google_project_service.compute", + "module.main.module.api.google_project_service.iam", + "module.main.module.api.google_project_service.pubsub", + "module.main.module.api.google_project_service.secret_manager", + "module.main.module.api.google_project_service.service_networking", + "module.main.module.iam.google_service_account.driplet_service_account", + "module.main.module.secrets.google_secret_manager_secret.session_secret" + ] + } + ] + } + ], + "check_results": null +} diff --git a/infra/envs/dev/terraform.tfvars b/infra/envs/dev/terraform.tfvars new file mode 100644 index 0000000..64652fa --- /dev/null +++ b/infra/envs/dev/terraform.tfvars @@ -0,0 +1,38 @@ +# Environment-specific variables for dev + +# General configuration +project_id = "driplet-core-dev" +region = "europe-west1" + +# Networking configuration +network_name = "driplet-vpc" +subnet_ranges = { "driplet-subnet" = "10.0.1.0/24" } + +# Database configuration +database_instance_name = "driplet-application-db" +database_user = "driplet_app_user" + +# Artifact Registry configuration +artifact_registry_repository_id = "driplet-repository" + +# Cloud Run configuration +cloud_run_service_name = "driplet-service" +oauth_run_callback_url = "https://dev.driplet.codify.ch/auth/google/callback" + +# Docker image configuration +image_name = "driplet" +image_tag = "latest" + +# Pub/Sub configuration +pubsub_topic_client_events = "client-events" +pubsub_subscription_client_events = "client-events-bigquery" + +# BigQuery configuration + + +# Load balancer configuration +domain = "dev.driplet.codify.ch" + +# BigQuery configuration +bigquery_table = "client_events" +bigquery_dataset = "source" diff --git a/infra/envs/dev/variables.tf b/infra/envs/dev/variables.tf new file mode 100644 index 0000000..835aae5 --- /dev/null +++ b/infra/envs/dev/variables.tf @@ -0,0 +1,80 @@ +# Variable declarations for the dev environment +variable "project_id" { + description = "The GCP project ID for the dev environment" + type = string +} + +variable "region" { + description = "The GCP region for resources in the dev environment" + type = string +} + +variable "domain" { + description = "The domain for SSL certificates and other configurations in the dev environment" + type = string +} + +variable "network_name" { + description = "The name of the VPC network in the dev environment" + type = string +} + +variable "subnet_ranges" { + description = "A map of subnet names to CIDR ranges in the dev environment" + type = map(string) +} + +variable "database_instance_name" { + description = "The name of the Cloud SQL database instance in the dev environment" + type = string +} + +variable "database_user" { + description = "The username for the database in the dev environment" + type = string +} + +variable "cloud_run_service_name" { + description = "The name of the Cloud Run service in the dev environment" + type = string +} + +variable "image_name" { + description = "The name of the Docker image in the dev environment" + type = string +} + +variable "image_tag" { + description = "The tag of the Docker image in the dev environment" + type = string +} + +variable "oauth_run_callback_url" { + description = "The callback URL for Google OAuth in the Cloud Run service in the dev environment" + type = string +} + +variable "pubsub_topic_client_events" { + description = "The Pub/Sub topic for client events in the dev environment" + type = string +} + +variable "artifact_registry_repository_id" { + description = "The ID of the Artifact Registry repository in the dev environment" + type = string +} + +variable "bigquery_dataset" { + description = "The ID of the BigQuery dataset in the dev environment" + type = string +} + +variable "bigquery_table" { + description = "The ID of the BigQuery table in the dev environment" + type = string +} + +variable "pubsub_subscription_client_events" { + description = "The name of the Pub/Sub subscription in the dev environment" + type = string +} \ No newline at end of file diff --git a/infra/modules/api/main.tf b/infra/modules/api/main.tf new file mode 100644 index 0000000..f6e80ec --- /dev/null +++ b/infra/modules/api/main.tf @@ -0,0 +1,53 @@ +# Cloud Run API +resource "google_project_service" "cloud_run" { + project = var.project_id + service = "run.googleapis.com" +} + +# Artifact Registry API +resource "google_project_service" "artifact_registry" { + project = var.project_id + service = "artifactregistry.googleapis.com" +} + +# Cloud SQL Admin API +resource "google_project_service" "cloud_sql" { + project = var.project_id + service = "sqladmin.googleapis.com" +} + +# Secret Manager API +resource "google_project_service" "secret_manager" { + project = var.project_id + service = "secretmanager.googleapis.com" +} + +# Pub/Sub API +resource "google_project_service" "pubsub" { + project = var.project_id + service = "pubsub.googleapis.com" +} + +# BigQuery API +resource "google_project_service" "bigquery" { + project = var.project_id + service = "bigquery.googleapis.com" +} + +# IAM API +resource "google_project_service" "iam" { + project = var.project_id + service = "iam.googleapis.com" +} + +# Service Networking API +resource "google_project_service" "service_networking" { + project = var.project_id + service = "servicenetworking.googleapis.com" +} + +# Compute Engine API +resource "google_project_service" "compute" { + project = var.project_id + service = "compute.googleapis.com" +} \ No newline at end of file diff --git a/infra/modules/api/outputs.tf b/infra/modules/api/outputs.tf new file mode 100644 index 0000000..3f4f905 --- /dev/null +++ b/infra/modules/api/outputs.tf @@ -0,0 +1,39 @@ +output "cloud_run_api" { + description = "Cloud Run API status" + value = google_project_service.cloud_run.service +} + +output "artifact_registry_api" { + description = "Artifact Registry API status" + value = google_project_service.artifact_registry.service +} + +output "cloud_sql_api" { + description = "Cloud SQL API status" + value = google_project_service.cloud_sql.service +} + +output "secret_manager_api" { + description = "Secret Manager API status" + value = google_project_service.secret_manager.service +} + +output "pubsub_api" { + description = "Pub/Sub API status" + value = google_project_service.pubsub.service +} + +output "iam_api" { + description = "IAM API status" + value = google_project_service.iam.service +} + +output "service_networking_api" { + description = "Service Networking API status" + value = google_project_service.service_networking.service +} + +output "compute_api" { + description = "Compute Engine API status" + value = google_project_service.compute.service +} diff --git a/infra/modules/api/variables.tf b/infra/modules/api/variables.tf new file mode 100644 index 0000000..fdfee5c --- /dev/null +++ b/infra/modules/api/variables.tf @@ -0,0 +1,4 @@ +variable "project_id" { + description = "The GCP project ID" + type = string +} diff --git a/infra/modules/bigquery/main.tf b/infra/modules/bigquery/main.tf new file mode 100644 index 0000000..404ca05 --- /dev/null +++ b/infra/modules/bigquery/main.tf @@ -0,0 +1,21 @@ +# BigQuery Dataset +resource "google_bigquery_dataset" "dataset" { + dataset_id = var.dataset_id + project = var.project_id + + location = "EU" + + # Optional labels + labels = var.labels +} + +# BigQuery Table +resource "google_bigquery_table" "table" { + table_id = var.table_id + dataset_id = google_bigquery_dataset.dataset.dataset_id + project = var.project_id + deletion_protection = var.deletion_protection + + # Table schema (as JSON string) + schema = var.schema +} diff --git a/infra/modules/bigquery/output.tf b/infra/modules/bigquery/output.tf new file mode 100644 index 0000000..2dc9e4c --- /dev/null +++ b/infra/modules/bigquery/output.tf @@ -0,0 +1,14 @@ +output "dataset_id" { + description = "The ID of the BigQuery dataset" + value = google_bigquery_dataset.dataset.dataset_id +} + +output "table_id" { + description = "The ID of the BigQuery table" + value = google_bigquery_table.table.table_id +} + +output "dataset_project" { + description = "The GCP project where the dataset is created" + value = google_bigquery_dataset.dataset.project +} diff --git a/infra/modules/bigquery/variables.tf b/infra/modules/bigquery/variables.tf new file mode 100644 index 0000000..e7011f0 --- /dev/null +++ b/infra/modules/bigquery/variables.tf @@ -0,0 +1,31 @@ +variable "project_id" { + description = "The GCP project ID" + type = string +} + +variable "dataset_id" { + description = "The ID of the BigQuery dataset" + type = string +} + +variable "table_id" { + description = "The ID of the BigQuery table" + type = string +} + +variable "schema" { + description = "The schema for the BigQuery table in JSON format" + type = string +} + +variable "labels" { + description = "Optional labels for the BigQuery dataset" + type = map(string) + default = {} +} + +variable "deletion_protection" { + description = "Whether to enable deletion protection on the table" + type = bool + default = false +} diff --git a/infra/modules/compute/main.tf b/infra/modules/compute/main.tf new file mode 100644 index 0000000..19f04e6 --- /dev/null +++ b/infra/modules/compute/main.tf @@ -0,0 +1,98 @@ +# Enable Cloud Run API +resource "google_project_service" "cloud_run" { + project = var.project_id + service = "run.googleapis.com" +} + +# Cloud Run Service +resource "google_cloud_run_v2_service" "driplet_service" { + name = "driplet-service" + location = var.region + ingress = "INGRESS_TRAFFIC_INTERNAL_LOAD_BALANCER" + deletion_protection = false + + template { + containers { + image = var.driplet_image + ports { + container_port = 1991 + } + + volume_mounts { + name = "cloudsql" + mount_path = "/cloudsql" + } + + env { + name = "POSTGRES_CONNECTION_STRING" + value = "postgresql://${var.database_user}:${var.database_password}@/postgres?host=/cloudsql/${var.database_connection}" + } + + env { + name = "GOOGLE_PUBSUB_TOPIC_CLIENT_EVENTS" + value = "client-events" + } + + env { + name = "GOOGLE_PROJECT_ID" + value = var.project_id + } + + env { + name = "GOOGLE_CALLBACK_URL" + value = var.oauth_run_callback_url + } + + env { + name = "PUBSUB_PROJECT_ID" + value = var.project_id + } + + env { + name = "SESSION_SECRET" + value_source { + secret_key_ref { + secret = var.oauth_session_secret + version = "latest" + } + } + } + + env { + name = "GOOGLE_CLIENT_ID" + value_source { + secret_key_ref { + secret = var.oauth_client_id + version = "latest" + } + } + } + env { + name = "GOOGLE_CLIENT_SECRET" + value_source { + secret_key_ref { + secret = var.oauth_client_secret + version = "latest" + } + } + } + } + + volumes { + name = "cloudsql" + cloud_sql_instance { + instances = [var.database_connection] + } + } + + service_account = var.cloud_run_service_account + } +} + +# IAM Member for Cloud Run Service Invoker +resource "google_cloud_run_service_iam_member" "service_invoker" { + service = google_cloud_run_v2_service.driplet_service.name + location = var.region + role = "roles/run.invoker" + member = "allUsers" +} diff --git a/infra/modules/compute/output.tf b/infra/modules/compute/output.tf new file mode 100644 index 0000000..13e86db --- /dev/null +++ b/infra/modules/compute/output.tf @@ -0,0 +1,4 @@ +output "cloud_run_service_name" { + description = "The name of the Cloud Run service" + value = google_cloud_run_v2_service.driplet_service.name +} \ No newline at end of file diff --git a/infra/modules/compute/variables.tf b/infra/modules/compute/variables.tf new file mode 100644 index 0000000..18ebb59 --- /dev/null +++ b/infra/modules/compute/variables.tf @@ -0,0 +1,55 @@ +variable "project_id" { + description = "The GCP project ID" + type = string +} + +variable "region" { + description = "The GCP region for resources" + type = string +} + +variable "cloud_run_service_account" { + description = "Email of the service account for Cloud Run" + type = string +} + +variable "oauth_run_callback_url" { + description = "The callback URL for Google OAuth in the Cloud Run service" + type = string +} + +variable "database_user" { + description = "The user for the database" + type = string +} + +variable "database_password" { + description = "The password for the database user (sensitive)" + type = string + sensitive = true +} + +variable "database_connection" { + description = "The connection name of the Cloud SQL instance" + type = string +} + +variable "oauth_session_secret" { + description = "The ID of the session secret" + type = string +} + +variable "oauth_client_id" { + description = "The ID of the OAuth2 client ID" + type = string +} + +variable "oauth_client_secret" { + description = "The ID of the OAuth2 client secret" + type = string +} + +variable "driplet_image" { + description = "The Docker image URL for the Cloud Run service" + type = string +} diff --git a/infra/modules/database/main.tf b/infra/modules/database/main.tf new file mode 100644 index 0000000..be20387 --- /dev/null +++ b/infra/modules/database/main.tf @@ -0,0 +1,29 @@ +# SQL Database Instance +resource "google_sql_database_instance" "driplet_application_db" { + database_version = "POSTGRES_17" + region = var.region + name = "driplet-application-db" + + settings { + tier = "db-perf-optimized-N-2" + database_flags { + name = "cloudsql.iam_authentication" + value = "on" + } + } +} + +# Random password for the SQL user +resource "random_password" "driplet_application_db_password" { + length = 64 + special = false + min_upper = 5 + min_lower = 5 +} + +# SQL User +resource "google_sql_user" "driplet_application_db_user" { + name = "driplet_application_user" + password = random_password.driplet_application_db_password.result + instance = google_sql_database_instance.driplet_application_db.name +} diff --git a/infra/modules/database/output.tf b/infra/modules/database/output.tf new file mode 100644 index 0000000..84635d9 --- /dev/null +++ b/infra/modules/database/output.tf @@ -0,0 +1,20 @@ +output "database_instance_name" { + description = "The name of the database instance" + value = google_sql_database_instance.driplet_application_db.name +} + +output "database_instance_connection_name" { + description = "The connection name for the database instance" + value = google_sql_database_instance.driplet_application_db.connection_name +} + +output "database_user" { + description = "The name of the database user" + value = google_sql_user.driplet_application_db_user.name +} + +output "database_password" { + description = "The password for the database user (sensitive)" + value = random_password.driplet_application_db_password.result + sensitive = true +} diff --git a/infra/modules/database/variables.tf b/infra/modules/database/variables.tf new file mode 100644 index 0000000..f75cb6c --- /dev/null +++ b/infra/modules/database/variables.tf @@ -0,0 +1,9 @@ +variable "project_id" { + description = "The GCP project ID" + type = string +} + +variable "region" { + description = "The region for the SQL instance" + type = string +} diff --git a/infra/modules/iam/main.tf b/infra/modules/iam/main.tf new file mode 100644 index 0000000..4cdb194 --- /dev/null +++ b/infra/modules/iam/main.tf @@ -0,0 +1,40 @@ +# Service Account +resource "google_service_account" "driplet_service_account" { + project = var.project_id + account_id = "driplet-service-account" + display_name = "Driplet Service Account" +} + +# IAM Member for Cloud SQL Client Role +resource "google_project_iam_member" "driplet_service_cloudsql_connector" { + project = var.project_id + member = "serviceAccount:${google_service_account.driplet_service_account.email}" + role = "roles/cloudsql.client" +} + +# IAM Member for Pub/Sub Admin Role +resource "google_project_iam_member" "driplet_service_pubsub_publisher" { + project = var.project_id + member = "serviceAccount:${google_service_account.driplet_service_account.email}" + role = "roles/pubsub.admin" +} + +# Grant BigQuery permissions to the Pub/Sub service account +resource "google_project_iam_member" "pubsub_bigquery_access" { + project = var.project_id + role = "roles/bigquery.dataEditor" + member = "serviceAccount:${google_service_account.driplet_service_account.email}" +} + +resource "google_project_service_identity" "pubsub" { + provider = google-beta + project = var.project_id + service = "pubsub.googleapis.com" +} + +resource "google_project_iam_member" "pubsub_bigquery_writer" { + project = var.project_id + role = "roles/bigquery.dataEditor" + member = "serviceAccount:${google_project_service_identity.pubsub.email}" +} + diff --git a/infra/modules/iam/output.tf b/infra/modules/iam/output.tf new file mode 100644 index 0000000..3f9fdd0 --- /dev/null +++ b/infra/modules/iam/output.tf @@ -0,0 +1,4 @@ +output "service_account_email" { + description = "The email of the created service account" + value = google_service_account.driplet_service_account.email +} \ No newline at end of file diff --git a/infra/modules/iam/variables.tf b/infra/modules/iam/variables.tf new file mode 100644 index 0000000..fdfee5c --- /dev/null +++ b/infra/modules/iam/variables.tf @@ -0,0 +1,4 @@ +variable "project_id" { + description = "The GCP project ID" + type = string +} diff --git a/infra/modules/main.tf b/infra/modules/main.tf new file mode 100644 index 0000000..c62d40e --- /dev/null +++ b/infra/modules/main.tf @@ -0,0 +1,102 @@ +provider "google" { + project = var.project_id + region = var.region +} + +# API module +module "api" { + source = "./api" + project_id = var.project_id +} +# Secrets module +module "secrets" { + source = "./secrets" + project_id = var.project_id + service_account_email = module.iam.service_account_email + depends_on = [module.api] +} + +# Compute module +module "compute" { + source = "./compute" + project_id = var.project_id + region = var.region + database_password = module.database.database_password + database_connection = module.database.database_instance_connection_name + database_user = module.database.database_user + cloud_run_service_account = module.iam.service_account_email + oauth_run_callback_url = var.oauth_run_callback_url + oauth_session_secret = module.secrets.session_secret + oauth_client_id = module.secrets.oauth2_client_id + oauth_client_secret = module.secrets.oauth2_client_secret + driplet_image = var.driplet_image + depends_on = [module.api, module.secrets] +} + +# Database module +module "database" { + source = "./database" + project_id = var.project_id + region = var.region + depends_on = [module.api] +} + +# IAM module +module "iam" { + source = "./iam" + project_id = var.project_id +} + +# Network module +module "network" { + source = "./network" + project_id = var.project_id + region = var.region + domain = var.domain + cloud_run_service_name = module.compute.cloud_run_service_name + depends_on = [module.api] +} + + +# Registry module +module "registry" { + source = "./registry" + project_id = var.project_id + region = var.region +} + +# Pub/Sub module +module "pubsub" { + source = "./pubsub" + project_id = var.project_id + topic_name_client_events = var.pubsub_topic_client_events + publisher_service_account = module.iam.service_account_email + subscriber_service_account = module.iam.service_account_email + subscription_name = var.pubsub_subscription_client_events + bigquery_dataset = var.bigquery_dataset + bigquery_table = var.bigquery_table +} + +# BigQuery module +module "bigquery" { + source = "./bigquery" + project_id = var.project_id + dataset_id = var.bigquery_dataset + table_id = var.bigquery_table + schema = <