Help us understand the problem. What is going on with this article?

[AWS]Webサーバーの構築方法

2020年1月19日現在の内容です。

用語説明

EC2(Elastic Compute Cloud)

AWSクラウド上の仮想サーバー 
インスタンス:EC2から立てられたサーバーのこと

特徴

  • 数分で起動し、1時間または秒単位の従量課金
  • サーバーの追加・削除、マシンスペック変更も数分で可能
  • OSより上のレイヤについては自由に設定できる

作成手順

  1. AMIの選択
  2. インスタンスタイプの選択
  3. ストレージの追加
  4. セキュリティグループの設定
  5. SSHキーペアの設定

AMI(Amazon Machine Image)

インスタンス起動に必要な情報が入ったOSのイメージ
サーバーのテンプレートのようなもの

特徴

  • AWSやサードパーティがAMIを提供
  • 自前のカスタムAMIも作成可能
  • カスタムAMIから何台でもEC2インスタンスを起動可能

インスタンスタイプ

サーバーのスペックを定義したもの

概要

  • インスタンスタイプにより、CPU、メモリ、ストレージ、ネットワーク帯域が異なる
  • インスタンスタイプにより料金が異なる(スペックが高いほど料金も高い)
  • アクセス数などに応じて必要なスペックのあるインスタンスタイプを選択する

ストレージ

サーバーに紐付けるデータの保存場所
EC2のストレージは2種類存在する

EBS(Elastic Block Store)

  • 高い可用性と耐久性を持つストレージ
  • 他のインスタンスに付け替え可能
  • EC2インスタンスをSTOP(一時停止)/Terminate(永久破棄)してもEBSは保持可能
  • Snapshot(増分バックアップ)を取得しS3に保存可能
  • EBSの費用が別途発生
  • OSやDBなどの永続性と耐久性が必要なデータの格納に使用

インスタンスストア

  • インスタンス専用の一時的なストレージ
  • 他のインスタンスに付け替えることができない
  • EC2インスタンスをSTOP/Terminateするとクリアされる
  • 追加費用は発生しない(無料)
  • 一時ファイルやキャッシュなど失われても問題がないデータの格納に使用

一般的にはEBSの利用が多い

SSH

サーバーと自分のパソコン(クライアント)をセキュアにつなぐサービスのこと
(通信内容が暗号化された遠隔ログインシステム)

EC2にログインするときはSSHを使用する

公開鍵認証

  • サーバーへのログイン時に認証を行う仕組み
  • ユーザー名とパスワードを使用した認証と比べ、よりセキュリティが高い
  • 公開鍵暗号(秘密鍵と公開鍵)を用いて認証を行う
  • 公開鍵はサーバーが保有。秘密鍵を持っているユーザーだけログイン可能

公開鍵:南京錠のイメージ
秘密鍵:鍵のイメージ

EC2ではSSHログイン時に公開鍵認証を行っている

ポート番号

プログラムのアドレス
同一コンピューター内で通信を行うプログラムを識別するときに利用される

  • SSHサーバー:ポート番号22
  • HTTPサーバー:ポート番号80
  • SMTPサーバー:ポート番号25

ポート番号を決める方法は2種類ある

標準で決められている番号

  • 代表的なプログラムが使うポート番号はあらかじめ決められている(ウェルノウンポート番号)
    • SSH:22
    • SMTP:25
    • HTTP:80
    • HTTPS:443
  • ウェルノウンポート番号は0〜1023のいずれかの整数値
  • 接続元(クライアント)が接続先のポート番号を省略した場合、ウェルノウンポート番号が使用される

動的に決まる番号

  • サーバーはポート番号が決まっている必要があるが、クライアントはポート番号が決まってなくても良い
  • クライアントのポート番号はOSが他のポート番号と重複しないように、ランダムに決める
  • 動的に割り当てる番号は49142〜65535のいずれかの整数値

ファイアウォール

