AWS AuroraにMariaDBクライアントから接続して使用する

# TL;DR

* [AWS Aurora](https://aws.amazon.com/jp/rds/aurora/)をセットアップして，MariaDBクライアントから接続します
    * Auroraは，MySQL,postgresqlと互換性のある，フルマネージドなリレーショナルデータベースです

# 1. AWS Aurora概要

* [AWS Aurora](https://aws.amazon.com/jp/rds/aurora/)の使用を開始するは，MySQL, postgresqlと互換性のある（クエリを実行できる），RDBサービスです
    * 各種Webアプリのデータベース・エンドポイント（接続先）として使用できます
* フルマネージドなので，DBのために，EC2の仮想マシンを立ち上げたり，管理したりする必要がありません

# 2. 実験概要

1. 無料使用枠内には収まらないので，必要な分だけ使用する，スケーラブル構成でAuroraをセットアップします
1. t2.smallインスタンスから，mysqlコマンド（Mariadb）で接続します

# 3. AWS Auroraのセットアップ

* [[AWS Aurora](https://aws.amazon.com/jp/rds/aurora/)の使用を開始する]をクリックしてスタート
* [データベースの作成]ボタンをクリック
  * ![aws-aurora-db-create.jpg](https://qiita-image-store.s3.amazonaws.com/0/309617/4723d172-dbe6-865a-e5e8-6233c6813a43.jpeg)
* エンジンの選択： [Amazon Aurora]を選択
    * エディションは[MySQL 5.6 との互換性]がチェックされていることを確認
    * [次へ]をクリック
    * ![aws-aurora-engine.jpg](https://qiita-image-store.s3.amazonaws.com/0/309617/9a6a02b5-6fc4-9fff-fe23-d0801f228105.jpeg)
* 設定（前半）
    * Capacity type: [Serverless]を選択
    * ![aws-aurora-config0.jpg](https://qiita-image-store.s3.amazonaws.com/0/309617/58c64edd-9d81-af11-0f90-a81591e0190e.jpeg)
* 設定（後半）
    * DB インスタンス識別子：適当にユニークな名前を入力 （[hogehuga-fugahoge-190313]など）
    * マスターユーザの名前，マスターパスワードとその確認：適切なものを決めて入力
    * [次へ]をクリック
    * ![aws-aurora-config1.jpg](https://qiita-image-store.s3.amazonaws.com/0/309617/2f12fe3f-566a-76e5-88b7-c6ac2a7fef5a.jpeg)
* ネットワーク＆セキュリティ
    * VPCとサブネットグループは，デフォルトのまま
    * パブリックアクセシビリティは「いいえ」（同じVPCのVMからアクセスする）
    * VPCセキュリティグループは，Auroraのポート（3306など）へのアクセスが有効になるものを選ぶ
    * [削除保護の有効化]のチェックを外す（実験後に削除するので）
    * [データベースの作成]をクリック
    * ![aws-aurora-config2.jpg](https://qiita-image-store.s3.amazonaws.com/0/309617/cd8f6c7f-9b65-e9d5-fcd7-b571bb66cd6f.jpeg)
    * ![aws-aurora-config3.jpg](https://qiita-image-store.s3.amazonaws.com/0/309617/da7cd5c1-881b-c9a8-95c3-c6fdb1ec8fe1.jpeg)
* 「DB インスタンスを作成中です」と表示されしばらく待つ（〜5分）
    * ![aws-aurora-creating.jpg](https://qiita-image-store.s3.amazonaws.com/0/309617/905d0685-08dd-02cc-d247-3cee3e306e96.jpeg)
* 「DB インスタンスの詳細を表示」をクリックし，「DB インスタンスのステータス」が「利用可能」になったら使用できる
    * ![aws-aurora-console.jpg](https://qiita-image-store.s3.amazonaws.com/0/309617/61a48e6e-5bb8-7e47-a7c2-18c33ebd43e4.jpeg)

# 4. EC2インスタンスのセットアップ

## EC2インスタンスの起動

* [AWS EC2](https://aws.amazon.com/jp/ec2/)から，[インスタンスの作成]をクリック
* マシンイメージ（AMI）として，[Amazon Linux 2 AMI (HVM), SSD Volume Type]を選択
* インスタンスタイプで[t2.small]を選択．[次の手順]をクリック．
* ストレージを汎用SSDで50GB程度確保しておく
* セキュリティグループを適当に（インバウンドsshの22番ポートを開けておくくらい）設定する
* [起動]をクリックして，キーペアを適当に設定して，インスタンスを起動する

## 仮想マシンにSSHでログイン

```bash
ssh -i keypair.pem ec2-user@[インスタンスのパブリックIPアドレス]

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
5 package(s) needed for security, out of 8 available
Run "sudo yum update" to apply all updates.
```

## VMセットアップ

VMは，アップデートと，MariaDBクライアント，開発ツール（コンパイラ等）をインストールします．

```bash
sudo yum -y update
sudo yum -y install mariadb
sudo yum -y groupinstall 'Development tools'
```

## auroraへの接続テスト

### mysqlコマンドで，auroraに接続する

* 下記の[ユーザ名]，[パスワード]は， auroraセットアップ時に入力したものを入力します
* [auroraエンドポイント]はAmazon RDSダッシュボードのauroraのエンドポイントを使用します
    * [hogehuga-fugahoge-190320.ap-northeast-1.rds.amazonaws.com]など，インスタンス識別子とアベイラビリティゾーンから構成される文字列です

```bash
mysql -u [ユーザ名] \
      -h [auroraエンドポイント] \
      -p
Enter password: [パスワードを入力]
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Server version: 5.6.10 MySQL Community Server (GPL)
...<snip>...
MySQL [(none)]> show databases; -- データベースリストを表示
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
```

### データベースの作成，削除

* 以降は通常のMySQLライクなデータベースと同様の操作で使用できます．
* [【MySQL, SQL】データベースを扱う基本SQL一覧](https://qiita.com/knife0125/items/bb095a85d1a5d3c8f706)などが参考になります．

# auroraの使用終了

* aws auroraのコンソールから，削除したいDB識別子を選択し，[アクション]から[削除]を実行します
    * <img src="https://qiita-image-store.s3.amazonaws.com/0/309617/66c814f4-1db2-e51a-a39c-86c9934e462a.jpeg" width=50% />
* [DBクラスターの削除]をクリックすると，データベースのステータスが[削除中]になり，しばらくするとリストから消えます
    * <img src="https://qiita-image-store.s3.amazonaws.com/0/309617/ccdf9fde-fa06-dc78-62fc-27647f3e416d.jpeg" width=80% />

# 参考

* [AWS Aurora](https://aws.amazon.com/jp/rds/aurora/)
* [【MySQL, SQL】データベースを扱う基本SQL一覧](https://qiita.com/knife0125/items/bb095a85d1a5d3c8f706)