【2020年度版】EC2インスタンス立ち上げからApacheインストールしてhttpアクセスできるまでの流れ


概要

AWSでEC2インスタンスを利用することがそこそこの頻度であるのですが、その都度毎回調べながら初期設定を実施しています。
調べてる中で意外と表題のようにhttpでアクセスするまでの流れを一連で書かれてる記事がないので自分の忘備録用にまとめてみたいと思います。

EC2インスタンス作成フロー

このあたりはググれば記事もいっぱい出てくるし、そこまで難しくないのでサクッといきましょう。
今回テストなのでシンプルに選択していますが詳細設定は各自任意でお願いします。

「インスタンス起動」を選択


作成したいインスタンを選択
(今回は何でもいいのでAmazon Linuxを選択)


任意のインスタンスタイプを選択して「確認と作成」をクリック
(今回はテスト立ち上げなので無料枠ありのt2.micro)


「起動」をクリック


  • 「新しいキーペアの作成」を選択
  • キーペア名を任意で入力
  • 「キーペアのダウンロード」をクリック
  • インスタンスの作成をクリック

※ここでダウンロードしたpemファイル今後DLできないので厳重に管理


「インスンタンスの表示」を選択
これでインスタンスは作成完了

HTTPポート開放設定

いつも忘れがちな作業ですがセキュリティグループからアクセスしたいポートを開放する必要があります。

  • インスタンスページで対象のインスタンスを選択
  • 選択後、下部に表示される情報の「セキュリティ」タブを選択
  • セキュリティグループに表示されてるリンクを選択


  • 「インバウンドルール」タブを選択
  • 「インバウンドルールを編集」を選択


「ルールを追加」を選択


  • 「タイプ」を「http」
  • 「ソース」を「0.0.0.0/0」
  • 「ルールを保存」を選択

アパッチインストール

pemファイルの権限変更

まずsshでアクセスするためにpemファイルの権限を変更しましょう

# pemのあるフォルダーに移動
$ cd ./{pem-folder}

# pemファイルの権限変更
$ chmod 600 {pem-filename}.pem

({}の中身は任意で変更)

sshで接続

# pemのあるフォルダーに移動
$ cd ./{pem-folder}

# sshでec2インスタンスにログイン
$ ssh -i ./{pem-filename}.pem ec2-user@{Public IP or DNS}

({}の中身は任意で変更)

IPまたはDNSは対象のインスタンスを選択したら確認できます。

EC2でhttpdをインストール

$ sudo yum -y update

# アパッチインストール
$ sudo yum -y install httpd

# サービス起動
$ sudo service httpd start

# サーバ起動時に起動する設定
$ sudo chkconfig httpd on

このままだと /var/www/ ディレクトリの所有者が root なので所有者を ec2-user に変更


# ユーザー(この場合は ec2-user)を apache グループに追加します。
$ sudo usermod -a -G apache ec2-user

# /var/www とそのコンテンツのグループ所有権を apache グループに変更します。
$ sudo chown -R ec2-user:apache /var/www

# /var/www およびそのサブディレクトリのディレクトリ許可を変更してグループの書き込み許可を設定し、将来のサブディレクトリにグループ ID を設定します。
$ sudo chmod 2775 /var/www
$ find /var/www -type d -exec sudo chmod 2775 {} \;

# /var/www およびそのサブディレクトリのファイル許可を繰り返し変更してグループの書き込み許可を追加します。
$ find /var/www -type f -exec sudo chmod 0664 {} \;

権限を確認

$ cd /var/www/
$ ls -la

下記のようになっていれば問題なし

接続確認

  • FTPクライアントでテスト用のindex.htmlを /var/www/html/ にアップロード
  • http://{Public IP or DNS}/ にアクセス
  • アップロードしたindex.htmlが正常に表示されれば完了

以上でEC2をwebサーバとして簡易的に使うことができます。
実際の運用となるとEC2を単体で使うということは少なく他のサービス(CloudFrontとかRDSとか諸々)と連携するのでそのあたりもそのうちまとめれたらなーと思っております。