〜AWS基礎〜 EC2にひとまずWebサーバー(Apache)を用意するまでのプロセス


この記事

ようやくまともな記事を書き始めます。

AWSアーキテクトに力を入れているshinonです。

本記事は、AWSブランクを埋めつつ色々作っていた物の一部を使って

VPC+EC2を使用した基本的なサーバー構築を始めたい人向けとなっています。

初めてだと

あれ?サブネットってどこ?

ルートテーブルって何を記載するの?

作成したのにEC2とネット繋がらない・・・

等のトラブルが発生することもあるので

そんな方の参考になれば幸いです。

故に、本記事はAWS初心者向けです。

冗長構成など考慮したパターン等はまた別途記事にします。


VPC

VPCの作成

AWSアカウントを作成するとデフォルトのVPCが存在します。

サブネットも2つ用意されているかと思いますが、

これだと自分で環境がいまいちわからないかもしれないので

今回はパパっと作成しちゃいます。


リージョンとVPC

VPCをどこのリージョンに作るのかを選びます。

バージニア(米国)やパリなど色々ありますが、

特別な用途はないので、構築/アクセスする拠点から遅延の少ない、自国エリア(東京リージョン)に作成します。

「東京リージョンにVPCを作成する」ということは、東京リージョンにある3つのデータセンター群の中に論理的に独立したネットワークを作成するということになります。

(DCは本当はもっとあると思いますが、とりあえず複数の群があって論理的には3つ)

これらのAZはそれぞれ物理的に離れて数キロ以上離れて存在するため、

例えば(適当な場所)東京リージョンでは立川AZ、川崎AZ、松戸AZみたいなイメージです。

(個人的に、東京リージョン=東京都内という意味ではとっていないし、むしろ都内だけならあまりばらけないはず)

スクリーンショット 2019-07-04 15.18.47.png

★超ざっくり!笑

で、VPCをアーキテクチャ図で表現するとこうなります。

AWS First.jpg

★この図の作成に関しては記事の一番下に記載しています!

上にインターネットがあり、AWSCloud全体がまず存在。

その中の東京リージョンがあり、今回はこのリージョン内にVPCを作成。

そして東京リージョンはAZ(DC群)が3つあるためこういった記載となりました。


サブネットの活用

EC2等のリソースは、サブネットといわれる、VPCをさらに分割したNW内に作成するイメージです。

サブネットの主な用途は

・Webサーバーを配置するパブリックサブネット、DB等VPC内のリソースからのみアクセスするプライベートサブネットに分けたトラフィックの制御

・耐障害性を考慮した設計にするため、2つのAZを使った冗長化構成(LBなど)

などの使い方が挙げられます。

AWS Second.jpg

そのため、例えば先ほどの「耐障害性を考慮した設計にするため、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を選択すると、こんな画面になるかと思います。

VPCselect.png

この画面はVPC一覧で、選択したVPCの情報が下に出力されます。

vpc_createde.png

「VPCの作成」から始めましょう。

ここでは、VPCに以下のIP範囲を割り当てます。

10.0.0.0/16

IPv6やテナンシー需要ないのでそのままで問題ないです。

ちなみにテナンシーはハードウェア専有という贅沢なやつです。

作成を押したらVPCが出来上がりました

vpc_p.png

VPC一覧に戻ると新たに出来上がっているのが確認できます。

vpc_check.png


サブネット作成手順

次に、サブネットの作成を行います。

先ほどと同様、VPCの画面、左のタブ内に「サブネット」があるので

こんな画面が開かれるのを確認してください。

subnet.png

「サブネットの作成」から始めます。

今回はEC2を1つ置ければよいので以下のようなIP範囲で適当に設定します。

10.0.1.0/24

先ほどのVPC内に作成するため、IP範囲に注意。 ※ここでおかしいIP入れるとちゃんとエラー表示されます。

また、AZの選択肢が1つしかないのでお察しかと思いますが、

注意点として、サブネットはAZを2つ跨いだりすることができません。

subnet_namingcreate.png

では、作成します。

subnet_ed.png

現在こんな状態ですねー

名称未設定ファイルのコピー.jpg

★PublicSubnetとありますが、実際はまだインターネットとつながっていません。


Security Group作成

次に、EC2のためのファイアウォールを設定します。

SGは、EC2インスタンスに割り当てる仮想ファイアウォールです。

オンプレミスでは直接OS上のfirewalldなどで設定していたと思いますが、AWSでは基本的にはSGで管理します。

もちろん実際のところすべてのセキュリティをSGのみで全てカバーしているわけではないですが。その辺の話は追々別記事にて。

今回インターネットからEC2へのアクセスは、SSHアクセス、Webアクセスが最低限必要なので

ポート22,80,443(一応)を開けます。

開ける相手は今は自己IPのみ指定しましょう。(確認せずともワンボタンで可)


SG設定手順

SGはサービス「EC2」内、左タブにあります。こんな画面。

SG1.png

