【AWS】EC2インスタンスを作成しRDBへ接続

AWSのワークショップに参加してインスタンスとDBを作成したメモ

# EC2 Linuxインスタンス作成
左上の「サービス」を選び「EC2」を選択
<img width="500" alt="画像01.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/b1a7daa6-ea11-1714-c4cc-039cc87863c6.jpeg">

左のメニューから「インスタンス」を選び「インスタンスの作成」を選択
<img width="500" alt="画像02.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/4a4cb283-c954-88fe-3f71-fe38fcbdca60.jpeg">
<img width="500" alt="画像03.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/f51c6b52-3903-04c8-05ad-d44e51f00f98.jpeg">

AMIはAmazon Linux 2 AMIを選択
<img width="1431" alt="画像04.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/b207dc85-cb3a-c374-95b1-f7f14048e01f.jpeg">

インスタンスタイプは無料利用枠対象のt2.microを選択し「次のステップ」へ
<img width="1434" alt="画像05.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/9658010f-c1d2-2b75-c7d3-e076146af56b.jpeg">

ネットワークでVCP、サブネット（パブリックサブネット）、自動割り当てパブリックIPを「有効」にする
<img width="1437" alt="画像06.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/9a159cfd-e1e0-c7f0-0f3d-59d753fcf059.jpeg">

ストレージはデフォルトのままで「次のステップへ」
<img width="1435" alt="画像07.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/3372eaaa-bb58-5540-1d59-ece39b5e7a46.jpeg">

作ったインスタンスがわからなくならないように「Nameタグ」を追加
<img width="1438" alt="画像08.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/5e3dacb4-0768-17ec-cbd1-a435797530b4.jpeg">

インスタンスの区別がつくようにNameタグを追加し「次」
<img width="1434" alt="画像09.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/50944d80-6a30-3dd1-bb46-69b94a1cf41d.jpeg">

セキュリティグループは、事前に作成してあるクライアントがあるネットワークからの接続を許可しているのを選択し、「確認と作成」
<img width="1435" alt="画像10.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/5a4abcd2-09d0-6818-ee63-e895586ce7d5.jpeg">

インスタンス作成の確認画面で設定を確認した上で「起動」
<img width="1440" alt="画像11.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/57dcd332-8d0f-32c7-0dcc-26d9e21663c0.jpeg">

「既存のキーペアの選択」を選び、ダウンロードしたキーに対するキーペアを選択し、チェックを入れて「インスタンスの作成」
<img width="1439" alt="画像12.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/142e7881-c73d-fb9a-7a6c-11c7bd6dc529.jpeg">

インスタンスの作成中になったら、インスタンスIDをクリックしてインスタンス画面へ
<img width="1437" alt="画像13.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/9ff9de95-77b7-7f71-895f-e72a686e82e6.jpeg">

インスタンスの状態が「running」になったら起動完了。「説明」タブの「パブリックDNS（IPv4）」か「IPv4パブリックIP」のどちらの値を使って、sshで接続してみる。
<img width="1437" alt="画像14.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/9f0199ea-a974-681f-8416-111d3a1c3c0b.jpeg">

# EC2 Linuxインスタンス作成完了
SSHでアクセスすると Amazon Linux 2 AMIのプロンプトが表示される
<img width="643" alt="画像15.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/e5c3ae67-61c9-23f8-ce37-65bc0494bba8.jpeg">

# RDS DBインスタンス作成
「サービス」から「RDS」を選択
<img width="400" alt="画像16.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/37b6ed8e-023f-0cb1-9084-7fb84c37dd33.jpeg">

「データベース」から「データベースの作成」をクリック
<img width="500" alt="画像17.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/c3c592f6-ac9c-8374-2826-a32bc39b2daa.jpeg">
<img width="1419" alt="画像18.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/b3d89b8c-407a-4bb0-e5f6-0f9a6290c1b2.jpeg">

「PostgreSQL」を選択
<img width="500" alt="画像19.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/2ab54bd2-30a9-b9a9-c29c-b889972e1570.jpeg">

DBエンジンは複数のバージョンがさレポートされているので使いたいのを選ぶ
テンプレートは「開発／テスト用」を選んでおくとコストがかかる選択肢が選ばれにくくなる
<img width="500" alt="画像20.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/a642b873-7677-433e-5e71-0e848cfc8f70.jpeg">

