🍣
VSCodeでCloud Runに簡単にデプロイする
goのアプリをVSCodeからCloud Runに簡単にデプロイする方法について説明します。
Artifact Registryへの登録も、yamlファイルを書く必要もありません。Dockerfileさえあれば、簡単にデプロイすることができます。
データベースの操作で、Cloud SQL Proxyも使用します。
コード
INSTANCE_CONNECTION_NAME は project:region:instance-id
形式を使用します。
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 v4 requires
// Go modules which are not supported by App Engine Flex.
_ "github.com/jackc/pgx/v4/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: %v", err)
}
// ...
return dbPool, nil
}
Google Cloud Codeインストール
VSCodeの「Google Cloud Code」拡張機能をインストールします。
Google Cloud SDKにログイン
- サイドバーのGoogle Cloud Codeのアイコンをクリック
- Login to Google Cloud SDKをクリックして認証
- プロジェクトを選択
Cloud Runにデプロイ
-
Deploy to Cloud Runをクリック
-
Advanced Settingsでcloud-sql-proxyの設定をする
Cloud SQL connectionsの欄に、cloud sqlの接続名を入力する
-
デプロイする
yamlファイルは自動で作成され、イメージはCONTAINER REGISTRYに作成されます。
Discussion
次は、GitHub への Push を Trigger に自動デプロイされるよう設定しましょう。