ネットワークを不正アクセスから守るために、「通して良い通信だけを通して、それ以外は通さない」機能の総称

AWSでは、セキュリティグループがファイアウォールの役割を担っている

Elastic IPアドレス

  • インターネット経由でアクセスで可能な固定グローバルIPアドレスを取得でき、インスタンスに付与できるサービス
  • インスタンスを削除するまで付与したIPアドレスを使用できる
  • Elastic IPアドレスはEC2インスタンスに関連付けられていて、インスタンスが起動中であれば無料で利用できる(インスタンスが使用されていなかった場合、課金される)

構築手順

  1. EC2インスタンスを設置する
  2. Apacheをインストールする
    1. SSHでサーバーにログイン
    2. Apacheをインストール
  3. ファイアウォールを設定する

スクリーンショット 2020-01-18 14.17.54.png

EC2インスタンスの作成

EC2インスタンスをパブリックサブネットに設置する

サービス → EC2を検索
スクリーンショット 2020-01-17 19.49.44.png

「インスタンス」をクリック
スクリーンショット 2020-01-17 19.55.04.png

「インスタンスの作成」をクリック
スクリーンショット 2020-01-17 19.58.42.png

「Amazon Linux 2」を選択
(特に理由がなければAmazon Linux 2で問題ない)
スクリーンショット 2020-01-17 20.04.42.png

「t2.micro」を選択し、「次のステップ」をクリック
(t2.microはパフォーマンスが低いが動作検証では十分足りる)
スクリーンショット 2020-01-17 20.09.53.png

以下の通り設定し、「次のステップ」をクリック

  • 「スポットインスタンスのリクエスト」を選択すると低料金で利用できるが、インスタンスが中断する可能性がある
  • 「ネットワーク」は作成したVPC
  • 「サブネット」はパブリックサブネット
  • インターネットに接続する場合「自動割り当てパブリック IP」を有効にする
  • 「配置グループ」を選択すると複数のEC2インスタンス間の通信を高速する
  • 「キャパシティーの予約」を開くにするとアベイラビリティゾーンのリソースを事前に確保してEC2インスタンスを常に起動できる状態にできる(追加料金が発生)
  • 「IAMロール」はEC2インスタンスが他のAWSサービスと連携するときの権限を設定
  • 一般的に本番環境では「削除保護の有効化」を設定する
  • 「テナンシー」ではハードウェアを専有するか共有するかを選択する(専有すると追加料金が発生)
  • 「Elastic Inference」は機械学習でGPUを使用する際にコスト効率を良くするためのもの
  • 「T2/T3 無制限」はバースト(サーバーにアクセスが集中した際CPUをフル稼働させる状態)を無制限にできる(追加料金が発生) スクリーンショット 2020-01-18 12.04.08.png

ネットワークインターフェースでプライベートIPを設定する
*パブリックサブネットの範囲内で設定する
スクリーンショット 2020-01-18 12.05.35.png

以下の通り設定し、「次のステップ」をクリック
スクリーンショット 2020-01-18 12.14.47.png

任意のタグを追加・設定し、「次のステップ」をクリック
スクリーンショット 2020-01-18 12.19.34.png

以下の通り設定し、「確認と作成」をクリック
スクリーンショット 2020-01-18 13.10.34.png

設定内容を確認し、問題なければ「起動」をクリック
スクリーンショット 2020-01-18 13.21.46.png

新しいキーペアを作成し、ダウンロードする
キーペアのダウンロードはこれ以降できないので、必ずダウンロードしておく
ダウンロードが完了したら「インスタンスの作成」をクリック
スクリーンショット 2020-01-18 13.28.22.png

「インスタンスの表示」をクリック
スクリーンショット 2020-01-18 13.30.50.png

インスタンスが作成されていることを確認
(一定時間経過後「インスタンスの状態」が「runnning」,「ステータスチェック」が「2/2のチェックに合格しました」となる)
スクリーンショット 2020-01-18 13.36.40.png

SSHでEC2インスタンスに接続

