【AWS】EC2 による Linux 仮想サーバーの構築

# 概要

本項では、クラウドコンピューティングサービスである **[Amazon Web Service (AWS)](https://aws.amazon.com/jp/?nc2=h_lg)** を用いて Linux 仮想サーバーを構築する手順を紹介する。

# 環境
* MacBook Air (Retina, 13-inch, 2018)
* macOS Big Sur (Version 11.2.3)
* メモリ 16 GB

# AWS とは

* クラウドコンピューティングサービスのひとつである
* 200 以上のサービスがあり、組み合わせによって様々なアプリケーションやインフラを構築できる
* 社内 LAN など、外部のシステムやネットワークと連結することができる
* 料金体系がサービスの使用量に従う
* 学生は [AWS Educate](https://aws.amazon.com/jp/education/awseducate/) でクラウドスキルを無料で学習できる

# AWS アカウントの作成

AWS を利用するには [AWS アカウントを作成する](https://aws.amazon.com/jp/register-flow/) 必要である。登録時にクレジット/デビットカード番号が求められるが、サポートプランで**ベーシックプラン**を選択すれば無料でも使用できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612858/e3ab7cd5-778e-8bf7-99ce-a50ac0a459db.png)

# AWS をはじめてみよう

AWS は、[マネージメントコンソール](https://aws.amazon.com/jp/console/)を用いることで Web ブラウザの GUI で利用・操作することができる。マネージメントコンソールを開くと、利用可能なサービスの一覧を確認できる。

![スクリーンショット 2021-03-14 15.28.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612858/90757c58-106d-24bb-bcac-0bb930acbbbe.png)

今回は、サーバーに必要なもの（OS やソフトウェアなど）を一式でレンタルすることができる [**Amazon Elastic Compute Cloud (Amazon EC2)**](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/concepts.html) を上記の一覧から選択して、仮想サーバーを構築してみよう。

## EC2 を用いた仮想サーバー構築

マネージメントコンソールからEC2 を選択すると、**EC2 ダッシュボード**が表示される。EC2 では、AWS クラウドに作る仮想サーバーを**インスタンス**という。インスタンスには「設計図をもとに作成されたもの」という意味があり、EC2 にも仮想サーバーの設計図（[仮想イメージ](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instances-and-amis.html)）が用意されている。ここでは仮想イメージからインスタンスを作成する手順を紹介する。

![スクリーンショット 2021-03-14 15.36.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612858/ef9b7671-eb4f-e461-1e89-05de78518c1c.png)

### STEP1: Amazon マシンイメージ（AMI）を選択する

EC2 ダッシュボードで「インスタンスを起動」を選択すると、仮想イメージの一覧を確認できる。

![スクリーンショット 2021-03-14 15.45.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612858/c4cce3ee-f6d2-3e55-75ce-32c681cac5c9.png)

EC2 では仮想イメージのことを **[Amazon マシンイメージ（AMI）](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AMIs.html)** という。同じ AMI から作成されたインスタンスは、設定が全て同じの仮想サーバーである。今回は linux 仮想サーバーを構築するために **Amazon Linux 2 AMI (HVM), SSD Volume Type** を選択してみよう。

### STEP2: インスタンスタイプを選択する

次の画面ではインスタンスの性能が一覧で表示される。ここではインスタンスの CPU やメモリなどを選択できる。性能によって料金体系も異なるが、今回は毎月 750 時間まで無料で使用できる **t2.micro** を選択して、「確認と作成」ボタンをクリックしよう。ちなみに複数のインスタンスを同時に起動すると 750 時間が経過するのは早い。使い終わったインスタンスは不正利用防止の観点からも削除するのがよいだろう。

![スクリーンショット 2021-03-14 16.06.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612858/93c0dfaa-dadc-b488-108c-49400d938a36.png)

### STEP7: インスタンスタイプを作成する

次の画面で「起動」ボタンを押すとインスタンスが作成される。なお STEP3~STEP6 の各種設定は、インスタンス作成後でも可能である。

![スクリーンショット 2021-03-14 16.05.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612858/32074164-a11e-9388-c3c7-cc6faa1c6368.png)

### キーペアの作成

インスタンス作成時に**[キーペア](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-key-pairs.html)**に関するポップアップが表示される。キーペアはインスタンス接続時の認証に必要な鍵である。ローカルサーバーからの接続にも必要なため、ここで新しいキーペアを作成してくおくとよい。キーペアに適当な名前をつけてダウンロードしておこう。

![スクリーンショット 2021-03-14 16.29.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612858/52be6d3a-c9a1-cbb4-dd2f-7524a5bba431.png)


キーペアとはログイン認証時の公開鍵と秘密鍵のペアであり、ここでダウンロードされるのは秘密鍵である。RSA によって暗号化されており、拡張子は ``pem`` である。

```Demo2021.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAhiJeziiC9SC6TiWQfjOjp6vouPD7QwCdHzOLB/+FMD2/8U52
+F8JDcXHYulMTjyXhADy1WF+TKCgohh07GRPNrGU6LxnWLrTKnLkIPzFV/jnU6k1
GILmXI7yvtfWSC5tA5OUSWNUCeFYq8bh2RXKHVmrJxLYaIO/LoeFUFJou2qOgEA6

（不正アクセス防止のため中略）

Y+I9qQKBgBUsxReCPgvdRJ2Ba88muNgxWZnr437m9nESo0MMlDH6lNtd5UVOsNbJ
VDqg55p0Gy3Jepk8XZbpAybLmglyJY0cYU1GaCFQdw/NFtCnX8e7oYUGB20uMe40
Muyp+udJCx0MHP+y5hm80FabKziYF/5dQl2LMSZLgGMLO1gt/1YE
-----END RSA PRIVATE KEY-----
```

### インスタンス作成中

インスタンス作成中は次の画面が表示される。右下の「インスタンスの表示」ボタンを押すとインスタンスの状態を確認できる。
![スクリーンショット 2021-03-14 16.30.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612858/999eedd0-a535-527e-c61a-30961e2e30c4.png)
次の画面で、ステータスチェックが「初期化しています」から「2/2 のチェックに合格しました」に変わるとインスタンスが作成される。
![スクリーンショット 2021-03-14 16.33.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612858/127ec24c-01cd-8cc9-7e31-9a6ca53259d7.png)

## SSH 接続

**[SSH(Secure Shell)](https://www.kagoya.jp/howto/rentalserver/ssh/)** とは、ネットワークに接続された機器（今回はインスタンス）を遠隔操作し、管理するための手段をさす。ここでは MacBook から Amazon EC2 に SSH 接続する方法を紹介する。
まずは、接続先の EC2 インスタンスにチェックを入れて接続ボタンを押してみよう。
![スクリーンショット 2021-03-14 17.57.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612858/34660299-08ba-0aa7-c53a-e06c98ee3ee8.png)

次の画面で「SSH クライアント」タブを開くと、SSH 接続手順が説明されている。

### STEP1: SSH クライアントを開く

Mac に標準搭載されているターミナルを SSH クライアントソフトとして使用する。Windows の場合は[こちら](https://www.youtube.com/watch?v=xXuAX1ctg9E)の動画で詳しく解説されている。

![スクリーンショット 2021-03-14 17.58.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612858/7ae5e2f9-20ca-8194-6575-547ec8b040de.png)

### STEP2: プライベートキーファイルを見つける

プライベートキーファイルとはキーペアのうちの秘密鍵をさす。今回は先ほどダウンロードした ``Demo2021.pem`` を使用する。ユーザーのホームディレクトリに ``.ssh`` フォルダを作成し、新規フォルダに ``pem`` ファイルを移動してもよい。

```:ターミナル

mkdir ~/.ssh
mv Demo2021.pem ~/.ssh
cd ~/.ssh
```

### STEP3: 必要に応じてキーが公開されていないことを確認する

[chmod コマンド](https://qiita.com/ntkgcj/items/6450e25c5564ccaa1b95)でキーファイルの権限を設定する。

```:ターミナル
chmod 400 Demo2021.pem
```

ちなみにキーファイルが保護されていない場合、以下のような警告が表示されて SSH 接続できない。・

```:ターミナル
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
```

### STEP4: プライベートキーファイルを見つける

次のコマンドを実行すると SSH 接続が完了する。

```:ターミナル
ssh -i "Demo2021.pem" ec2-user@ec2-18-183-11-87.ap-northeast-1.compute.amazonaws.com
```

次のように表示されれば SSH 接続は成功している。

```:ターミナル
The authenticity of host 'ec2-18-183-11-87.ap-northeast-1.compute.amazonaws.com (18.183.11.87)' can't be established.
ECDSA key fingerprint is SHA256:gyQ0V6rZ8KDgET/yROzqJvUy59Elo9wvkuWoNcqniWI.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ec2-18-183-11-87.ap-northeast-1.compute.amazonaws.com,18.183.11.87' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-172-31-0-200 ~]$ 
```

## パッケージのアップデート

デフォルトでインストールされているパッケージが最新でない場合があるため、次のコマンドでアップデートしておくとよい。（すべて最新版の場合は ``No packages marked for update`` と表示される。）
AWS 利用者は一般ユーザーであるため ``yum`` を実行できないが、``sudo`` コマンドによってルートユーザーの権限をもつことで実行できる。
``yum`` は Red Hat 系の [Linux ディストリビューション](https://eng-entrance.com/linux-distribution-compare)で使われているパッケージ管理ソフトである。

```:ターミナル
[ec2-user@ip-172-31-0-200 ~]$ sudo yum update
```

## Python 3 のダウンロード

次のコマンドで Python3 をダウンロードする。（[参考](https://qiita.com/kenta1984/items/2403ad9cb240522f6d1e)）

```:ターミナル
[ec2-user@ip-172-31-0-200 ~]$ sudo yum install python3 -y
```

## Docker のダウンロード

次のコマンドで Docker をダウンロードする。（[参考](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/docker-basics.html)）

```:ターミナル
[ec2-user@ip-172-31-0-200 ~]$ sudo amazon-linux-extras install docker
```

## SSH 接続の終了

ターミナルで ``logout`` と実行する。

# 参考図書

* [図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書](https://www.amazon.co.jp/%E5%9B%B3%E8%A7%A3%E5%8D%B3%E6%88%A6%E5%8A%9B-Amazon-Web-Services%E3%81%AE%E3%81%97%E3%81%8F%E3%81%BF%E3%81%A8%E6%8A%80%E8%A1%93%E3%81%8C%E3%81%93%E3%82%8C1%E5%86%8A%E3%81%A7%E3%81%97%E3%81%A3%E3%81%8B%E3%82%8A%E3%82%8F%E3%81%8B%E3%82%8B%E6%95%99%E7%A7%91%E6%9B%B8-%E5%B0%8F%E7%AC%A0%E5%8E%9F/dp/4297108895)