AWSにDjangoの環境を整えていく01(VPC/subnet/IGW/RouteTable/SG/EC2)

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

プライベートでになりますが、AWSを近々で教える予定があります。
その方はAWSを学んだ後Python/Djangoを学ぶようなので、Django環境を徐々に拡張していくような形でAWSを学べれば良いかなと思い準備をしています。
この記事はその準備をしているものになります。

他の記事は以下の記事で別途管理しております為、適宜ご覧ください。

https://qiita.com/ohtsuka-shota/items/4b80538569b81f8c19a6

# 今回構築するAWS環境
初回なので本当に簡単な環境です。Djangoもインストールしません。
TokyoリージョンにVPCとsubnetを設定します。
その後Internet GatewayをVPCにアタッチし、RouteTableを整えます。
EC2用のSecurityGroupを作成し、併せてEC2をデプロイ。最後にEC2からインターネットに接続出来るかを確認していきます。
![aws-django01.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/8bcaa21e-3392-3cef-bc98-041563c31aa3.png)

今後RDS→ELB(ALB)→CloudFrontの順で本環境にデプロイしていき、環境をそれっぽくしていく予定です。
また、Route53やACM,Cloud9,ECS,Lambda,CloudFormation周りも組み込んでいけると良いのかなぁと思っています。

# 環境構築
## VPCのデプロイ
AWS管理コンソールからVPCの管理画面に遷移して、以下の設定値を入れます。
VPC名はclassact-vpcとし、CIDRは192.168.0.0/16としました。
![0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/d4a2ff0e-ebbc-d89f-948b-8915ce986235.png)
作成出来たことを確認します。
![0002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/ea290a91-71c0-5507-49b8-fb126f9cc7c2.png)

## subnetの設定
同じくVPCの管理画面に遷移してサブネットの作成画面を開きます。
subnetを作成するVPCは上記で作成したVPCを指定します。subnet名をclassact-public-subnet01とし、CIDRを192.168.1.0/24としました。
![0003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/8c00c256-9472-62a6-31ca-f0df73a9809e.png)
正常に作成出来たことを確認します。
![0004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a7bd106b-c3ea-489a-3394-0a1ac3a47ea7.png)

## Internet Gatewayを作成しVPCにアタッチする
VPCの管理画面に遷移してインターネットゲートウェイの作成画面を開きます。
名前をclassact-igwとして作成を実行します。
![0005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/c03bf85b-4388-092b-c8d7-17dc2ed10f04.png)
作成出来たことを確認します。画面右上にあるアクションからVPCにアタッチを押下します。
![0006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/32823031-3cee-285d-de9b-c69768a4ba5b.png)
最初に作成したVPCを選択し、アタッチを実行します。
![0007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/256d586e-9397-bb00-9947-b8c2b6431a28.png)
VPC IDのところにVPCが記載されていることを確認します。
![0009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/9797e3fe-ecdb-9a6b-e281-a898d3c8c878.png)

## RouteTableの作成と設定
VPCの管理画面に遷移してルートテーブルの作成画面を開きます。
名前をclassct-rtとして、VPCはこのルートテーブルを配置するVPCを指定します。
![0010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/35d4b384-63e4-b563-0dbf-2f95264b2e37.png)
作成出来ていることを確認します。
画面下のルートタブを押下し、ルートを編集を押下します。
![0011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/5ed37bf2-09b7-c4c6-cd54-ca352186c8bd.png)
一番上のものはデフォルトで作成されており、消せないものになります。これはVPC内のサービス（ex.EC2等）同士で通信する際に使用するものです。
このテーブルにインターネットに抜けるための設定を追記していきます。
0.0.0.0/0（全てのアドレス）を記入し、ターゲットをVPCにアタッチしたInternet Gatewayを指定します。
![0012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/26d44c3e-6194-c671-b15b-7fb3274bf9ec.png)
作成出来たことを確認します。画面のようにメインにいいえが付いている場合、右上のアクションタブからメインルートテーブルを選択します。
※同じ手順ならいいえとなっていると思います。
![0013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a2cae7d6-eb04-6245-c059-25d1bd144685.png)
設定と入力しOKを押下します。
![0014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/785fb034-d1e8-e4cc-c689-c1179d434204.png)
VPCの画面からリソースマップタブを押下し、サブネットが上記でメインにしたルートテーブルに紐づいていることを確認します。また、ルートテーブルからVPCにアタッチしたInternet Gatewayにも紐づていることを確認します。
![0015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/097e5f8b-1129-8cb7-383c-4ed5016f2ffd.png)

## SecurityGroupを作成
EC2にアタッチするSecurityGroupを作成します。
EC2の管理画面からSecurityGroupの作成画面を開きます。SSHとICMP,HTTPのInboundを開放します。Outboundは全て開放します。
![0016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/3828d348-3e06-796d-8778-1aab89765fbf.png)
作成出来ていることを確認します。
![0017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/63190257-ee79-2a8c-4fd5-036dc172b044.png)

## EC2のデプロイ
EC2をデプロイしていきます。名前をclassact-ec2-djangoとし、OSをubuntu22.04にしています。
ネットワーク設定で今まで作成したVPCとsubnet、SecurityGroupを指定します。またパブリックIPは有効化とします。
![00198.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/2cd2340b-90d0-331c-0fb1-96862fafa16d.png)
デプロイ出来たことを確認します。
![0018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/6fb6d8db-b191-5a6a-352e-b7c17687deb1.png)

## EC2にログインし、インターネットに接続できることを確認する
上記で作成したEC2にチェックマークを付けて、画面右上にある接続を押下します。
![0019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/069dc315-b99d-2c83-e18a-65c676ab50ce.png)
デフォルトの設定のまま接続を押下します。
![0020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/777d0249-6052-ad04-836f-b175765bd4c1.png)
EC2をCUIで操作が可能です。ping google.comと実行し下記の様になれば、作成したネットワークが正常に稼働し、インターネットに抜けていることがわかります。
![0021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/bb2529e6-b2f1-6fbe-102e-ea0dcdf800f0.png)

# オマケ CloudFormationを使ったデプロイとyaml
以下の記事でCloudFormationを使ったデプロイ手順を書いております。
適宜ご覧ください。

https://qiita.com/ohtsuka-shota/items/7e4358186613f8ebbc8e

CloudFormationで使うyamlは以下GitHubで管理しています。

https://github.com/ohtsuka-shota/aws-django/blob/main/django01_all.yaml