🍎

GoでクラウドDB(Aiven)に接続する

2024/09/08に公開

概要

GoでクラウドDBを使用する方法を紹介します。
ElephantSQLがサービス終了するにあたって、代替として公式サイトで紹介されていたAivenを使用することにしました。

Aivenの登録

下記のサイトでアカウント登録します。
https://aiven.io/

  1. Projects → CreateProjectで任意の名前でプロジェクトを作成します。

  2. プロジェクト作成後、詳細画面に進み、Service URI コピーしておきます。(こちらが接続情報になります)

Goの実装

フォルダ構成およびソースコードはこちら

DBの接続設定

"DATABASE_URL"には先ほどコピーしておいたService URIを.envファイルに記述しておきます。Getenvにより.envファイルを読みこんでくれます。

database.go
package initializers

import (
	"log"
	"os"

	"github.com/joho/godotenv"
	"gorm.io/driver/postgres"
	"gorm.io/gorm"
)

var DB *gorm.DB

func ConnectToDB() {
	var err error

	// .envファイルから環境変数を読み込む
	err = godotenv.Load()
	if err != nil {
		log.Fatal("Error loading .env file")
	}

	// 環境変数からデータベースURLを取得
	dbURL := os.Getenv("DATABASE_URL")

	// データベースに接続
	DB, err = gorm.Open(postgres.Open(dbURL), &gorm.Config{})

	if err != nil {
		log.Fatal("Failed to connect to database:", err)
	}

	log.Println("Successfully connected to database")
}

環境変数をロード

.env ファイルがあるかのチェック

loadEnvVariable.go
package initializers

import (
	"log"

	"github.com/joho/godotenv"
)

func LoadEnvVariable() {
	err := godotenv.Load()
	if err != nil {
		log.Fatal("Error loading .env file")
	}
}

マイグレーション

migrate.go
package main

import (
	"go-crud/initializers"
	"go-crud/models"
)

func init() {
	initializers.LoadEnvVariable()
	initializers.ConnectToDB()
}

func main() {
	initializers.DB.AutoMigrate(&models.Post{})
}

モデルの定義

postModel.go
package models

import "gorm.io/gorm"

type Post struct {
	gorm.Model
	Title string
	Body string
}

マイグレーション

この時点ですでにDBに接続できている状態かと思いますが、サンプルとして実際にマイグレーションを試しに実行してみます。
プロジェクト内に移動して、下記のコマンドを実行します。
このコマンドを実行することで、modelsで定義したPostがテーブルとして作成され反映されます。

$ go run migrate/migrate.go

作成されたか確認してみます。
Postというテーブルが作成されているのが確認できます。

※TablePlusというGUIを使って実際にテーブルの中身を見ました。
https://tableplus.com/

Discussion