【AWS環境構築手順】VPCとEC2を作成し、実際にアクセスしてみる

インフラ

こんにちは。Enjoy IT Life管理人の仁科(@nishina555)です。

今回はAWSに関する記事を紹介します。具体的にはHTTPやSSHでアクセスできるEC2をVPCに構築する手順について紹介します。
なお、AWSアカウントの準備はすでに完了している前提で話を進めます。

今回構築するAWS環境のイメージ図

こんな人にオススメの記事です
  • はじめてAWSを利用する方
  • AWSの概要を理解したい方
  • HTTP、SSHでアクセス可能なEC2インスタンスを作成したい方

VPCを作成する

AWSマネージメントコンソールでVPCを選択します。

『VPC』→『VPCの作成』を選択します。

必要事項を入力し、『作成』を選択します。

各項目の意味は以下の通りです。

  • 名前タグ: VPCの識別子
  • IPv4 CIDRブロック: VPCで利用するアドレスの範囲を記述。ブロックサイズは`/16`から`/24`の間までである必要がある。
  • Ipv6 CIDRブロック: Amazonが提供するIPv6 CIDRブロックをVPCに紐づけるかどうかの設定。
  • テナンシー: ハードウェアを占有(物理的に確保)に必要性があれば『専用』、特になければ『デフォルト』を選択

なお、IPv4 CIDR ブロックについてですが、/xxの値が小さいほどVPC内に割り当てられるプライベートIPの数が多くなります。

【図解】IPアドレスの仕組み(クラス分類からサブネットまで)

今回は例としてsample-devというVPCをIPv4 CIDRブロック10.0.0.0/16で作成しました。

インターネットゲートウェイを作成する

VPCの空間とインターネットの世界を結びつけるために必要な『インターネットゲートウェイ』と呼ばれるものを作成します。

『VPCダッシュボード』を開き、『インターネットゲートウェイ』→『インターネットゲートウェイの作成』を選択します。

『名前タグ』を入力し、『作成』を選択します。

今回はsample-gatewayというインターネットゲートウェイを作成しました。

VPCとインターネットゲートウェイを結びつける

VPCがインターネットゲートウェイを介してインターネットの世界とつながるには、VPCとインターネットゲートウェイを結びつける作業が必要です。この作業をアタッチと呼びます。

インターネットゲートウェイを作成した直後のsample-gatewayは以下のようにdetachedという状態になっています。

アタッチ対象のインターネットゲートウェイを選択し、『アクション』→『VPCにアタッチ』を選択します。

アタッチするVPCを指定し(今回の場合はsample-dev)、『アタッチ』を選択します。

以下のようにattachedになればOKです。

サブネットを作成する

次に、先ほど作成したVPCで利用するサブネットを作成していきます。

『VPCダッシュボード』を開き、『サブネット』→『サブネットの作成』を選択します。

必要事項を入力し、『作成』を選択します。

各項目の意味は以下の通りです。

  • 名前タグ: サブネットの識別子
  • VPC: サブネット作成対象のVPC
  • アベイラビリティゾーン: サブネットを作成するアベイラビリティゾーン。特に希望がなければ『指定なし』でOK
  • IPv4 CIDRブロック: サブネットで利用するアドレスの範囲を記述。ブロックサイズは`/16`から`/28`の間までである必要がある。

今回は例として、10.0.0.0/24public-subnetというサブネットを、先ほど作成したsample-devVPC内に用意するようにしました。

ルートテーブルを作成する

ルートテーブルとは通信の送信先をルール化したものです。
サブネットごとにルートテーブルを設定することでサブネットからの通信の送信先を制御できるようになります。

サブネットからの通信をインターネットへつなぐためにはルートテーブルを用意する必要があるため、まずはルートテーブルを作成していきます。

『VPCダッシュボード』を開き、『ルートテーブル』→『ルートテーブルの作成』を選択します。

必要事項を入力し、『作成』を選択します。

各項目の意味は以下の通りです。

  • 名前タグ: ルートテーブルの識別子
  • VPC: ルートテーブルを利用するVPC

今回は例として、public-routeというルートテーブルを、先ほど作成したsample-devVPC内に用意するようにしました。

ルートテーブルとサブネットを関連付ける

VPC内に存在するサブネットに先ほど作成したルートテーブルを適用させるため、ルートテーブルとサブネットの関連付けを行っていきます。

関連付け対象のルートテーブルを選択し、『サブネット関連付け』→『サブネットの関連付けを編集』を選択します。

関連付けしたいサブネットをチェックし、『保存』を選択します。

以下のようにルートテーブルにサブネットが紐づいていればOKです。

ルートテーブルを編集する

サブネットからの通信をインターネットへつなぐようにするため、ルートテーブルを編集します。

関連付け対象のルートテーブルを選択し、『ルート』→『ルートの編集』を選択します。

『ルートの追加』を選択し、以下の設定を追加します。

  • 送信先: 0.0.0.0/0
  • ターゲット: インターネットゲートウェイ

追加が完了したら『ルートの保存』を選択します。

0.0.0.0/0デフォルトルートと呼ばれ、すべてのネットワークを集約している意味を持ちます。
つまり、任意IPアドレスに対する通信の送信先がインターネットゲートウェイになるため、このルートテーブルが設定されたサブネットの通信は全てインターネットゲートウェイを向くようになります。

