インフラを知っていることでアプリのシステム全体が見える
オリジナルプロダクトの開発を進めるうえで、アプリはインフラ基盤の上で動作します。
今回はサービス全体の仕組みを理解する目的でインフラ構築にも取り組みました。
できるだけ図を使って整理し、各要素のつながりが分かりやすくなるように工夫しています。
公開されたネットワークと隠されたネットワーク
パブリックサブネット
公開されたネットワークとは、ユーザーから直接アクセス可能なネットワークのこと
例)https://example.com へのアクセス
プライベートサブネット
隠されたネットワークとは、外部から直接アクセスできないネットワークのこと
プライベートな空間となるためデータベースを設置している
| ネットワーク | 説明 | 具体例 |
|---|---|---|
| Webサーバー | Webサイトを提供する | 開発したアプリ、Apache、OS |
| データベースサーバー | データを保存する | MySQL、OS |
TCP/IP
構築したサーバーはネットワークにつなげて通信するため、それぞれのサーバーにIPアドレスという番号を振る必要がある
またドメイン名でアクセスする=DNSサーバーの設定も必要となる
ネットワークを構成するときの基本的な仕組み
①DNSサーバーにドメイン名とIPアドレスの対応を割り当てる
②IPアドレスを割り当て、データがルーターから出ていくように構成する
③ネットワークで使うIPアドレス範囲を定める
※NATゲートウェイ:方方向だけの通信を許す
DBからインターネットサーバーに接続は可能
サブネット
VPC仮想的なネットワークの領域
そのようなIPアドレス範囲を扱うかを指定する
EC2でサーバーを作る
起動した各サーバーの個体は「インスタンス」という
IPアドレス
「0.0.0.0」~「255.255.255.255」まで
ICANNという団体が一括管理している
パブリックIPアドレス
インターネットに接続する際使用されるIPアドレス
プライベートIPアドレス
社内LANやネットワークの実験時に使用されるIPアドレス
ネットワークを構築する
まずは簡単にAWSでネットワークを構築しました。
1.VPCを作成する
リージョンを選択する
例)AWSで一番使われている主要リージョンの1つ「オレゴン」
例)東京など
2. VPCをサブネットに分割する
パブックサブネットとプライベートサブネットを作成する
3.インターネット回線を引き込む
インターネットゲートウェイを作成、VPCにアタッチする
4.ルートテーブルを作成する
VPCと接続し、パブリックサブネットと関連付ける
「0.0.0.0/0」とインターネットゲートウェイを選択し、インターネット接続を有効化する

サーバーを構築する
インスタンスの作成
- Amazon Linux 2023(OS)を選択し、キーペア(EC2に接続するための鍵ファイル)を作成する
- パブリックIPアドレスを付与して、外部ネットワーク(自宅・職場)から EC2 に SSH 接続できるようにする
- SSHを使って遠隔からのログインで必要な設定をする
セキュリティグループ(EC2のファイアウォール)を作成する
SSHで接続する
RLoginでパブリックIPアドレスにSSHで接続する
インスタンスのパブリック IPv4 アドレスが接続先となる
Elastic IPを確保する
起動・停止を繰り返したいので、設定しました
別のIPアドレを割り当てられてしまうため、固定したいときはおすすめです
ポート番号の考え方
ファイヤウォールで接続制限となり、通してよいデータだけを通す
→ファイヤーウォールを設けることが効果的
セキュリティグループのインバウンドルールをクリック、インバウンドルールでポート22(SSH)だけ通信できる
| ポート番号 | サービス |
|---|---|
| :80 | HTTP |
| :443 | HTTPS |
| :22 | SSH |
| :3306 | MySQL |
IPアドレスは同じサービスを区別する
同じサーバー内で HTTP と HTTPS が混ざらないようにしている
ファイアウォールやセキュリティグループ設定で必要
AWS では
「443 を開ける」→ HTTPS が通る
「80 を閉じる」→ HTTP アクセスを止める
となり、「どのサービスを公開するか」=「どのポートを開けるか」で制御できる
ダイレクトの設定で必須になる
HTTP → HTTPS にリダイレクトする場合
- ユーザーが http://(→ポート 80)へアクセス
- Web サーバーが受け取る(80 番)
- https://(→443 番)へ 301 リダイレクト
→ このため、HTTPS を強制したい場合でも 80 番ポートは開けておく必要がある
ロードバランサ―もポート番号を見て振り分ける
AWS ALB(アプリケーションロードバランサー)
- リスナー 80 → 自動で443 へリダイレクト
- リスナー 443 → バックエンドEC2へ転送
Apache HTTP Serverのインストール
| サービス | デォルトポート番号 | 説明 |
|---|---|---|
| SSH | 220 | モート接続・サーバ管理用 |
| HTTP | 80 | Apahe(httpd)がブラウザからアクセスされる |
| HTTPS | 443 | 暗号化されたウェブ通信用 |
http://パブリックIP でアクセス可能になる
ドメイン
ドメイン名はDNSサーバーによってIPアドレスに変換され、接続される
Webサイトにアクセスする際、ドメイン名は裏でIPアドレスに変換されて通信が行われる
データベースの構築
インターネットから直接アクセスできないように構成されたサブネットにサーバーを配置することで、プライベートサブネットを構築する
セキュリティグループの設定
- ポート80(HTTP)と443(HTTPS)を開放(外部アクセス用)する
- ポート220(SSH)を開放(管理用、必要に応じて)する
- 独自ドメインを使いたい場合は、Route 53などのDNSサービスでドメインを取得し、パブリックIPに紐づける
- DNSレコード(Aレコード)を設定して、http://domein.com でアクセス可能にする
まとめ
HTTPで独自ドメインを使った安全なWebサイトを公開できました。
今回はAWSの操作よりも、各機能がどう連携しているかに焦点を当てました。
パブリックサブネットは外部公開用、プライベートサブネットは内部リソース用と役割を分けることで、セキュリティと効率を両立している仕組みを理解することができました。
また、今回パブリックサブネット1つに対して、プライベートサブネット2つ設置する理由については、
異なるアベイラビリティゾーン(AZ)に配置して、片方のAZが障害になってももう一方で稼働を継続できる運用にしています。
参考資料
http://domein.com でアクセスが可能になりました。