設定内容は以下のようになります。

ソースが送信元なので、マイIPを選択すると現在のIPが指定されます。

使用するVPCを指定しましょう。 ※説明欄もわかりやすいものを記載しましょう。

SGcreate.png

「作成」で完了。

入ってきた通信の、帰りの制御はどうするの?という疑問があるかもしれませんが、SGはステートフルです。

VPC のセキュリティグループ - AWSドキュメント

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_SecurityGroups.html


セキュリティグループはステートフルです。インスタンスからリクエストを送信する場合、そのリクエストのレスポンストラフィックは、インバウンドセキュリティグループルールにかかわらず、流れることができます。許可されたインバウンドトラフィックに対する応答(戻りのトラフィック)は、アウトバウンドルールにかかわらずアウト側に対し通過することができます。


※逆に、ステートレスでの通信制御要件がある場合は、ネットワークACLという別の設定を併用します。

ちなみにここまででこんな感じです。

名称未設定ファイルのコピー (1).jpg

線がいっぱいあってわかりずらいよー

という声もあるかもしれませんが、アーキテクチャ図は基本必要最低限の物を表記すればいいので、

今回みたいにTokyo Regionの線をわざわざ書いたりする必要もあまりないと思います。

え?図が見づらい?

それは作者のセンスですね


ネットワークと繋げるために

ではどうやって、これから作成するEC2からインターネットに繋げられるようにするのか。

気を付けるのは以下の点です。(初めての際に混乱しやすい)


①インターネットゲートウェイ(IGW) = VPCをインターネットと繋げるため。

リソースの作成

・IGWを作成する。

リソースのアタッチ

・IGWはVPCにアタッチする。

これで、VPC自体は仮想ルーターによりインターネットと接続可能となる


②ルートテーブル = サブネットをインターネットと繋げるため。

リソースの作成

・ルートテーブルの作成する。

リソースのアタッチ

・サブネットのルーティング設定変更をする。

これでVPC内の、ルーティングしたサブネット内のリソースはインターネットへ接続可能となる


③VPCで名前解決できるようにする

設定変更のみ


④サブネット内リソースへのIPv4割り当て設定

設定変更のみ

大丈夫です、そんな時間かかりません。


①インターネットゲートウェイ

先ほど記載した通り、デフォルトではインターネット外に出られないため、インターネットゲートウェイ(IGW)を作成します。


IGW作成

サービス「VPC」内の左タブに「インターネットゲートウェイ」があります。

igw.png

「インターネットゲートウェイの作成」から作成。

FireShot Capture 011 - インターネットゲートウェイの作成 - VPC Management Console_ - ap-northeast-1.console.aws.amazon.com.png

名前つけて終わり。

IGW-createed.png

確認します。

igw_b.png


VPCにIGWをアタッチ

その画面から、作成したIGWを選択した状態で、「アクション」から「VPCにアタッチ」を選択。

igw_attach.png

先ほどのVPCを選び、「アタッチ」で完了。

「状態」がattachedに変わり、

「アタッチ済みVPC ID」の箇所にアタッチ先のVPCがあることを確認。

igw_attached.png

これでVPC自体はインターネットに接続済。

名称未設定ファイルのコピー (2).jpg


②ルートテーブル

サブネットにルート設定します。

AWSの場合、基本的にルーティングはOS上で行うことなくAWSマネジメントコンソールやCLIで以下のように行うことが多いかと思います。


ルートテーブル作成

サービス「VPC」から、同じ要領でルートテーブルを開きます。FireShot Capture 046 - 自動割り当て IP 設定の変更 - VPC Management Console_ - ap-northeast-1.console.aws.amazon.com.png

rtb.png

「ルートテーブルを作成」から、VPCを選択して名前指定。

rtb_create.png

「作成」で終わり。

rtb_created.png


ルーティング設定

どんどん行きましょう。

作成したルートテーブルを選択して「ルート」タブを選択するとこんな画面が。

rtb_set1.png

ここではまず、すべての通信をIGWを通すという大前提を記載します。

「ルートの編集」で設定をします。

送信先:0.0.0.0/0(すべて)

ターゲット(宛先):先程作成したIGW ※作成済みのIGWを選択できます。

rtb_set1_.png

「ルートの保存」をしましょう。

rtb_set1_chk.png

出来ていますね。

次に、「サブネットの関連付け」をします。

タブを開くと、こんな感じの画面になっているので「サブネットの関連付けの編集」を選択。

rtb_sb.png

先程のサブネットを選択して「保存」です。

rtb_sb1.png

確認しましょう。

rtb_subck.png

関連付けが出来ているので、あとはちょっとした設定のみです。


③VPCで名前解決できるようにする

VPC一覧画面から、

VPCを選択した状態で、「DNSホスト名の編集」を選択します。

vpc_nameset.png

有効化にチェックを入れて保存をします。

vpe_named.png

これは、アクセスする際にIPアドレス以外に

