AWS（EC2）を立ち上げてPHPを動かす話

>この記事は、[North Detail Advent Calendar 2019](https://qiita.com/advent-calendar/2019/northdetail) の23日目の記事です。

>2020/10/26 追記
>本記事は、NorthDetail ブログにも投稿しています。
>https://www.northdetail.co.jp/blog/484

##はじめに
AWSのECのインスタンスを立ち上げて、PHPを動かして行きます。
ハンズオン形式なので興味のある方は是非この機会に試してみてはいかがでしょうか。
はじめにインスタンスを作成します。ここでいうインスタンスとは、仮想サーバーのことです。
レンタルサーバー（オンプレミス）との違いは、仮想サーバーは従量課金制であるため、使った分だけ料金の支払いで済みます。
（今回は無料のインスタンスを使用するため料金はかかりません。）
立ち上げたインスタンスにソフトウェアをインストールするためにssh接続を行います。
インスタンスをwebサーバーとして動かすためにApacheをインストールします。
最後にPHPをインストールし、インスタンスの中でPHPを動かします。
##注意
⚠️実際にWeb上で立ち上がってしまうので、自己責任でお願いします。
##準備するもの
・PC（Macのターミナルを使います）
・AWSのアカウント
##手順
1.インスタンスの作成
2.インスタンスにssh接続
3.Apacheをインストール
4.PHPをインストール
##1.インスタンスの作成
1.AWSにログイン
2.ヘッダーの「サービス」→コンピューティング配下の「EC2」をクリック
<img width="826" alt="画像１.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/23cd4f5f-c13b-021c-8762-93bed58e6c20.png">

3.EC2ダッシュボードが表示されるので、左側のメニューバーの「インスタンス」をクリック
4.「インスタンス作成ボタン」が表示されるのでクリック
<img width="1323" alt="画像2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/b36458ef-6af1-aedf-7e81-694839e62610.png">
5.インスタンスの作成画面が表示
6.「クイックスタート」の一番上にある、**Amazon Linux 2 AMI (HVM), SSD Volume Type**の「選択」ボタンを押下（AWSのアカウントを作成して１年以内であれば無料で作成できます。）
<img width="1399" alt="画像3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/154b1521-f5fb-70a6-b469-b3127e31923b.png">
7.インスタンスタイプの選択画面が表示されるので、タイプが**t2.micro**に選択されているのを確認し、「確認と作成」ボタンを押下
<img width="1417" alt="画像4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/a7035755-2aba-c581-c5d9-9b24a5610ae4.png">
8.インスタンス作成の確認画面が表示されるので、右下の「起動」ボタンを押下
9.下記のような画面が表示されるので、「新しいキーペアの作成」を選択後、キーペア名を入力して「キーペアのダウンロード」を押下、その後「インスタンスの作成」を押下
（ダウンロードした「○○○○.pem」はデスクトップに移動してください。）
（すでにキーペアを作成している場合は、「既存のキーペアの選択」を選択しても問題ないです）
<img width="898" alt="画像5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/2515e121-0d82-6369-1c89-d58d756cf1ba.png">
10.作成が完了すると、インスタンス一覧画面が表示
　インスタンスの状態が「running」になっていれば成功です！
<img width="1399" alt="画像6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/65fd09f9-07a5-1b13-8236-381a8e3dae9e.png">

##2.インスタンスにssh接続
※手順1.インスタンスの立ち上げの続き
1.作成したインスタンスを選択し、「接続」ボタンを押下
2.インスタンスへの接続画面が表示されるので、目を通しておく
　今回はスタンドアロン SSH クライアントで作成したインスタンスにssh接続して行きます
　・macを使用している場合は、下記の画像の「3.」と「4.」のみで接続が可能
　・winを使用している場合は、下記の画像の「1.」に記載のある「PuTTY を使用した接続」を行わなければならない
<img width="973" alt="画像7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/c344ba46-16e5-c1b5-98b8-b139aba8d2fb.png">
3.アプリケーションの「ターミナル」を起動します
4.ダウンロードした.pemのあるディレクトリに移動

```bash
$ cd ~/Desktop  #ダウンロードした.pemファイルをデスクトップに移動していた場合
```

5.pemファイルの権限を「所有者　読み込み権限」に設定

```bash
$ chmod 400 {設定したキーペア名}.pem
```

6.インスタンスにssh接続

```bash
$ ssh -i "設定したキーペア名.pem" ec2-user@{下記画像の「パブリックDNS」}
```

<img width="862" alt="画像13_指摘.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/23ca20ef-aa19-51e1-0489-d9eef882dd40.png">

7.（yes or no）と聞かれるので、「yes」と入力
8.ターミナルの左側が`[ec2-user@{プライベートip} ~]$`になっていればssh接続が成功！
### 接続できない..
・カレントディレクトリ配下にpemファイルの存在を確認
・pemのパーミッションが合っているか

```bash
$ ll
-r--------@  1 daichi.sugiyama  staff  1111 11 11 00:00 hogeyama.pem 
```

##3.Apacheをインストール
※手順2.インスタンスにssh接続の続きの続き
1.Apacheをインストール
　色々聞かれると思いますがy＋enterで良いです

```bash
$ sudo yum update
$ sudo yum install httpd
```

「完了しました!」と表示されれば成功
2.Apacheを起動

```bash
$ sudo systemctl start httpd
```

3.Apacheの状態を確認 
　「active (running)」と色がついて表示されていれば成功です

```bash
$ sudo systemctl status httpd
```

4.「パブリックDNS」をコピーしブラウザで検索
　ポートが開いていないため、***何も表示されません*** 
　続いてポートを開きます
　※パブリックDNSは手順2.インスタンスにssh接続の「6.インスタンスにssh接続」を参照
5.EC2ダッシュボードの、左側のメニューバーの「セキュリティグループ」をクリック
<img width="1418" alt="画像8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/04443414-0d6b-9872-b338-6e4dbbc12d56.png">

6.グループ名「launch-wizard-1」を選択
※初めてインスタンスを立ち上げた場合、「launch-wizard-1」が用意されています。
　何度かインスタンスを立ち上げている場合、作成したインスタンスに対応したセキュリティーグループを選択してください。
　（私は複数のインスタンスを作成していたので「launch-wizard-4」を選択）
　セキュリティーグループの確認方法は左側の「インスタンス」クリックし、グループ名で確認できます。
7.画面下のインバウンドをクリックし、「編集ボタン」を押下
<img width="1428" alt="画像9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/becc48e0-5021-6c42-80d1-4f2c51860fbe.png">

8.インバウンドのルール編集画面が表示されるので、「ルールの追加」ボタンを押下
9.タイプをHTTPに選択し、「保存」ボタンを押下
<img width="1266" alt="画像10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/2cf127ea-43f6-ecef-64c9-b7b2034e4156.png">

10.「4.」と同じくIPをコピーして検索し、下記の画面が表示されていれば成功です！
<img width="1409" alt="スクリーンショット 2019-12-15 13.17.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/648bcbcd-71e3-2214-d473-7ec9b3f30b64.png">

##4.PHPをインストール
※インスタンスにssh接続した状態で行ってください
素直に`yum install php`だと古いバージョンのphpがインストールされてしまうので、
remiを使って最新バージョンのphp7.4をインストールして行きます。
1.remiを追加し、PHPをインストール
※１行づつコピーして実行してください

```bash
$ sudo wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo rpm -ivh epel-release-latest-7.noarch.rpm
$ sudo yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ sudo yum-config-manager --enable remi-php74
$ sudo yum install -y php74 php74-php php74-php-fpm
$ sudo ln -s /usr/bin/php74 /usr/bin/php
```

以下のように表示されれば、インストール成功です！

```bash
$ php -v
PHP 7.4.1 (cli) (built: Dec 17 2019 16:35:58) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
```

Apacheに適応させるために再起動

```bash
$ sudo systemctl reload httpd
```

2.PHPが正常に動作しているのかを確認するために、PHPファイルを作成

```bash
$ cd /var/www/html/
$ sudo touch index.php 
```

3.PHPファイルを編集

```bash
$ sudo vi index.php
```

キーボードのIを押下し、「INSERT」モードに設置
下記のコードを入力

```php:/var/www/html/index.php
<?php
echo "Hello World!";
```
キーボードのescを押下し、`:wq`を入力しenter
4.再度パブリックDNSを検索をして、下記のように画面が表示されていれば成功です！
<img width="180" alt="スクリーンショット 2019-12-15 14.26.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536932/a7a18ab8-c5da-beef-bd9d-1e0cf6375887.png">

##まとめ
いかがでしたでしょうか。
無事、EC2で立ち上げたインスタンスをwebサーバーとしてPHPファイルを実行できたと思います。
追加でMySQLをインストールして、WordPressやLaravelを動かすことができます。
（当初はLaravelを立ち上げまで書こうと思ったのですが、記事を書いている間で断念しました…)

##明日は
「North Detail Advent Calendar」 24日目は @kuroishi-myk さんです！ :santa: