LoginSignup
4
7

More than 5 years have passed since last update.

[WIP] 3. Javaで開発したWebアプリケーションの実行環境をAWSに構築する(RDS)

Last updated at Posted at 2016-05-04

概要

Java(Spring-Bootを使用)で開発するWebアプリケーションの実行環境をAWS上に構築した作業内容のまとめです。
この記事はJavaで開発したWebアプリケーションの実行環境をAWSに構築する(EC2初期設定)からの続きになります。この記事では「RDS」を書きました。

参考

RDSの構築手順

  • サブネットの作成
    • Privateサブネット(1a)の作成
      • ルートテーブルの作成
      • ルートテーブルの付け替え
    • Privateサブネット(1c)の作成
      • ルートテーブルの付け替え
  • サブネットグループの作成
  • パラメータグループの作成
  • VPCセキュリティグループの作成
  • RDSインスタンスの作成

サブネットの作成

まずはRDS用のサブネットから作成します。
RDSインスタンスを作成するには2つ以上のAZが異なるサブネットが必要です。

Privateサブネット(1a)の作成

AZ 1aのPrivateサブネットを作成します。
CIDRブロックは10.0.3.0/24としました。

50-private-subnet-rds-01.png

ルートテーブルの作成

上記で作成したPrivateサブネットのルートテーブルを作成します。このルートテーブルはこの後に作成するもう1つのPrivateサブネットでも使用します。
VPC内からのアクセスだけなのでルートの追加は行いません。

51-private-subnet-rds-rtb-02.png

ルートテーブルの付け替え

上記で作成したルートテーブルで、Privateサブネットのデフォルトのルートテーブルと付け替えます。

52-private-subnet-rds-rtb-03.png

Privateサブネット(1c)の作成

AZ 1cのPrivateサブネットを作成します。
CIDRブロックは10.0.4.0/24としました。

53-private-subnet-rds-01.png

ルートテーブルの付け替え

上記で作成したルートテーブルで、Privateサブネットのデフォルトのルートテーブルと付け替えます。

54-private-subnet-rds-rtb-02.png

サブネットグループの作成

上記で作成した2つのサブネットで構成するサブネットグループを作成します。

55-subnet-group-rds-01.png

56-subnet-group-rds-02.png

パラメータグループの作成

57-subnet-group-rds-param-01.png

58-subnet-group-rds-param-02.png

文字コード関連

utf8mb4で設定しました。

59-subnet-group-rds-param-03.png

time_zone

60-subnet-group-rds-param-04.png

general_log

有効にしました。

rds-pg-02-general.png

slow_log

有効にしました。

rds-pg-04-slow.png

rds-pg-03-long_query_time.png

performance_schema

有効にしました。

rds-pg-01-performance.png

VPCセキュリティグループの作成

61-rds-sg-01.png

送信元に2つのセキュリティグループを指定します。これでこのセキュリティグループに属するEC2インスタンスからの接続が可能になります。
実際にRDSと接続するのはWebアプリケーションだけなので、ルールは1つだけでいいのですが開発の便宜上両方のEC2インスタンスから接続できるように設定しました。

  • sg-5625a032 : Webアプリケーションを実行するEC2インスタンスが属するセキュリティグループ
  • sg-961c99f2 : nginxを実行するEC2インスタンスが属するセキュリティグループ

62-rds-sg-02.png

セキュリティグループにより DB インスタンスに対する送受信トラフィックへのアクセスを制御します。
Amazon RDS では、DB セキュリティグループ、VPC セキュリティグループ、EC2 セキュリティグループという 3 種類のセキュリティグループを使用します。簡単に説明すると、DB セキュリティグループは VPC の外にある DB インスタンスへのアクセスを制御します。VPC セキュリティグループは VPC 内の DB インスタンス(または他の AWS インスタンス)へのアクセスを制御します。EC2 セキュリティグループは EC2 インスタンスへのアクセスを制御します。

RDSインスタンスの作成

エンジンにはMySQLを選択しました。

64-rds-02.png

開発用なので、右側の開発/テストを選択しました。

65-rds-03.png

開発用?だからだと思いますが、マルチAZ配置は選べませんでした。

66-rds-04.png

サブネットグループ、VPCセキュリティグループ、パラメータグループには上記で作成した設定を指定します。
オプショングループは特に設定するものが無いのでデフォルトを指定しました。

67-rds-05.png

