クラウド上のリレーショナルデータベースとして、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」を選択し、「データベースの作成」ボタンを押下します。
今回はデータベースエンジンとして「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へ送信するログを選択します |
マイナーバージョン自動アップグレード | マイナーバージョンの自動アップグレードを有効化します。なお、アップグレード時には数分ほどのダウンタイムが発生します |
削除保護の有効化 | データベースの削除オペレーションを無効化するかどうかを指定します |
ユーザー/認証情報の作成
ここで、次回以降作成するアプリケーションでローカル環境からRDSへアクセスするために必要なユーザーおよび認証情報を作成しておきましょう。
「IAM」サービスから「ユーザー」メニューを作成して「ユーザーの作成」ボタンを押下し、以下のように入力してください。
- ユーザー名:任意の名前を入力
- アクセスの種類:アプリケーションからアクセスするユーザーを作成するので、「プログラムによるアクセス」を選択
続いて、アクセス権限を追加します。グループを作成しても良いのですが、ここでは、直接ユーザーにRDSのフルアクセス権限ポリシーをアタッチしましょう。
ユーザーを作成したら、アクセスキーIDとシークレットアクセスキーが表示されます。ここで、CSV形式でこの認証キーをダウンロードしておいてください。
* * *
次回は、構築したデータベースにテーブルを作成し、そこにアクセスするSpringアプリケーションを実装していきます。
著者紹介
川畑 光平(KAWABATA Kohei)
某システムインテグレータにて、金融機関システム業務アプリケーション開発・システム基盤担当を経て、現在はソフトウェア開発自動化関連の研究開発・推進に従事。
Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professionalなどの資格を持ち、アプリケーション基盤・クラウドなどさまざまな開発プロジェクト支援にも携わる。
本連載の内容に対するご意見・ご質問は Facebook まで。