新しく追加したルートがactiveになっていればOKです。

セキュリティグループの作成をする

セキュリティグループとはグループ外との通信を制御するためのファイアウォールです。『インバウンド』と『アウトバウンド』の制御をすることができます。

EC2インスタンスの作成する過程でセキュリティグループが必要になるため、まずはセキュリティグループの準備を行います。

『VPCダッシュボード』を開き、『セキュリティグループ』→『セキュリティグループを作成』を選択します。

必要事項を入力し、『セキュリティグループを作成』を選択します。

各項目の意味は以下の通りです。

  • セキュリティグループ名: セキュリティグループの識別子
  • 説明: セキュリティグループの説明
  • VPC: セキュリティグループ作成対象のVPC
  • インバウンドルール: 外からの通信に対するルール
  • アウトバウンドルール: 外への通信に対するルール

今回はWebサーバー用のセキュリティグループのため、インバウンドルールで任意のアクセス元からのSSHとHTTPとHTTPSの許可、アウトバウンドルールで任意の送信先への許可を設定しました。

セキュリティグループ名はsample-webとし、先ほど作成したsample-devVPCで利用できるように設定しました。

任意のIPアドレスからSSH接続されるのを拒否したい場合は、SSHで許可するアクセス元を`自分のグローバルIPアドレス/32`とします。これで自分のみがSSH接続できるルールとなります。

EC2を作成する

AWSマネージメントコンソールでEC2を選択します。

『EC2ダッシュボード』を開き、『インスタンス』→『インスタンスの作成』を選択します。

インスタンスを作成する際のベースとなるマシンシメージ(AMI)を選択します。今回は『Amazon Linux2 AMI』を選択します。

インスタンスタイプの選択をします。今回は『t2.micro』を選択します。

インスタンスの詳細設定をします。
設定する内容はいくつかありますが、今回は以下の項目の設定をすればOKです。

  • ネットワーク: 事前に作成したVPC名
  • サブネット: 事前に作成したサブネット名
  • 自動割り当てパブリックIP: 『有効』(インターネットで直接インスタンスを参照できるようにするため)

ストレージの追加をします。今回は設定不要です。

タグの追加をします。今回は『Name』というキーに『sample-web』という値を設定しました。

セキュリティグループの設定をします。『既存のセキュリティグループを選択する』を選択し、先ほど作成したセキュリティグループにチェックをつけます。

以上でインスタンスの設定が完了です。
インスタンスの詳細確認後、問題がなければ『起動』を選択します。

『起動』を選択するとキーペアの設定画面が表示されます。
『新しいキーペアの作成』を選択し、任意のキーペア名を設定後、『キーペアのダウンロード』を選択します。

キーペアのダウンロード完了後、『作成』を選択します。

以下のようにインスタンスが作成され、ステータスチェックが全てパスされていればOKです。

動作確認

ここまでで冒頭で紹介したAWSの環境を構築することができました。

ここからは実際にEC2にSSHやHTTPでアクセスできるか確認をしていきます。

EC2にSSH接続できるか確認する

インスタンス作成時にダウンロードしたキーを利用してインスタンスにSSH接続できるか確認してみましょう。

SSH接続をする際に必要になるインスタンスのパブリックIPはインスタンスの詳細で確認ができます。

ダウンロードしたpemキーのパーミッションを変更し、以下のコマンドでEC2インスタンスにログインできればOKです。
なお、ec2-userは今回インスタンス作成時に利用したAmazon Linuxイメージの初期ユーザー名です。

$ cd /path/to/pemfile
$ chmod 600 sample-dev.pem
$ ssh -i sample-dev.pem ec2-user@[パブリックIP]

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

https://aws.amazon.com/amazon-linux-2/
1 package(s) needed for security, out of 16 available
Run "sudo yum update" to apply all updates.

EC2にブラウザからアクセスできるか確認する

EC2にnginxをインストールしてブラウザからのアクセスもできるか確認してみましょう。

インスタンスにログイン後、以下のコマンドを実行します。

### yumの更新
$ sudo yum update

### extrasで提供されているnginxの確認
$ amazon-linux-extras | grep nginx

38 nginx1 available [ =stable ]

### extrasからnginxをインストール
$ sudo amazon-linux-extras install nginx1

### バージョンの確認
$ nginx -v
→ バージョンが表示されていればOK

nginx version: nginx/1.16.1

### 起動
$ sudo systemctl start nginx

### プロセス確認
$ ps -ef |grep nginx
→ nginxのプロセスが実行されていればOK

root 22032 1 0 15:16 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 22034 22032 0 15:16 ? 00:00:00 nginx: worker process
ec2-user 22036 3738 0 15:16 pts/0 00:00:00 grep --color=auto nginx

### (必要であれば) 自動起動設定
$ sudo systemctl enable nginx

コマンド実行後、http://[パブリックIP]でアクセスし、ブラウザに以下の画面が表示されればOKです。

まとめ

以上でVPS、EC2を作成する手順について紹介を終わります。
この記事がいいなと思いましたらツイッター(@nishina555)のフォローもよろしくお願いします!