初めての AWS で Laravel API をデプロイしてみた！ - 第 2 弾：サーバー接続編

# 1. はじめに
私は2023年10月より、内定直結型エンジニア学習プログラム「アプレンティス」に2期生として参加しています。

https://apprentice.jp/

AWS について学んだので、Laravel API を AWS でデプロイする方法についてまとめました。
AWS に初めて触れる方の参考になれば幸いです。

### シリーズ一覧
長編になっているので、複数の記事に分けて公開しています。
本記事はその第 2 弾です。

1. [サーバー設置編](https://qiita.com/mosyaneko/items/9b0a55e4b6338801e873)
2. サーバー接続編 ★本記事!!
3. [IP アドレス編](https://qiita.com/mosyaneko/items/0788e1011b792f137d5b)
4. [データベース編](https://qiita.com/mosyaneko/items/182438555c7d23e5a3e9)
5. [アプリケーション起動編](https://qiita.com/mosyaneko/items/f221be0fc56c270ee5fe)
6. [Webレイヤ冗長化編](https://qiita.com/mosyaneko/items/b85d0e7bb633a42eb9e4)
7. [SSL 化編](https://qiita.com/mosyaneko/items/d6c6b63c35f9868858be)

# 目次
[1.はじめに](#1-はじめに)
[2.EC2 インスタンスに接続](#2-EC2インスタンスに接続)
[3.Apache のインストール](#3-Apacheのインストール)
[4.ファイアウォールの設定](#4-ファイアウォールの設定)

# 2. EC2インスタンスに接続
### 秘密鍵の権限変更
`chmod` コマンドで、秘密鍵ファイルの権限を厳しくします。これをしておかないと、鍵を利用できないようです。
`chmod 600 <ファイルへのパス>`
今回私は分かりやすいようにデスクトップに置いたので、
`chmod 600 ~/Desktop/aws-and-infra-ssh-key.pem`
となります。本来はデスクトップではなく、隠しフォルダに置いておくといいと思います。

### EC2 インスタンスのパブリック IP アドレスを確認
作成した EC2 インスタンスをチェックし、概要欄に記載されている「パブリック IPv4 アドレス」をコピーしておきます。
![スクリーンショット 2024-02-14 5.52.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/a328865f-e6ae-2db3-0839-d78030c52cea.png)

### ターミナルから SSH 接続
私の PC は Mac なので、以下は Mac でのログイン方法です。
ターミナルを開きます。私は iTerm2 を使っているので、そちらを使用します。
以下のコマンドで、EC2 インスタンスにログインすることができます。
`ssh -i <秘密鍵ファイルへのパス> ec2-user@<パブリック IP>`
![スクリーンショット 2024-02-14 6.10.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/173f39ac-719b-bcf8-9cf5-1a74312a5f44.png)
トリさんが出てきたらログイン成功です！
ログアウトするときは`exit`コマンドを実行してください。
![スクリーンショット 2024-02-08 23.57.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/3616e427-1a57-6888-82bd-0517352fb0f1.png)

# 3. Apacheのインストール
EC2 インスタンスを Web サーバーとして稼働するためには、Web サーバーのソフトウェアを入れる必要があります。
今回は、Apache をインストールしていきます。
### EC2 インスタンスにログイン
EC2 インスタンスからログアウトしている場合は、再度ログイン。
EC2 インスタンスは停止・起動する毎にパブリック IP が変わってしまうため、改めて EC2 インスタンスの画面からパブリック IP をコピーしてきてください。
`ssh -i <秘密鍵ファイルへのパス> ec2-user@<パブリック IP>`
### yum のアップデート
Linux のパッケージ管理ツールである yum をアップデートします。
`sudo yum update -y`
`-y`オプションは、途中で yes/no の選択肢が出てきてアップデートが止まってしまう部分を、yes で強制的に進めるためのものです。
### Apache のインストール
Apache を構成する実行ファイルである httpd をインストールします。
`sudo yum -y install httpd`
### Apache の起動
指定したサービス（アプリケーション）を起動するコマンドで、Apache を起動します。
`sudo systemctl start httpd.service`
### Apache の起動状態の確認
下記コマンドで、起動できているか確認できます。
`sudo systemctl status httpd.service`

![スクリーンショット 2024-02-09 1.58.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/f289f0cc-11e6-3bbf-b051-cf8bfb3afb7b.png)
緑色で`active (running)`となっており、起動していることが確認できました。
### Apache が自動起動するように設定
サーバーが起動する時に Apache も起動するように設定します。
`sudo systemctl enable httpd.service`

以下のコマンドで、設定ができているか確認できます。
`sudo systemctl is-enabled httpd.service`

![スクリーンショット 2024-02-09 2.06.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/6257ec24-c49b-7d75-7128-3546d7abe93c.png)
`enabled`と表示されれば OK です。

# 11. ファイアウォールの設定
指定した通信のみ通す役割を果たすファイアウォールを設定します。
## セキュリティグループとは
AWS では、**セキュリティグループ**という設定が、ファイアウォールの役割を担っています。
### セキュリティグループの設定
EC2 ダッシュボードを開き、左メニューから「インスタンス」をクリックし、作成した EC2 インスタンスにチェックを入れます。

![スクリーンショット 2024-02-14 17.17.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/84f0c99b-550d-4201-ed5e-596c94e84bc8.png)
「セキュリティ」タブをクリックすると、「セキュリティグループ」が表示されるので、クリックして中身を確認してみます。

![スクリーンショット 2024-02-14 17.20.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/17efa17c-8fe7-d2c1-50f9-823ce55cbd0a.png)
このように、**インバウンドルール**が一つ登録されています。
現状、この EC2 インスタンスは SSH 通信のみ許可している状態です。
Web API として通信できるようにするためには、HTTP 通信を許可する必要があります。

「インバウンドルールを編集」から編集します。
まず、SSH 通信を許可する IP アドレスを、自身の PC のみに変更します。
Mac PC のパブリック IP アドレスを確認するコマンドは以下の通りです。
※クラウド上の EC2 インスタンス内ではなく、ご自身のローカル環境でコマンドを実行してください。
`curl inet-ip.info`
CIDR 表記にする必要があるので、末尾は`/32`としておきます。
![スクリーンショット 2024-02-14 17.38.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/1a05d1dd-6785-8dcf-a29e-8e30695470bf.png)

「ルールを追加」をクリックして、HTTP も設定します。
問題なければ、「ルールの保存」をクリックします。
![スクリーンショット 2024-02-14 18.40.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/b7c739f8-711a-0553-add3-ff7993f9c7e7.png)
これで、SSH 通信は自分の PC からのみ、HTTP 通信はどこからでもアクセスできるようになった。

### 実際にブラウザからアクセスできるのか確認する
EC2 インスタンスのパブリック IP をコピーし、ブラウザの検索欄に貼り付け、HTTP 通信でアクセスか確認する。
![スクリーンショット 2024-02-14 18.44.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070527/0c12772f-d4a3-a472-42f9-e95d0507b242.png)
このように、Apache の画面が表示されれば成功です！

本記事はここまでです。
次の記事はこちら↓
[初めての AWS で Laravel API をデプロイしてみた！ - 第 3 弾：IP アドレス編](https://qiita.com/mosyaneko/items/0788e1011b792f137d5b)