AWSでのデプロイ手順①ネットワーク環境設定

初心者には難関である、AWSを使用したデプロイ手順を書いてみます

AWSはUIもよく変化するので、
現在のもの(2019/10)で書いています、
(AWSはUIが頻繁に変わるので、バージョンによっては少し表示違うかもしれません。。。)

※アカウントがない人はまず新規で申し込みしておいてください

今回内容
[**STEP1 ネットワーク環境設定**](https://qiita.com/tksh8/items/9a8e88a777a3a4ee7a09#step1-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A)
1.VPCの作成
2.サブネットの作成
3.インターネットゲートウェイの作成
4.ルートテーブルの作成
5.サブネットとの紐付け
6.セキュリティグループの作成

[**STEP2 EC2の設定**]
(https://qiita.com/tksh8/items/9a8e88a777a3a4ee7a09#step2-ec2%E3%81%AE%E8%A8%AD%E5%AE%9A)
1.EC2にてインスタンスの作成
2.Elastic IPの割り当て
3.インスタンスにSSHでログイン

次回内容
[**STEP3以降
AWSでデプロイするまでの手順②サーバー（EC2インスタンス）環境設定**]
(https://qiita.com/tksh8/items/3d2f2eeaf0e8de291b6d)

### ※ここでいうサーバーとはAWS EC2インスタンス (Amazon Linux) のこととする



# STEP1 ネットワーク環境設定
## 1.VPCの作成
#### VPCとは(AWSクラウド上で論理的に分離されたプライベートな仮想ネットワークです)

https://aws.amazon.com/
Amazon Web Servicesでサインインします

ヘッダーにあるリージョンを東京に設定し、
「VPC」を検索し「VPC」にいきます


<img width="1112" alt="スクリーンショット 2019-10-01 10.13.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/cb444946-c5f9-b565-ef4c-e0ef3fa74eb0.png">


サイドメニューのVPCより[VPCの作成]を押下します
<img width="902" alt="スクリーンショット 2019-09-29 20.26.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/69a796c9-0277-9afe-630d-fe3309d1d24e.png">

作成画面になるので
今回は下のように設定し、[作成]を押下します

```
・ネームタグ       :testVPC
・IPv4 CIDRブロック:10.0.0.0/16
・IPv4 CIDRブロック:ブロックなし
・テナンシー       :デフォルト
```
<img width="1144" alt="スクリーンショット 2019-10-01 10.18.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/305c0073-57ca-fddb-9d8f-c20462d8aa7c.png">


## 2.サブネットの作成
#### サブネットとは(最初にVPCによって作られているCIDRブロックを分割したネットワーク群のことです)


今回のサブネットは[RDS]を配置するためのサブネットを2つを作成する構成です。

サイドメニューのサブネットより[サブネットの作成]を押下します
<img width="889" alt="スクリーンショット 2019-09-29 20.30.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/15abafa1-427d-fc57-ffa4-62a7938fbb60.png">

作成画面になるので
下のように設定し、[作成]を押下します

```
・ネームタグ:testSubnet
・VPC:先ほど作成したものを選択
・アベイラビリティゾーン:ap-northeast-1a
・CIDRブロック:10.0.0.0/24
```

同様にもう一つ作成します

```
・ネームタグ:testSubnet2
・VPC:先ほど作成したものを選択
・アベイラビリティゾーン:ap-northeast-1c
・CIDRブロック:10.0.1.0/24
```

<img width="875" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f34633731633536382d346231352d653262622d636665612d6333373631643964363634642e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/cefbaa53-b19c-d221-6c4b-491743456ad0.png">



## 3.インターネットゲートウェイの作成
#### インターネットゲートウェイとは(インターネットと通信するために必要なゲートウェイです)

サイドメニューのインターネットゲートウェイより
[インターネットゲートウェイの作成]を押下します

<img width="885" alt="スクリーンショット 2019-09-29 20.34.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/51f1ce3f-3737-e2e5-5148-35c964d242b1.png">

作成画面になるので
下のように設定し、[作成]を押下します

```
名前タグ:testGateway
```
<img width="868" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f30303636333333392d383839352d643333632d343637332d6362376530643365353366632e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/16bd0d3e-a7f6-1b2f-e37c-723d34b4def7.png">


[アクション]を押下し、[VPCにアタッチ]を押下します
<img width="1098" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f63333666633763662d313638622d626136392d306135652d3365326235653836303433642e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/4af29930-d826-c6ec-0555-7b09494e8765.png">


下のように設定し、[アタッチ]を押下する

```
VPC:先ほど作成したものを選択
```

<img width="726" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f66303032333238392d653838612d326264652d306337632d3661323536666230373264312e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/203385ce-0e1d-2276-9bed-919b213e633b.png">



## 4.ルートテーブルの作成
#### ルートテーブルとは(サブネット内にあるインスタンス等がどこに通信にいくかのルールを定めたものです)

サイドメニューのルートテーブルより[ルートテーブルの作成]を押下

<img width="872" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f37616534643065332d323862302d613333372d346132632d6630623434383936643238352e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/f5eb8286-482b-fc98-5ffd-aa1ea3294cf8.png">

作成画面になるので
下のように設定し、[作成]を押下します

```
名前タグ:testTable
VPC:先ほど作成したものを選択
```

<img width="875" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f32623430326161332d633761652d666461622d616163622d6130326265323933383230652e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/54a6ea2c-2fa6-1a32-91bd-a33d5c06c8be.png">



作成したルートテーブルを選択した状態で、
下のタブ「ルート」>「ルートの編集」を押下、[ルートの追加]を押下

<img width="872" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f35336331383337372d353137662d613265342d313139352d3263613730396130306661632e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/633a2c1f-f886-60b8-6e0a-7d22800afe34.png">


下のように設定し[ルールの保存]を押下します

```
送信先:0.0.0.0/0
ターゲット:Internet Gatewayを選択し、先ほど作成したゲートウェイIDを選択
```

<img width="871" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f63626462313066362d656534352d616239312d613164612d6534363733636333313136662e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/6d3ad187-2b04-1c2e-7514-c4dc61d3e903.png">


## 5.サブネットとの紐付け
#### サブネットとは(最初にVPCによって作られているCIDRブロックを分割したネットワーク群のことです)


```
→左側の「サブネット」を選択します
→関連付けを変更するサブネットを選択します
→画面下のルートテーブルを選択します
→[ルートテーブルの関連付けの編集]を押下します
```

<img width="1130" alt="スクリーンショット 2019-10-01 10.35.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/2075beda-16f0-6dc8-5a65-40443e0a97de.png">

```

→先ほど作成したルートテーブルIDを選択します
→[保存]を押下します
```
<img width="1135" alt="スクリーンショット 2019-10-01 10.39.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/e0e78d52-7ff0-0474-8d17-6b56b4c42bae.png">



## 6.セキュリティグループの作成
#### セキュリティグループとは(セキュリティのルールをまとめた仮想ファイアウォールです)

サイドメニューの
セキュリティ>セキュリティグループより>[セキュリティグループの作成]を押下します
<img width="915" alt="スクリーンショット 2019-09-29 21.07.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/d3e2026c-fe25-043c-a917-e098ef10eaad.png">

下のように設定し、[作成]を押下する

```
セキュリティグループ名:testSecurityGroup
説明:そのセキュリティグループの説明
VPC:先ほど作成したものを選択
```

<img width="1146" alt="スクリーンショット 2019-10-01 10.43.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/f2b0857c-1911-9f93-2be6-d74ad2f2067a.png">


画面下のインバウンドのルールの[ルールの編集]を押下し、[ルールの追加]を押下、
下のように設定し、[ルールの保存]を押下する

```
タイプ:SSH
ソース:マイIP
```

<img width="1091" alt="スクリーンショット 2019-09-30 21.23.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/13d16ea4-f77e-bab8-7cbf-9567fce4c8fe.png">



# STEP2 EC2の設定


AWSでDBを利用したい場合、

```
・EC2にてインスタンスの作成
・RDSを利用する
※ ただRDSを使用すると料金が掛かるので、
使用しない場合はサーバーに直接データベースを作成してください。
```
この2種類の方法があります。
今回は
EC2にてインスタンスの作成（サーバーに直接データベースを作成）
をメインに行なっていきます




## 1.EC2にてインスタンスの作成
インスタンスは起動のままだと
課金請求されるので、使わない場合は
停止状態にすることをお勧めします

#### AWS マネジメントコンソールにて"EC2"を検索しアクセスする
<img width="989" alt="スクリーンショット 2019-09-26 23.58.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/6f4ce420-5317-fbda-4ca9-96b45229233a.png">

#### サイドメニューのインスタンスより[インスタンスの作成]を押下する
<img width="1092" alt="スクリーンショット 2019-09-27 0.02.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/953fc93f-a062-544f-a5e4-46be7f3ea7fa.png">


今回はこちらをクリックします
<img width="1240" alt="スクリーンショット 2019-09-27 0.06.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/580b316f-ee4b-6c14-0509-6ba74037f2cb.png">

#### [次の手順: インスタンスの詳細の設定]をクリックする
<img width="1251" alt="スクリーンショット 2019-09-27 0.08.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/6657a30d-643d-a54a-fd80-88345ff9fb7b.png">


#### 下を設定し,[次の手順: ストレージの追加]を押下する

```
ネットワーク：先ほど作成したVPCを選択
サブネット：先ほど作成したサブネットを選択
自動割り当てパブリック IP：有効
他はデフォルトのまま
```

<img width="998" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f30353438646266632d333631362d396662392d386166662d6265383133353536653934632e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/2ededeb5-4911-af89-a737-8b36398e5de1.png">



#### デフォルトのままで,[次の手順: タグの追加]を押下する



#### タグを追加する
[タグの追加]を押下する
<img width="1007" alt="スクリーンショット 2019-09-30 16.46.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/0d9c1860-7445-262a-7448-1a52501fc31e.png">


```
キー：Name
値：testInstance
```
で[次の手順: セキュリティグループの設定]を押下する


#### セキュリティグループの設定する
セキュリティグループの割り当て:既存を
選択し、先ほど作成したセキュリティグループを選択し、
[確認と作成]を押下する
<img width="1008" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f39616532356237392d396565342d363531342d396237392d6237333732613434373030322e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/4680ff1a-bdc1-4f40-7486-e54ce563e296.png">

一覧画面になるので、
最後に[起動]を押下します


下ような表示になり、
新しいキーペアを作成を選択、
キーペア名を入力し、
[キーペアのダウンロード]を押下します
（一度作成されたファイルは再度ダウンロードができなくなるので注意）
<img width="793" alt="スクリーンショット 2019-09-30 19.51.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/98a22621-78e1-27d5-0721-ed9abc26955a.png">

ダウンロードしたら[インスタンスの作成]を押下します


しばらくするとインスタンスが作成されます!!



## 2.Elastic IPの割り当て

サイドメニューの
ネットワーク&セキュリティ>
Elastic IP[新しいアドレスの割り当て]を押下する

<img width="598" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f36323739383338622d633864352d643366312d383066342d6639613635663234633238612e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/6aca8ab9-73da-199f-7f1e-255bdae5aaad.png">


[割り当て]を押下します
<img width="1001" alt="スクリーンショット 2019-09-30 17.06.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/ed4c83b3-05da-df6f-cf7b-5172e941086f.png">

[閉じる]で戻り

[アクション]>アドレスの関連付けを押下します
<img width="707" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f34643235323034332d663531632d653261362d396330362d3462626139363734326635662e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/91ce90b7-a3f3-0d51-d045-35ac62063459.png">


インスタンスを先ほど作成したものを選択し、[関連付け]を押下する
<img width="1011" alt="スクリーンショット 2019-09-30 17.09.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/a31ef124-7ab8-3149-25a9-f1f54e9ec767.png">

※停止していたインスタンスにElastic IPを関連付けたままにしていると小額の料金が発生してしまうので、
インスタンスを停止している場合は解放することをお勧めします

Elastic IPをアタッチ(関連付け)しているインスタンスが起動している状態であれば、料金は発生しません。しかし、インスタンスが「停止」している状態や、Elastic IPを使っていない場合、料金が発生します。そのため、使わないElastic IPは削除しなければいけません。

Elastic IPがまだインスタンスにアタッチしている場合は、Elastic IPから該当のIPを選択し、「アクション」→「アドレスの関連付けの解除」をクリックします。確認画面が表示されますので、間違いなければ、「アドレスの関連付けの解除」をクリックし、EIPをデタッチします。

その後、再度該当のIPを選択し、「アクション」→「アドレスの解放」をクリックし、EIPを削除します。これで、料金が発生しなくなります。

AWS側での設定は一旦終了です

## 3.インスタンスにSSHでログイン

PCでターミナルを開きます

### 各種インストールする
python

```
$ brew install python
```

pip(pythonのパッケージ管理システム)

```
$ easy_install pip
```

awscli(awsをPCのコンソール上から扱うためのもの)

```
$ pip install awscli
```
できない場合はこちら
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-macos.html


### ec2-userでインスタンスにログインする

AWSでは、
EC2インスタンスにログインできるユーザーとして、
デフォルトでec2-userという名のユーザーが用意されています
こちらではまずec2-userでログインします

ターミナルで以下を入れていきます
（※testKey.pemは、先ほどSTEP2でダウンロードしたキーです）

```
$ mv Downloads/testKey.pem .ssh/
(#作成した公開鍵をsshフォルダに移動)

$ cd .ssh/
(#ディレクトリをsshに移動)

$ chmod 600 testKey.pem
(#公開鍵に600番で定義されたアクセス権を付与する)

$ ssh -i testKey.pem ec2-user@(@以降のURLは、作成したEC2インスタンスと紐付けたElastic IPを使用してください。)
(#公開鍵を利用してec2-userとしてログイン)

例：
($ ssh -i testKey.pem ec2-user@13.112.140.56)
```

yes/noを聞かれるので

yesでEnterを押下
<img width="451" alt="スクリーンショット 2019-09-30 21.49.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355517/d3dda800-a6ab-dbc7-fae9-ca06f5e0802b.png">

無事にログインできました！！！

※
`ssh port 22 Operation timed out`
エラーになる場合はこちら
https://qiita.com/yokoto/items/338bd80262d9eefb152e

https://qiita.com/minicoopers0716/items/cac50f29ef79a03f1d8d


### ユーザー作成(EC2上での操作)

上記方法でインスタンスにログインしている状態で

```
[ec2-user|~]$ sudo adduser testuser
(#新規ユーザー名の登録)
[ec2-user|~]$ sudo passwd testuser
(#新規ユーザー名のパスワード登録)


パスワードを登録します

```

vimでユーザーに権限を追加する記述する


```
$ sudo visudo
```

vimモードになります

```
## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL

## Same thing without a password
# %wheel  ALL=(ALL)       NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now
```

検索モードにし下の
"wheel"を探します
(キーボードで"/wheel"を入力し押下、"N"を押下すると次にいけます)

```
## Same thing without a password
# %wheel  ALL=(ALL)       NOPASSWD: ALL
```

キーボードの「i」を押下し、編集モードで

`# %wheel ALL=(ALL) NOPASSWD: ALL`
のコメントアウトを外します

```
## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL
```

さらに

```
次に下のように作成したユーザーに権限を追加する記述
testuser   ALL=(ALL)       ALL 　
を追加します
```

```
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
testuser   ALL=(ALL)       ALL
```

キーボードの「esc」を押下します
「:wq」を入力しEnterで保存します


こちらでユーザーの切り替えを行ってください。

```
[ec2-user|~]$ sudo su - testuser
(#ユーザー名の切り替え)
[testuser@ ~]
```

無事に[ec2-user|がtestuser(作成したユーザー名)と切り替わればOKです。

```
exit
```
を二回いれて
で一度ログアウトする

### 追加ユーザ用キーペアを作成

こちらはローカルでの作業です

```
$ cd .ssh
[.ssh]$ ssh-keygen -t rsa
(#公開鍵を作成)
-----------------------------
Enter file in which to save the key ():
(#ここでファイルの名前を記述して、エンターを押す)
test_key_rsa 

Enter passphrase (empty for no passphrase): 
(#何もせずそのままエンター)
Enter same passphrase again: 
(#何もせずそのままエンター)
-----------------------------

[.ssh]$ ls
#「test_key_rsa」と「test_key_rsa.pub」が生成されたことを確認
[.ssh]$ vi config
(#VIMを起動し、設定ファイルを編集する)
-----------------------------

キーボードの「i」を押下し、編集モードで

# 以下を追記
Host test_key_rsa
  Hostname 前出のElastic IP (#自分の設定に合わせて)
  Port 22
  User testuser (#先ほどのユーザー名)
  IdentityFile ~/.ssh/test_key_rsa (#秘密鍵の設定)
* （）部分は削除する。
-----------------------------
キーボードの「esc」を押下します
「:wq」で保存します

[.ssh]$ cat test_key_rsa.pub　(#鍵の中身をターミナル上に出力）

★ ssh-rsa~~~~localまでをコピーしておく

```

## サーバー側作業

続いてサーバーでの作業です
ec2-userでログインします

```
$ cd .ssh
$ ssh -i testKey.pem ec2-user@(@以降のURLは、作成したEC2インスタンスと紐付けたElastic IPを使用してください。)
[ec2-user|~]$ sudo su - testuser
[testuser@ ~]$ mkdir .ssh
[testuser@ ~]$ chmod 700 .ssh
[testuser@ ~]$ cd .ssh
[testuser@ |.ssh~]$ vi authorized_keys

（vimがオープンするので、「i」を押し、
先ほど ★ で、コピーしたssh-rsaをペーストする）
キーボードの「esc」を押下します
「:wq」で保存します

[testuser@ |.ssh~]$ chmod 600 authorized_keys

$ exit
もう一度
$ exit
ログアウト
```

```
[~]$ ssh test_key_rsa
```

ログインできれば、無事ユーザー設定は終了です。

```
なお、時間が経つとローカルからログインできなくなることがあるので、その場合は、
セキュリティグループ>インバウンド>編集で
SSHのソースで
マイIPを選択し[保存]すると繋がるようになります
```

続きはこちら
[**AWSでデプロイするまでの手順②サーバー（EC2インスタンス）環境設定**]
(https://qiita.com/tksh8/items/3d2f2eeaf0e8de291b6d)