初心者AWS② Webサーバ構築 (EC2)　~ Linuxコマンドを添えて ~

https://qiita.com/k-mat438/items/a15bada39a4215a19563


これの続きです。

## EC2とは
*  EC2 (Elastic Compute Cloud)、直訳で弾力的なコンピューティングクラウド。柔軟で拡張性があるってことかな？
*  AWSクラウド上の仮想サーバーのこと
*  ここでいうインスタンスとは、EC2から建てられたサーバーのこと

## 構築手順
1. AMI(Amazon Machine Image)の選択 
1. インスタンスタイプの選択
1. ネットワーク設定
1. ストレージ設定
1. キーペアの作成（SSHアクセス用）
1. セキュリティグループの設定（ファイアウォール設定）
1. インスタンスの確認と起動
1. インスタンス詳細設定
1. SSH接続
1. サーバーのセットアップ

### AMI (Amazon Machine Image) とは
AMIとは、OSやソフトウェアが含まれたテンプレートです。EC2インスタンスにどのOSをインストールするかを選択します
* Amazon Linux, Ubuntu, Windowsなどが選択可能
* 自分でカスタマイズしたOSを入れることもできる

### インスタンスタイプとは
インスタンスタイプとはEC2インスタンスにどれくらいのリソース(CPU, メモリ,ストレージ, ネットワーク帯域)を割り当てるかを決めるもので、インスタンス(サーバー)がどのようなパフォーマンスを発揮できるかが決まります。


## インスタンス作成
* AMIの選択
![Screenshot 2024-09-29 at 15.02.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494258/d3716133-9a0b-cf90-1c43-dd3e309aafbe.png)

今回は無料枠かつ汎用性のある最新のAMIを使ってインスタンスを構築しようと思います。
* Amazon Linux 2023 AMI
  * 最新のAMI
  * x86とArm両方のアーキテクチャをサポート(パソコンのcpuとスマホ、タブレットのcpuの両方で動かすことができる)
  * Webサーバー、アプリケーションサーバー、データベースサーバーなど、様々な用途に適してる

他にも、.NET開発プロジェクトに特化したり、深層学習プロジェクトを迅速に開発するためのAMIもあります。

* インスタンスタイプについて
![Screenshot 2024-09-29 at 15.04.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494258/dfdc374f-403e-3631-ac98-be9fb54e85a1.png)

OSを決めたら(AMI)、次はインスタンスタイプ(CPUの性能、メモリ量、ストレージ容量、ネットワーク性能)を決めます
基本的にnano→micro→small→midium→large→xlarge→2xlarge......
みたいに性能が良くなっていきます。
今回もまた、無料枠のt2.micro.....
* ファミリー
  特定の用途や性能特性に最適化されたEC2インスタンスのグループ
* vCPU
  仮想CPUのことで、処理能力を示す指標
* メモリ
  RAMの容量
* 現行世代
  awsが推奨し最新のハードウェアと最適化を備えているか否か

<br>

* ネットワーク設定
  単純にどのネットワークにインスタンスを設置するかの話
  ![Screenshot 2024-09-29 at 15.08.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494258/b5d6edc7-d40c-09bf-e965-67efc95714e1.png)

* ストレージ設定
![Screenshot 2024-09-29 at 17.06.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494258/d8ea7420-0e2e-dd96-a801-bec805bd35ab.png)
EC2のストレージ設定です。

ちなみに、このストレージはAmazonの別のサービスである、EBS(Elastic Block Store)がデフォルトで使われています。パソコンでいう、ハードディスクのようにデータを永続的に保持し続け、後からストレージを増やせる柔軟性もあります。

* キーペア作成(SSH接続用)
![Screenshot 2024-09-29 at 15.25.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494258/83c5a89d-4086-0185-8f44-9a99a81d2720.png)

ssh接続するために作成します。（公開鍵認証方式ですね）

## SSHについて
* SSHとは
  * Secure Shellの略

