Skip to content

Commit aa7c02e

Browse files
committed
Update database connection string to use private IP with psycopg format
- Change from connection_name to private_ip_address:5432 - Use postgresql+psycopg:// format for psycopg3 driver compatibility - Connection uses private VPC networking (no public IP) - Standard TCP connection over private network via VPC connector - Fix terraform formatting and update docs
1 parent 4c0dd7a commit aa7c02e

3 files changed

Lines changed: 14 additions & 10 deletions

File tree

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,14 +179,17 @@ No modules.
179179
| [google_project_iam_member.app_monitoring_writer](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/project_iam_member) | resource |
180180
| [google_project_service.required_apis](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/project_service) | resource |
181181
| [google_secret_manager_secret.ai_api_keys](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret) | resource |
182+
| [google_secret_manager_secret.config_files](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret) | resource |
182183
| [google_secret_manager_secret.db_connection](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret) | resource |
183184
| [google_secret_manager_secret.db_password](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret) | resource |
184185
| [google_secret_manager_secret.mcp_api_keys](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret) | resource |
185186
| [google_secret_manager_secret_iam_member.app_ai_api_keys](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret_iam_member) | resource |
187+
| [google_secret_manager_secret_iam_member.app_config_files](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret_iam_member) | resource |
186188
| [google_secret_manager_secret_iam_member.app_db_connection](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret_iam_member) | resource |
187189
| [google_secret_manager_secret_iam_member.app_db_password](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret_iam_member) | resource |
188190
| [google_secret_manager_secret_iam_member.app_mcp_api_keys](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret_iam_member) | resource |
189191
| [google_secret_manager_secret_version.ai_api_keys](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret_version) | resource |
192+
| [google_secret_manager_secret_version.config_files](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret_version) | resource |
190193
| [google_secret_manager_secret_version.db_connection](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret_version) | resource |
191194
| [google_secret_manager_secret_version.db_password](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret_version) | resource |
192195
| [google_secret_manager_secret_version.mcp_api_keys](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/secret_manager_secret_version) | resource |
@@ -205,6 +208,7 @@ No modules.
205208
|------|-------------|------|---------|:--------:|
206209
| <a name="input_ai_api_keys"></a> [ai\_api\_keys](#input\_ai\_api\_keys) | Map of AI API keys where key is the environment variable name (e.g., OPENAI\_API\_KEY, ANTHROPIC\_API\_KEY) and value is the actual API key (stored in Secret Manager) | `map(string)` | `{}` | no |
207210
| <a name="input_app_command"></a> [app\_command](#input\_app\_command) | Command to run the container | `list(string)` | <pre>[<br/> "hrafnar",<br/> "serve"<br/>]</pre> | no |
211+
| <a name="input_app_config_files"></a> [app\_config\_files](#input\_app\_config\_files) | Configuration files to mount as volumes from Secret Manager. Key is the config name, value contains file content and mount path. | <pre>map(object({<br/> content = string # File content to store in Secret Manager<br/> mount_path = string # Path where file will be mounted in container (e.g., "/etc/config/app.yaml")<br/> }))</pre> | `{}` | no |
208212
| <a name="input_app_cpu"></a> [app\_cpu](#input\_app\_cpu) | CPU allocation for the hrafnar application | `string` | `"1000m"` | no |
209213
| <a name="input_app_env_vars"></a> [app\_env\_vars](#input\_app\_env\_vars) | Environment variables for the hrafnar application | `map(string)` | `{}` | no |
210214
| <a name="input_app_image"></a> [app\_image](#input\_app\_image) | Container image for the hrafnar application (without tag) | `string` | n/a | yes |

iam.tf

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,15 @@ resource "google_project_iam_member" "app_logging_writer" {
8181
# Enable required APIs
8282
resource "google_project_service" "required_apis" {
8383
for_each = toset([
84-
"run.googleapis.com", # Cloud Run
85-
"secretmanager.googleapis.com", # Secret Manager
86-
"compute.googleapis.com", # Compute Engine (for VPC)
87-
"servicenetworking.googleapis.com", # Service Networking (for Cloud SQL private IP)
88-
"sqladmin.googleapis.com", # Cloud SQL Admin API
89-
"sql-component.googleapis.com", # Cloud SQL Component API
90-
"vpcaccess.googleapis.com", # VPC Access (for VPC connector)
91-
"iam.googleapis.com", # Identity and Access Management
92-
"cloudresourcemanager.googleapis.com" # Cloud Resource Manager
84+
"run.googleapis.com", # Cloud Run
85+
"secretmanager.googleapis.com", # Secret Manager
86+
"compute.googleapis.com", # Compute Engine (for VPC)
87+
"servicenetworking.googleapis.com", # Service Networking (for Cloud SQL private IP)
88+
"sqladmin.googleapis.com", # Cloud SQL Admin API
89+
"sql-component.googleapis.com", # Cloud SQL Component API
90+
"vpcaccess.googleapis.com", # VPC Access (for VPC connector)
91+
"iam.googleapis.com", # Identity and Access Management
92+
"cloudresourcemanager.googleapis.com" # Cloud Resource Manager
9393
])
9494

9595
project = var.project_id

secrets.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ resource "google_secret_manager_secret" "db_connection" {
6767
resource "google_secret_manager_secret_version" "db_connection" {
6868
count = var.enable_database ? 1 : 0
6969
secret = google_secret_manager_secret.db_connection[0].id
70-
secret_data = "postgresql://${local.database_user}:${random_password.db_password[0].result}@${google_sql_database_instance.main[0].connection_name}/${local.database_name}"
70+
secret_data = "postgresql+psycopg://${local.database_user}:${random_password.db_password[0].result}@${google_sql_database_instance.main[0].private_ip_address}:5432/${local.database_name}"
7171
}
7272

7373
# Secret Manager secrets for config files

0 commit comments

Comments
 (0)