Web開発ログ | エンジニアに役立つ情報 | 開発の中での気づきを発信

高卒Devlog

【Golang × AWS RDS】Golangでデータアクセスしてみた

thumbnail

こんにちは! RYOTAです!

当記事をご覧くださりありがとうございます!

GolangでRDSにアクセスしデータを取得する方法をお話します!

はじめに

業務でGo×Lambda環境を構築しそこからRDSにアクセスしてデータを取得する処理を実装しました。
今回はそのRDSへの接続方法を説明していこうと思います。
実際に使うライブラリは下記の通りです。

  • go-sql-driver/mysql

GitHub - go-sql-driver/mysql: Go MySQL Driver is a MySQL driver for Go's (golang) database/sql package Go MySQL Driver is a MySQL driver for Go's (golang) database/sql package - GitHub - go-sql-driver/mysql: Go MySQL Driver is a MySQL driver for Go's (golang) database/sql package GitHub

  • jinzhu/gorm

GitHub - jinzhu/gorm: GORM V1, V2 moved to https://github.com/go-gorm/gorm GORM V1, V2 moved to https://github.com/go-gorm/gorm - GitHub - jinzhu/gorm: GORM V1, V2 moved to https://github.com/go-gorm/gorm GitHub

  • joho/godotenv

GitHub - joho/godotenv: A Go port of Ruby's dotenv library (Loads environment variables from .env files) A Go port of Ruby's dotenv library (Loads environment variables from .env files) - GitHub - joho/godotenv: A Go port of Ruby's dotenv library (Loads environment variables from .env files) GitHub

実装方法

今回は環境変数に.envを使おうと思うので、joho/godotenvで環境変数をロードさせます。

joho/godotenvのインストール

$ go get -u github.com/joho/godotenv

joho/godotenvで環境変数をロード

RDSの接続情報を.envに記述しておきます。

DB_USERNAME={username}
DB_PASSWORD={password}
DB_HOST={host}
DB_NAME={database}

上記で設定した変数をロードします。

package rds

import (
	"fmt"

	"github.com/joho/godotenv"
)

/*
	RDSと接続
*/
func RdsConnection() {
	err := godotenv.Load(".env")
	if err != nil {
		fmt.Printf(err)
	}
}

環境変数のロードができたらRDSへの接続処理を記述します。

package rds

import (
	"os"

	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
)

/*
	RDSと接続
*/
func RdsConnection() *gorm.DB {
        // 環境変数ロード
	err := godotenv.Load(".env")
	if err != nil {
		fmt.Printf(err)
	}

	// 接続情報設定
	DBMS := "mysql"
	USER := os.Getenv("DB_USERNAME")
	PASS := os.Getenv("DB_PASSWORD")
	HOST := os.Getenv("DB_HOST")
	DBNAME := os.Getenv("DB_NAME")

	CONNECT := USER + ":" + PASS + "@tcp(" + HOST + ")/" + DBNAME + "?charset=utf8&parseTime=true&loc=Asia%2FTokyo"

	// RDS接続
	db, err := gorm.Open(DBMS, CONNECT)
	if err != nil {
		panic(err.Error())
	}

	return db
}

これだけ!簡単!
あとは実際にDBアクセスするところでインポートして使えばOK!

db := rds.RdsConnection()

var test []Test
db.Find(&test)
defer db.Close()

さいごに

今回はGormを使ってRDSに接続してみましたが簡単にDBにアクセスができました!
Lambda環境の場合はRDSに直接繋ぐのはよろしくないので、次回はRDS Proxyを設置してProxy経由でデータの取得をする記事を書いていこうと思います。
最後までご覧くださりありがとうございました!