#この記事
本記事は、AWSブランクを埋めつつ色々作っていた物の一部を使って
VPC+EC2を使用した基本的なサーバー構築を始めたい人向けとなっています。
初めてだと
あれ?サブネットってどこ?
ルートテーブルって何を記載するの?
作成したのにEC2とネット繋がらない・・・
等のトラブルが発生することもあるので
そんな方の参考になれば幸いです。
故に、本記事はAWS初心者向けです。
冗長構成など考慮したパターン等はまた別途記事にします。
VPC
VPCの作成
AWSアカウントを作成するとデフォルトのVPCが存在します。
サブネットも2つ用意されているかと思いますが、
これだと自分で環境がいまいちわからないかもしれないので
今回はパパっと作成しちゃいます。
リージョンとVPC
VPCをどこのリージョンに作るのかを選びます。
バージニア(米国)やパリなど色々ありますが、
特別な用途はないので、構築/アクセスする拠点から遅延の少ない、自国エリア(東京リージョン)に作成します。
「東京リージョンにVPCを作成する」ということは、東京リージョンにある3つのデータセンター群の中に論理的に独立したネットワークを作成するということになります。
(DCは本当はもっとあると思いますが、とりあえず複数の群があって論理的には3つ)
これらのAZはそれぞれ物理的に離れて数キロ以上離れて存在するため、
例えば(適当な場所)東京リージョンでは立川AZ、川崎AZ、松戸AZみたいなイメージです。
(個人的に、東京リージョン=東京都内という意味ではとっていないし、むしろ都内だけならあまりばらけないはず)
★超ざっくり!笑
で、VPCをアーキテクチャ図で表現するとこうなります。
上にインターネットがあり、AWSCloud全体がまず存在。
その中の東京リージョンがあり、今回はこのリージョン内にVPCを作成。
そして東京リージョンはAZ(DC群)が3つあるためこういった記載となりました。
サブネットの活用
EC2等のリソースは、サブネットといわれる、VPCをさらに分割したNW内に作成するイメージです。
サブネットの主な用途は
・Webサーバーを配置するパブリックサブネット、DB等VPC内のリソースからのみアクセスするプライベートサブネットに分けたトラフィックの制御
・耐障害性を考慮した設計にするため、2つのAZを使った冗長化構成(LBなど)
などの使い方が挙げられます。
そのため、例えば先ほどの「耐障害性を考慮した設計にするため、2つのAZを使った冗長化構成」の際は、 AZを複数使い、別サブネットを用意します。
★この辺の作成例はまた今度書きます
VPC作成手順
VPCはAWSのサービスですが、VPC(プライベートクラウド)の中にリソースを作るため、勿論IPの指定が必要です。
始めに、VPCに割り当てるローカルIPの範囲を指定します。
AWS VPCで使用可能な範囲は以下の通り。
・10.0.0.0 - 10.255.255.255 (10/8 プレフィックス)
・172.16.0.0 - 172.31.255.255 (172.16/12 プレフィックス)
・192.168.0.0 - 192.168.255.255 (192.168/16 プレフィックス)
VPC とサブネットのサイズ設定 - AWS VPC ユーザーガイド > VPCとサブネット
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Subnets.html
アカウントは作成されていますか?
最低限MFAは有効にしましょうね。。
IAMユーザはVPC、EC2の作成ができるユーザあるいはロールで行います。
では、AWSマネジメントコンソールを開きます。
上部「サービス」一覧内からVPCを選択すると、こんな画面になるかと思います。
この画面はVPC一覧で、選択したVPCの情報が下に出力されます。
「VPCの作成」から始めましょう。
ここでは、VPCに以下のIP範囲を割り当てます。
10.0.0.0/16
IPv6やテナンシー需要ないのでそのままで問題ないです。
ちなみにテナンシーはハードウェア専有という贅沢なやつです。
サブネット作成手順
次に、サブネットの作成を行います。
先ほどと同様、VPCの画面、左のタブ内に「サブネット」があるので
こんな画面が開かれるのを確認してください。
「サブネットの作成」から始めます。
今回はEC2を1つ置ければよいので以下のようなIP範囲で適当に設定します。
10.0.1.0/24
先ほどのVPC内に作成するため、IP範囲に注意。 ※ここでおかしいIP入れるとちゃんとエラー表示されます。
また、AZの選択肢が1つしかないのでお察しかと思いますが、
注意点として、サブネットはAZを2つ跨いだりすることができません。
現在こんな状態ですねー
★PublicSubnetとありますが、実際はまだインターネットとつながっていません。
Security Group作成
次に、EC2のためのファイアウォールを設定します。
SGは、EC2インスタンスに割り当てる仮想ファイアウォールです。
オンプレミスでは直接OS上のfirewalldなどで設定していたと思いますが、AWSでは基本的にはSGで管理します。
もちろん実際のところすべてのセキュリティをSGのみで全てカバーしているわけではないですが。その辺の話は追々別記事にて。
今回インターネットからEC2へのアクセスは、SSHアクセス、Webアクセスが最低限必要なので
ポート22,80,443(一応)を開けます。
開ける相手は今は自己IPのみ指定しましょう。(確認せずともワンボタンで可)
SG設定手順
SGはサービス「EC2」内、左タブにあります。こんな画面。
設定内容は以下のようになります。
ソースが送信元なので、マイIPを選択すると現在のIPが指定されます。
使用するVPCを指定しましょう。 ※説明欄もわかりやすいものを記載しましょう。
「作成」で完了。
入ってきた通信の、帰りの制御はどうするの?という疑問があるかもしれませんが、SGはステートフルです。
VPC のセキュリティグループ - AWSドキュメント
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_SecurityGroups.html
セキュリティグループはステートフルです。インスタンスからリクエストを送信する場合、そのリクエストのレスポンストラフィックは、インバウンドセキュリティグループルールにかかわらず、流れることができます。許可されたインバウンドトラフィックに対する応答(戻りのトラフィック)は、アウトバウンドルールにかかわらずアウト側に対し通過することができます。
※逆に、ステートレスでの通信制御要件がある場合は、ネットワークACLという別の設定を併用します。
線がいっぱいあってわかりずらいよー
という声もあるかもしれませんが、アーキテクチャ図は基本必要最低限の物を表記すればいいので、
今回みたいにTokyo Regionの線をわざわざ書いたりする必要もあまりないと思います。
え?図が見づらい?
それは作者のセンスですね
ネットワークと繋げるために
ではどうやって、これから作成するEC2からインターネットに繋げられるようにするのか。
気を付けるのは以下の点です。(初めての際に混乱しやすい)
①インターネットゲートウェイ(IGW) = VPCをインターネットと繋げるため。
リソースの作成
・IGWを作成する。
リソースのアタッチ
・IGWはVPCにアタッチする。
これで、VPC自体は仮想ルーターによりインターネットと接続可能となる
②ルートテーブル = サブネットをインターネットと繋げるため。
リソースの作成
・ルートテーブルの作成する。
リソースのアタッチ
・サブネットのルーティング設定変更をする。
これでVPC内の、ルーティングしたサブネット内のリソースはインターネットへ接続可能となる
③VPCで名前解決できるようにする
設定変更のみ
④サブネット内リソースへのIPv4割り当て設定
設定変更のみ
大丈夫です、そんな時間かかりません。
①インターネットゲートウェイ
先ほど記載した通り、デフォルトではインターネット外に出られないため、インターネットゲートウェイ(IGW)を作成します。
IGW作成
サービス「VPC」内の左タブに「インターネットゲートウェイ」があります。
「インターネットゲートウェイの作成」から作成。
名前つけて終わり。
確認します。
VPCにIGWをアタッチ
その画面から、作成したIGWを選択した状態で、「アクション」から「VPCにアタッチ」を選択。
先ほどのVPCを選び、「アタッチ」で完了。
「状態」がattachedに変わり、
「アタッチ済みVPC ID」の箇所にアタッチ先のVPCがあることを確認。
②ルートテーブル
サブネットにルート設定します。
AWSの場合、基本的にルーティングはOS上で行うことなくAWSマネジメントコンソールやCLIで以下のように行うことが多いかと思います。
ルートテーブル作成
サービス「VPC」から、同じ要領でルートテーブルを開きます。
「ルートテーブルを作成」から、VPCを選択して名前指定。
「作成」で終わり。
ルーティング設定
どんどん行きましょう。
作成したルートテーブルを選択して「ルート」タブを選択するとこんな画面が。
ここではまず、すべての通信をIGWを通すという大前提を記載します。
「ルートの編集」で設定をします。
送信先:0.0.0.0/0(すべて)
ターゲット(宛先):先程作成したIGW ※作成済みのIGWを選択できます。
「ルートの保存」をしましょう。
出来ていますね。
次に、「サブネットの関連付け」をします。
タブを開くと、こんな感じの画面になっているので「サブネットの関連付けの編集」を選択。
先程のサブネットを選択して「保存」です。
確認しましょう。
関連付けが出来ているので、あとはちょっとした設定のみです。
③VPCで名前解決できるようにする
VPC一覧画面から、
VPCを選択した状態で、「DNSホスト名の編集」を選択します。
有効化にチェックを入れて保存をします。
これは、アクセスする際にIPアドレス以外に
ec2-{public-ipv4-address}.compute-1.amazonaws.comのようなアドレスが使用可能となります。
④自動割り当てIP設定の変更
サブネット内で起動されるリソースにIPv4アドレスが割り当てられるように設定変更します。
作成したサブネットを選択して、「アクション」を選択して…
「自動割り当てIP設定の変更」を選択。
チェックを入れて保存しましょう。
これで、EC2を構築するための最低限のネットワークリソースはできました。
EC2インスタンスの作成
いよいよEC2を作成します。
作成した際のイメージはこうなります。
難しいことは考えず、必要最低限の考慮はしていきましょう。
ここから具体的に料金が絡むのでそちらも触れながら。
では、サービス「EC2」を開いて、「インスタンス」を選択します。
「インスタンスを作成」を選択。
AMIを選ぶ画面です。
AmazonLinux、RHEL、CentOS、WindowsServerなどなど色々ありますが
今回はAmazonLinux2を選びます。
Amazonが用意したCentOSベースのOSです。
次にインスタンスタイプを選びます。
これはAmazonが用意したスペックのテンプレートの様なものですね。(見ての通りのスペック群)
それぞれ料金が大きく変わるので、こちらを参照してください。
Amazon EC2 料金表
https://aws.amazon.com/jp/ec2/pricing/on-demand/
尚、今回はデフォルトで選択されている「t2.micro」をオンデマンドで使用しますが、
時間あたりの料金は無料利用枠なしだと0.0152USD=¥1.64です。(2019/7/11 ¥108/$)
無料利用枠に関してはこちらを参照くださいー
動作確認程度なので先程のインスタンスタイプでいきますね。
次に、詳細設定ですが、今回最低限変更が必要なのは以下の3つ。
ネットワーク:作成したVPCを選択します。 ※VPCを東京リージョンに作成したなら東京リージョンでEC2を作成しましょう。
サブネット:作成したサブネットを選択します。
自動割り当てパブリックIP:インターネット経由でアクセスが必要なので有効にしましょう。
以下は、参考程度にライトな説明です。
起動インスタンス:同じものを同時にいくつ作るか
購入のオプション:切れるの面倒なのでスポットインスタンスにはしない😂 ※調べましょう
シャットダウン動作:インスタンスを停止したら消える昨日はいらないので、「停止可能」にする
削除保護の有効化:間違ってGUIで消しちゃった、は怖いので、インスタンスを消す際はワンプロセス挟む様に設定出来ます。
モニタリング:デフォルトの5分で今回は問題ないのでそのまま(CloudWatchを見てみよう!)
テナンシー:以前記載しましたが、ハードウェア占有の話です。
次に、ストレージ(EBS)の設定です。
デフォルトの設定値でもんんだいないのでそのまま進みます。
SSDがデフォルト。プロビジョンドにするほどの用途は無いです。
EC2にタグをつけます。
「Name」というキーに「ec2-div-1」と値をつけておきました。
例えばEC2一覧の画面で一意にわかるといいですよね。
今までの設定の確認をします。
「起動」を選択すると、最後にキーペアの選択(作成)画面となります。
既存だとこの画面ですが、新しく作成するキーペアの名前を決めて、必ずダウンロードしましょう。
注意書きにもありますが、キーペアがないとSSHアクセスも出来ません。
これでEC2作成完了。
EC2一覧で確認ができます。
(instanceIDを画面から選択した場合)
始めは「インスタンスの状態」が黄色だったりもしますが、「running」に変わり
「ステータスチェック」の初期化〜が完了すればSSHでアクセスしてOKです。
SSHする際やWebアクセスする際は
インスタンスにSSHアクセス
キーペアの権限
Macユーザの方やLinuxの方は、ターミナルから先程ダウンロードしたキーペアの権限を
sudo chmod 400 {キーペアファイル}
などで変更しましょう。
SSHアクセス
Windowsの場合はteratermがシンプルで使いやすいのでオススメです。
ユーザネームをec2-userに指定、キーペアを指定してアクセスすれば問題ありません。
尚、Amazon Linux系はデフォルトですべてこのユーザネームの指定が必要です。
初アクセスの際は、デフォルトのユーザec2-userにより、公開鍵認証します。
一応ですが、SSHはこんな感じのコマンドでどうぞ
ssh -i {キーペア指定} ec2-user@ec2-{ipv4}.ap-northeast-1.compute.amazonaws.com
アクセス時にこんなメッセージが出ればOKです。
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
No packages needed for security; 6 packages available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-11 ~]$
まずはソフトウェアパッケージのアップデートをします。
```[ec2-user ~]$ sudo yum update -y```
## Webサーバー入れてみてテスト
Apache入れて、公開できたか確認してみましょう。
Apache入れます。
```sudo yum install -y httpd```
Apache起動させます。
```sudo systemctl start httpd```
Apache起動確認して、active(running)であることを確認します。
```sudo systemctl status httpd```
ブラウザで、先程SSHアクセスでも使用した「ec2-{ipv4}.ap-northeast-1.compute.amazonaws.com」にアクセスしてみます。
![apache.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406764/2e5cce70-5f71-b3fa-e471-00616eb2be10.png)
無事確認ができたら、完了です!お疲れさまでした。
## 補足:アーキテクチャ図
今回登場したコイツですが、draw.ioという無料で使える図作成ルールを使いました。
実は、AWS公式サイトでも記載していますが、新しいアイコンたちも配布されています。
(下の方にdraw.ioが!)
https://aws.amazon.com/jp/architecture/icons/
↓2018以降のバージョンはこちら
https://about.draw.io/new-aws-icons-2018/
知らなかった!という方がいらっしゃれば、よかったら使ってみてくださいー
## まとめ
以上がVPC作成〜EC2のWebサーバー疎通確認までとなります。
振り返りながら作成したので、わかりづらい点、これは違うよがあったらぜひご教示ください。。m(_ _)m
ちょいちょい修正します。
今後また、よくあるAWS構成の作成や、〇〇やってみたぜ!をアップしていきます。
よろしくお願いします!