IPv4を持たないEC2上のWebサーバーをCloudFront VPC Originを使って構築する

IPv4を持たないEC2上のWebサーバーをCloudFront VPC Originを使って構築する

CloudFront VPC Origin を利用してパブリック IPv4 なしで EC2 上に Web サーバーを作成する方法について、実際の使い方を交えながら内容を説明します。
2025.11.01

タイオフィスの三並です。

今回は、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- と書かれている部分はそのまま使用しています。

アーキテクチャ図

全体の構成は以下の通りです。

aws-diagram-vpc-origin-ipv6

注意事項: WebサーバーはIPv6のみを持つため、IPv4環境からの直接SSH接続はできません。ファイルのアップロードや管理には別の方法が必要です。このブログではこのファイルアップロード方法は紹介しないです。(もっとも簡単な方法はS3経由でファイルをアップする方法かなと思います)

前提条件

この設定は以下の前提で設定していきます。

  1. AWSアカウントが準備済みであること
  2. Singapore regionを使用すること (Tokyo Regionでも全く同じように設定できると思います)

CloudFront VPC Originがサポートされているリージョンの詳細は、以下のAWSドキュメントを参照してください。一部のリージョンではVPC Originが動かないので注意が必要です。

Supported AWS Regions for VPC origins

VPCの作成

今回はSingapore regionで作業を進めます。

VPCの新規作成

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

search_vpc-202510

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

menu_vpc-202510

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

button_vpc-202510

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アドレスを意味します。

create_vpc_cf-1

続けて以下を設定します。

  • 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と整合性を取ってください)

create_vpc_cf-2

残りの設定を行います。

  • Egress only internet gateway: No
  • NAT gateways ($): None
  • VPC endpoints: None
  • DNS options: ✅ Enable DNS hostnames✅ Enable DNS resolution
  • 「Create VPC」をクリック

create_vpc_cf-3

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

create_vpc_cf-4

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

create_vpc_cf-5

作成されたリソースの確認

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

check_vpc_cf-1

Route tablesの確認

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

[your_name]-rtb-public

check_vpc_cf-2

Internet gatewaysの確認

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

[your_name]-igw

check_vpc_cf-3

Managed prefix listsの確認

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

check_managed_prefix_lists-1

今回使用する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接続用

check_managed_prefix_lists-2

EC2インスタンスの作成(Webサーバー用)

EC2インスタンスの基本的な作成方法は、以下の記事を参考にしてください。ただし、Network settingsの設定は本記事の手順に従ってください。

https://dev.classmethod.jp/articles/how-to-install-amazon-linux-2023-on-ec2-jp/

EC2インスタンスの設定例

EC2インスタンスの作成では、以下の設定を行います。Singapore regionで作成してください。

Region: Singapore

EC2 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} 重要)

create_ec2_ipv6-1

Configure storage
1x 8 GiB gp3 Root volume, 3000 IOPS, Not encrypted (デフォルト)

EC2インスタンスの作成が完了すると、以下のようにIPv6アドレスが表示されます。

IPv6 address: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx (実際のIPv6アドレスはインスタンス作成時にランダムに割り当てられます)

Public IPv4 addressは、Disableに設定したため表示されません。

create_ec2_ipv6-2

EC2 Instance Connectでの接続

注意事項

今回作成したEC2インスタンスは、IPv6のみを使用していますが、EC2 Instance Connectを使用してTerminalに接続できます。

現時点では、Session ManagerはIPv6に対応していないため、EC2 Instance Connectを使用する必要があります。

接続手順

EC2インスタンスの画面で「Connect」をクリックします。

connect_ec2_with_ipv6-1

EC2 Instance Connectの設定を行います。

  • 「EC2 Instance Connect」タブを選択
  • 「IPv6 address」を選択
  • Usernameにrootを入力
  • 「Connect」をクリック

connect_ec2_with_ipv6-2

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

connect_ec2_with_ipv6-3

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サーバーが正常に動作し、ページを配信できていることを示します。
EC2 Instance Connect
[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

実行結果(例)

以下のように、誰がアクセスしたか、どのページがリクエストされたか、どのような応答が返されたかを確認できます。

EC2 Instance Connect
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」をコピーしておきます。

create_vpc_origin_cf-0

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

gdx51l6nlzp5jwiwut6c

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

create_vpc_origin_cf-1

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」をクリック

create_vpc_origin_cf-2

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

create_vpc_origin_cf-3

CloudFront Distributionの作成

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

jfughiypovdr22e32ewq

Distributionの作成を開始します。

Step 1: Get started

  • Distribution name: tinnakorn-test-ipv6-cf
  • Description - optional: tinnakorn-test-ipv6-cf
  • 「Next」をクリック

create_cf-1

Step 2: Specify origin

Origin type

  • VPC origin

Origin

  • VPC origin: 「Browse VPC origins」をクリック

create_cf-2

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

create_cf-3

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」をクリックします。

create_cf-4

Step 3: Enable security

注意事項

セキュリティ保護を有効にする(WAFを使用する)かどうかは選択できますが、今回のデモでは有効にしません。

Enable security

  • Web Application Firewall (WAF): Do not enable security protections (セキュリティを強化したい場合は有効化することもできる)
  • 「Next」をクリック

create_cf-5

WAFの詳細については、以下の記事を参考にしてください。

https://dev.classmethod.jp/articles/re-introduction-2022-aws-waf/

Step 4: Review and create

Step 1からStep 3までの設定を確認し、「Create distribution」をクリックします。

Distributionが作成されると、以下のような画面が表示されます。Deployが完了するまでしばらく待ちます。

create_cf-6

動作確認

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

create_cf-7

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

https://xxxxxxxxxxxxxx.cloudfront.net

create_cf-8

Route 53でのホスト名設定

Route 53を使用してホスト名を設定することもできます。設定方法は以下の記事を参考にしてください。

https://dev.classmethod.jp/articles/how-to-set-up-ssl-and-dns-on-cloudfront-using-acm-and-route53-jp/

まとめ

当初、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)のコストを削減できます。

関連記事

この記事をシェアする

FacebookHatena blogX

関連記事