Skip to content

Commit 9e8029c

Browse files
committed
RDSを使用するように変更
1 parent 90c4c93 commit 9e8029c

File tree

2 files changed

+28
-34
lines changed

2 files changed

+28
-34
lines changed

backend/infra/db.go

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,50 @@ import (
44
"fmt"
55
"log"
66
"os"
7+
"time"
78

89
"gorm.io/driver/mysql"
910
"gorm.io/gorm"
1011
)
1112

1213
func SetupDB() *gorm.DB {
14+
// TLS接続を有効化(AWS RDS向け)
1315
dsn := fmt.Sprintf(
14-
"%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Asia%%2FTokyo",
16+
"%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Asia%%2FTokyo&tls=true",
1517
os.Getenv("DB_USER"),
1618
os.Getenv("DB_PASSWORD"),
1719
os.Getenv("DB_HOST"),
1820
os.Getenv("DB_PORT"),
1921
os.Getenv("DB_NAME"),
2022
)
2123

22-
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
24+
// リトライロジック(RDS接続に時間がかかる場合がある)
25+
var db *gorm.DB
26+
var err error
27+
maxRetries := 10
28+
for i := 0; i < maxRetries; i++ {
29+
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
30+
if err == nil {
31+
break
32+
}
33+
log.Printf("Failed to connect to database (attempt %d/%d): %v", i+1, maxRetries, err)
34+
time.Sleep(3 * time.Second)
35+
}
36+
37+
if err != nil {
38+
panic(fmt.Sprintf("Failed to connect database after %d attempts: %v", maxRetries, err))
39+
}
40+
41+
// コネクションプール設定(RDS向け推奨)
42+
sqlDB, err := db.DB()
2343
if err != nil {
24-
panic(fmt.Sprintf("Failed to connect database: %v", err))
44+
panic(fmt.Sprintf("Failed to get database instance: %v", err))
2545
}
26-
log.Println("Setup mysql database")
46+
sqlDB.SetMaxIdleConns(10)
47+
sqlDB.SetMaxOpenConns(100)
48+
sqlDB.SetConnMaxLifetime(time.Hour)
49+
50+
log.Println("Successfully connected to MySQL database (RDS)")
2751

2852
return db
2953
}

docker-compose.yaml

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,39 +16,9 @@ services:
1616
- "8080:8080"
1717
env_file:
1818
- .env
19-
environment:
20-
DB_HOST: db
21-
DB_PORT: "3306"
22-
depends_on:
23-
db:
24-
condition: service_healthy
2519
networks:
2620
- app-network
2721

28-
db:
29-
image: mysql:8.0
30-
restart: always
31-
environment:
32-
- MYSQL_USER=${DB_USER}
33-
- MYSQL_PASSWORD=${DB_PASSWORD}
34-
- MYSQL_DATABASE=${DB_NAME}
35-
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
36-
ports:
37-
- "3306:3306"
38-
volumes:
39-
- db-data:/var/lib/mysql
40-
healthcheck:
41-
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${DB_ROOT_PASSWORD}"]
42-
interval: 5s
43-
timeout: 3s
44-
retries: 10
45-
start_period: 30s
46-
networks:
47-
- app-network
48-
49-
volumes:
50-
db-data:
51-
5222
networks:
5323
app-network:
5424
driver: bridge

0 commit comments

Comments
 (0)