アプリの開発をする（AWSのアカウント作成から環境構築まで）

# まえがき
エンジニアは、常に勉強し、技術を磨き続けなければならない。
例えば、外国語を学習するには、その言語を使うことが一番良い方法だという話を聞いたことがある。
実際、自分もそのように考えている。
では、技術を学ぶために一番いい方法は何だろうか？
おそらく、実際にその技術を使うことではないだろうか。
とうことで、今回簡単なWebアプリ的なものを作ることにした。

# AWSアカウントの作成
これを見ればok
https://aws.amazon.com/jp/register-flow/

# AWSで構築したいアーキテクチャ
とりあえず、APサーバとDBサーバのみのシンプルな構成から始め、今後必要に応じて変えていくことにする。
（というか、最初から難しいことを色々考えると挫折しそう）
ペイントで作った手抜き図ですまん
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/8cadd717-3f59-f2b5-32f6-5c4e05038fee.png)


# 環境構築
VPCの作成、EC2インスタンスの作成、RDSインスタンスの作成の順番で説明する。

## VPCの作成
まずはVPC(Virtual Private Cloud)を作成する。
EC2インスタンスを家だとすると、VPCは家を建てるための土地みたいなイメージ（合ってるかは分からない）
ネットワークのことはあまり詳しくないので、要勉強

さて本題に戻るが、今回は一番上のやつを選んでVPCを作成した。他のやつはお金がかかりそう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/593bf796-a156-0aa7-3d00-d4fe09310092.png)
デフォルト設定でVPCを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/6af377b5-d964-363d-e28d-8cb03a14331b.png)

## EC2インスタンスの作成
「インスタンスを起動」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/8eb28462-7a5c-1342-7f04-0a609ba64e8a.png)

「無料利用枠のみ」にチェックを入れ（ここ重要）、AMIの一覧を見てみる。
今回は、Ubuntuを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/ddfe38f7-5e1e-b817-d439-d109c3f0829f.png)

インスタンスタイプは、無料利用枠の対象であるt2.microを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/9e3c9392-d0d9-b364-f0cf-4971d6160d36.png)

セキュリティグループを設定する。
EC2インスタンスに対し、自分がアクセスするためのSSHアクセスの設定と、ユーザがアクセスするためのHTTPアクセス設定を追加。
SSHの方のソースには、必要なIPアドレスだけ設定しておきましょう。
例えばある一つのIPだけ指定する場合は、x.x.x.x/32みたいな感じになると思います（多分）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/f8867cc5-6ce1-0e3c-24c0-24d482ef7f9d.png)

以上の設定でEC2インスタンスを作成します。

新しいキーペアを作成する画面が出てくると思うので、作成してダウンロードしてください。
（スクショし忘れました、すいません）

## EC2インスタンスにアクセスする
先ほどダウンロードした鍵（.pemファイル）を、~/.ssh直下に移動する。（ここではkey.pemとする）
以下のようなコマンドで先ほど作成したEC2インスタンスにアクセスできる

```
ssh -i ~/.ssh/key.pem ubuntu@x.x.x.x
```

ここに全て載ってます。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

## RDSインスタンスの作成
この画面からRDSを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/46ac491a-792b-7f00-5320-e3ef5131329f.png)

とりあえず簡単作成を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/f422c572-1e59-0fe7-37c3-182ff868ddf0.png)

以下のページによると、Amazon AuroraとOracleは無料利用枠の対象外っぽいので注意。今回はMySQLを選択。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/free-tier-rds-launch/
DBインスタンスサイズでは無料利用枠を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/b5ba0732-1522-e70a-35d9-21073cd9254f.png)

あとはマスターユーザー名とマスターパスワードを設定し、RDSインスタンスを作成。

## RDSインスタンスにアクセスする

RDSインスタンスのセキュリティグループを編集する。
前者のInboundの方を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/ca80a326-a962-c2fa-013a-c1b45bd87984.png)

EC2のプライベートIPv4アドレスを黒塗りのところに記入する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/6a5257e7-8802-60d0-121e-5f7dc858d3ea.png)

ちなみに、EC2のプライベートIPv4アドレスはこんな感じで確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/651438eb-9b6c-1398-7654-0fc6f80df809.png)


次に、EC2インスタンスへアクセスする。
アクセスしたら、以下のコマンドでパッケージ一覧を更新する。（これをやらないと、次のコマンドが実行できなかった）

```
sudo apt update
```

続いて、mysqlコマンドを使えるようにするため以下のコマンドを実行する。

```
sudo apt install mysql-client-core-8.0 
```

以下のようになコマンドを打てば、mysqlを良い感じに起動できる。

```
mysql -h エンドポイント -u root -p
```

ちなみにエンドポイントは以下のように確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/9de773f0-a69b-f7cb-258c-cf24a1ff1ba7.png)

ポート番号が3306ではない場合は、以下のようにPオプションを追加する。

```
mysql -h エンドポイント -P ポート番号 -u root -p
```



# 予算の設定
これが一番大事だと言っても過言ではない。高額な請求をされて困らないためにも、ちゃんと予算を設定しよう。
この画面から、「予算の作成および管理」を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/5472d54c-cf18-104e-9e84-4030e115db70.png)

コスト予算を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/f70ae5ee-92e4-5f51-d15c-e8848f66aee2.png)

年単位の予算で$0.000001にすれば、うっかり有料のサービスを使ったとしても、ほぼ無傷で済むでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/81244a20-8682-7909-7b35-00769179af4e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/979bc349-2eb5-651a-f7a2-c8b1810d109f.png)

とりあえずアラートを設定。実際のコストが1ドルを超えた場合にアラートが飛ぶように設定。
上記設定により、1ドルを超えることはまずないはず。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/8327bd3a-0dde-4dc2-9416-f5ef4b0e2ad8.png)

設定全体を見るとこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628781/04dd6324-26be-cd45-e3c1-cbf4f4308cc2.png)