DB エンジンによっては、データとデータベースの管理を容易にしたり、データベースのセキュリティを強化したりするための、追加の機能が用意されている場合があります。Amazon RDS では、オプショングループを使用してこれらの機能を有効にして設定します。

RDSインスタンスの作成直後の状態です。

69-rds-07.png

EC2インスタンスからの接続確認

EC2インスタンスにインストールしたMySQL Clientより接続できるか確認します。

[ec2-user@ip-10-0-1-196 ~]$ mysql -h my-rds-20160503.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -uroot -p mydb
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 305
Server version: 5.6.27-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

RDS Tips

エンドポイントに別名(Alias)を付ける

Route53のPrivate DNSでRDSのエンドポイントに別名を付けることができ、この別名を使ってRDSへ接続することができます。

71-route53-02.png

Type:に、Private Hosted Zone ...を選択します。

72-route53-03.png

73-route53-04.png

Value:に、RDSのエンドポイントを入力します。
Name:に、別名を入力します。

74-route53-05.png

別名を使って接続してみます。

$ mysql -h db01.rds.local -uroot -p mydb
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 368
Server version: 5.6.27-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

MySQLキャッシュウォーミング

本日、InnoDBのキャッシュウォーミングをサポートすることで、Amazon RDS for MySQLを強化いたしました。 MySQLを実行しているAmazon RDSのDBインスタンスをシャットダウンする際、バッファープールの状態を保存し、後でインスタンスを起動する際に、リロードするよう設定することができます。 インスタンスはウォームアップを必要とせずに、効率的な方法で、一般的なクエリを処理できるようになります。

mysql> show global variables like '%buffer_pool%';
+-------------------------------------+----------------+
| Variable_name                       | Value          |
+-------------------------------------+----------------+
| innodb_buffer_pool_dump_at_shutdown | OFF            |
| innodb_buffer_pool_dump_now         | OFF            |
| innodb_buffer_pool_filename         | ib_buffer_pool |
| innodb_buffer_pool_instances        | 8              |
| innodb_buffer_pool_load_abort       | OFF            |
| innodb_buffer_pool_load_at_startup  | OFF            |
| innodb_buffer_pool_load_now         | OFF            |
| innodb_buffer_pool_size             | 625999872      |
+-------------------------------------+----------------+
8 rows in set (0.00 sec)

MySQL Workbench

WindowsにインストールしたMySQL WorkbenchからRDSへ接続するにはsshポートフォワーディングを利用する方法があります。
なお、この方法が成立するのは「WindowsからEC2へsshでログインできること」「そのEC2からMySQL ClientでRDSへ接続できること」という条件を満たしている場合です。
下記の2種類の方法で接続確認を行いました。

plinkを使用する方法

sshクライアントにはPuTTY付属のplinkを使用しました。(PuTTYでも可能です。)

> plink.exe -ssh -2 -C -N -L 13306:my-rds-20160503.********.ap-northeast-1.rds.amazonaws.com:3306 -i my-aws-keypair-20160503.ppk -P 22 ec2-user@xxx.xxx.xxx.xxx
Using username "ec2-user".
  • ec2-user@xxx.xxx.xxx.xxxのIPアドレスは、PublicサブネットにあるEC2インスタンスのパブリックIPアドレスです。

Windowsのmysqlクライアントから接続

この状態でWindowsにインストールしてあるMySQL Clientから接続できるか確認してみます。
ホスト名にはlocalhost、ポートにはポートフォワーディングで指定した13306を使用します。

> mysql -h localhost -P 13306 -uroot -p mydb
Enter password: **********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.6.27-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

WindowsのMySQL Workbenchから接続

MySQL Clientで接続した情報をそのまま使えばMySQL Workbenchから接続することができます。

workbench_01.png

"Test Connection"ボタンを押して接続できるか確認します。

workbench_02.png

MySQL Workbenchのサーバーステータスの画面です。

workbench_03.png

MySQL WorkbenchのStandard TCP/IP over SSHを使用する方法

plink.exeを使用しなくてもMySQL WorkbenchだけでRDSへ接続する方法がありました。

  • Connection Method:にStandard TCP/IP over SSHを選択
  • SSH Hostname:にsshログインするEC2インスタンスのpublic IPと接続ポート(22)を入力
  • SSH Key File:にプライベートキーファイルを指定
  • MySQL Hostname:にRDSのエンドポイントを入力

workbench_04.png

"Test Connection"ボタンを押して接続できるか確認します。

workbench_05.png

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7