// Copyright 2022 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // [START cloud_sql_postgres_databasesql_connect_unix] package cloudsql import ( "database/sql" "fmt" "log" "os" // Note: If connecting using the App Engine Flex Go runtime, use // "github.com/jackc/pgx/stdlib" instead, since v5 requires // Go modules which are not supported by App Engine Flex. _ "github.com/jackc/pgx/v5/stdlib" ) // connectUnixSocket initializes a Unix socket connection pool for // a Cloud SQL instance of Postgres. func connectUnixSocket() (*sql.DB, error) { mustGetenv := func(k string) string { v := os.Getenv(k) if v == "" { log.Fatalf("Fatal Error in connect_unix.go: %s environment variable not set.\n", k) } return v } // Note: Saving credentials in environment variables is convenient, but not // secure - consider a more secure solution such as // Cloud Secret Manager (https://cloud.google.com/secret-manager) to help // keep secrets safe. var ( dbUser = mustGetenv("DB_USER") // e.g. 'my-db-user' dbPwd = mustGetenv("DB_PASS") // e.g. 'my-db-password' unixSocketPath = mustGetenv("INSTANCE_UNIX_SOCKET") // e.g. '/cloudsql/project:region:instance' dbName = mustGetenv("DB_NAME") // e.g. 'my-database' ) dbURI := fmt.Sprintf("user=%s password=%s database=%s host=%s", dbUser, dbPwd, dbName, unixSocketPath) // dbPool is the pool of database connections. dbPool, err := sql.Open("pgx", dbURI) if err != nil { return nil, fmt.Errorf("sql.Open: %w", err) } // [START_EXCLUDE] configureConnectionPool(dbPool) // [END_EXCLUDE] return dbPool, nil } // [END cloud_sql_postgres_databasesql_connect_unix]