今回、自分たちのパソコンからAWSのサーバーであるEC2に入ってそこでそのサーバーの設定を行います。そのため、自分のパソコンとEC2で安全に通信を行うためにsshという接続をします。
つまり、sshとは遠隔で他のコンピュータを操作する際に暗号化するプロトコルです。

実際にssh接続してみます
先ほど作成したキーペアの権限を変えて,ssh -iで繋げて、サーバーソフトをインストール!!
ここで、重要なコマンドを列挙します

```bash:bash
chmod 600 ~~~~~/xxxxxx.pem
```
chmodはファイルやディレクトリのアクセス権限を変更するために使います。
chmod xyzは
* x: 自分に対して
* y: グループに対して
* z: 他人に対して

０〜７の数字で権限を与えることができます。
読み取りが 4
書き込みが 2
実行権限が 1
で表現できます。ゆえに今回のコマンド chmod 600は
自分に対して、読み込み書き込みの権限を与えるという意味になります。

こうすることで、作成したキーでsshコマンドを使ってssh接続することが可能になります


```bash:bash
lsof -i -n -P
```
lsofはlist open filesの略で、システム上で開かれているファイルやネットワーク接続を一覧表示するために使います
* -i
  ネットワークソケット関連を表示、つまりサーバーが使用しているポート番号やIPアドレスに関連する情報を確認する
* -n
  IPアドレスを表示する
* -P
  ポート番号そのまま表示する



```bash:bash
systemctl start httpd.service
systemctl status httpd.service
systemctl enable httpd.service
systemctl is-enabled httpd.service
```


systemctlはsystemdというプロセス管理システムで使用されるコマンドです
EC2インスタンス内ではsudoをrootユーザーではないのでsudoをつけて実行してください
* start <サービス名>
サービスの起動を行います

* status <サービス名>
サービスの状態をこのコマンドで表示します
そのほかにも、起動時間、プロセス情報、リソース使用、プロセス構造を確認することができます。

![Screenshot 2024-10-02 at 22.51.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494258/08173791-04b8-a0e1-e237-87cf646ea380.png)



* enable <サービス名>

サーバーが起動した時にサービスが自動で起動するように設定できるコマンドです。
* is-enabled <サービス名>
自動起動するかしないかを確認するコマンドです。

![Screenshot 2024-10-02 at 22.54.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494258/27d4bf7e-d660-6872-e76a-e3a81034c286.png)


```bash:bash
ps axu | grep httpd
```
psコマンドは現在動作しているプロセスのリストを表示します
* a
  すべてのプロセスを表示するコマンド(他のユーザーのプロセスも表示)
* x
  端末を持たないプロセス（バックグラウンドで動作しているものなど）も表示
* u
  プロセスの所有者や CPU/メモリ使用率などの詳細情報を表示
  
さらに、このプロセスのリストから **grep** とパイプライン **|** を使うことで,検索したい情報を取得できます


余談ですが、psコマンドのオプションにUNIXオブション、BSDオプション(-)、GNUロングオプション(--)とあリマス。

ps aux  (UNIXオプション)とps -ef  (BSDオプション)はほぼ同じ内容を返します。



## ファイアウォールを設定する
* ファイアウォールとは簡単にいうと
FWとは外部ネットワークと内部ネットワークとの境界に設置され、設定ルールに基づいて通信の許可・拒否を判断するもの

現状だと

* AWSでのEC2設定でセキュリティグループ


作成時のセキュリティグループはインターネットからの接続はssh接続のみファイアウォールは通す設定です。ですが、それ以外はすべて通しません。

 ![Screenshot 2024-09-29 at 18.13.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494258/18dae336-74b8-dea6-6bb3-75cd589108c6.png)


これを(インバウンドルールに）httpのポート番号である80番を許可するように設定します。
そうすることで、EC2インスタンスがインターネット接続できるようになります。

はい、完成です。


## おわり

アウトプットすることで、理解がより深くなりました。
まだまだ、AWS編は続くので間違い等ございましたら、ご指摘していただけると幸いです。