クラウド上のリレーショナルデータベースとして、AWSが提供するのが「Amazon RDS(Relational Database Service)」です。今回からは3回にわたり、PostgreSQLをベースとするAmazon RDSへアクセスするSpringアプリケーションの実装方法についてわかりやすく解説していきます。なお、データベースアクセス部分は「Spring Data JPA」と「Spring Cloud AWS」を用いて実装します。

解説にあたっては、以下の知識がある開発者を想定しています。

対象読者 前提知識
エンタープライズ開発者 Java言語及びSpringFrameworkを使った開発に従事したことがある経験者。経験がなければ、こちらのチュートリアルを実施することを推奨します。「TERASOLUNA」はSpringのベストプラクティスをまとめた開発方法論で、このチュートリアルでは、JavaやSpring Frameworkを使った開発に必要な最低限の知識を得ることができます
GitHubなどのバージョン管理ツールや「Apache Maven」などのライブラリ管理ツールを使った開発に従事したことがある経験者
AWS開発経験者 AWSアカウントを持ち、コンソール上で各サービスを実行したことがある経験者

また、動作環境は以下のバージョンで実施しています。

動作対象 バージョン
Java 1.8
Spring Boot 2.1.4.RELEASE
Spring Data JPA 2.1.4.RELEASE
Spring Cloud AWS 2.1.1.RELEASE

ただし、将来的には、AWSコンソール上の画面イメージや操作、バージョンアップによりJavaのソースコード内で使用するクラスが異なる可能性があります。

Amazon RDSの概要

今回は、まずAmazon RDSの概要とデータベース構築について説明しましょう。

Amazon RDSは、時間単位の従量課金制フルマネージドリレーショナルデータベースです。冗長化構成によるフェイルオーバや自動バックアップ機能など、高い可用性を保ちつつも、簡易なセットアップで運用が容易な点を特徴とします。RDSでは2019年3月現在、以下のデータベースエンジンを選択可能です。

  • Amazon Aurora
  • PostgreSQL
  • MySQL
  • MariaDB
  • Oracle
  • Microsoft SQL Server

RDS構築時は、複数のアベイラビリティゾーンをまたいでリードレプリカを構築できるオプションがあり、マスターに障害が発生した場合は、スレーブであるリードレプリカがマスターに昇格します。リードレプリカ作成時には、マスター/スレーブ各々にIPが割り振られますが、RDSは単一のエンドポイントを有しているため、データベース参照側は特にフェイルオーバを意識せずアクセスすることが可能です。

データの書き込み時はリードレプリカの書き込みも含まれるので、読み取りの一貫性は保証されます。また、リードレプリカはクロスリージョンサポートがあるため、ディザスターリカバリ(災害による障害からのリカバリ)としても活用できます。

RDSの自動バックアップ機能ではDBスナップショットとトランザクションログを保存しますが、スナップショットは1日1回、指定した世代数を指定した時間帯に取得します。リストアを行う際は任意の世代のDBスナップショットを指定して復元を行いますが、トランザクションログは随時取得されているので、任意に指定した状態へのリカバリが可能です。時刻は直近5分から、最新のスナップショットの時点の間で指定することができます。

セキュリティ面のポイントとして、RDSはセキュリティグループによってアクセス制御されます。また、データの暗号化機能もサポートされており、暗号化キー管理サービス「Key Management Service(KMS)」に格納されたキーを使って暗号化できます。

Amazon RDSの構築

それでは、実際にRDSを構築してみましょう。AWSコンソールのサービスから「RDS」を選択し、「データベースの作成」ボタンを押下します。

AWSコンソールのサービスから「RDS」を選択

今回はデータベースエンジンとして「PostgreSQL」を選択します。

「PostgreSQL」を選択

ユースケースでは、「開発/テスト」を選択します。

「開発/テスト」を選択

以下の表を参考に、データベースの詳細を指定して、「次へボタン」を押下します。

入力項目 説明
ライセンスモデル データベースのライセンスを指定します。PostgreSQLでは「posgresql-license」を選択することになります
DBエンジンのバージョン データベースのバージョンを指定します
DBインスタンスのクラス データベースを実行するインスタンスのCPUやメモリなどを指定します
マルチAZ配置 データベースを複数のアベイラビリティゾーンで配置する場合チェックします
ストレージタイプ データベースストレージを選択します。オプションについてはAWSドキュメントの「DBインスタンスストレージ」を参考にしてください
ストレージ割り当て データベースストレージに割り当てるデータ容量を指定します
DBインスタンス識別子 データベースを作成するリージョン内でユニークな名称を指定します
マスターユーザーの名前 データベースにアクセスする場合の管理者ユーザー名を指定します
マスターパスワード データベースにアクセスする場合の管理者ユーザーのパスワードを指定します