DBの設定画面
<img width="500" alt="画像21.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/26c45521-185a-6661-aea2-4f44d02d1a5e.jpeg">

- DBインスタンス識別子は、好きなものを。この名前ベースでアクセスするからわかりやすく
- マスターユーザ名が管理者ユーザ名になる
- マスターパスワード・パスワードを確認の部分で適当なパスワードを入力

DBインスタンスクラスは「バースト可能クラス（tクラスを含む）」で「db.t2.small」を今回は選択
<img width="500" alt="画像22.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/6f85f104-2673-3413-7591-c1828de53807.jpeg">

ストレージは「汎用（SSD）20GB」のデフォルト
<img width="500" alt="画像23.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/1dca1a28-4107-dc55-33b3-eaa6eeffa6fe.jpeg">

VPCはEC2と同じ「DBWORKSHOP-VPC」を選択（他のにするとEC2インスタンスとインターネットゲートウェイ経由じゃないと）繋がらなくなる）
「追加の接続設定」で「サブネットグループ」を「tmp-subnet-group-private-3az」を選択。RDSでは、サブネットをサブネットグループというひとまとまりの設定で扱う。ここでは、プライベートサブネットを束ねたこのサブネットグループを指定する。
パブリックアクセス可能は「なし」。パブリックサブネットとプライベートサブネットの間はプライベートIPだけで通信できる
<img width="500" alt="画像25.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141308/70cb1e50-e2cc-94b4-e293-b6f65a7c17a3.jpeg">

VPCセキュリティグループを、「既存の選択」でDBように事前に作成してある「SG-PRIVATE」を選択
「追加設定」で「最初のデータベース名」に「test」と入力
最後に「データベースの作成」をクリックして作成完了

