การสร้าง Web Server บน EC2 ที่ไม่มี Public IPv4 โดยใช้ CloudFront VPC Origin

การสร้าง Web Server บน EC2 ที่ไม่มี Public IPv4 โดยใช้ CloudFront VPC Origin

ในบทความนี้จะมาแนะนำวิธีการสร้าง Web Server บน EC2 ที่ไม่มี Public IPv4 โดยใช้ CloudFront VPC Origin โดยอธิบายเนื้อหาไปพร้อมกับการใช้งานจริงครับ
2025.10.31

สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ

ครั้งนี้จะมาแนะนำการตั้งค่า Web Server บน EC2 ที่ไม่มี Public IPv4 และสามารถเชื่อมต่อจากสภาพแวดล้อม IPv4 ได้โดยจะใช้งาน EC2 ร่วมกับ CloudFront

หลังจากที่ AWS มีการปรับขึ้นราคาของ IPv4 ทางเราก็อยากจะสร้าง Web Server ที่ไม่ต้องใช้ IPv4 ดูบ้าง
เราสามารถทำได้โดยใช้ฟีเจอร์ VPC Origin ของ CloudFront
นอกจากนี้ EC2 ยังสามารถใช้ IPv6 เพื่อให้สะดวกต่อการเชื่อมต่อผ่าน SSH ได้ด้วย

แผนผังโครงสร้าง (Architecture Diagram)

หมายเหตุ: Web Server มีเพียง IPv6 หากต้องการเชื่อมต่อ SSH จากสภาพแวดล้อมที่ใช้ IPv4 จะไม่สามารถทำได้โดยตรง
จึงจำเป็นต้องมีวิธีการอัปโหลดไฟล์หรือจัดการอื่นๆ เพิ่มเติม

โครงสร้างโดยรวมจะเป็นดังนี้:
aws-diagram-vpc-origin-ipv6

การสร้าง VPC

ครั้งนี้เราจะดำเนินการในรีเจี้ยน Singapore

ให้ค้นหาและเลือก VPC
search_vpc-202510

เลือก Your VPCs จากเมนูด้านซ้าย
menu_vpc-202510

คลิก Create VPC
button_vpc-202510

ก็จะเข้ามาที่หน้าจอ Create VPC แล้วตั้งค่า VPC settings ดังนี้
・Resources to create: VPC and more
・Name tag auto-generation [✅ Auto-generate]: tinnakorn-test-ipv6-vpc (ป้อนชื่อตามต้องการ แต่ต้องระวัง Prefix ส่วนท้าย เนื่องจากระบบจะเติม -vpc ต่อท้ายให้อัตโนมัติ โดยระหว่างป้อนชื่อให้สังเกตที่หน้าจอด้านขวาด้วย)
・IPv4 CIDR block: 192.168.0.0/16 (ป้อนช่วง Network ที่ต้องการ)
・IPv6 CIDR block: Amazon-provided IPv6 CIDR block

หมายเหตุ: กำหนดช่วงของ Network ที่คุณต้องการกำหนดให้กับ VPC ของคุณ
192.168.0.0/16 หมายถึงช่วงของ IP Address 65536 ตั้งแต่ 192.168.0.0 - 192.168.255.255

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

เมื่อสร้างเสร็จแล้วจะได้หน้าจอแบบนี้
create_vpc_cf-5

ตรวจสอบข้อมูลที่สร้างขึ้น

เมื่อสร้าง 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, Route tables และ Internet gateways กันครับ

ตรวจสอบ Subnets

คลิก Subnets จากเมนูด้านซ้าย แล้วค้นหาโดยป้อนชื่อเดียวกับ VPC แต่ให้ตัด Prefix -vpc ออกไป แล้วเติม Prefix ของ Subnets ดังนี้

[your_name]-subnet-public1-ap-southeast-1a

check_vpc_cf-1

ตรวจสอบ Route tables

คลิก Route Tables จากเมนูด้านซ้าย แล้วค้นหาโดยป้อนชื่อเดียวกับ VPC แต่ให้ตัด Prefix -vpc ออกไป แล้วเติม Prefix ของ Route tables ดังนี้

[your_name]-rtb-public

check_vpc_cf-2

ตรวจสอบ Internet gateways

คลิก Internet gateways จากเมนูด้านซ้าย แล้วค้นหาโดยป้อนชื่อเดียวกับ VPC แต่ให้ตัด Prefix -vpc ออกไป แล้วเติม Prefix ของ Internet gateways ดังนี้

[your_name]-igw