データベースの詳細を指定

続いて以下の表を参考に、データベースの詳細設定を設定して「データベースの作成」を押下します。

入力項目 説明
Virtual Private Cloud(VPC) RDSを配置するVPCを指定します
サブネットグループ DBを配置するサブネットを複数まとめたものをサブネットグループとして定義します。Amazon RDSは、VPCにDBインスタンスを作成すると、DBサブネットグループから選択したIPアドレスを使用して、DBインスタンスにネットワークインタフェースを割り当てます
パブリックアクセシビリティ 指定したVPCの外からアクセスする際にチェックします。「はい」を設定するとDBインスタンスにパブリックIPアドレスが割り当てられます
アベイラビリティゾーン DBインスタンスを作成するアベイラビリティゾーンを指定します
VPCセキュリティグループ DBインスタンスへのアクセス制御に関するセキュリティグループを指定します。新規を選択する場合、パブリックアクセシビリティを有効にしていると、コンソールにアクセスしている端末のIPアドレスが許可されたセキュリティグループが作成されます
データベースの名前 データベース名を指定します
ポート データベースで使用するポートを指定します
DBパラメータグループ データベースに適用するパラメータをまとめて規定したパラメータグループを指定します
オプショングループ OracleまたはSQL Server、MySQLで、オプションの機能を有効にするDBオプショングループを選択します
IAM DB認証 IAMユーザーやロールでデータベースのユーザ認証を実行する場合に有効化します
暗号化 データベースインスタンスのストレージを暗号化する場合有効化します
バックアップの保存期間 DBインスタンスの自動バックアップの保存日数を指定します。最大35日まで指定可能です
バックアップウィンドウ DBインスタンスの自動バックアップの実行時間帯を任意に設定します
拡張モニタリング プロセスの仮想メモリサイズやCPU使用率などモニタリングオプションを有効化します。オプションの具体的な内容についてはAWSドキュメントの「拡張モニタリング」を参照してください
モニタリングロール 拡張モニタリングを実行するIAMロールを指定します。新規作成の場合、「rds-monitoring-role」が作成されます
パフォーマンスインサイト RDSインスタンスの負荷をモニタリングし、データベースパフォーマンスの分析とトラブルシューティングを行うことができるパフォーマンスインスタンスを有効化します。パフォーマンスインサイトに関する詳細は「Amazon RDS Performance Insightsの使用」を参考にしてください
保持期間 パフォーマンスインサイトのデータ保持期間を指定します
マスターキー パフォーマンスインサイトデータを保持するボリュームの暗号化キーを指定します
ログのエクスポート Amazon CloudWatch Logsへ送信するログを選択します
マイナーバージョン自動アップグレード マイナーバージョンの自動アップグレードを有効化します。なお、アップグレード時には数分ほどのダウンタイムが発生します
削除保護の有効化 データベースの削除オペレーションを無効化するかどうかを指定します

「詳細設定」の設定:Virtual Private Cloud(VPC)~モニタリングロール

「詳細設定」の設定:パフォーマンスインサイト~削除保護の有効化

ユーザー/認証情報の作成

ここで、次回以降作成するアプリケーションでローカル環境からRDSへアクセスするために必要なユーザーおよび認証情報を作成しておきましょう。

「IAM」サービスから「ユーザー」メニューを作成して「ユーザーの作成」ボタンを押下し、以下のように入力してください。

  • ユーザー名:任意の名前を入力
  • アクセスの種類:アプリケーションからアクセスするユーザーを作成するので、「プログラムによるアクセス」を選択

「プログラムによるアクセス」を選択

続いて、アクセス権限を追加します。グループを作成しても良いのですが、ここでは、直接ユーザーにRDSのフルアクセス権限ポリシーをアタッチしましょう。

RDSのフルアクセス権限ポリシーをアタッチする

ユーザーを作成したら、アクセスキーIDとシークレットアクセスキーが表示されます。ここで、CSV形式でこの認証キーをダウンロードしておいてください。

CSV形式で認証キーをダウンロードしておく

* * *

次回は、構築したデータベースにテーブルを作成し、そこにアクセスするSpringアプリケーションを実装していきます。

著者紹介


川畑 光平(KAWABATA Kohei)

某システムインテグレータにて、金融機関システム業務アプリケーション開発・システム基盤担当を経て、現在はソフトウェア開発自動化関連の研究開発・推進に従事。

Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professionalなどの資格を持ち、アプリケーション基盤・クラウドなどさまざまな開発プロジェクト支援にも携わる。

本連載の内容に対するご意見・ご質問は Facebook まで。