ec2-{public-ipv4-address}.compute-1.amazonaws.comのようなアドレスが使用可能となります。


④自動割り当てIP設定の変更

サブネット内で起動されるリソースにIPv4アドレスが割り当てられるように設定変更します。

作成したサブネットを選択して、「アクション」を選択して…

subnet_throuth.png

「自動割り当てIP設定の変更」を選択。

FireShot Capture 046 - 自動割り当て IP 設定の変更 - VPC Management Console_ - ap-northeast-1.console.aws.amazon.com.png

チェックを入れて保存しましょう。

これで、EC2を構築するための最低限のネットワークリソースはできました。


EC2インスタンスの作成

いよいよEC2を作成します。

作成した際のイメージはこうなります。

名称未設定ファイルのコピー (3).jpg

難しいことは考えず、必要最低限の考慮はしていきましょう。

ここから具体的に料金が絡むのでそちらも触れながら。

では、サービス「EC2」を開いて、「インスタンス」を選択します。

ec2_dash.png

「インスタンスを作成」を選択。

FireShot Capture 032 - インスタンスウィザードを起動 - EC2 Management Console_ - ap-northeast-1.console.aws.amazon.com.png

AMIを選ぶ画面です。

AmazonLinux、RHEL、CentOS、WindowsServerなどなど色々ありますが

今回はAmazonLinux2を選びます。

Amazonが用意したCentOSベースのOSです。

次にインスタンスタイプを選びます。

FireShot Capture 051 - インスタンスウィザードを起動 - EC2 Management Console_ - ap-northeast-1.console.aws.amazon.com.png

これはAmazonが用意したスペックのテンプレートの様なものですね。(見ての通りのスペック群)

それぞれ料金が大きく変わるので、こちらを参照してください。


Amazon EC2 料金表

https://aws.amazon.com/jp/ec2/pricing/on-demand/


尚、今回はデフォルトで選択されている「t2.micro」をオンデマンドで使用しますが、

時間あたりの料金は無料利用枠なしだと0.0152USD=¥1.64です。(2019/7/11 ¥108/$)

無料利用枠に関してはこちらを参照くださいー


AWS 無料利用枠

https://aws.amazon.com/jp/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc


動作確認程度なので先程のインスタンスタイプでいきますね。

次に、詳細設定ですが、今回最低限変更が必要なのは以下の3つ。

ネットワーク:作成したVPCを選択します。 ※VPCを東京リージョンに作成したなら東京リージョンでEC2を作成しましょう。

サブネット:作成したサブネットを選択します。

自動割り当てパブリックIP:インターネット経由でアクセスが必要なので有効にしましょう。

以下は、参考程度にライトな説明です。

起動インスタンス:同じものを同時にいくつ作るか

購入のオプション:切れるの面倒なのでスポットインスタンスにはしない😂 ※調べましょう

シャットダウン動作:インスタンスを停止したら消える昨日はいらないので、「停止可能」にする

削除保護の有効化:間違ってGUIで消しちゃった、は怖いので、インスタンスを消す際はワンプロセス挟む様に設定出来ます。

モニタリング:デフォルトの5分で今回は問題ないのでそのまま(CloudWatchを見てみよう!)

テナンシー:以前記載しましたが、ハードウェア占有の話です。

ec2_create1.png

ec2_create2.png

次に、ストレージ(EBS)の設定です。

デフォルトの設定値でもんんだいないのでそのまま進みます。

SSDがデフォルト。プロビジョンドにするほどの用途は無いです。

ec2_create3.png

EC2にタグをつけます。

「Name」というキーに「ec2-div-1」と値をつけておきました。

例えばEC2一覧の画面で一意にわかるといいですよね。

FireShot Capture 038 - インスタンスウィザードを起動 - EC2 Management Console_ - ap-northeast-1.console.aws.amazon.com.png

次にSGです。先程作成したSGを選びましょう。

ec2_create4.png

今までの設定の確認をします。

ec2_create5.png

「起動」を選択すると、最後にキーペアの選択(作成)画面となります。

既存だとこの画面ですが、新しく作成するキーペアの名前を決めて、必ずダウンロードしましょう。

注意書きにもありますが、キーペアがないとSSHアクセスも出来ません。

スクリーンショット 2019-07-11 16.48.33.png

これでEC2作成完了。

ec2-created.png

EC2一覧で確認ができます。

(instanceIDを画面から選択した場合)

ec2_chk.png

始めは「インスタンスの状態」が黄色だったりもしますが、「running」に変わり

「ステータスチェック」の初期化〜が完了すればSSHでアクセスしてOKです。

SSHする際やWebアクセスする際は

ec2-comp.png

「パブリックDNS(IPv4)」を使用します。


インスタンスに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 start httpd

ブラウザで、先程SSHアクセスでも使用した「ec2-{ipv4}.ap-northeast-1.compute.amazonaws.com」にアクセスしてみます。

apache.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構成の作成や、〇〇やってみたぜ!をアップしていきます。

よろしくお願いします!