📝 概要
こちらの投稿は2025 Japan AWS Jr.Championsの有志メンバーで作成した『30日間で主要AWSサービスを構築できるようになる』をテーマにした初学者向けのハンズオン問題集のDAY3になります!
問題集の趣旨や作成に至るまでの経緯は以下の記事をご覧いただければと思います。
https://qiita.com/satosato_kozakana/items/446971c2deca7e27d0aa
| 項目 | 内容 |
|---|---|
| 所要時間 | 約3時間 |
| メインサービス | Amazon VPC(VPC、Subnet、Route Table、Security Group、Internet Gateway、NAT Gateway、Elastic IP、Endpoint)、ALB(Application Load Balancer、Target Group) |
| 学べること | Amazon VPCの基礎知識とその役割、インターネットへの接続・インターネットからの接続の仕組み |
| 想定費用 | 約500円(※通信量により変動します) |
⚠️ 注意:以下のリソースを削除し忘れると課金が継続します。
🎯 課題内容
Amazon VPCの機能を利用して、ネットワーク空間を構築します。
📊 アーキテクチャ図
🔧 実装機能
-
EC2はPublic Subnet上に配置するとセキュリティリスクが高まるため、
Private Subnetに配置します。 - ALBはPublic Subnet上に配置することで、インターネットからPrivate SubnetのEC2に接続します。
- NAT GatewayをPublic Subnet上に配置することで、Private SubnetのEC2からインターネットに接続します。
- System Managerのセッションマネージャーを利用することで、AWS内部の通信を利用して安全にEC2に接続します。
上記を踏まえ、今回のハンズオンではこちらの機能について実装します。
- Private SubnetのEC2に、ALB経由でインターネットから接続できること
- Private SubnetのEC2に、セッションマネージャー経由で接続できること
- Private SubnetのEC2から、NAT Gateway経由でインターネットに接続できること
💡 実装のヒント
SubnetのCIDR割り当て方法
CIDRで指定したIPアドレスのうち、以下の5つはAWSにより予約されており使用できません
▼10.0.0.0/24でSubnetを作成した場合
| CIDR | 内容 |
|---|---|
| 10.0.0.0 | ネットワークアドレス |
| 10.0.0.1 | VPCルータ用のアドレス |
| 10.0.0.2 | DNSサーバのIPアドレス |
| 10.0.0.3 | 将来利用のためAWSが予約 |
| 10.0.0.255 | ブロードキャストアドレス |
例:10.0.0.0/24 の場合、利用可能なIPは 256 - 5 = 251個 です
EC2への接続方法
Systems Managerのセッションマネージャーという機能を使うと、AWS内部の安全な通信でEC2に接続することができます。
接続にあたり必要な設定(IAMロール、VPC Endpoint、Security Group)について調べてみましょう!
✅ 完成後のチェックポイント
- Systems Managerを利用してEC2に接続できる
- EC2からインターネットに接続できる
- インターネットからALB経由でEC2に接続できる
🔗 リファレンスリンク
🛠️ 解答・構築手順(クリックで開く)
解答と構築手順を見る
✅ ステップ1:Amazon VPC の作成
- AWS マネジメントコンソールを開く
- 「VPC」→「VPCを作成」
- IPv4 CIDR:
10.0.0.0/16 - VPC作成後に、右上の「アクション」→「VPCの設定を編集」
- 「DNS ホスト名を有効化」にチェックを入れる
✅ ステップ2:Subnet の作成
今回はAWSの推奨に従い、マルチAZ構成にします。
作成するSubnetは、計4つ(AZ-a × 2、AZ-c × 2)です。
▼Public Subnet:計2つ(AZ-a × 1、AZ-c × 1)
- 「サブネット」→「サブネットを作成」
- VPC:
ステップ1で作成したVPCを選択する - アベイラビリティゾーン:
アジアパシフィック(東京)/ap-northeast-1a、アジアパシフィック(東京)/ap-northeast-1c - IPv4 サブネット CIDR ブロック:
10.0.0.0/24、10.0.1.0/24
▼Private Subnet:計2つ(AZ-a × 1、AZ-c × 1)
- 「サブネット」→「サブネットを作成」
- VPC:
ステップ1で作成したVPCを選択する - アベイラビリティゾーン:
アジアパシフィック(東京)/ap-northeast-1a、アジアパシフィック(東京)/ap-northeast-1c - IPv4 サブネット CIDR ブロック:
10.0.2.0/24、10.0.3.0/24
✅ ステップ3:Route Tableの作成
ステップ2で作成したSubnetに紐づけるRoute Tableを作成します。
作成するRoute Tableは、計2つ(Public Subnet用×1、Private Subnet用×1)です。
▼Public Subnet用
- 「ルートテーブル」→「ルートテーブルを作成」
- VPC:
ステップ1で作成したVPCを選択する - Route Table作成後に、「サブネットの関連付け」→「サブネットの関連付けを編集」をクリックして、
ステップ2で作成したPublic Subnetにチェックを入れる
▼Private Subnet用
- 「ルートテーブル」→「ルートテーブルを作成」
- VPC:
ステップ1で作成したVPCを選択する - Route Table作成後に、「サブネットの関連付け」→「サブネットの関連付けを編集」をクリックして、
ステップ2で作成したPrivate Subnetにチェックを入れる
✅ ステップ4:Internet Gatewayの作成
インターネットへの出口となるInternet Gatewayを作成します。
- 「インターネットゲートウェイ」→「インターネットゲートウェイの作成」
- Internet Gateway作成後に、右上の「アクション」→「VPCにアタッチ」をクリックして、対象のVPCにチェックを入れる
- Public Subnet用のRoute Tableに、Internet Gateway向けの
0.0.0.0/0のルートを追加する
✅ ステップ5:NAT Gatewayの作成
Private Subnet内に配置されたリソースから、インターネットに接続するために、NAT Gateway を作成します。
今回は本番利用ではなく、ハンズオンを目的とした検証環境であるため、
コスト最適化の観点から NAT Gateway は 1 つのアベイラビリティゾーン(AZ)にのみ配置します。
もう一方の AZ にあるプライベートサブネットからのインターネットアクセスについては、
ルートテーブルを用いて NAT Gateway のある AZ 経由で通信できるように構成します。
- 「NAT ゲートウェイ」→「NAT ゲートウェイの作成」
- Subnet:
ステップ2で作成したPublic Subnet(10.0.0.0/24)を選択する - 接続タイプ:
パブリックを選択する - Elastic IP 割り当て ID:
Elastic IP を割り当てをクリックする -
ステップ3で作成したPrivate Subnet用Route Tableに、NAT Gateway向けの0.0.0.0/0のルートを追加する
✅ ステップ6:Security Groupの作成
EC2用、Endpoint用、ALB用に、計3つ作成します。
▼EC2用
- 「セキュリティグループ」→「セキュリティグループの作成」
- インバウンドルール:以下の許可ルールを追加する
- アウトバウンドルール:以下の許可ルールを追加する
・インバウンドルール
| タイプ | プロトコル | ポート | ソース |
|---|---|---|---|
| HTTP | TCP | 80 | ALB用のSecurity Group |
・アウトバウンド
| タイプ | プロトコル | ポート | 送信先 |
|---|---|---|---|
| HTTPS | TCP | 443 | Endpoint用のSecurity Group |
| HTTP | TCP | 80 | 0.0.0.0/0 |
| HTTPS | TCP | 443 | 0.0.0.0/0 |
▼Endpoint用
- 「セキュリティグループ」→「セキュリティグループの作成」
- インバウンドルール:以下の許可ルールを追加する
- アウトバウンドルール:デフォルトのまま
・インバウンドルール
| タイプ | プロトコル | ポート | ソース |
|---|---|---|---|
| HTTPS | TCP | 443 | EC2用のSecurity Group |
▼ALB用
- 「セキュリティグループ」→「セキュリティグループの作成」
- インバウンドルール:以下の許可ルールを追加する
- アウトバウンドルール:以下の許可ルールを追加する
・インバウンドルール
| タイプ | プロトコル | ポート | ソース |
|---|---|---|---|
| HTTP | TCP | 80 | 0.0.0.0/0 |
・アウトバウンドルール
| タイプ | プロトコル | ポート | 送信先 |
|---|---|---|---|
| HTTP | TCP | 80 | EC2用のSecurity Group |
✅ ステップ7:VPCエンドポイントの作成
Systems Manager用のVPCエンドポイントを2つ作成します。
サービスごとに作成する必要があるため、下記手順を繰り返してください。
- 「VPC」→「エンドポイント」→「エンドポイントを作成」
- タイプ:
AWSのサービスを選択する - サービス:
com.amazonaws.ap-northeast-1.ssmcom.amazonaws.ap-northeast-1.ec2
- VPC:
ステップ1で作成したVPCを選択する - サブネット:
ステップ2で作成したPrivate Subnetを選択する - セキュリティグループ:
ステップ6で作成したEndpoint用のSecurity Groupを選択する
✅ ステップ8:IAMロールの作成
Systems Managerに接続する権限をEC2に割り当てるためのIAMロールを作成します。
- 「IAM」→「ロール」→「ロールを作成」
- AWS のサービス:
EC2を選択する - 許可ポリシー:
AmazonSSMManagedInstanceCoreを選択する
✅ ステップ9:EC2の作成
今回はアクセス確認の目的で利用するため、無料利用枠のスペックで作成します。
マルチAZ構成のため作成するEC2は、計2つ(AZ-a × 1、AZ-c × 1)です。
1つずつ作成する必要があるため、下記手順を繰り返してください。
- 「EC2」→「インスタンスを作成」
- Amazon マシンイメージ:
Amazon Linux 2023を選択する - インスタンスタイプ:
t3.microを選択する - キーペア:
キーペアなしで続行を選択する
(Systems Manager接続の場合はキーペア不要) - ネットワーク設定:
-
ステップ1で作成したVPCを選択する -
ステップ2で作成したPrivate Subnet(10.0.0.0/24または10.0.1.0/24)を選択する -
ステップ6で作成したEC2用のSecurity Groupを選択する
-
- ストレージ設定:
1×8GiB gp3ルートボリュームを選択する - 高度な詳細:IAMインスタンスプロフィールで
ステップ8で作成したIAMロールを選択する
✅ ステップ10:Target GroupとALBの作成
EC2をTarget Groupに登録し、そのTarget GroupをALBに関連付けすることで、
インターネットからの通信リクエストをALBが受け取り、EC2に振り分けることができます。
▼Target Groupの作成
- 「EC2」→「ターゲットグループ」→「ターゲットグループを作成」
- ターゲットの種類:
インスタンスを選択する - プロトコル:
HTTPを選択する - ポート:
80を入力する - VPC:
ステップ1で作成したVPCを選択する - ヘルスチェックプロトコル:
HTTPを選択する - ヘルスチェックパス:
/を入力する - 「次へ」をクリックする
- 使用可能なインスタンス:
ステップ9で作成したEC2(2つ)にチェックを入れ、「保留中として以下を含める」をクリックする
▼ALBの作成
- 「EC2」→「ロードバランサー」→「ロードバランサーを作成」
- 種類:
Application Load Balancerを選択する - スキーム:
インターネット向けを選択する - VPC:
ステップ1で作成したVPCを選択する - サブネット:
Public Subnet(2つ)を選択する - セキュリティグループ:
ステップ6で作成したALB用のSecurity Groupを選択する - リスナー:
HTTP(ポート80)を選択する - ターゲットグループ:
ステップ10で作成したTarget Groupを選択する
✅ ステップ11:動作確認
- セッションマネージャーを使用してEC2に接続できるか?
- EC2からインターネットにアクセスできるか?
- ブラウザでALBのDNS名にアクセスし、EC2のレスポンスが返るか?
▼セッションマネージャーを使用してEC2に接続できるか?
- 「EC2」→「ロードバランサー」→「ロードバランサーを作成」
-
ステップ9で作成したEC2を選択する - 「接続」
- セッションが開始し、コマンド入力が可能な画面が表示されれば成功!
▼EC2からインターネットにアクセスできるか?
-
セッションマネージャーを使用してEC2に接続後、以下コマンドを実行する
- sudo dnf install -y curl
- curl https://www.google.com
-
GoogleトップページのHTMLが返ってくれば成功!
▼ブラウザでALBのDNS名にアクセスし、EC2のレスポンスが返るか?
-
ALBのDNS名を取得する
- 「EC2」→「ロードバランサー」→「ステップ10で作成したALB」
- 「詳細欄」のDNS名をコピーする
-
セッションマネージャーを使用してEC2に接続後、以下コマンドを実行する
- sudo dnf install -y httpd
- sudo systemctl enable httpd
- sudo systemctl start httpd
- echo "Welcome!!" | sudo tee /var/www/html/index.html
-
ご自身のPCでブラウザを開き、
http://<ALBのDNS名>にアクセス -
「Welcome!!」が表示されれば成功
🧹 片付け(リソース削除)
依存関係があるため、削除する際の順番に注意してください。
- EC2を削除
- IAMロールを削除
- Endpointを削除
- ALBを削除
- Target Groupを削除
- Security Groupを削除
- NAT Gatewayを削除
- Elastic IPを削除
- Internet Gatewayを削除(事前にVPCからデタッチする)
- Route Tableを削除(事前にSubnet関連付けを外す)
- Subnetを削除
- VPCを削除(VPC作成時にデフォルトで作成されたRoute Table、Security Groupは、このタイミングで削除されます。)
🏁 おつかれさまでした!
このハンズオンでは、ALBを使ってPrivate Subnetに配置したEC2にインターネットからアクセスする構成を構築しました。
また、NAT Gatewayによるインターネットアクセスや、Systems ManagerによるAWS内部の接続も確認できました。
この課題では VPCの複数機能を組み合わせて、AWSの基礎的なネットワーク構成が身につきます。
次回は、応用編としてVPC間接続(Transit Gateway) やAPI Gatewayとの連携 に挑戦してみましょう!




