check_vpc_cf-3

ตรวจสอบ Managed prefix lists

เลือก Managed prefix lists จากเมนูด้านซ้าย ก็จะเห็น Prefix list ID อยู่หลายตัว
check_managed_prefix_lists-1

ซึ่งตัวที่จะใช้มีดังนี้

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 Instance สำหรับใช้เป็น Web Server

ดูตัวอย่างการสร้าง EC2 Instance ได้ที่ลิงก์ด้านล่างนี้ แต่สำหรับวิธีการกำหนด Network settings ให้คลิกดูที่หัวข้อย่อย ตัวอย่างการสร้าง EC2 Instance และกำหนด Network settings ของบทความนี้ เนื่องจากการกำหนดค่าต่างกัน
นอกจากนี้โปรดสร้าง EC2 Instance สำหรับใช้เป็น Web Server นี้ในรีเจี้ยน Singapore

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

เมื่ออ่านรายละเอียดด้านบนนี้เสร็จแล้ว มาดำเนินการสร้าง EC2 Instance กัน

ตัวอย่างการสร้าง EC2 Instance และกำหนด Network settings

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 (Default)

Instance type
Instance type: t3.micro (Default)

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 IPv6 ที่สร้างก่อนหน้านี้)
Subnet: เมื่อเลือก VPC แล้ว Subnet จะถูกเลือกโดยอัตโนมัติ
Auto-assign public IP: Disable (ปิดการใช้งาน Public IPv4 address)
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: com.amazonaws.ap-southeast-1.ipv6.ec2-instance-connectpl-000f9420a91cfc3b6 (ssh: ดึงข้อมูลจาก Managed Prefix List)
▼ Security group rule 2 (TCP, 80, com.amazonaws.global.cloudfront.origin-facing)
Type: HTTP | Source type: Custom | Source: com.amazonaws.global.cloudfront.origin-facingpl-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 (Default)

หลังจากสร้างและเข้ามาที่หน้าจอ EC2 Instance แล้ว จะเห็น IPv6 address ดังนี้
IPv6 address: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx (IPv6 address นี้จะได้จากการ Random หลังจากสร้าง Instance ครั้งแรก ซึ่งจะไม่เหมือนกับตัวอย่างนี้)
ส่วน Public IPv4 address จะไม่มี เนื่องจากเราตั้งค่าเป็น Disable
create_ec2_ipv6-2

การเชื่อมต่อไปยัง EC2 ผ่าน EC2 Instance Connect

เข้ามาที่หน้าจอ EC2 Instance แล้วเลือก 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

รันคำสั่งตามนี้ใน Terminal บน EC2 Instance Connect ดังนี้

คำสั่ง Update server ให้เป็นปัจจุบัน

yum update -y

คำสั่งติดตั้ง Apache

yum install httpd -y

คำสั่งเริ่มต้นระบบ Apache

systemctl start httpd

คำสั่งสร้างไฟล์สำหรับทดสอบการเตรียม Server (ครั้งนี้คือไฟล์ index.html)
・ขั้นตอนนี้คือการสร้างไฟล์ "index.html" แบบง่ายๆ เพื่อทดสอบว่า server ให้บริการไฟล์จากโฟลเดอร์ /var/www/html ได้
・ถ้าไม่มีไฟล์นี้ เวลาเรียก wget http://127.0.0.1/ ก็จะไม่มี response กลับมา

echo "<html><body>test ipv6" > /var/www/html/index.html

คำสั่งตรวจสอบว่าสามารถดูไฟล์ html ที่สร้างจากขั้นตอนที่แล้วได้หรือไม่

wget http://127.0.0.1/

Output (example)
ซึ่งหากแสดงผลลัพธ์แบบนี้ ถือว่าการทดสอบสำเร็จ (ครั้งนี้คือไฟล์ index.html)
127.0.0.1 คือ loopback address (IPv4) ของเครื่องตัวเอง หมายถึงการให้ server ตอบกลับ request ภายในเครื่อง เพื่อเช็กว่า web service ทำงานหรือไม่
・ถ้า server ตอบกลับด้วย 200 OK แสดงว่า web server ทำงานและสามารถให้บริการหน้าเว็บได้ถูกต้อง

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 ~]#

คำสั่งลบไฟล์ index.html ที่ wget โหลดมาเก็บใน directory ปัจจุบัน (ครั้งนี้คือ /root ซึ่งถ้าอยู่ใน path root สามารถรันคำสั่งนี้ลบได้เลย)

rm -rf index.html

