kukai88

垢 - やったことを残す -

【まとめ】Amazon Web Services ー 基礎からのネットワーク & サーバー構築 ー

参考書



考察


  • サイト構築に必要な AWS の基礎サービスを学べる。
  • ハンズオン形式だから最後まで手を動かしながら読み進めれば簡易な web サイトを構築できる。
  • 図や操作画面のスクショが多いので、AWS を初めて触るユーザーには助かる。
  • ネットワークについての基礎知識の項目もあるので、ネットワークに不慣れなユーザーにも優しい。
  • Infrastructure as a Code やサーバー監視・運用ツールの紹介がちょろっとある。興味を持ったので別途触ってみる。

07. web サーバーに WordPress を導入する ー WordPress 構築ハンズオン ー

参考書



導入の流れ


  • 1. 実行環境の整備を行う(PHPMySQL をインストール、DB サーバーとの疎通確認)
  • 2. WordPress をダウンロードする


1. 実行環境の整備を行う


PHPMySQL のインストールする


  • 1. PHPMySQL などの実行に必要なライブラリをインストールします。
$ sudo yum -y install php php-mysql php-mbstring


DB サーバーとの疎通確認をする


  • 1. MySQL をインストールします。
$ sudo yum -y install mysql


補足:疎通確認には mysql コマンドを使って実際に DB サーバーにアクセスします。そのため、web サーバーにも MySQL をインストールする必要があります。

  • 2. DB サーバーにアクセスして疎通確認を行います。
$ mysql -h 10.0.2.10 -u wordpress -p
Enter password:
----------
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.62 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


→ h オプションを付けることで他のホストにある MySQL にもアクセスすることができました。(他ホストからのアクセスを許可する設定がアクセスされる側で必要になります。)

2. WordPress をダウンロードする


web サーバーに WordPress をダウンロードします。

  • 1. ローカル PC から、パブリックサブネット上のインスタンス(web サーバー)に SSH 接続します。
$ ssh -i my-key.pem ec2-user@{パブリックサブネットのインスタンスの固定パブリック IP アドレス}


$ cd ~
$ wget https://ja.wordpress.org/wordpress-4.8.2-ja.tar.gz


注意:WordPress の最新バージョンを取得してしまうと、Amazon Linux で対応できる PHP のバージョンを上回ってしまう可能性があります。リポジトリ追加など手間が生じるため、学習目的の場合、古めの WordPress をダウンロードすることをオススメします。

  • 3. ダウンロードした WordPress を展開します。
$ tar xzvf wordpress-4.8.2-ja.tar.gz