*MACの手順

ターミナルを起動し、ダウンロードした秘密鍵(pemファイル)の権限を変更する
chmod 600 test-ssh-key.pem

作成したEC2インスタンスのパブリックIPアドレスをコピーする
スクリーンショット 2020-01-18 15.26.15.png

sshコマンドでログインする
ssh -i test-ssh-key.pem ec2-user@54.64.153.51
↑秘密鍵(test-ssh-key.pem)を用いてユーザー名(ec2-user)でIPアドレス(54.64.153.51)に接続する
(初回ログインの場合「Are you sure you want to continue connecting (yes/no)?」と聞かれるので「yes」を選択)

exitでログアウトできる

Apacheのインストール

パッケージを最新に更新する
sudo yum update -y

Apacheのインストール
sudo yum install httpd -y

Apacheの起動
sudo systemctl start httpd.service

Apacheが起動されていることを確認
sudo systemctl status httpd.service
スクリーンショット 2020-01-19 11.13.52.png

サーバーが停止・再起動したらApacheも停止するので、サーバーが起動したときにApacheも自動で起動するように設定
sudo systemctl enable httpd.service

Apacheの自動起動が反映されていることを確認
sudo systemctl is-enabled httpd.service
スクリーンショット 2020-01-19 11.28.26.png

ファイアウォールの設定

セキュリティグループの80番を開ける

EC2インスタンスのセキュリティグループをクリック
スクリーンショット 2020-01-19 14.09.07.png

「インバウンド」をクリックし、SSH(ポート番号22)しか表示されていないことを確認
スクリーンショット 2020-01-19 14.12.15.png

「編集」 → 「ルールの追加」をクリック
スクリーンショット 2020-01-19 14.13.45.png
スクリーンショット 2020-01-19 14.14.38.png

以下の通り設定し、「保存」をクリック
スクリーンショット 2020-01-19 14.19.04.png

EC2インスタンスのIPアドレスをブラウザで開き、HTTP通信ができていることを確認
スクリーンショット 2020-01-19 14.22.07.png

Elastic IPアドレスを紐付ける

「Elastic IP」をクリック
スクリーンショット 2020-01-19 14.36.40.png

「Elastic IPアドレスの割り当て」をクリック
スクリーンショット 2020-01-19 14.38.54.png

「割り当て」をクリック
スクリーンショット 2020-01-19 14.41.03.png

「このElastic IPアドレスを関連付ける」をクリック
スクリーンショット 2020-01-19 14.44.49.png

以下の通り設定し、「関連付ける」をクリック

インスタンス:作成したEC2インスタンス
プライベートIPアドレス:EC2インスタンスに設定したプライベートIPアドレス
スクリーンショット 2020-01-19 14.47.56.png

割り当てたIPアドレスををブラウザで開き、Apacheのページが表示されていることを確認
スクリーンショット 2020-01-19 14.59.25.png

スクリーンショット 2020-01-19 15.01.27.png

おまけ(Webサーバーの片付け方)

Elastic IPアドレスの開放

Elastic IPアドレスを選択し、「アクション」 → 「Elastic IPアドレスの関連付けの解除」をクリック
スクリーンショット 2020-01-19 15.17.13.png

「関連付け解除」をクリック
スクリーンショット 2020-01-19 15.28.40.png

「アクション」 → 「Elastic IPアドレスの解放」をクリック
スクリーンショット 2020-01-19 15.30.07.png

「解放」をクリック
スクリーンショット 2020-01-19 15.32.07.png

EC2インスタンスの停止

「インスタンス」をクリック
スクリーンショット 2020-01-19 15.34.29.png

「アクション」 → 「インスタンスの状態」 → 「停止」をクリック
スクリーンショット 2020-01-19 15.36.45.png

「停止する」をクリック
スクリーンショット 2020-01-19 15.38.57.png

インスタンスが停止したことを確認
スクリーンショット 2020-01-19 15.42.00.png

参考

AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした