[初心者向け]VPC作成からRDS接続までをそこそこ丁寧にまとめてみる。②EC2作成～SSH接続まで

# 前回の記事

本記事の趣旨及びVPCの作成を解説しています。
[[初心者向け]VPC作成からRDS接続までをそこそこ丁寧にまとめてみる。①VPC作成まで](https://qiita.com/kmmz/items/53b4fbd64ccbfcaf9ee0)

# 2. EC2作成

EC2(Amazon Elastic Compute Cloud)は、コンピューティングキャパシティを提供するサービス、つまりサーバーに必要なもの一式をレンタルできるサービスです。

EC2の学習にあたっては、公式ドキュメントやサービス別資料（ブラックベルト）なども参考にしてみて下さい。

>[Amazon EC2とは](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/concepts.html)
>[AWSサービス別資料](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/)


EC2は簡潔に言うと、空っぽのサーバーです。
そのため、RDSを使わずにEC2をデータベースとして利用するケースなど、利用方法は多岐に渡ります。
しかし利用方法がたくさんあっても、マネジメントコンソールでの作成方法は基本的に同一です。
パパパッと作っちゃいましょう！

それではEC2を配置するサブネットから作成します。

## 2-1 パブリックサブネットの作成

EC2を配置するサブネットは、用途に応じて**パブリックサブネット**か**プライベートサブネット**のどちらかを利用します。

簡潔な説明となりますが、

|名称|内容|  
|:---|:--|
|パブリックサブネット|インターネットに繋がる(公開する)サブネット。オンプレミスでのDMZのようなもの。
|プライベートサブネット|インターネットに繋がらない（非公開の）サブネット。オンプレミスでの社内LANのようなもの。|

「プライベートサブネットに配置したEC2をELBを通じてインターネットに～」とかまぁ色々シチュエーションはあるのですが、今回はEC2をパブリックサブネット内に配置するので、パブリックサブネットを2つ作成しましょう。
実を言うと、今回のシンプルな構成図ではパブリックサブネットは1つで充分なのですが、練習として2つ作成してみます。


![pub作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2338398/5ebe722e-554b-cf1f-9051-692b513bf2bc.png)


VPCの画面から「サブネット」を選択します。「サブネットを作成」をクリックして下さい。

![pubvpc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2338398/a0e28260-6086-a85b-98b5-098c08e7ef34.png)

「どのVPCの中にサブネットを作りますか？」と聞かれているので、作成したVPCを選択します。

![pub1a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2338398/5f92a9a7-1efb-58b3-9dc9-a905fb72c470.png)

ここからサブネットを作成します。まずは一つ目です。

・サブネット名
分かり易い名前を付けて下さい。
例：`pub(パブリックアドレスの略称)-1a（選択するAZ）-プロジェクト名-作成年月`


・アベイラビリティーゾーン
サブネットはどのアベイラビリティーゾーン（AZ）に作成するかを指定します。
東京リージョンで作成しているので、**ap-northeast-1**という名称のAZから選択します。

>若干の蛇足ですが、各地域のリージョン名が気になる場合、こちらの記事が参考になりました。
>[awscliでAWSリージョンとAZの一覧を取得する](https://labunix.hateblo.jp/entry/20180918/1537269823)

東京リージョンでは、1a,1b,1dの3種類のAZを選択することができます。
どのAZを選択しても構わないと言えば構わないのですが、ここでは順当に1aを選択します。

::: note info
1bは古いアカウントでしか利用できません。一部のサービスが利用できないなど、制限のあるAZだったようです。代わりに近年登場したのが1ｄと言えます。
:::


・IPv4 CIDRブロック
やることはVPCのCIDRブロックと同じです。VPCよりも小さなサブネットにします。
例：`10.0.0.0/24`

・キー
謎の安心感。
これまで通り「Name」キーで、値は名前と同じものにします。

1つ目のパブリックサブネットの入力はこれで完了です！
一緒に2つ目も作成してしまいましょう。
「新しいサブネットを追加」をクリックして下さい。



![pub1c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2338398/ef7f7acc-713f-46c6-253b-470ecbb78ce0.png)

・サブネット名
命名規則は1つ目と同じですが、1つ目と見分けがつくようにして下さい。

・アベイラビリティーゾーン
1つ目とは違うAZを指定します。AZの分散（マルチAZ構成）は、可用性を得るための基本です。

>詳しくはこちらなどを参考にしてみて下さい。
>[AWSにおける可用性の基本](https://business.ntt-east.co.jp/content/cloudsolution/column-74.html)

・IPv4 CIDRブロック
微妙に、1つ目と、違う……？
CIDRの範囲は1つ目と同じにして下さい。ただし、CIDRの範囲は同じでも、サブネットは別々のものなので区別を付ける必要があります。
1つ目のサブネットが`10.0.0.0/24`なら、
2つ目は`10.0.1.0/24`となります。

・キー
これまで通り、Nameキーで名前と同じ値にして下さい

2つ目のパブリックサブネットの入力もこれで完了です！
間違いがないか2つとも確認したら、「サブネットを作成」をクリックしましょう！

これでパブリックサブネットが完成しました！
とはいかないんです残念なことに。
サブネットは全てプライベートサブネットとして作成されます。
「pub～」という名前でサブネットを作成したとしてもです。
新手の嫌がらせ……？

そこで思い出して欲しいのが、前回の記事の"メインルートテーブル"の話です。
そこでは「自動的にメインルートテーブルがくっつくからサブネットを作った瞬間にインターネットと云々かんぬん」とかなんとか言っていましたね。

逆に言えば、プライベートサブネットをパブリックサブネットに変えるには、ルートテーブルと関連付ければよいのです。
早速やってみましょう。

![pubrt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2338398/d839316f-f6b9-830e-5cb8-98d3dd1aafe6.png)

VPCの画面から、ルートテーブルを選択します。
作成した**カスタムルートテーブル**を選択して下さい。
「サブネットの関連付け」を選択したら、「サブネットの関連付けを編集」をクリックします（2箇所ありますが、どちらでも同じです）。

![ここからはgithubから引っ張ってます。画像の容量制限がオーバーしました。後悔はしていない。](https://user-images.githubusercontent.com/91016271/144739166-95d2fb94-027a-4db5-a65a-b65b20562d67.png)

「利用可能なサブネット」から作成した2つのパブリックサブネットにチェックを入れます（1つでも構いません）。
チェックを入れたら、あとは「関連付けを保存」をクリックするだけです。

プライベートサブネットのパブリックサブネット化が完了しました！
EC2作成の前準備もこれで完了です！

次はEC2そのものを作成します。

::: note info
2021年11月から、IPv6のみのサブネットとEC2インスタンスが作成可能になったようです。Nitro Systemでの構築が前提なので、一長一短と言った感じでしょうか。
:::
>[Amazon Virtual Private Cloud (VPC) のお客様は、IPv6 のみのサブネットと EC2 インスタンスの作成が可能に](https://aws.amazon.com/jp/about-aws/whats-new/2021/11/amazon-virtual-private-cloud-ipv6-subnets-ec2-instances/)
>[Nitro System 上に構築されたインスタンス](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances)
>[Introducing IPv6-only subnets and EC2 instances](https://aws.amazon.com/jp/blogs/networking-and-content-delivery/introducing-ipv6-only-subnets-and-ec2-instances/)


## 2-2 EC2の作成

EC2の作成にはAMI（Amazon マシンイメージ）を用います。
"IAM"のアナグラムですが、たまたまだと思います。

AMIは仮想サーバーのイメージのことです。
既存のテンプレートから容易にサーバーを作成することができるようになります。
今回はAWSが用意しているAMIを利用しましょう。

>参考
[Amazon マシンイメージ (AMI)](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AMIs.html)


::: note info
AMIは自作したり、自作したものを公開することができます。
サードパーティーのAMIを利用する際は、公式で保証されていないという点に注意してください。
:::


というわけで、作り始めましょう！
EC2の画面から「インスタンス」を選択します。

![EC2作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2338398/f5540544-a69f-d5f0-96e3-b819a3379c48.png)

「インスタンスを起動」をクリックします。そこからAMIを用いてインスタンスを作成することができます。ここの日本語、ちょっと分かりにくいですね。

### 2-2-1 AMIの選択

![AMI](https://user-images.githubusercontent.com/91016271/145146428-94894480-b93b-4232-9e9e-0321de75222e.png)

「無料利用枠のみ」にチェックを入れておくと、文字通り無料利用枠のみ選択候補に上がります。
無料利用枠の対象なら、AMIはお好きなものを選んで構いません。
この記事では、無難に`Amazon Linux 2`を選択して先に進めます。
ビットの項目ですが、`x86(intel入ってる)`のままにします。

>x86とArmの違いについて気になる方は、こちらの記事などを参考にしてみて下さい。

https://urashita.com/archives/12325

AMIを選んだら、「選択」をクリックします。

### 2-2-2 インスタンスタイプの選択

![インスタンスタイプの選択](https://user-images.githubusercontent.com/91016271/145147451-094e080b-4349-4896-9017-1273f2667317.png)

選択の余地がないから迷わない！！！
`t2.micro`にさっさとチェックを入れたら、「次のステップ：インスタンスの詳細の設定」をクリックします。

ちなみに「t2.micro」とは、「"バースト可能なパフォーマンスインスタンス"の第2世代のマイクロサイズ」のことです。要は最低限の機能です。
実際にEC2を運用する際は、インスタンスタイプについて別途考慮する必要があると思います。

>インスタンスタイプの概要については、こちらのページが分かり易いと思います。
>[【初心者】 EC2のインスタンスタイプが多すぎて、どれを選べばいいか分からない問題に立ち向かう](https://www.bit-drive.ne.jp/managed-cloud/column/column_22.html)

### 2-2-3 インスタンスタイプの設定

![インスタンスの詳細の設定](https://user-images.githubusercontent.com/91016271/145149650-c57f8d71-a349-4d95-bf89-3f488361d88e.png)

・ネットワーク：作成したVPCを選択します。

・サブネット：作成した**パブリック**サブネットを選択します。AZが異なるパブリックサブネットを2つ作成しましたが、どちらを選択しても構いません。EC2をプライベートサブネットに配置する場合は、プライベートサブネットを選択して下さい。

・自動割り当てパブリックIP:`有効`を選択します。
そもそも自動割り当てパブリックIPってなに？　という方は、'Elastic IP'との違いを押さえておくと良いかもしれません。



|名称|内容|  
|:---|:--|
|自動割り当てパブリックIP|インスタンスの起動時に自動で割り当てられるIPアドレス。動的（毎回アドレスが変わる）。無料。|
|Elastic IP|アカウントに割り当てられた、静的（アドレスが変わらない）IPv4アドレス。1アカウント最大5つまで取得できる（IPv4が限られた資源であるため）。有料。ただし、実行中のEC2インスタンスにアタッチしている間は無料。|

無効にすると、
パブリックIPアドレスがない＝インターネットと繋がらない
ということになるので、有効に設定します。


**「サブネット設定を使用（無効）」**の項目ですが、これはサブネットに設定した自動割り当てパブリックIPを用いる場合に選択します。現在はサブネットにパブリックIPを設定していないので、「（無効）」となっていますが、サブネット側の設定を行っている場合は、「サブネット設定を使用（有効）」と表示されます。こちらの設定でEC2を作成しても問題ありません。

>本記事ではやり方は飛ばしましたが、こちらの記事で「サブネットの自動割り当てIP」の設定方法を解説されているので、参考までに。
>[サブネットの自動割り当て IP 設定 - EC2 VPC](https://qiita.com/leomaro7/items/924702bdb1e0701ec6db)

::: note warn
「サブネット設定を使用（無効）」を選択してEC2を作成した後、サブネットに自動割り当てIPの設定をしても、EC2には設定が反映されず、サブネットの割り当てが行われません。
サブネットの自動割り当てIPを用いてEC2を作成する際は、EC2の作成よりも先にサブネット側の設定を行う必要があります。
一言で言うと、「サブネット設定を使用（有効）」の状態のみ選択してOKなわけです。
:::

残りの項目は、今回手を加えません。
「次のステップ：ストレージの追加」をクリックしましょう。

### 2-2-4 ストレージの追加 

![ストレージの追加](https://user-images.githubusercontent.com/91016271/145172377-769f2afe-54e6-4ce5-b1e9-5d46ea9c4249.png)

特に手を加えることはありません。「次のステップ：タグの追加」をクリックしてぱぱっと次に行きましょう。

補足を入れておくと、
ここで言う"ストレージ"とはEBSのことです。
ここでは、EBSの設定をやっとるわけです。

>EFSと一緒に覚えると理解が捗ると思います。こちらの記事などを参考にしてみて下さい。
[AWS のストレージサービス EBS と EFS の違い](https://www.acrovision.jp/service/aws/?p=2103)

なんでEBSを使うの？　という理由ですが、
こちらの記事が参考になると思います（投げやり）。

https://developers.goalist.co.jp/entry/2018/02/14/170000


'ルートボリューム'って、なんだか暗黙知になっていて解説しているリソースが少ない気がするんですよね。
要は、スナップショットやAMIを使用したEC2の起動に用いられるのが、ルートボリュームことEBSさんです。助かる。

>ボリュームタイプに関しては、こちらの記事が簡潔にまとめられていると思います。
>【[AWS】EBSのボリュームタイプ](https://qiita.com/mzmz__02/items/f9cf8fff4c007371ce45)

### 2-2-5　タグの追加

![タグの追加](https://user-images.githubusercontent.com/91016271/145179691-8698a5d9-ca33-4d8d-8b0e-b7b09e2b0d8e.png)

タグの追加、というよりはEC2の名付けです。
キーは`Name`にします。
値はご自身で識別可能な名前を付けて下さい。
例：`ec2-サブネットの種類-AZの場所-プロジェクト名-作成年月`

あと少しです！

### 2-2-6　セキュリティグループの設定

セキュリティグループは、いわばホワイトリスト方式のファイアウォールです。パケットの情報を見て、通したり通さなかったりします。ここではその「通してもよいリスト」を設定します。

また、セキュリティグループは**ステートフル**です。
「行きは通ってもいいよ～」と許可された通信は、自動で「戻りもどうぞ～」と許可されます。
**ステートレス**なサービスである「ネットワークACL」と合わせて確認してみて下さい。
>参考
>[なぜネットワークACLでなくセキュリティグループで細かいトラフィック制御を行なうのか](https://dev.classmethod.jp/articles/why-i-prefer-sg-to-nacl/#toc-4)


::: note info
AWSには、SQLインジェクションやXSSを防ぐ"AWS WAF"、
DDosを防ぐ"AWS Shield"というサービスも提供されています。
:::

セキュリティグループは、個々のインスタンスそのものに適用されます。基本的に、インスタンスごとにセキュリティグループを作成していきます。

というわけで、やってみましょう！

![sg](https://user-images.githubusercontent.com/91016271/145181680-c3bc39cd-7a12-48c9-845e-f3a514029603.png)

・セキュリティグループ名：セキュリティグループ名です。
ご自身で識別可能なものを入力して下さい。
例：`securitygroup-ec2-プロジェクト名-作成年月`

::: note info
セキュリティグループ名の頭文字を「sg」にすることはできません。デフォルトセキュリティグループで使用されているからです。諦めてください。
:::

・説明
セキュリティグループ名と同じで大丈夫です。

・セキュリティグループの設定
デフォルトでSSHが入っていると思います。SSH接続に必要なので、そっとしておきます。
ソースは`0.0.0.0/0`にすると全てのIPが許可されます。
ソースを`マイIP`に変更すると、ご自身の利用している端末のIPだけが許可されます。
どちらでも大丈夫です。
説明は`for ssh`など、ぱっと見て分かるものを入れます。

画像では、試しにHTTPの許可の設定も行っています。HTTP通信は本記事では行いませんが、練習として追加などをしてみるのも良いかもしれません。

「確認と作成」をクリックします。
次のステップで最後です！

### 2-2-7　確認

間違ってねぇかなぁ～？　課金枠使ってねぇかなぁ～？　と確認したら「起動」をクリックします。
やっと起動します！

![キーペアの作成](https://user-images.githubusercontent.com/91016271/145187731-d9506823-8d6a-4223-8b2e-4ab3e453b1c7.png)

起動しません。
その前にキーペアを作成がなんたらと聞かれます。
これはEC2の接続に用いるキーペアについて「既に持っているものを登録しますか？　新しいものを作りますか？」と問われています。既にキーペアを持っている方はそちらを選択して大丈夫です。
持っていない場合、AWSの方でキーペアを作成してくれるのでそちらを利用します。
ちゃちゃっと済ませちゃいましょう！

・「新しいキーペアの作成」を選択します。

・キーペアのタイプ：
RSA一択だったのが、2021年にED25519も選択可能になったようです。
>参考
>[楕円曲線暗号の一種であるED25519のキーペアを作成できるようになりました](https://dev.classmethod.jp/articles/create-keypair-ed25519/)

ただ、近年の登場なので情報がまだ出揃っていません。
RSAでも問題はないのでRSAを選択します。

・キーペア名：
キーペア名を決めます。この記事では`プロジェクト名-作成年月`としています。

入力を終えたら「キーペアのダウンロード」をクリックします。キーペアのファイルがダウンロードされたかと思います。これを紛失するとEC2にアクセス不可能になるの注意してください。

ここまで済んだら「インスタンスの作成」をクリックします。

お疲れさまです！　EC２がこれで完成しました！！！
とは言えAWS側での作成まで時間がかかるので、その間にEC2の接続の準備をしましょう。

::: note warn
EC2を停止させたい場合は「インスタンスの状態」から「インスタンスを停止」をクリックします。
「インスタンスを終了」をクリックすると、インスタンスが削除されてしまうので気をつけましょう。おそろしい。
:::


# 3．EC2接続

結論

https://dev.classmethod.jp/articles/aws-beginner-ec2-ssh/

私が一番躓いたのが、EC2接続のやり方そのものです。
私はてっきり、EC2もマネジメントコンソールから接続できるものと思っていました。
だって、ねぇ、今までマネジメントコンソールをずっと使ってたじゃないですか。。。
初心者向けの記事を色々とみても「あとは接続するだけです！」とか「macからうんぬんかんぬん」。。。
エンジニアの世界ではwindowsがマイノリティになっとる……！

などと唸っていたところに降ってきたのが上記の記事。DevelopersIOさん助かる。。。

まぁそんな感じで、ここの項目で私が書くことはないです。記事の通りにテラタームを利用すれば、EC2に接続できると思います。

**追記**
学習コストはかかりますが、AWS CLIを利用するという手段もあります（そして自作の記事のリンクを張る）。
[Windows環境でAWS CLIを使えるようにする手順+エラーケース。](https://qiita.com/kmmz/items/c579bd6267ce109e2bfa)

それとセッションマネージャーを使えば、マネジメントコンソールからのEC2への接続も可能なようです。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html

次はRDSを作成します！

# 次の記事

[[初心者向け]VPC作成からRDS接続までをそこそこ丁寧にまとめてみる。③RDS作成から接続まで](https://qiita.com/kmmz/items/75e3516166b4fcfb0dcf)