sudo cp -r /wordpress/* /var/www/html


  • 5. コピーしたファイルの所有者・所有グループを "apache:apache" に変更します。
sudo chown apache:apache /var/www/html -R


→ これで、ブラウザから web サーバーにアクセスすると WordPress の初期設定画面が表示されます。(以後の説明は割愛します。)

06. DB サーバーを構築する ー WordPress 構築ハンズオン ー

参考書



構築の流れ



1. MySQL をインストールする


パブリックサブネットのインスタンス(web サーバー)を踏み台にして、プライベートサブネットのインスタンスSSH 接続します。そこから、MySQL をインストールします。

  • 1. ローカル PC から、パブリックサブネット上のインスタンス(web サーバー)に SSH 接続します。
 ssh -i my-key.pem ec2-user@{パブリックサブネットのインスタンスの固定パブリック IP アドレス}


$ ssh -i my-key-db.pem ec2-user@10.0.2.10


$ sudo yum -y install mysql-server


  • 4. インストールした MySQL を起動して、root ユーザーのパスワードを変更しておきます。
$ sudo service mysqld start
---------
Initializing MySQL database:  Installing MySQL system tables...
190519 22:51:52 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
190519 22:51:52 [Note] /usr/libexec/mysql55/mysqld (mysqld 5.5.62) starting as process 25366 ...
OK
Filling help tables...
190519 22:51:52 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
190519 22:51:52 [Note] /usr/libexec/mysql55/mysqld (mysqld 5.5.62) starting as process 25373 ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/libexec/mysql55/mysqladmin -u root password 'new-password'
/usr/libexec/mysql55/mysqladmin -u root -h ip-10-0-2-10 password 'new-password'

Alternatively you can run:
/usr/libexec/mysql55/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/libexec/mysql55/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

                                                           [  OK  ]
Starting mysqld:                                           [  OK  ]


上記の起動時のメッセージ内に「root ユーザのパスワードをセットして下さい」とメッセージが表示されています。

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/libexec/mysql55/mysqladmin -u root password 'new-password'
/usr/libexec/mysql55/mysqladmin -u root -h ip-10-0-2-10 password 'new-password'


記載されている内容に従って、root ユーザーのパスワードを変更しておきます。

$ mysqladmin -u root password
New password:
Confirm new password:


  • 5. サーバーを再起動した場合に、自動的に MySQL が起動するようにしておきます。
$ sudo chkconfig mysqld on


→ これで、プライベートサブネット上のインスタンスMySQL をインストールし、起動と簡単な初期設定が完了しました。(これで正式に DB サーバーとなりました。)

2. WordPress 用の DB を作成する


  • 1. MySQL にログインします。パスワードを入力してログインが完了すると、下のウェルカムメッセージが表示されます。
$ mysql -u root -p
Enter password:
----------
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.62 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


  • 2. DB を作成します。DB 名は「wordpress」とします。
mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
----------
Query OK, 1 row affected (0.00 sec)


  • 3. root 以外のユーザーを作成して、作成した DB への全ての権限を与えておきます。ユーザー名は「wordpress」、パスワードは「wordpresspasswd」とします。
mysql> grant all on wordpress.* to wordpress@"%" identified by 'wordpresspasswd';
----------
Query OK, 0 rows affected (0.00 sec)


  • 4. ユーザー作成・権限の設定を反映させます。
mysql> flush privileges;
----------
Query OK, 0 rows affected (0.00 sec)

05. NAT(Network Address Translation)を構築する ー WordPress 構築ハンズオン ー

参考書



NAT を構築する意義は?



プライベートサブネットにインスタンスを作成し、このインスタンスMySQL をインストールし、DB サーバーとして利用しようとしています。
しかし、インターネットに繋がっていないため、プライベートサブネットのインスタンスMySQL のインストールをすることができません。
そこで、プライベートサブネット → インターネットへの片方向にだけアクセスを許可する、ということができる NAT を構築します。

構築の流れ



1. NAT ゲートウェイを作成する


  • 1. AWS コンソールマネジメントコンソールから「VPC」をクリックします。
  • 2. 左側のサイドメニューから「NAT ゲートウェイ」をクリックし、「NAT ゲートウェイの作成」をクリックします。
  • 3. NAT ゲートウェイの作成画面で、サブネットを「パブリックサブネット」、Elastic IP の割り当て ID は「新しい EIP の作成」をクリックすると Elastic IP アドレスが自動的に作成され、その ID が入力されます。これで「NAT ゲートウェイの作成」をクリックします。


2. プライベートサブネットのデフォルトゲートウェイを設定する


プライペートサブネットが利用しているルートテーブルは、デフォルトのルートテーブルなので、デフォルトのルートテーブルを編集します。

  • 1. AWS コンソールマネジメントコンソールから「VPC」をクリックします。
  • 2. 左側のサイドメニューから「ルートテーブル」をクリックし、ルートテーブル一覧画面から利用しているプライベートサブネットが利用しているルートテーブルをクリックします。
  • 3. 画面下部のルートタブ内にある「ルートの編集」をクリックし、送信先を「0.0.0.0/0」、ターゲットを「作成済みの NAT」として「ルートの保存」をクリックします。


→ これで、プライベートサブネットのデフォルトゲートウェイが NAT ゲートウェイに向くようになりました。

3. プライベートサブネットのインスタンス → インターネットに疎通確認をする


  • 1. ローカル PC から、パブリックサブネットのインスタンス(web サーバー)に SSH 接続します。
$ ssh -i my-key.pem ec2-user@{パブリックサブネットのインスタンスの固定パブリック IP アドレス}


$ ssh -i my-key-db.pem ec2-user@10.0.2.10


  • 3. プライベートサブネット上のインスタンスから curl コマンドを実行して疎通確認をします。
$ curl https://www.nikkeibp.co.jp
----------
<!DOCTYPE HTML>
<html lang="ja">
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#">
<meta name="description" content="日経BPは日本経済新聞グループの一員として、経営・技術・生活という3分野で主にビジネスパーソンに向けて事業を展開しています。その内容は、雑誌・書籍の出版事業、デジタル事業、展示会・セミナーなどのイベント事業、調査・コンサルティング事業など、多種多彩なメディアとサービスを駆使して、高付加価値の先端・専門情報を提供しています。">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<meta property="og:title" content="日経BP">
<meta property="og:description" content="日経BPは日本経済新聞グループの一員として、経営・技術・生活という3分野で主にビジネスパーソンに向けて事業を展開しています。その内容は、雑誌・書籍の出版事業、デジタル事業、展示会・セミナーなどのイベント事業、調査・コンサルティング事業など、多種多彩なメディアとサービスを駆使して、高付加価値の先端・専門情報を提供しています。">
<meta property="og:type" content="website">
<meta property="og:url" content="https://www.nikkeibp.co.jp/">
<meta property="og:image" content="https://www.nikkeibp.co.jp/images/bplogo/og-logo.png">
<title>日経BP</title>
...


→ これで、プライベートサブネットのインスタンスからインターネットに接続できていることが確認できました。

04. プライベートサブネットを構築する ー WordPress 構築ハンズオン ー

参考書



プライペートサブネットを構築する意義



インターネットに接続できるパブリックサブネットとは違い、プライペートサブネットにはパブリック IP アドレスを与えないためインターネットに接続できません。
そのため、サーバーを隠蔽することが可能で、セキュリティを向上させることができます。

構築の流れ


  • 1. プライベートサブネットを作成する
  • 2. ルートテーブルの設定をする
  • 3. 作成したプライペートサブネットにインスタンス(仮想サーバー)を作成する
  • 4. ping コマンドで疎通確認を実施する
  • 5. プライベートサブネット上のインスタンスSSH 接続する


1. プライベートサブネットを作成する


参照:https://kukai88.hatenablog.com/entry/2019/05/17/083314

2. ルートテーブルの設定をする


プライペートサブネットはインターネットに接続する必要がないため、デフォルトのルートテーブルが適用されたままで問題ありません。プライベートサブネット専用のルートテーブルを作成する必要はありません。

補足 1:プライベートサブネット専用のルートテーブルを作成しても問題ありません。(もちろんですが、設定内容はデフォルトのルートテーブルと同じになります。)
補足 2:デフォルトルートテーブルの設定は、送信先「10.0.0.0/16」、ターゲット「local」になっていて、10.0.0.0/16 宛の通信をすべてのサブネット(10.0.1.0/24, 10.0.2.0/24, ... = local)に送るという意味です。

3. インスタンス(仮想サーバー)を作成する


  • 1. AWS コンソールマネジメントコンソールから「EC2」をクリックします。
  • 2. 左側のサイドメニューから「インスタンス」をクリックし、「インスタンスの作成」をクリックします。
  • 3. Amazon マシンイメージ(AMI)一覧から「Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type」にある「選択」をクリックします。
  • 4. インスタンス一覧からタイプが「t2.micro(無料利用枠の対象)」を選択し、「次の手順」をクリックします。
  • 5. インスタンスの詳細設定画面で、ネットワークを「既に作成済みの VPC」、サブネットを「既に作成済みのプライベートサブネット」、自動割り当てパブリック IP を「無効化」、プライマリ IP を「10.0.2.10」にして「次の手順」をクリックします。
  • 6. ストレージの設定画面で、特にデフォルト値のままで問題ないため、そのまま「次の手順」をクリックします。
  • 7. タグの入力画面で「タグの追加」をクリックして、キーを「Name」、値を「DBサーバー」として「次の手順」をクリックします。
  • 8. セキュリティグループの設定画面で、セキュリティグループ名を「DB-SG」にして、SSHTCP / 22 番ポート / 送信元:カスタム - 0.0.0.0/0)と MYSQL/Aurora(TCP / 3306 番ポート / 送信元:任意の場所 - 0.0.0.0/0)を追加して「確認と作成」をクリックします。
  • 9. 確認画面が表示されるので「起動」をクリックします。


「起動」をクリックすると、SSH 接続をするためのキーペアを作成するポップアップが表示されます。

  • 10. 「新しいキーペアの作成」を選択し、キーペア名を「my-key-db」にして「キーペアのダウンロード」をクリックします。
  • 11. キーペアのダンロードが完了後、「インスタンスの作成」をクリックします。


→ これでパブリックサブネット上にインスタンスを作成できました。作成には数十秒〜数分かかります。

注意:インスタンスを使用していない場合は「停止」することもできますが、停止してもストレージ Amazon Elastic Block Store(EBS)の容量を確保したままなので課金されてしまいます。

4. ping コマンドで疎通確認を実施する

ファイアウォールの設定


ping コマンドは ICMP プロトコルが通るように設定しなければなりません。ルートテーブルを編集して ICMP プロトコルの通過を許可します。

  • 1. AWS コンソールマネジメントコンソールから「EC2」をクリックします。
  • 2. 左側のサイドメニューにある「セキュリティグループ」をクリックして、セキュリティグループ一覧を表示します。
  • 3. グループ名が「DB-SG」のセキュリティグループを選択し、画面下部のインバウンドタブ内にある「編集」をクリックします。
  • 4. インバウンドのルールの編集画面で「ルールの追加」をクリックし、タイプを「すべての ICMP - IPv4」、プロトコルを「ICMP」、ポート範囲を「0 - 65535」、ソースを「カスタム - 0.0.0.0/0」として「保存」をクリックします。


パブリックサブネット上のインスタンス(web サーバー)→ プライベートサブネット上のインスタンスに疎通確認を実施する


  • 1. ローカル PC からパブリックサブネット上のインスタンス(web サーバー)に SSH 接続をする
  • 2. ping コマンドをプライベートサブネット上のインスタンスに送信する
$ ping -c 5 10.0.2.10
----------
PING 10.0.2.10 (10.0.2.10) 56(84) bytes of data.
64 bytes from 10.0.2.10: icmp_seq=1 ttl=255 time=0.396 ms
64 bytes from 10.0.2.10: icmp_seq=2 ttl=255 time=0.492 ms
64 bytes from 10.0.2.10: icmp_seq=3 ttl=255 time=0.643 ms
64 bytes from 10.0.2.10: icmp_seq=4 ttl=255 time=0.439 ms
64 bytes from 10.0.2.10: icmp_seq=5 ttl=255 time=0.420 ms

--- 10.0.2.10 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4074ms
rtt min/avg/max/mdev = 0.396/0.478/0.643/0.088 ms


→ "0% packet loss" となっているので、プライペートサブネット上のインスタンスへの疎通確認ができました。

5. プライベートサブネット上のインスタンス(仮想サーバー)に SSH 接続する


プライベートサブネットはインターネットに接続されていません。ローカル PC から SSH 接続したい場合はどのようにすればよいのでしょうか?
それは、インターネットに接続されているパブリックサブネット上のインスタンスを踏み台にして、プライベートサブネット上のインスタンスSSH 接続をします。

ローカル PC にあるプライベートサブネットのインスタンス用の秘密鍵を web サーバーにアップロードする


$ scp -i my-key.pem my-key-db.pem ec2-user@{パブリックサブネット上のインスタンスのパブリックドメイン名}:~/


  • 2. パブリックサブネットのインスタンスSSH 接続してファイルがアップロードされたのか確認します。
$ ssh -i my-key.pem ec2-user@{パブリックサブネットのインスタンスの固定パブリック IP アドレス}
$ ls -l
----------
-r-------- 1 ec2-user ec2-user     1696  5月 19 00:47 my-key-db.pem


→ これで、プライベートサブネット上のインスタンス秘密鍵をアップロードできました。

プライベートサブネットのインスタンスSSH 接続する


  • 接続 1
    • 接続元:ローカル PC
    • 接続先:パブリックサブネット上のインスタンス(web サーバー)← 踏み台
  • 接続 2


  • 1. ローカル PC から、パブリックサブネット上のインスタンス(web サーバー)に SSH 接続します。
$ ssh -i my-key.pem ec2-user@{パブリックサブネットのインスタンスの固定パブリック IP アドレス}


$ ssh -i my-key-db.pem ec2-user@10.0.2.10


→ これで、パブリックサブネット上のインスタンス(web サーバー)を踏み台にして、ローカル PC から、プライベートサブネット上のインスタンスSSH 接続できました。

telnet を利用して webサーバーと HTTP 通信をしてみる

参考書



環境


  • macOS Mojave
  • node.js v10.15.3


流れ



1. インスタンスに配置するプログラムを作成する

var http = require("http");
http.createServer(function (req, res) {
    var data = {
        RequestHeader: req.headers
    };

    if (req.method == 'GET') {
        response(res, data);
    } else if (req.method == 'POST') {
        req.on('data', function (body) {
            data.RequestBody = body.toString();
            req.on('end', function () {
                response(res, data);
            });
        });
    }
}).listen(8080);

function response(res, data) {
    var json = JSON.stringify(data);
    res.writeHead(200, { 'Content-Type': 'application/json', 'Content-Length': json.length });
    res.end(json);
}


2. インスタンスに node.js をインストールする


$ ssh -i my-key.pem ec2-user@{インスタンスの固定グローバル IP アドレス}


$ wget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz


  • 3. インストールしたファイルを展開します。
$ tar Jxvf node-v10.15.3-linux-x64.tar.xz


  • 4. パスを通します。(/bin ディレクトリ直下に実行ファイルが存在します。)
export PATH=$PATH:~/node-v10.15.3-linux-x64/bin


3. ファイアウォールの設定をする


作成したプログラムは 8080 番ポートで待ち受けるようにしています。したがって、8080 番ポートを開けます。

  • 1. AWS コンソールマネジメントコンソールから「EC2」をクリックします。
  • 2. 左側のサイドメニューから「セキュリティグループ」をクリックし、グループ名が「WEB-SG」のセキュリティグループを選択します。
  • 3. 画面下部のインバウンドタブ内にある「編集」をクリックします。
  • 4. 「ルールの追加」をクリックして行を追加し、タイプを「カスタム TCP ルール」、ポート範囲を「8080」、ソースを「カスタム → 0.0.0.0/0」として「保存」をクリックします。


4. 作成したプログラムをインスタンス上に配置する


ローカル PC 上で作成したプログラムファイルを Cyberduck を利用して AWSインスタンス上に配置します。

  • 1. Cyberduck を起動して、SMTP(ポート番号 22 番)で接続します。
  • 2. ローカル PC にあるプログラムファイルをドラッグ & ドロップで Cyberduck に移動させます。


→ これで、ローカル PC にあるプログラムファイルを AWSインスタンス上に配置することができました。

5. プログラムを実行する


  • 1. node コマンドで app.js を実行することで、クライアント上に web サーバー(8080 番ポート)が起動します。
$ node app.js


→ プロンプトからは何も応答がありませんが、これで web サーバー(8080 番ポート)が起動しています。実際にリクエストを投げてみます。

  • 2. インスタンスSSH 接続しているプロンプトとは別画面で新しくプロンプトを開きます。
  • 3. GET と POST のそれぞれのリクエストを投げてみます。


GET リクエストとレスポンス

telnet {インスタンスの固定グローバル IP アドレス} 8080
---------
Trying xxx.xxx.xxx.xxx...
Connected to ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.
Escape character is '^]'.

// ↓ こちらで入力した部分
GET / HTTP/1.0
User-Agent: OreOreAgent
// ↑ こちらで入力した部分

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 46
Date: Sat, 18 May 2019 06:30:58 GMT
Connection: close

{"RequestHeader":{"user-agent":"OreOreAgent"}}Connection closed by foreign host.


POST リクエストとレスポンス

telnet {インスタンスの固定グローバル IP アドレス} 8080
----------
Trying xxx.xxx.xxx.xxx...
POST / HConnected to ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.

// ↓ こちらで入力した部分
Escape character is '^]'.
POST / HTTP/1.0
User-Agent: OreOreAgent
Content-Length: 3

abc
// ↑ こちらで入力した部分

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 87
Date: Sat, 18 May 2019 06:32:22 GMT
Connection: close

{"RequestHeader":{"user-agent":"OreOreAgent","content-length":"3"},"RequestBody":"abc"}Connection closed by foreign host.

03. インスタンスに Web サーバーを構築する ー WordPress 構築ハンズオン ー

参考書



構築の流れ



1. Apache HTTP Server をインストールする


$ sudo yum -y install httpd
  • 3. インスタンスを再起動した際に、Apache HTTP Server が自動的に起動されるように設定します。
$ sudo chkconfig httpd on
  • 4. httpd を受け付けているポートが開いているか確認します。
$ sudo lsof -i -n -P | grep :80
httpd     23496     root    4u  IPv6  34370      0t0  TCP *:80 (LISTEN)
httpd     23498   apache    4u  IPv6  34370      0t0  TCP *:80 (LISTEN)
httpd     23499   apache    4u  IPv6  34370      0t0  TCP *:80 (LISTEN)
httpd     23500   apache    4u  IPv6  34370      0t0  TCP *:80 (LISTEN)
httpd     23501   apache    4u  IPv6  34370      0t0  TCP *:80 (LISTEN)
httpd     23502   apache    4u  IPv6  34370      0t0  TCP *:80 (LISTEN)
httpd     23503   apache    4u  IPv6  34370      0t0  TCP *:80 (LISTEN)
httpd     23504   apache    4u  IPv6  34370      0t0  TCP *:80 (LISTEN)
httpd     23505   apache    4u  IPv6  34370      0t0  TCP *:80 (LISTEN)


→ これでインスタンスApache HTTP Server をインストールできました。また、ポートが開いていることを確認できました。しかし、このままでは Web サーバーにアクセスできません。

補足:httpd は全て IPv6 の 80番ポートばかりですが、IPv6 の仕様で IPv4 にも応答するようになっています。

2. ファイアフォールを設定する


  • 1. AWS コンソールマネジメントコンソールから「EC2」をクリックします。
  • 2. 左側のサイドメニューから「セキュリティグループ」をクリックし、インスタンスを作成する際に作成したセキュリティグループ(今回だと、グループ名が「WEB-SG」のもの)を選択します。
  • 3. 画面下部のインバウンドタブ内にある「編集」をクリックして、「ルールの追加」をクリックします。
  • 4. 追加された行に、タイプを「カスタム TCP」、プロトコルを「TCP」、ポート範囲を「80」、ソースを「0.0.0.0/0」として「保存」をクリックします。


→ これで、ファイアウォールを HTTP 通信を許可する設定に変更しました。その結果、「http://{インスタンスの固定パブリック IP アドレス}/」とすれば Web サーバーにアクセスすることができます。

3. DNS サーバーを構築する


Amazon VPC には VPC 上で名前解決をするオプションがあります。この機能を ON にすると、VPC 上のインスタンスドメイン名が設定されます。

DNS を構築する


  • 1. AWS コンソールマネジメントコンソールから「VPC」をクリックします。
  • 2. 左側のサイドメニューから「VPC」をクリックし、作成した VPC を選択し、アクションメニュー内から「DNS ホスト名の編集」をクリックします。
  • 3. DNS ホスト名の編集画面で、DNS ホスト名の「有効化」にチェックを入れて「保存」をクリックします。


→ これで、インスタンス(Web サーバー)にドメイン名が設定されました。確認してみます。

  • 4. AWS コンソールマネジメントコンソールから「EC2」をクリックします。
  • 5. 左側のサイドメニューから「インスタンス」をクリックし、Web サーバー用のインスタンスを選択します。
  • 6. 画面下部の説明タブ内にある「パブリック DNS (IPv4)」に設定されたドメイン名(xxx.xxx.xxx.amazonaws.com)を確認できます。


→ このドメイン名でアクセスしても IP アドレスでアクセスしたときと同様のページが表示されます。適切に名前解決されていることが確認できます。

nslookup で DNS を確認する



ドメイン名 → IP アドレス、を確認(正引き)

$ nslookup xxx.xxx.xxx.amazonaws.com
Server:		10.0.0.2
Address:	10.0.0.2#53

Non-authoritative answer:
Name:	xxx.xxx.xxx.amazonaws.com
Address: 10.0.1.10 


IP アドレス → ドメイン名、を確認(逆引き)

$ nslookup xxx.xxx.xxx.xxx
Server:		10.0.0.2
Address:	10.0.0.2#53

Non-authoritative answer:
xxx.xxx.xxx.xxx.in-addr.arpa	name = xxx.xxx.xxx.compute.amazonaws.com.

Authoritative answers can be found from: