IPv4を持たないEC2上のWebサーバーをCloudFront VPC Originを使って構築する
タイオフィスの三並です。
今回は、Public IPv4アドレスを使用せずにWebサーバーを構築する方法を紹介します。CloudFrontのVPC Origin機能を活用し、EC2インスタンスにIPv6のみを割り当てる構成です。
AWSがパブリックIPv4アドレスの料金を引き上げたことで、パブリックIPv4を使用しないWebサーバーの構築の需要がありました。CloudFrontのVPC Origin機能を使うことで、パブリックIPv4アドレスなしでもIPv4環境からのアクセスを受け付けるWebサーバーを構築できます。また、CloudFront側はパブリックなIPv4を持っているので、IPv4環境のブラウザからのアクセスが可能になっています。今回はこの方法を紹介します。
また、EC2インスタンスにはIPv6アドレスを割り当てることで、SSMからのSSH接続も可能になります。
本記事は、Tinnakornさんがタイ語で書いた記事を元に調整をして日本語化しています。
インスタンス名などで、接頭語として tinnakorn- と書かれている部分はそのまま使用しています。
アーキテクチャ図
全体の構成は以下の通りです。

注意事項: WebサーバーはIPv6のみを持つため、IPv4環境からの直接SSH接続はできません。ファイルのアップロードや管理には別の方法が必要です。このブログではこのファイルアップロード方法は紹介しないです。(もっとも簡単な方法はS3経由でファイルをアップする方法かなと思います)
前提条件
この設定は以下の前提で設定していきます。
- AWSアカウントが準備済みであること
- Singapore regionを使用すること (Tokyo Regionでも全く同じように設定できると思います)
CloudFront VPC Originがサポートされているリージョンの詳細は、以下のAWSドキュメントを参照してください。一部のリージョンではVPC Originが動かないので注意が必要です。
Supported AWS Regions for VPC origins
VPCの作成
今回はSingapore regionで作業を進めます。
VPCの新規作成
AWSマネジメントコンソールで「VPC」を検索して選択します。

左側のメニューから「Your VPCs」を選択します。

「Create VPC」をクリックします。

VPC設定
Create VPC画面で以下の設定を行います。
- Resources to create:
VPC and more - Name tag auto-generation [✅ Auto-generate]:
tinnakorn-test-ipv6-vpc(任意の名前を入力してください。ただし、システムが自動的に-vpcを末尾に追加します) - IPv4 CIDR block:
192.168.0.0/16(使用したいネットワーク範囲を入力) - IPv6 CIDR block:
Amazon-provided IPv6 CIDR block
注意: VPCに割り当てるネットワーク範囲を指定します。192.168.0.0/16は、192.168.0.0 - 192.168.255.255の65536個のIPアドレスを意味します。

続けて以下を設定します。
- Number of Availability Zones (AZs):
1 - Number of public subnets:
1 - Number of private subnets:
0 - 「Customize subnets CIDR blocks」をクリック
- Public subnet CIDR block in ap-southeast-1a:
192.168.0.0/24(IPv4 CIDR blockと整合性を取ってください)

残りの設定を行います。
- Egress only internet gateway:
No - NAT gateways ($):
None - VPC endpoints:
None - DNS options:
✅ Enable DNS hostnames、✅ Enable DNS resolution - 「Create VPC」をクリック

「View VPC」をクリックします。

VPCの作成が完了すると、以下のような画面が表示されます。

作成されたリソースの確認
VPC作成時に自動的に作成されたリソースは以下の通りです。
| Function | ID |
|---|---|
| VPC | tinnakorn-test-ipv6-vpc |
| Subnets | tinnakorn-test-ipv6-subnet-public1-ap-southeast-1a |
| Route Table | tinnakorn-test-ipv6-rtb-public |
| Internet Gateway | tinnakorn-test-ipv6-igw |
それぞれのリソースを確認していきます。
Subnetsの確認
左側のメニューから「Subnets」をクリックし、VPC名から-vpcを除いて以下のように検索します。
[your_name]-subnet-public1-ap-southeast-1a

Route tablesの確認
左側のメニューから「Route Tables」をクリックし、VPC名から-vpcを除いて以下のように検索します。
[your_name]-rtb-public

Internet gatewaysの確認
左側のメニューから「Internet gateways」をクリックし、VPC名から-vpcを除いて以下のように検索します。
[your_name]-igw

Managed prefix listsの確認
左側のメニューから「Managed prefix lists」を選択します。複数のPrefix list IDが表示されます。

今回使用するPrefix listは以下の2つです。後の手順で使用するため、Prefix List IDをメモしておいてください。
| Address family | Prefix List ID | Prefix list name | 説明 |
|---|---|---|---|
| IPv6 | pl-000f9420a91cfc3b6 | com.amazonaws.ap-southeast-1.ipv6.ec2-instance-connect | SSH接続用 |
| IPv4 | pl-31a34658 | com.amazonaws.global.cloudfront.origin-facing | HTTP接続用 |

EC2インスタンスの作成(Webサーバー用)
EC2インスタンスの基本的な作成方法は、以下の記事を参考にしてください。ただし、Network settingsの設定は本記事の手順に従ってください。
EC2インスタンスの設定例
EC2インスタンスの作成では、以下の設定を行います。Singapore regionで作成してください。
Region:
SingaporeEC2 Instance
Name and tags
Name:tinnakorn-test-ipv6-ec2(任意の名前を入力)Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):Amazon Linux 2023 kernel-6.1 AMI(デフォルト)Instance type
Instance type:t3.micro(デフォルト)Key pair (login)
Key pair name - required:Proceed without a key pair (Not recommended)(今回はKey pairを使用しません)Network settings (
) \color{red} 重要 VPC - required:
tinnakorn-test-ipv6-vpc(先ほど作成したVPCを選択)
Subnet: VPCを選択すると自動的に設定されます
Auto-assign public IP:Disable(Public IPv4アドレスを無効化)
Auto-assign IPv6 IP:Enable(IPv6を有効化)Firewall (security groups)
Create security group
Security group name - required:tinnakorn-test-ipv6-ec2(任意の名前を入力)
Description - required:tinnakorn-test-ipv6-ec2(任意の説明を入力)Inbound Security Group Rules
▼ Security group rule 1 (TCP, 22, com.amazonaws.ap-southeast-1.ipv6.ec2-instance-connect)
Type:ssh| Source type:Custom| Source:pl-000f9420a91cfc3b6(SSH用のManaged Prefix Listを指定)▼ Security group rule 2 (TCP, 80, com.amazonaws.global.cloudfront.origin-facing)
Type:HTTP| Source type:Custom| Source:pl-31a34658(HTTP用のManaged Prefix Listを指定)▼ Advanced network configuration
Assign Primary IPv6 IP:Yes() \color{red} 重要
Configure storage
1x8GiBgp3Root volume, 3000 IOPS, Not encrypted (デフォルト)
EC2インスタンスの作成が完了すると、以下のようにIPv6アドレスが表示されます。
IPv6 address: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx (実際のIPv6アドレスはインスタンス作成時にランダムに割り当てられます)
Public IPv4 addressは、Disableに設定したため表示されません。

EC2 Instance Connectでの接続
注意事項
今回作成したEC2インスタンスは、IPv6のみを使用していますが、EC2 Instance Connectを使用してTerminalに接続できます。
現時点では、Session ManagerはIPv6に対応していないため、EC2 Instance Connectを使用する必要があります。
接続手順
EC2インスタンスの画面で「Connect」をクリックします。

EC2 Instance Connectの設定を行います。
- 「EC2 Instance Connect」タブを選択
- 「IPv6 address」を選択
- Usernameに
rootを入力 - 「Connect」をクリック

接続に成功すると、以下のような画面が表示されます。

