mcpField
A
aws-rds-spring-boot-integration

aws-rds-spring-boot-integration

github.com/giuseppe-trisciuoglioデータ・データベース3653.7k 回インストール7 週間前に更新
リポジトリ

aws-rds-spring-boot-integration について

AWS RDS と Spring Boot の連携を構成するスキルです。データベースアプリの開発・運用担当者向けに、接続設定、セキュリティ、マイグレーション、接続確認を扱います。

主な機能

  1. 01Aurora、MySQL、PostgreSQL の設定
  2. 02HikariCP 接続プールの設定
  3. 03SSL/TLS と IAM データベース認証
  4. 04Flyway データベースマイグレーション
  5. 05環境設定と接続確認

活用シーン

  1. 01Spring Boot アプリから RDS へ接続
  2. 02Aurora の読み書き分離を設定
  3. 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 で設定します。

  1. 依存関係を追加する — Spring Data JPA、データベースドライバー(MySQL/PostgreSQL)、Flyway を含めます

  2. データソースを設定する — application.yml に接続プロパティを設定します

  3. HikariCP を設定する — RDS ワークロードに合わせてプール設定を最適化します

  4. SSL を設定する — RDS への暗号化接続を有効にします

  5. プロファイルを設定する — 環境ごとの設定(dev/prod)を指定します

  6. マイグレーションを追加する — スキーマ管理用の Flyway スクリプトを作成します

  7. 接続を検証する — ヘルスチェックを実行してデータベース接続を確認します

    検証に失敗した場合:セキュリティグループのルールを確認し、認証情報を検証し、ネットワークから RDS にアクセスできることを確認して、SSL 証明書の設定を確認してください。

  8. マイグレーションを実行する — 接続検証に成功した後にのみ 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

サポート

詳細なトラブルシューティングと高度な設定については、以下を参照してください。

コメント