目次
- 目次
- 概要
- EC2(Elastic Compute Cloud)とは
- パブリックサブネットにEC2インスタンスを設置してみる
- サーバーにログインするとは
- SSHとは
- 公開鍵認証
- SSHでEC2インスタンスにログインする
- ポート番号とは
- EC2インスタンスにApacheをインストールする
- ファイアウォールとは
- セキュリティグループのインバウンドを編集して、80番ポートを解放する
- Elastic IPアドレスでEC2インスタンスのIPアドレスを固定する
- 作業後
- プライベートサブネットに新しいEC2インスタンスを作成する
- 参考記事
概要
ネットワークの中にWebサーバーを構築しようと思います。 AWSのEC2を使ってEC2インスタンス(仮想サーバー)をネットワーク上に作成します。その後、EC2インスタンスにSSHでログインしてApache(Webサーバーのソフトウェア)をインストールします。Apacheをインストールすることで、サーバーがWebサーバーとして機能するようになります。
EC2(Elastic Compute Cloud)とは
EC2とは、AWS上に仮想サーバーを作るためのサービスです。 EC2で作成した仮想サーバーをEC2インスタンスと呼びます。
EC2インスタンスの3つの特徴
- 数分で起動し、1時間または秒単位の従量課金
- サーバーの追加・削除、マシンスペック変更も数分で可能
- OSより上のレイヤについては自由に設定できる
EC2インスタンスを作成するときに、AMIの選択、インスタンスタイプの選択、ストレージの追加をする必要があるので、AMI、インスタンスタイプ、ストレージを以下で説明します。
AMI(Amazon Machine Image)とは
AMI(アミ)とは、 EC2インスタンスを起動するために必要な情報が入った、OSのイメージ です。AMIを元にEC2インスタンスを作成します。
ざっくりいうと、AMIはサーバーのテンプレートのようなものです。AMIにはOSのデータが入っていて、それをもとにEC2インスタンスを作成します。OSを独自にカスタマイズしてEC2インスタンスを作成したい場合、カスタムAMIを作ります。
インスタンスタイプとは
インスタンスタイプとは、 サーバーのスペックを定義したもの です。 EC2インスタンスを作成するとき、インスタンスタイプを決める必要があります。インスタンスタイプにより料金が異なります。アクセス数に応じて必要なスペックのインスタンスタイプを選択した方が良いでしょう。
また、インスタンスタイプは以下のように表記されます。
例) m5.xlarge
それぞれの文字の意味を以下にまとめます。
文字 | 呼ばれ方 | 意味 |
---|---|---|
m | インスタンスファミリー | どういう特徴を持ったインスタンスかを表しています(CPUを最適化したもの、メモリを最適化したもの等々)。 |
5 | インスタンス世代 | 数値が大きくなるほど、同じインスタンスファミリーでも世代が進んでいます。世代が新しい方が高性能でコストパフォーマンスも高いです。 |
xlarge | インスタンスサイズ | CPU、メモリ、ネットワークのキャパシティによってインスタンスサイズが分類されています。 |
ストレージとは
ストレージとは、 サーバーにくっつけるデータの保存場所のことです。 EC2には2種類のストレージが存在します。
EBS(Elastic Block Store)
EBSとは、 高い可用性と耐久性を持つEC2インスタンスとは独立したストレージのことです。 EBSはEC2インスタンスとは独立して存在しているので、他のインスタンスに付け替え可能です。また、独立しているので、EC2インスタンスをStop/TerminateにしてもEBSはデータを保持できます。Snapshotを取得してS3に保存することもできます。EBSはEC2とは別に料金が発生するので、データを永続して保持したい場合に使用します。多くの場合にEBSを使用します。インスタンスストア
インスタンスストアとは、 あるインスタンス専用の一時的なストレージのことです。 個別のインスタンス専用のストレージなので、他のインスタンスに紐づけることはできません。また、EC2インスタンスをStop/Terminateにすると、データは全てクリアになります。ただ、EBSとは異なり無料で使用できます。失われてはいけないデータはインスタンスストアには置いてはいけず、キャッシュなどのデータを置く場合に使用します。
パブリックサブネットにEC2インスタンスを設置してみる
設置手順
手順1:
IAMユーザー用のマネジメントコンソールからEC2の設定画面を開きます。その後、左側のメニューの「インスタンス」をクリックします。インスタンスを作成したいので、画面内の「インスタンスを起動」をクリックします。
手順2:
EC2インスタンスの名前を入力した後に、AMIを選択します。今回は「Amazon Linux」にしました。
(※)Amazon Linuxとは、AWSによってメンテナンスされているLinuxです。AWSの各サービスと連携するためのツールやライブラリが最初から入っています。
手順3:
インスタンスタイプはt2.micro(ティーツーマイクロ)を選択します。t2.microはパフォーマンスが低いですが、無料枠で使えます。その後、インスタンスに安全に接続するためにキーペアを作成します。キーペアとは、EC2インスタンスにログインするための秘密鍵です(ssh-keyになる)。キーペア名を入力して「キーペアを作成」をクリックします。キーペアをダウンロードすると思いますが、このキーペアは再度ダウンロードするのが不可能なので、無くさないようにしましょう。
(※)キーペアはpem(ペム)ファイルです。pemファイルが秘密鍵の役割をします。
手順4:
ネットワーク設定でVPCと、EC2インスタンスを設置したいサブネットを選択します。パブリックIPの自動割り当てでは、インターネット経由でEC2インスタンスにアクセスできるようにするために、EC2インスタンスにパブリックIPアドレスを付けるかどうかを選択します。今回は有効にします。
(※)パブリックIPの自動割り当てでEC2インスタンスに割り当てられるパブリックIPアドレスは、起動のたびにランダムなものが割り当てられる動的なIPアドレスです。
手順5:
セキュリティグループを設定します。セキュリティグループでは、EC2インスタンスのセキュリティを設定します。「セキュリティグループを作成する」を選択して、セキュリティグループ名を入力します。デフォルトのセキュリティグループだとSSHでどこからでもEC2インスタンスにアクセスできるので、SSHができるIPを指定します。しかし、今回は練習なので、0.0.0.0/0のままにしておきます。
次にネットワークインターフェースのプライマリIPアドレスに、パブリックサブネットに指定されているIPアドレス範囲内の任意のIPアドレスを書きます(10.0.10.10を書きました)。
手順6:
ストレージの設定をします。とは言ってもストレージは最初から設定されるので、特にいじるところはありません。デフォルトではEBSがストレージとして指定されています。
手順7:
高度な詳細を設定します。キャパシティーの予約とは、事前にリソースを確保しておくことです。AWSではアベイラビリティゾーンごとにリソースの上限が決まっていて、それを超えるとEC2インスタンスの起動ができなくなります。キャパシティー予約をしておくとそのような問題を回避できます。しかし、EC2インスタンスの実行の有無に関わらず料金が発生します。今回はなしにしました。次に、シャットダウン動作とは、EC2インスタンスをシャットダウンしたときに、起動できるように停止するか、削除するかを指定するオプションです。今回は停止にします。次に、テナンシーの部分でハードウェアを占有するか、共有のハードウェアを利用するかを指定します。今回はハードウェアを占有する必要はないので共有にします。
手順8:
最後に「インスタンスを起動をクリックします。これで指定したサブネットにEC2インスタンスを設置できました。
サーバーにログインするとは
サーバーにログインするとは、物理的に離れた場所にあるサーバーに、自分のパソコンからログインすることです。SSHでログインします。
SSHとは
SSHとは、 ネットワーク経由で他のコンピュータに接続して、遠隔操作するための仕組み です。通信途中の情報は全て暗号化されます。 SSHでログインされる方のコンピュータはSSHサーバー、SSHでログインする方のコンピュータまたはソフトウェアのことをSSHクライアントと言います。
公開鍵認証
AWSでは、EC2インスタンスの作成者のみがEC2インスタンスにログインできるようになっています。それらは公開鍵認証によって実現されています。EC2ではSSHでEC2インスタンスにログインするときに公開鍵認証が求められます。
公開鍵認証とは、 秘密鍵と公開鍵を利用する認証方法です。公開鍵はサーバーが保有して、秘密鍵を持っているユーザーだけがサーバーにログイン可能になっています。
(※)認証とは、「認められていると証明する」という意味です。
SSHでEC2インスタンスにログインする
ログイン手順
手順1:
サーバーにログインするときに使う秘密鍵(pemファイル)の権限を変えて、秘密鍵をオーナー以外が使えないようにします。
chmod 600 ./blog-test-ec2.pem
手順2:
ブラウザでEC2の設定画面を開き、ログインしたいインスタンスをクリックして、パブリック IPv4 アドレスをコピーします。このパブリックIPアドレスがインターネットに接続されているEC2インスタンスのパブリックIPアドレスになります。このパブリックIPアドレスを用いてSSHを実行します。
(※)人によってこのパブリックIPアドレスは違います。
手順3:
pemファイルと先ほどコピーしたパブリックIPアドレスを使って、以下のコマンドを実行します。このコマンドを実行することでSSHでEC2インスタンスにログインします。
ssh -i ./blog-test-ec2.pem ec2-user@13.113.39.55
(※)作業が終了したらexitでサーバーとの接続を切っておきます。
ポート番号とは
ポート番号とは、 同一コンピュータ内で通信を行うプログラムを識別するための番号です。
EC2インスタンスにApacheをインストールする
Apacheとは
Apacheとは、 HTTPリクエストがあると、それに対してHTTPレスポンスを返すようなWebサーバーのソフトウェアです。
インストール手順
手順1:
SSHでEC2インスタンスにログインします。その後、まずはEC2インスタンスのライブラリをyumでアップデートします。以下のコマンドでアップデートします。yumとはLinuxのパッケージ管理ツールです。yumでパッケージを管理する場合、ライブラリをパッケージとして扱います。
sudo yum update -y
手順2:
以下のコマンドを実行して、EC2インスタンスにApacheをインストールします。Apacheの実行ファイル名はhttpdと言います。
sudo yum -y install httpd
手順3:
以下のコマンドを実行して、Apacheを起動させます。
systemctl(システムコントロール)コマンドは、指定したサービス(アプリケーション)を起動、停止、再起動するためのコマンドです。
sudo systemctl start httpd.service
また、以下のコマンドでApacheが起動しているかを確認できます。
sudo systemctl status httpd.service
アクティブになっているので起動しているのが確認できました。
(※)statusのコマンド以外にもプロセスを確認することで、Apacheが起動しているかを確認できます。プロセスとは、サーバー上で実行中のプログラムのことです。
// 全てのプロセスをCPUやメモリ使用率付きで表示します。 ps -axu
手順4:
Apacheを自動起動するように設定します。今の状態だと、サーバーが停止したり再起動すると、Apacheの起動コマンドをまた実行する必要があります。以下のコマンドを実行することで、Apacheを自動起動するように設定できます。
sudo systemctl enable httpd.service
以下のコマンドを実行してenabledが出れば、自動起動がちゃんと設定されています。
sudo systemctl is-enabled httpd.service
ファイアウォールとは
ファイアウォールとは、 ネットワークを不正アクセスから守るために、「通して良い通信だけを通して、それ以外は通さない」機能の総称です。 AWSではEC2インスタンスを作成したときに設定したセキュリティグループが、ファイアウォールの役割をになっています。セキュリティグループとは、 EC2の外側にあるファイアウォールのことです。
インバウンドとアウトバンド
インバウンドとは、サーバーに入ってくる通信のことです。アウトバウンドとは、サーバーから出ていく通信のことです。外からサーバーに自由に入られるとセキュリティ上危険なので、インバウンドに関しては必要な通信だけを通すようにして、それ以外は遮断するようにしましょう。アウトバウンドに関しては特に設定することはないです。インバウンドとアウトバンドは、セキュリティグループで編集できます。
現状EC2インスタンスへのアクセスは22番ポート(SSHでやりとりするときに使われるポート)のみ許可されているので、セキュリティグループのインバウンドを編集して、80番ポートも許可するようにします。
80番ポートが許可されていないので、EC2インスタンスにブラウザからリクエストを出したときにWebページが表示されません。
セキュリティグループのインバウンドを編集して、80番ポートを解放する
手順
手順1:
EC2の画面でブラウザからリクエストを出したいインスタンスを選択します。そのインスタンスのセキュリティグループを確認すると、EC2インスタンス作成時に作ったセキュリティグループが適用されています。以下の画像を見ると、blog-test-infra-securityというセキュリティグループがEC2インスタンスに適用されていることが確認できます。
手順2:
セキュリティグループのインバウンドを確認すると、SSHで22番ポートであれば、どんなIPアドレスからもアクセスできると書いてあります。ブラウザからもアクセスできるように、インバウンドを編集して80番ポートを解放します。「インバウンドのルールを編集」、「ルールを追加」をクリックします。次に、タイプにHTTPを選択して、ソースをAnywhere-IPv4を選択します。その後、「ルールを保存」をクリックします。
これでWebサーバーにブラウザからHTTPリクエストを出すと、レスポンスを返せるようになりました。これはApacheのデフォルトのページです。
Elastic IPアドレスでEC2インスタンスのIPアドレスを固定する
EC2インスタンスのパブリックIPアドレスは起動停止すると、別のパブリックIPアドレスが割り当てられるようになります。サーバーを運用する場合、IPアドレスが変わると不便なので、パブリックIPアドレスを固定します。AWSではEC2インスタンスのパブリックIPアドレスを固定するために、Elastic IPアドレスを使用します。
Elastic IPアドレスとは
Elastic IPアドレスとは、 インターネット経由でEC2インスタンスにアクセス可能な固定のパブリックIPアドレスを取得できてインスタンスに付与できるサービス です。その付与したインスタンスを削除するまでは、ずっとそのパブリックIPアドレスを使用することができます。
(注)Elastic IPアドレスは、EC2インスタンスに関連づけられていて、そのインスタンスが起動中であれば無料です。逆にそうでない場合は、課金されます。
以下の手順でElastic IPアドレスを起動したEC2インスタンスに紐付けます。
作業手順
手順1:
EC2の設定画面を開く → 「Elastic IP」をクリック → 「Elastic IPアドレスを割り当てる」をクリック します。「割り当て」ボタンをクリックすると、新しいパブリックIPアドレスを確保することができます。
手順2:
確保したパプリックIPアドレスを、EC2インスタンスに割り当てます。確保したパブリックIPアドレスを選択して、「アクション」→「Elastic IP アドレスの関連付け」の順番でクリックします。EC2インスタンスに割り当てるので、リソースタイプはインスタンスを選択します。次に確保したパブリックIPアドレスを紐付けるEC2インスタンスを選択します。プライベート IP アドレスをクリックすると、先ほど選択したEC2インスタンスのプライベートIPアドレスが表示されるので、それを選択します。その後、関連付けをクリックします。
これでEC2インスタンスにElastic IPアドレスで確保したパブリックIPアドレスを関連づけることができました。割り当てられたパブリックIPアドレスでWebサーバーに対してHTTPリクエストを出すと、ちゃんとWebページが表示されました。
作業後
今回は練習なので、作業後はElastic IPアドレスを解放します。Elastic IPアドレスの設定画面を開いて、「アクション」→「Elastic IPアドレスの関連付けを解除」→ 「Elastic IPアドレスの解放」の順番でクリックします。そうすると、Elastic IPアドレスを解放できます。
続いて、EC2インスタンスを停止させます。EC2の設定画面を開いて、「インスタンス」→「停止させたいインスタンスを選択」→「インスタンスの停止」の順番でクリックすると、EC2インスタンスを停止させることができます。
勉強の一区切りで以上のことをやっておくと、思わぬ請求を防ぐことができて安心です。
プライベートサブネットに新しいEC2インスタンスを作成する
プライベートサブネットに新しいEC2インスタンスを作成してみます。プライベートサブネットはインターネットゲートウェイと接続されていないので、プライベートサブネットのEC2インスタンスにSSHでログインしようとしても、画面が動かずアクセスできないです。
↓ SSHでEC2インスタンスにログインしようとしても、画面が動かず、タイムアウトになります。