Apacheのインストールと設定
EC2 Instance ConnectのTerminalで以下のコマンドを実行します。
サーバーの更新
yum update -y
Apacheのインストール
yum install httpd -y
Apacheの起動
systemctl start httpd
テストファイルの作成
サーバーが正常に動作することを確認するため、シンプルなindex.htmlファイルを作成します。このファイルは/var/www/htmlディレクトリに配置されます。
echo "<html><body>test ipv6" > /var/www/html/index.html
動作確認
作成したHTMLファイルが正常に表示されるか確認します。
wget http://127.0.0.1/
実行結果(例)
以下のように200 OKが表示されれば、テストは成功です。
127.0.0.1は、ローカルホスト(IPv4)のloopback addressです。サーバーが自身にリクエストを送り、webサービスが動作しているか確認します。- サーバーが
200 OKで応答すれば、webサーバーが正常に動作し、ページを配信できていることを示します。
[root@ip-xx-xx-xx-xx ~]# wget http://127.0.0.1/
--2025-10-15 05:58:54-- http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22 [text/html]
Saving to: 'index.html'
index.html 100%[====================================================================================>] 22 --.-KB/s in 0s
2025-10-15 05:58:54 (4.02 MB/s) - 'index.html' saved [22/22]
[root@ip-xx-xx-xx-xx ~]#
ダウンロードしたファイルの削除
不要なので、wgetでダウンロードしたindex.htmlファイルを削除します。
rm -rf index.html
アクセスログの確認
Apacheのアクセスログを確認し、webサーバーへのアクセス記録を見ることができます。
less /var/log/httpd/access_log
実行結果(例)
以下のように、誰がアクセスしたか、どのページがリクエストされたか、どのような応答が返されたかを確認できます。
127.0.0.1 - - [15/Oct/2025:05:58:54 +0000] "GET / HTTP/1.1" 200 22 "-" "Wget/1.21.3"
/var/log/httpd/access_log (END)
CloudFront VPC Originの作成
まず、EC2インスタンスの画面で「Instance ARN」をコピーしておきます。

AWSマネジメントコンソールの検索ボックスで「CloudFront」を検索して選択します。

左側のメニューから「VPC origins」を選択し、「Create VPC origin」をクリックします。

Create VPC origin画面で以下の設定を行います。
- Name:
tinnakorn-test-ipv6-vpc-origin(任意の名前を入力) - Origin ARN:
arn:aws:ec2:ap-southeast-1:[aws-account-id]:instance/[instance-id](先ほどコピーしたInstance ARNを貼り付け) - Protocol:
HTTP only→ [HTTP port: 80] - 「Create VPC origin」をクリック

Statusが「Deploying」から「Deployed」に変わるまで待ちます(約10分程度)。Deployedになってから、次のDistribution作成手順に進んでください。

CloudFront Distributionの作成
左側のメニューから「Distributions」を選択し、「Create distribution」をクリックします。

Distributionの作成を開始します。
Step 1: Get started
- Distribution name:
tinnakorn-test-ipv6-cf - Description - optional:
tinnakorn-test-ipv6-cf - 「Next」をクリック

Step 2: Specify origin
Origin type
VPC origin
Origin
- VPC origin: 「Browse VPC origins」をクリック

先ほど作成したVPC originを検索して選択し、「Choose」をクリックします。

Originセクションに以下のように表示されます。
- VPC origin:
ip-xx-xx-xx-xx.ap-southeast-1.compute.internal - VPC origin ID:
ip-xx-xx-xx-xx.ap-southeast-1.compute.internal-xxxxxxxxxxx
「Origin settings」と「Cache settings」はデフォルトのままで構いません。「Next」をクリックします。

Step 3: Enable security
注意事項
セキュリティ保護を有効にする(WAFを使用する)かどうかは選択できますが、今回のデモでは有効にしません。
Enable security
- Web Application Firewall (WAF):
Do not enable security protections(セキュリティを強化したい場合は有効化することもできる) - 「Next」をクリック

WAFの詳細については、以下の記事を参考にしてください。
Step 4: Review and create
Step 1からStep 3までの設定を確認し、「Create distribution」をクリックします。
Distributionが作成されると、以下のような画面が表示されます。Deployが完了するまでしばらく待ちます。

動作確認
CloudFrontの画面で、Distribution domain nameのコピーアイコンをクリックしてURLをコピーします。

コピーしたDistribution domain nameをWebブラウザで開くと、以下のようにWebサイトが表示されます。
https://xxxxxxxxxxxxxx.cloudfront.net

Route 53でのホスト名設定
Route 53を使用してホスト名を設定することもできます。設定方法は以下の記事を参考にしてください。
まとめ
当初、CloudFrontのIPv6 Origin機能をテストする予定でしたが、EC2のIPv6 Originへの接続に失敗しました。そこでVPC Originを使用したところ、正常に動作したため、今回この方法を紹介しました。
また、2025年11月時点では、Thailand regionでVPC Origin機能はまだサポートされていません。サポートされているリージョンについては、以下のAWSドキュメントを参照してください。
Supported AWS Regions for VPC origins
CloudFront の VPC Origin を使用することで、EC2でIPv4を使用せずにWebサーバーを立ち上げることができ、IPv4分(月間約3.6USD)のコストを削減できます。







