この記事でやること
パブリックサブネットの中にWebサーバーを設置します。
注意
時期によって画面などが変わったりするのでご了承ください。
この記事を読む前に
EC2とは
AWSのクラウド上の仮想サーバーのことです。
インスタンスはEC2からたてられたサーバーです。
時間または秒単位の従量課金制で、サーバーの追加、削除、マシンスペック変更も数分でできます。
OSより上のレイヤーは自由に設定できるみたい柔軟なサービスです。
EC2作成の手順
1 AMIの選択
2 インスタンスタイプの選択
3 ストレージ追加
4 セキュリティグループの追加
5 SSHキーペア設定
AMI(Amazon Machine Image)とは
インスタンス起動に必要な情報が入った、OSでサーバーのテンプレ的な存在*です。
自前のカスタムAMIが作成でき、カスタムAMIから何台でもEC2インスタンスが作成可能です。
インスタンスタイプ
サーバーのスペックを定義したものです。
インスタンスタイプによってCPUなどが異なり、料金も異なってきます。アクセス数などによってインスタンスタイプが選択できます。
ストレージ
データの保存場所です。
EBS
とインスタンスストア
があります。比較は下の記事からお願いします。
EBSの方が料金が発生するが、耐久性は強い。こっちの方が使うことが多い。
インスタンスストアは一時的なストレージで、追加料金はないが、大事なデータを置いてはいけない。
⚫︎EBSの記事
⚫︎インスタンスストア
⚫︎両者の記事
EC2設置
EC2の構築に当たって以下の手順で構築していきます。
①EC2インスタンスの設置 (順番は時期により変わる)
・AMIの選択
・インスタンスタイプの選択
・インスタンス詳細の設定
・ストレージ追加
・タグの追加
・セキュリティグループの設定
・SSHキーペアの設定
など
②Apacheをインストール
③ファイアウォールを設定
①EC2インスタンスの設置
EC2を検索してEC2の画面にいきます。
インスタンスを選択してインスタンスの画面にいきます。インスタンスの作成を押して作成していきます。(下の画像は起動)
名前とタグ追加
名前とタグを追加します。
あとインスタンス数は1でいいと思います。
AMIの選択
無料枠のAmazon Linux2でいいと思います。
インスタンスタイプ
t2.microの無料枠を使います。
ネットワークの設定
ネットワークの設定です。
セキュリティグループの設定
自分のIPが無難ですが、ネット環境が変わることで、IPが変わったりするみたいです。
例えばRailsでアプリを作った時は、カスタム(TCP)などにしてポートを3000にしておくといいいみたいです。
ストレージの設定
特に変えなくても大丈夫そうです。
一通り設定ができたらインスタンスを起動します。
キーペアの作成
新しいキーペアを作成します。
キーペアがないとインスタンスにログインができません。
キーペアを作成してダウンロードされます。画像にはないですがキーペア作成を押します。
鍵は公開しないように気をつけてください。
上での設定が終わりインスタンスが作成されました。
ステータスチェックは最初は初期化していますになっていても少し時間が経てば
「2/2チェックに合格しました」になります。
インスタンスをチェックした状態で接続
を押すとインスタンスの接続画面にいきます。
そこにSSHクライアントを選んで3と4のコマンドをMacでターミナルで入力すると
SSH接続できます。
% cd Downloads
Downloads % chmod 400 AWS-infra-ec2.pem
Downloads % ssh -i "AWS-infra-ec2.pem" ec2-user@ec2-3-112-210-194.ap-northeast-1.compute.amazonaws.com
The authenticity of host 'ec2-3-112-210-194.ap-northeast-1.compute.amazonaws.com (3.112.210.194)' can't be established.
ECDSA key fingerprint is SHA256:zKZNzQu4BiF1jVGo+l/GElkMWwdQYf0dRBVQUpIi55c.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ec2-3-112-210-194.ap-northeast-1.compute.amazonaws.com,3.112.210.194' (ECDSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
3 package(s) needed for security, out of 8 available
Run "sudo yum update" to apply all updates.
⚫︎注意
パブリック IPv4 アドレス(ここでは3-112-210-194)は再起動するごとに変わります。
今現在セキュリティグループを確認するとSSHでポート22になっていてSSH接続できる状態です。
SSH
SSHとは通信内容が暗号化された遠隔ログインシステムのことで、
サーバーと自分の目の前のパソコンをセキュアに繋ぐサービスです。
EC2にログインする時に使います。
公開鍵認証
サーバーに作成者本人だけがログインできるようにするのが公開鍵認証です。
EC2ではSSHログイン時に公開鍵認証をします。
秘密鍵や公開鍵を使って認証します。公開鍵はサーバーが持っていて秘密鍵を持っているユーザーだけがログインできます。
公開鍵暗号を使い公開鍵認証していきます。
②Apacheをインストール
SSHでEC2インスタンスに接続
今回はMacのやり方でやります。
ApacheをインストールするためにまずはSSHでログインできるようにします。
まずはターミナルを立ち上げます。
上のやり方で*インスタンスを起動し、SSH接続をします。
ポート番号
どのプログラムがリクエストを受けるかを決めているのがポート番号です。
プログラムのアドレスみたいな存在です。
代表的なプログラムが使うポート番号は決められていますが、動的に決まる番号もあるみたいです。
ポート番号確認するコマンドです。
% sudo lsof -i -n -P
補足
-i
はネットワークソケットファイルを表示するオプション
-n
はIPアドレスをホスト名に変換しないオプション
-P
はポート番号をサービス名に変換しないオプション
コマンド実行後に出てくる、
LISTENは他のコードから待ち受けているコード、ESTABLISHEDは相手との通信中です。
Apacheをインストール開始
まずは上みたいにインスタンスを起動してSSH接続をします。
yumでアップデートします。yumはLinuxのパッケージ管理ツールです。
sudoはルート権限で実行するという意味です。
[ec2-user@ip-10-0-7-161 ~]$ sudo yum update -y
#省略
完了しました!
-yはYesオプションです。
ではApacheをインストールしていきます。
[ec2-user@ip-10-0-7-161 ~]$ sudo yum -y install httpd
#省略
完了しました!
Apacheを起動していきます。
[ec2-user@ip-10-0-7-161 ~]$ sudo systemctl start httpd.service #httpd.serviceがApache
ec2-user@ip-10-0-7-161 ~]$ sudo systemctl status httpd.service #起動確認
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since 水 2022-09-07 06:18:36 UTC; 1min 43s ago
Docs: man:httpd.service(8)
#省略
[ec2-user@ip-10-0-7-161 ~]$ ps -axu #プロセス確認
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.5 123664 5472 ? Ss 06:05 0:01 /usr/lib/system
root 2 0.0 0.0 0 0 ? S 06:05 0:00 [kthreadd]
#省略
apache 6275 0.0 0.6 304736 6404 ? Sl 06:18 0:00 /usr/sbin/httpd
apache 6276 0.0 0.6 304736 6404 ? Sl 06:18 0:00 /usr/sbin/httpd
root 6324 0.0 0.0 0 0 ? I 06:20 0:00 [kworker/0:0-cg
ec2-user 6336 0.0 0.3 162320 3804 pts/0 R+ 06:23 0:00 ps -axu
[ec2-user@ip-10-0-7-161 ~]$ ps -aux | grep httpd #httpdに絞り込み
#省略
ec2-user 6339 0.0 0.0 119448 924 pts/0 S+ 06:24 0:00 grep --color=auto httpd
[ec2-user@ip-10-0-7-161 ~]$
Apacheの自動起動
サーバーを止めたりするとまた起動しなければならないので、自動起動するように設定します。
[ec2-user@ip-10-0-7-161 ~]$ sudo systemctl enable httpd.service #自動機能設定
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[ec2-user@ip-10-0-7-161 ~]$ sudo systemctl is-enabled httpd.service #自動機能設定確認
enabled
AWSのファイアウォール
ネットワークを不正アクセスから守るために、通していい通信だけ通して、それ以外は通さない機能です。
セキュリティグループがAWSでファイアウォールの役割を担っています。
サーバーへ入ってくる通信(インバウンド)
のポートは必要なものだけ開けて、
サーバーから出ていく通信(アウトバウンド)
のポートは基本開いています。
ファイアウォール設定
ファイアウォールを設定するためには、セキュリティグループのポート80番を開けます
。
まずはインスタンスの画面を開きます。インスタンスを選択した後に、
パブリックIPv4アドレスをコピーします。
コピーしたらブラウザのURLの欄に貼り付けます。
すると以下のようなページになりました。Apacheのデフォルトの画面です。
Apacheに接続してレスポンスを返せたことになります。
もう一度インスタンスの画面を見てみましょう。その中でセキュリティグループを見てみます。
何か追加したい場合はインバウンドの編集から編集します。
SSH以外にもHTTPなどにも接続できる状態です。
パブリックIPアドレスを固定するElastic IPアドレス
パブリックIPは起動、停止する時、別のIPアドレスが割り当てられるが、
Elastic IPアドレスを使うとIPアドレスを固定できます。
Elastic IPアドレスの注意点
そのIPアドレスはインスタンスを削除するまで使うことができます。
しかしEC2に関連づけられていて、そのインスタンスが起動中なら無料で、
そうでなければ課金されます。
インスタンスを止めた時はElastic IPアドレスのダッシュボードのアクションから
アドレスの関連付けの解除をしておきましょう。
Elastic IPアドレスをIPアドレスと紐付ける
EC2のダッシュボードにElastic IPがあるのでクリックします。
次にElastic IPアドレスを割り当てるをクリックします。
Elastic IPアドレスが割り当てできたらアクションからElastic IPアドレスの関連づけをクリックします。
インスタンスはここでは起動中のインスタンス(aws-infra-ec2)です。
プライベートIPアドレスはaws-infra-ec2のIPアドレスです。
下の画像には無いですが、関連づけるをクリックします。
割り当てられたIPアドレス(ここでは54.95.19.84)をブラウザのURLに貼り付けてみると
Apacheの画面になったことでWebサーバー送信できているため、紐付けることができました。
料金が余計に発生しないために
① Elastic IPアドレスのアクションからElastic IPアドレスの解除します。
インスタンスを止めるなら解除しましょう。
Elastic IPアドレスの解放すれば料金の発生の心配はないです。
② インスタンスの状態からインスタンスを停止します。
資料