[無料] AWS EC2 + RDS + Flask でWebアプリを作り HTTPS 化する [その1: AWSアカウント作成]


タイトルの通り、とにかく無料でのWebアプリ開発をやれるだけやってみようということで、AWSの登録、サーバーの設定、Flaskでの開発、ドメインの取得、HTTPS化(SSL証明書発行)などなど、とにかく手順が多いので備忘録も兼ねて記事にします、Python (Flask) でWebアプリ開発をしている or したいが、AWSを使ったことがないという方に読んでもらえると幸いです。Flask の使い方の簡単な説明もします。

## Heroku から AWS へ移行した理由

Python (Flask) を使い、無料でwebアプリを作ろうとなるとやはり環境構築が不要な Heroku がとにかく手っ取り早く、簡単なアプリならばこれで十分なのですが、無料枠だと

- メモリが 512MB
- Postgres の最大レコード数は1万
- 30分使われないとスリープ


とかなり制約が多く、特に最初の2つはかなり厳しいです。pandas + numpy + torch とかインポートしようものならあっという間に上限に達します（というか、そもそもデプロイできない）。

一方のAWSはEC2で仮想サーバーを立てれば、無料枠内でも1GBのRAMに加え、最大30GBのストレージが使え、RDSは容量制限はあってもレコード数制限は無い、と差が大きいです。まあ一年限定なんですが。

ちなみにAWSにも Elastic Beanstalk という環境構築を手軽にやってくれるサービスがあるのですが、やはり様々な自由度を考えて EC2 や RDS を用いて全て自分で構築していきます。記事は細分化してあるので、必要な部分だけ読んで頂ければよいかと思います。

## 大まかな手順

1. AWSのアカウント作成 & クレジットカード認証など 
2. セキュリティグループの設定 → [go](https://qiita.com/nozomiyamada/items/1998744d138a29751556)
3. EC2インスタンスとキーペアを作成する → [go](https://qiita.com/nozomiyamada/items/0be5844568eeceeca51d)
4. Elastic IP を作成し、EC2インスタンスのIPアドレスを固定する → [go](https://qiita.com/nozomiyamada/items/b7a0e41f8117a34ba3fa)
5. Flask でアプリケーションの作成 → [go](https://qiita.com/nozomiyamada/items/8d75ff32dad5b0976738)
6. EC2へのデプロイ → [go](https://qiita.com/nozomiyamada/items/4a0686485835bb0ff7ed)
7. [freenom](https://www.freenom.com/) でフリードメインを取得 → [go](https://qiita.com/nozomiyamada/items/6a898860d5c455868859)
8. Route53 でホストゾーンの作成、ネームサーバーの登録 → [go](https://qiita.com/nozomiyamada/items/007935e616f7d39577aa)
9. Certificate Manager で SSL証明書の発行 → [go](https://qiita.com/nozomiyamada/items/d0e756a3492fe6c7f601)
10. EC2 から Load Balancer の設定 → [go](https://qiita.com/nozomiyamada/items/5b01b3ca38bf79d70eb0)
11. Route53 でロードバランサーへのルーティング → [go](https://qiita.com/nozomiyamada/items/c759ea24680758f6d551)

と非常に長いです。さらに、

- gunicorn の導入 -> [go](https://qiita.com/nozomiyamada/items/ac436d6371642d97a0a8)
- RDSでデータベースを作成 -> [go](https://qiita.com/nozomiyamada/items/4285739137d00d4ef254)
- スワップによるメモリの拡張

なども扱っていきたいと思います。

## AWSアカウント作成

[ここ](https://portal.aws.amazon.com/billing/signup#/start)から新規アカウントを作成できます。
![Screen Shot 2563-12-13 at 00.23.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/01a09327-e4ce-2083-10d6-6280a403c787.png)
アカウントタイプは Personal にして、個人情報を入力していきます
![Screen Shot 2563-12-13 at 00.24.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/28c2e724-e20e-822d-4706-6c3f3767bb54.png)
カード番号も入れます。認証のために最初にこのカードに1ドルの請求がきます（実際には引き落とされない）。ただ、そのカードが1ドル未満では引き落としができない仕様だったようで、「引き落としできません」というエラーメールが何度も送られてきました。認証できなければカードを変えてみてください。
![Screen Shot 2563-12-13 at 00.26.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/7e14bf7e-20d1-3e5f-4d40-b89eff6ef781.png)
電話番号宛にSMSがきますので、認証します。
![Screen Shot 2563-12-13 at 00.36.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/c816166c-1b89-f2b4-93b2-ddfee19f0a94.png)
プラン選択はもちろん Free です。
![Screen Shot 2563-12-13 at 00.38.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/d6b7f9c1-04c3-5086-15cc-94d749cc9fd4.png)
Sign in to the Console でサービスに入れます。

左上の Services を押すと、とにかくたくさんのサービス一覧が出ますが、この中で使うのはごく一部です。Google Cloud Platform にせよこれにせよ、サービスの充実ぶりはすごいですね。
![Screen Shot 2563-12-13 at 00.40.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/63bee1b4-1f80-2228-fea2-e8600ca22cd6.png)

## リージョン選択

AWSにはリージョンというものがあります。つまり、そのサーバーがどの国に置かれているかということです。一つのアカウントで複数のリージョンを使えますが、料金請求は複数リージョンまとめて行われます。画面右上の登録名の右から選択できます。
![Screen Shot 2563-12-13 at 18.26.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/4a44f166-cf76-67cf-b36b-38db960444a9.png)
遠いリージョンを選べば、その分レイテンシー（遅延）も大きくなります。同じ量だけ使ってもアメリカ国内のリージョンの方が料金的に安かったりするのですが、日本からだとやや遅く感じる場合があります。

ただ、無料利用枠の計算は金額単位でなく時間単位なので、どのリージョンを使っても変わりません。日本からのアクセスなら素直に東京リージョンを選ぶのが良いと思います（私はバンコク在住なのでシンガポールリージョンにしています）。

無闇にリージョンを変えるのは危険です。現在起動しているサーバーなどの情報は、リージョン単位で表示されます。個人的な経験ですが、試しにリージョンをアメリカに変えてサーバーを起動した後で、終了し忘れたことがありました。元のリージョンに戻した時に、その終了し忘れたアメリカリージョンのサーバーの情報は画面に表示されないので、てっきり一つしか起動してないものと勘違いし、請求がきた時点になって無料利用枠を超えていることに気付きました。一ヶ月の合計稼働時間は750時間までなので、一つならば 24*31=744 とギリギリ超えないのですが、2つにすると当然超えます。**Billing & Cost Management** というものがあるので、そこで定期的に現在の使用状況をチェックすることをオススメします。また、85%に達した時点メールで通知させることも可能です。
![Screen Shot 2563-12-13 at 18.47.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/18fc41a5-41f1-19d4-3001-a2bc38d2d2d0.png)



[その2](https://qiita.com/nozomiyamada/items/1998744d138a29751556) に続きます