คำสั่งเปิดดูไฟล์ log การเข้าใช้งาน access log ของเว็บเซิร์ฟเวอร์ Apache (httpd) โดยใช้โปรแกรม less

less /var/log/httpd/access_log

Output (example)
จะเห็นว่ามีบันทึกการเข้าใช้งานเว็บ access log ของ Apache บน EC2 นี้ โดยสามารถเช็กได้ว่าใครเข้ามา ขอหน้าเว็บอะไร และได้รับการตอบกลับแบบไหน

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)

ดูตัวอย่างการตั้งค่าเกี่ยวกับ IPv6 ได้ที่ลิงก์ด้านล่างนี้
4ステップでWebサーバをIPv6に対応させる方法 (ภาษาญี่ปุ่น)

สร้าง VPC Origin ใน CloudFront

ก่อนอื่นไปที่หน้าจอ EC2 Instance แล้วคัดลอก Instance ARN เตรียมไว้
create_vpc_origin_cf-0

ไปที่ช่อง Search แล้วค้นหาและเลือก 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]
・Protocol: HTTP only → [HTTP port: 80]
・คลิก Create VPC origin
create_vpc_origin_cf-2

แล้วรอจนกว่า Status จะเปลี่ยนจาก "Deploying" เป็น Deployed (ใช้เวลาประมาณ 10 นาที)
แล้วค่อยดำเนินการสร้าง Distribution ในขั้นตอนถัดไป
create_vpc_origin_cf-3

สร้าง Distribution ใน CloudFront

เลือก 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" ในหัวข้อ Settings จะใช้เป็นค่าเริ่มต้นสำหรับ VPC origin ทั้งหมด ก็จะไม่ตั้งค่าอะไร ดังนั้นคลิก Next ได้เลย
create_cf-4

Step 3: Enable security (ชื่อหัวข้อ)

Enable security
Web Application Firewall (WAF): Do not enable security protections (หากต้องการเพิ่มความปลอดภัยแนะนำให้เปิดใช้งาน)
・คลิก Next
create_cf-5

ดูรายละเอียดเพิ่มเติมเกี่ยวกับ WAF ได้ที่ลิงก์ด้านล่างนี้
https://dev.classmethod.jp/articles/aws-2022-introductory-edition-aws-waf/

Step 4: Review and create

ตรวจสอบการตั้งค่าตั้งแต่ Step 1 - Step 3 แล้วคลิก Create distribution

เมื่อสร้างเสร็จแล้วจะแสดงหน้าจอแบบนี้ แล้วรอระบบเริ่มต้นสักครู่จนกว่าจะ Deploy เสร็จสิ้น
create_cf-6

การตรวจสอบการทำงานของ Server

มาที่หน้าจอ CloudFront แล้วคลิกไอคอนคัดลอกที่ Distribution domain name เตรียมไว้
create_cf-7

แล้วนำ Distribution domain name มาเปิดบนเว็บเบราว์เซอร์ ก็จะแสดงหน้าจอเว็บไซต์แบบนี้

https://xxxxxxxxxxxxxx.cloudfront.net

create_cf-8

การกำหนด Hostname โดยใช้ Route53

สามารถกำหนด Hostname ได้โดยใช้ Route53 โดยดูวิธีการได้จากบทความด้านล่างนี้
https://dev.classmethod.jp/articles/how-to-set-up-ssl-and-dns-on-cloudfront-using-acm-and-route53-jp/

สรุป

ทางเราตั้งใจจะทดสอบฟีเจอร์ CloudFront ที่รองรับ IPv6 Origin แต่การเชื่อมต่อไปยัง IPv6 Origin ของ EC2 ไม่สำเร็จ
ดังนั้นจึงเปลี่ยนมาใช้ VPC Origin ซึ่งทำงานได้ดี และได้นำมาแบ่งปันในบทความนี้

นอกจากนี้ ณ เดือนตุลาคม 2025 พบว่าใน Thailand Region ยังไม่สามารถใช้งานได้ เนื่องจากฟีเจอร์ VPC Origin ยังไม่รองรับใน Thailand Region
ดูรายละเอียดเพิ่มเติมได้ที่ AWS Documentation ด้านล่างนี้
Supported AWS Regions for VPC origins

การใช้ IPv6 Origin มีข้อดีคือสามารถลดค่าใช้จ่ายได้โดยไม่ต้องใช้ IPv4 บน EC2

บทความที่เกี่ยวข้อง

この記事をシェアする

FacebookHatena blogX

関連記事