```:EC2インスタンスにDBクライアントをインストール
[ec2-user@ip-10-0-1-50 ~]$ sudo amazon-linux-extras install -y postgresql9.6
Installing postgresql
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Cleaning repos: amzn2-core amzn2extra-docker amzn2extra-postgresql9.6
10 metadata files removed
4 sqlite files removed
0 metadata files removed
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                                                                          | 2.4 kB  00:00:00
amzn2extra-docker                                                                                                                   | 1.3 kB  00:00:00
amzn2extra-postgresql9.6                                                                                                            | 1.3 kB  00:00:00
(1/5): amzn2-core/2/x86_64/group_gz                                                                                                 | 2.5 kB  00:00:00
(2/5): amzn2-core/2/x86_64/updateinfo                                                                                               | 184 kB  00:00:00
(3/5): amzn2extra-postgresql9.6/2/x86_64/primary_db                                                                                 |  37 kB  00:00:00
(4/5): amzn2extra-docker/2/x86_64/primary_db                                                                                        |  59 kB  00:00:00
(5/5): amzn2-core/2/x86_64/primary_db                                                                                               |  36 MB  00:00:00
Resolving Dependencies
--> Running transaction check
---> Package postgresql.x86_64 0:9.6.8-1.amzn2.0.2 will be installed
--> Processing Dependency: postgresql-libs(x86-64) = 9.6.8-1.amzn2.0.2 for package: postgresql-9.6.8-1.amzn2.0.2.x86_64
--> Processing Dependency: libpq.so.5()(64bit) for package: postgresql-9.6.8-1.amzn2.0.2.x86_64
--> Running transaction check
---> Package postgresql-libs.x86_64 0:9.6.8-1.amzn2.0.2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===========================================================================================================================================================
 Package                             Arch                       Version                                 Repository                                    Size
===========================================================================================================================================================
Installing:
 postgresql                          x86_64                     9.6.8-1.amzn2.0.2                       amzn2extra-postgresql9.6                     1.3 M
Installing for dependencies:
 postgresql-libs                     x86_64                     9.6.8-1.amzn2.0.2                       amzn2extra-postgresql9.6                     253 k

Transaction Summary
===========================================================================================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 1.6 M
Installed size: 5.3 M
Downloading packages:
(1/2): postgresql-libs-9.6.8-1.amzn2.0.2.x86_64.rpm                                                                                 | 253 kB  00:00:00
(2/2): postgresql-9.6.8-1.amzn2.0.2.x86_64.rpm                                                                                      | 1.3 MB  00:00:00
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                      9.3 MB/s | 1.6 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : postgresql-libs-9.6.8-1.amzn2.0.2.x86_64                                                                                                1/2
  Installing : postgresql-9.6.8-1.amzn2.0.2.x86_64                                                                                                     2/2
  Verifying  : postgresql-libs-9.6.8-1.amzn2.0.2.x86_64                                                                                                1/2
  Verifying  : postgresql-9.6.8-1.amzn2.0.2.x86_64                                                                                                     2/2

Installed:
  postgresql.x86_64 0:9.6.8-1.amzn2.0.2

Dependency Installed:
  postgresql-libs.x86_64 0:9.6.8-1.amzn2.0.2

Complete!
  0  ansible2                 available    [ =2.4.2  =2.4.6  =2.8 ]
  2  httpd_modules            available    [ =1.0 ]
  3  memcached1.5             available    \
        [ =1.5.1  =1.5.16  =1.5.17 ]
  5  postgresql9.6=latest     enabled      [ =9.6.6  =9.6.8 ]
  6  postgresql10             available    [ =10 ]
  8  redis4.0                 available    [ =4.0.5  =4.0.10 ]
  9  R3.4                     available    [ =3.4.3 ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0  =1.38.0 ]
 11  vim                      available    [ =8.0 ]
 13  ruby2.4                  available    [ =2.4.2  =2.4.4  =2.4.7 ]
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14
          =7.2.16  =7.2.17  =7.2.19  =7.2.21  =7.2.22  =7.2.23
          =7.2.24 ]
 16  php7.1                   available    \
        [ =7.1.22  =7.1.25  =7.1.27  =7.1.28  =7.1.30  =7.1.31
          =7.1.32  =7.1.33 ]
 17  lamp-mariadb10.2-php7.2  available    \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5
          =10.2.10_7.2.8  =10.2.10_7.2.11  =10.2.10_7.2.13
          =10.2.10_7.2.14  =10.2.10_7.2.16  =10.2.10_7.2.17
          =10.2.10_7.2.19  =10.2.10_7.2.21  =10.2.10_7.2.22
          =10.2.10_7.2.23  =10.2.10_7.2.24 ]
 18  libreoffice              available    [ =5.0.6.2_15  =5.3.6.1 ]
 19  gimp                     available    [ =2.8.22 ]
 20  docker=latest            enabled      \
        [ =17.12.1  =18.03.1  =18.06.1  =18.09.9 ]
 21  mate-desktop1.x          available    [ =1.19.0  =1.20.0 ]
 22  GraphicsMagick1.3        available    [ =1.3.29  =1.3.32 ]
 23  tomcat8.5                available    \
        [ =8.5.31  =8.5.32  =8.5.38  =8.5.40  =8.5.42  =8.5.50 ]
 24  epel                     available    [ =7.11 ]
 25  testing                  available    [ =1.0 ]
 26  ecs                      available    [ =stable ]
 27  corretto8                available    \
        [ =1.8.0_192  =1.8.0_202  =1.8.0_212  =1.8.0_222  =1.8.0_232
          =1.8.0_242 ]
 28  firecracker              available    [ =0.11 ]
 29  golang1.11               available    \
        [ =1.11.3  =1.11.11  =1.11.13 ]
 30  squid4                   available    [ =4 ]
 31  php7.3                   available    \
        [ =7.3.2  =7.3.3  =7.3.4  =7.3.6  =7.3.8  =7.3.9  =7.3.10
          =7.3.11 ]
 32  lustre2.10               available    [ =2.10.5  =2.10.8 ]
 33  java-openjdk11           available    [ =11 ]
 34  lynis                    available    [ =stable ]
 35  kernel-ng                available    [ =stable ]
 36  BCC                      available    [ =0.x ]
 37  mono                     available    [ =5.x ]
 38  nginx1                   available    [ =stable ]
 39  ruby2.6                  available    [ =2.6 ]
 40  mock                     available    [ =stable ]
 41  postgresql11             available    [ =11 ]
[ec2-user@ip-10-0-1-50 ~]$
```

```:EC2インスタンスからRDSに接続
[ec2-user@ip-10-0-1-50 ~]$ psql -h postgredb.chckkbdbpisq.ap-northeast-1.rds.amazonaws.com -p 5432 -U postgres -d test
Password for user postgres:
psql (9.6.8, server 11.5)
WARNING: psql major version 9.6, server major version 11.
         Some psql features might not work.
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

test=>
test=>
test=>
```