aws-rds-spring-boot-integration
aws-rds-spring-boot-integration について
AWS RDS と Spring Boot の連携を構成するスキルです。データベースアプリの開発・運用担当者向けに、接続設定、セキュリティ、マイグレーション、接続確認を扱います。
主な機能
- 01Aurora、MySQL、PostgreSQL の設定
- 02HikariCP 接続プールの設定
- 03SSL/TLS と IAM データベース認証
- 04Flyway データベースマイグレーション
- 05環境設定と接続確認
活用シーン
- 01Spring Boot アプリから RDS へ接続
- 02Aurora の読み書き分離を設定
- 03RDS 接続問題のトラブルシューティング
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ giuseppe-trisciuoglio/ developer-kit --skill aws-rds-spring-boot-integrationインストール後、Claude Code で/aws-rds-spring-boot-integrationを入力して読み込まれたか確認します。
同梱ファイルreferences/advanced-configuration.mdreferences/troubleshooting.md
詳細
AWS RDS Spring Boot 統合
概要
Spring Boot アプリケーションで AWS RDS データベース(Aurora、MySQL、PostgreSQL)を設定します。データソースの設定、HikariCP 接続プール、SSL 接続、環境ごとの設定、AWS Secrets Manager との統合に関するパターンを提供します。
使用する場面
RDS ワークロード用の HikariCP 接続プールを設定する場合、Aurora レプリカで読み取り/書き込みを分離する場合、IAM データベース認証を設定する場合、SSL/TLS 接続を有効にする場合、Flyway でデータベースのマイグレーションを管理する場合、または RDS 接続の問題をトラブルシューティングする場合に使用します。
手順
次の手順に従って、AWS RDS を Spring Boot で設定します。
-
依存関係を追加する — Spring Data JPA、データベースドライバー(MySQL/PostgreSQL)、Flyway を含めます
-
データソースを設定する — application.yml に接続プロパティを設定します
-
HikariCP を設定する — RDS ワークロードに合わせてプール設定を最適化します
-
SSL を設定する — RDS への暗号化接続を有効にします
-
プロファイルを設定する — 環境ごとの設定(dev/prod)を指定します
-
マイグレーションを追加する — スキーマ管理用の Flyway スクリプトを作成します
-
接続を検証する — ヘルスチェックを実行してデータベース接続を確認します
検証に失敗した場合:セキュリティグループのルールを確認し、認証情報を検証し、ネットワークから RDS にアクセスできることを確認して、SSL 証明書の設定を確認してください。
-
マイグレーションを実行する — 接続検証に成功した後にのみ Flyway マイグレーションを適用します
クイックスタート
ステップ 1:依存関係を追加する
Maven(pom.xml):
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.2.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>
Gradle(build.gradle):
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
// Aurora MySQL
runtimeOnly 'com.mysql:mysql-connector-j:8.2.0'
// Aurora PostgreSQL (alternative)
runtimeOnly 'org.postgresql:postgresql'
// Flyway
implementation 'org.flywaydb:flyway-core'
}
ステップ 2:基本的なデータソース設定
以下の例セクションの設定を使用します。PostgreSQL の場合は、次のように変更します。
- ドライバー:
org.postgresql.Driver - URL:
?ssl=true&sslmode=requireを含むjdbc:postgresql://... - ダイアレクト:
org.hibernate.dialect.PostgreSQLDialect
ステップ 3:環境変数を設定する
# Production environment variables
export DB_PASSWORD=YourStrongPassword123!
export SPRING_PROFILES_ACTIVE=prod
# For development
export SPRING_PROFILES_ACTIVE=dev
データベースマイグレーションの設定
Flyway 用のマイグレーションファイルを作成します。
src/main/resources/db/migration/
├── V1__create_users_table.sql
├── V2__add_phone_column.sql
└── V3__create_orders_table.sql
V1__create_users_table.sql:
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
例
例 1:Aurora MySQL の設定
spring:
datasource:
url: jdbc:mysql://myapp-aurora-cluster.cluster-abc123xyz.us-east-1.rds.amazonaws.com:3306/devops
username: admin
password: ${DB_PASSWORD}
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 20000
jpa:
hibernate:
ddl-auto: validate
open-in-view: false
例 2:SSL を使用した Aurora PostgreSQL
spring.datasource.url=jdbc:postgresql://myapp-aurora-pg-cluster.cluster-abc123xyz.us-east-1.rds.amazonaws.com:5432/devops?ssl=true&sslmode=require
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
spring.datasource.hikari.maximum-pool-size=30
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
例 3:読み取り/書き込み分離の設定
@Configuration
public class DataSourceConfiguration {
@Bean
@Primary
public DataSource dataSource(
@Qualifier("writerDataSource") DataSource writerDataSource,
@Qualifier("readerDataSource") DataSource readerDataSource) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put("writer", writerDataSource);
targetDataSources.put("reader", readerDataSource);
RoutingDataSource routingDataSource = new RoutingDataSource();
routingDataSource.setTargetDataSources(targetDataSources);
routingDataSource.setDefaultTargetDataSource(writerDataSource);
return routingDataSource;
}
}
制約と警告
- HikariCP のプールサイズは、RDS インスタンスの接続数上限を超えないようにする必要があります
- セキュリティグループで、アプリケーションの IP 範囲からのトラフィックを許可する必要があります
- 認証情報をハードコードせず、AWS Secrets Manager を使用してください
- ストレージの枯渇を防ぐため、ストレージの自動スケーリングを有効にしてください
ベストプラクティス
- HikariCP:リーク検出を有効にし、フェイルオーバーの状況に合わせてタイムアウトを設定します
- セキュリティ:SSL/TLS を有効にします。可能であれば IAM データベース認証を使用します
- パフォーマンス:open-in-view を無効にし、適切なインデックス作成とバッチ処理を行います
- モニタリング:データベースのヘルスチェックを含む Spring Boot Actuator を有効にします
テスト
次のヘルスチェックエンドポイントで接続を検証します。
@RestController
@RequestMapping("/api/health")
public class DatabaseHealthController {
@Autowired
private DataSource dataSource;
@GetMapping("/db-connection")
public ResponseEntity<Map<String, Object>> testDatabaseConnection() {
Map<String, Object> response = new HashMap<>();
try (Connection connection = dataSource.getConnection()) {
response.put("status", "success");
response.put("database", connection.getCatalog());
response.put("connected", true);
return ResponseEntity.ok(response);
} catch (Exception e) {
response.put("status", "failed");
response.put("error", e.getMessage());
response.put("connected", false);
return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).body(response);
}
}
}
curl http://localhost:8080/api/health/db-connection
サポート
詳細なトラブルシューティングと高度な設定については、以下を参照してください。