こちらの記事 で AWS の基礎はある程度把握できた気がするので、以下のような構成のサンプルアプリを作ってみることにしました。アプリ自体は、「Web画面で入力したコメントをDBに登録する」だけの超シンプルなものです。

全てをまとめてやるのは大変なので、全三回に分けて順番にやってみます。
今回は part1 ということで、「RDS 環境構築」までをやってみたいと思います。具体的な作業としては、VPC を作成し、RDS で MariaDB のデータベースを作成して、テーブルを作成するところまでです。
- part1: RDS 環境構築(今回)
- part2: EKSでRDSにアクセスするWEB APIサーバを構築
- part3: CodeBuild・CodePipelineを使ってデリバリーパイプラインを導入
今回利用するサービス
-
Amazon VPC
- 今回のシステムを構成するコンポーネント全体を所属させる Virtual Private Cloud を作成する
- 特定IPアドレスからの RDS へのアクセス、https アクセスのみ公開する
-
Amazon RDS
- 今回は MariaDBを使ってみる
-
commentsというテーブルを作るだけ
VPCの作成
こちら を参考に、プライベートサブネットおよびパブリックサブネットを持つ VPC を作成したいと思います。
プライベートサブネットにはDBなどを、パブリックサブネットにはWebサーバなどを割り当てる想定です。
Elastic IP コンソール で Elastic IP アドレスを取得する
-
Elastic IP アドレスの割り当てをクリック -
パブリック IPv4 アドレスプールのAmazon の IPv4 アドレスプールを選択 -
割り当てをクリックすると、アドレスを取得できる - ちなみに、アドレス一つであれば無料らしい
パブリックとプライベート サブネットを持つ VPC を作成
-
VPC コンソール の
VPC ウィザードを起動でウィザードを開始する -
パブリックとプライベート サブネットを持つ VPCを選択 - デフォルト値から以下を修正して、
VPC の作成を実行- VPC 名:
sample-vpc - パブリックサブネットのアベイラビリティーゾーン:
us-west-2a - パブリックサブネット名:
sample-public-subnet - プライベートサブネットのアベイラビリティーゾーン:
us-west-2a - プライベートサブネット名:
sample-private-subnet - Elastic IP 割り当て ID: 先ほど作成した Elastic IP アドレスのID
- VPC 名:
同じルートテーブルを利用するプライベートサブネットを追加
-
VPC コンソール >
サブネット>サブネットを作成でサブネット作成画面を表示し、以下を入力してサブネットを作成- VPC ID: 先ほど作成した VPC のID
- サブネット名:
sample-private-subnet2 - アベイラビリティーゾーン:
us-west-2b - IPv4 CIDR ブロック:
10.0.2.0/24
- 二つのプライベートサブネットが同じルートテーブルを利用するようにする
- 一つ目のサブネット(sample-private-subnet)のルートテーブルの値をコピー
- 二つ目のサブネットの詳細画面の
ルートテーブルタブで、ルートテーブルの関連付けを編集をクリックし、ルートテーブル IDに先ほどコピーした値を設定して保存
プライベートサブネットのルートテーブルを編集して、インターネットゲートウェイ経由でアクセスするようにする
- 【重要】 チュートリアルにはないがインターネット経由でRDSにアクセスする場合は、この設定が必須
-
VPC コンソール >
サブネット>sample-private-subnetのルートテーブルリンク -
ルートタブ >ルートの編集 - 送信先:
0.0.0.0/0, ターゲット:igw-xxxx(Internet Gateway)
パブリック WEB サーバーの VPC セキュリティグループを作成
-
VPC コンソール >
セキュリティグループ>セキュリティグループを作成をクリック - 以下を入力して、
セキュリティグループを作成- セキュリティグループ名:
sample-public-securitygroup - 説明:
for public access - VPC: 先ほど作成した VPC のID
-
インバウンドルール>ルールを追加- タイプ:
HTTP, ソース:任意の場所 - タイプ:
HTTPS, ソース:任意の場所
- タイプ:
- セキュリティグループ名:
プライベート DB インスタンスの VPC セキュリティグループを作成
- パブリック WEB サーバーと同じ手順でセキュリティグループを作成する
- 入力パラメータは以下の通り
- セキュリティグループ名:
sample-private-securitygroup - 説明:
for private access - VPC: 先ほど作成した VPC のID
-
インバウンドルール>ルールを追加- タイプ:
MySQL/Aurora, ソース:sample-public-securitygroupのID - タイプ:
MySQL/Aurora, ソース:マイIP
- タイプ:
- セキュリティグループ名:
DB サブネットグループを作成
-
RDS コンソール >
サブネットグループ>DB サブネットグループを作成 - 以下を入力して
作成- 名前:
sample-db-subnet-group - 説明:
Sample DB Subnet Group - VPC: 先ほど作成した
sample-vpc - サブネットを追加
- アベイラビリティーゾーン:
us-west-2aとus-west-2b - サブネット: 先ほど作成した
sample-private-subnetとsample-private-subnet2のID
- アベイラビリティーゾーン:
- 名前:
思ったよりだいぶ大変でしたが、おそらくこれで VPC の設定は終わりのはず...
もし設定が足りてなければ後で追記します。
データベース作成
RDS コンソール から、データベースを作成して、テーブルを作成します。
データベース作成
今回は、MariaDBを使ってみることにしました。
- 「データベースの作成」ボタンからデータベース作成を開始する
- デフォルト値以外で以下を入力し、「データベースの作成」ボタンをクリックする(数分かかる)
- 作成方法:
標準作成 - エンジンのタイプ:
MariaDB - DBインスタンスサイズ :
無料利用枠 - DB インスタンス識別子:
sample-database - マスタユーザ名:
admin - パスワード: 適当な値(今回はとりあえず
hogehoge) - Virtual Private Cloud (VPC): 先ほど作成した
sample-vpc - サブネットグループ: 先ほど作成した
sample-db-subnet-group - パブリックアクセス可能: あり(今回は、ローカルPCからDBにアクセスしてテーブル等を作成する予定なので。
なしのほうがセキュア) - VPC セキュリティグループ:
既存の選択で、先ほど作成したsample-private-securitygroupを選択 - 最初のデータベース名:
sampledb
- 作成方法:
- コンソールでデータベース設定を確認する
- エンドポイント:
sample-database.xxxx.us-west-2.rds.amazonaws.com - ポート: 3306
- エンジンバージョン:
10.4.13 - ARN:
arn:aws:rds:us-west-2:xxxx:db:sample-database
- エンドポイント:
Mac に MariaDB をインストール
brew update
brew info mariadb
brew install mariadb
mariadb --version
> mariadb Ver 15.1 Distrib 10.5.9-MariaDB, for osx10.16 (x86_64) using readline 5.1
アクセス確認
以下のコマンドでアクセスできると思います。
mariadb -h sample-database.xxxx.us-west-2.rds.amazonaws.com -P 3306 -D sampledb -u admin -p
> Welcome to the MariaDB monitor. Commands end with ; or \g.
> Your MariaDB connection id is 33
> Server version: 10.4.13-MariaDB-log Source distribution
> Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
とはいえ、初回うまく接続できない可能性があります。その場合は こちら を参考に一つ一つ設定を確認してみてください。
-
ERROR 2002 (HY000): Can't connect to MySQL server on 'sample-database.xxxx.us-west-2.rds.amazonaws.com' (36)-
nslookup sample-database.xxxx.us-west-2.rds.amazonaws.comでserver can't findエラー- エンドポイントのコピペミス
- パブリックアクセシビリティが
ありになっていない(デフォルトはいいえ)
-
telnet sample-database.xxxx.us-west-2.rds.amazonaws.com 3306ornc sample-database.xxxx.us-west-2.rds.amazonaws.com 3306でエラー- セキュリティグループのインバウンド設定が足りない
- ルートテーブルが
Internet Gatewayを利用する設定になってない(デフォルトだとNAT Gateway利用) - ネットワーク ACL の設定で、ローカルPCからの経路を拒否している
-
-
ERROR 1045 (28000): Access denied for user 'admin'@'xx.xx.xx.xx' (using password: NO)-
mariadbコマンドの-pオプションつけ忘れ
-
-
ERROR 1049 (42000): Unknown database 'sampledb'- RDS のデータベースを作成した際に、 Maria DB のデータベースを作成し忘れ。もしくはデータベース名をミスっている
-
mariadbコマンドの-Dオプションを削除して、SQLでデータベースを作成する - もしくは、RDS データベースを削除して作り直す。
-
- RDS のデータベースを作成した際に、 Maria DB のデータベースを作成し忘れ。もしくはデータベース名をミスっている
テーブルの作成
今回は、idとcommentの2カラムのcommentsテーブルを作りたいと思います。
ここまで来れば、テーブル作成自体は一瞬で完了ですね。
MariaDB [sampledb]> create table comments (
id int auto_increment
, comment text not null
, primary key(id)
);
Query OK, 0 rows affected (0.132 sec)
MariaDB [sampledb]> show columns from comments;
+---------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| comment | text | NO | | NULL | |
+---------+---------+------+-----+---------+----------------+
2 rows in set (0.114 sec)
最後に
これで VPC を作成し、RDS で MariaDB のデータベースを作成して、テーブルを作成するところまでの作業が無事完了しました。
RDS にローカル PC から接続できない理由がわからず、時間がかかってしまいましたが、トラブルシューティングをやっているうちに VPC/サブネット/ルートテーブル/インターネットゲートウェイ/セキュリティグループあたりの理解が深まって逆に良かった気がします。
逆に、RDS の方は、あまり難しいところもなく、すんなり導入できたので理解が甘い感じはあります。
次回は、
「EKS で API サーバを立てて、RDS のテーブルにデータを追加する」
ところまでをやってみたいと思います。