สร้าง EC2 ใหม่โดยใช้งาน Private IP และ MAC Address เดิม

ด้วยการใช้ Elastic Network Interface (ENI) เราสามารถตั้งค่าให้กลับมาใช้ Private IP กับ MAC address เดิมได้!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

จุดเริ่มต้น

สวัสดีครับ ผมไลท์ครับ ในครั้งนี้เลยอยากจะมาแนะนำวิธีการใช้งาน instance ใหม่ โดยใช้ Private IP กับ MAC Address ให้เหมือนกับตัวก่อนครับ โดยปกติหากคุณลบ EC2 instance ผ่าน management console MAC Address หรือ private IP addresses จะหายไป พอสร้าง instance ใหม่ทั้ง 2 อย่างนี้ก็เปลี่ยนเป็นตัวใหม่ไปแล้ว ซึ่งอาจเป็นปัญหาสำหรับบางท่านที่มีการใช้ซอฟต์แวร์ที่เชื่อมกับ MAC Address หรือ private IP addresses ตัวก่อนทำให้ใช้งานต่อได้ไม่ราบรื่นนักครับ

วิธีทำ

จากเอกสารนี้จะระบุว่า ENI(Elastic Network Interface)จะเก็บข้อมูลได้หลากหลายรวมไปถึง Private IP , MAC Address ด้วยครับ ด้วยเหตุนี้เราจึงสามารถใช้งาน ec2 instance ใหม่โดยไม่ลบ ENI และทำให้สามารถใช้ MAC Address และ Private IP เดิมแทนได้แม้ว่าจะลบ EC2 เดิมไปแล้วก็ตาม

ลงมือทำ

เริ่มที่ทำการสร้าง EC2 instance ให้อยู่ในสถานะพร้อมใช้งานก่อนครับ

โดยสามารถอ้างอิงขั้นตอนการสร้างจาก Blog ทางด้านบนได้เลยครับ

รายละเอียดของ EC2 instance ที่สร้างขึ้นมาครับ
Name : ENI_TEST_2.1
AMI : Amazon Linux 2 AMI Kernel 5.10
Instnce Type : t2.micro
KeyPair : ENI_TEST_2.1
Network Setting :
Security group name : ENI_TEST_2.1
Description : ENI_TEST_2.1
Security group rule 1
Type: ssh
Source type:My IP

ไปที่ EC2 instance ที่เปิดใช้งานแล้วเข้าไปตรวจสอบ MAC address และ Private IP รวมไปถึง instance ID เพื่อนำไปใช้เปรียบเทียบครับ โดยครั้งนี้จะใช้ PuTTY ในการตรวจสอบครับ

$ ip address
〜〜〜〜เนื้อหาที่ย่อแล้ว〜〜〜〜
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
link/ether 02:d6:06:fa:68:4a brd ff:ff:ff:ff:ff:ff
inet 172.31.28.106/20 brd 172.31.31.255 scope global dynamic eth0
〜〜〜〜เนื้อหาที่ย่อแล้ว〜〜〜〜
$ curl http://169.254.169.254/latest/meta-data/instance-id
i-042**************
  • " 02:d6:06:fa:68:4a " คือ MAC Address (link/ether 02:d6:06:fa:68:4a brd ff:ff:ff:ff:ff:ff)
  • " 172.31.28.106/20 " คือ Private IP (inet 172.31.28.106/20 brd 172.31.31.255 scope global dynamic eth0)
  • " i-042************** " คือ instance id

หรือจะตรวจสอบผ่านหน้า Management console ก็ได้ครับ จากหน้า EC2 instance ไปที่หัวข้อ NetworkingInterface ID

จะพบ ENI (eni-xxxxxxxx) ของ EC2 instance ซึ่งจะแสดงรายละเอียดต่างๆ รวมไปถึง Private IP และ MAC address ด้วยครับ

จากนั้นเลือกที่ ENI ของ instance ไปที่ action เลือก change termination behavior

✅ออกที่Delete on instance termination เพื่อไม่ให้ ENI นี้หายไปหลังจากลบ instance ไปแล้วครับ จากนั้นเลือกSAVEก็เสร็จการตั้งค่าครับ

จากนั้นterminate ec2 instance ผ่าน management console

หลังจาก instance ถูกลบแล้วสถานะ ENI ก็เปลี่ยนจาก In-use (ถูกใช้งานอยู่) เป็น available (พร้อมใช้งาน)

**ถ้าไม่เอา✅ออกจาก Delete on instance terminationในขั้นตอนก่อนหน้านี้ ENI นี้จะถูกลบไปด้วยครับ**

สร้าง instance ใหม่

ในขั้นตอนนี้เราจะนำ EC2 instance ใหม่ให้กลับมาใช้ ENI ตัวเดิมกันครับ

ถ้าต้องการ copy ข้อมูล instance ตัวก่อนสามารถทำได้ด้วยใช้ AMI ครับ สามารถดูรายละเอียดที่ Blog ด้านล่างครับ

และเลือก subnet ตัวเดียวกับ ec2 instance ที่ลบไปแล้ว

**หากไม่เลือก subnet และ VPC เดียวกับ EC2 instance ที่ลบไปแล้วจะไม่สามารถเลือก ENI ตัวเดิมได้ครับ**

ในหัวข้อ network interface คลิกที่เมนู pull down แล้วเลือก ENI เมื่อสักครู่เข้าไปได้เลย

*การเลือก ENI จะไม่สามารถระบุ SecurityGroup ได้ เพราะ ENI จะมีผูก SecurityGroup ตัวก่อนไว้อยู่แล้ว *

จากนั้นทำการ start instance ตามปกติ แล้วรอขึ้นสถานะ "Running"

เมื่อ instance พร้อมใช้งานแล้วเข้าระบบไปที่ตรวจสอบ Private IP และ MAC Address

$ ip address
〜〜〜〜เนื้อหาที่ย่อแล้ว〜〜〜〜
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
link/ether 02:d6:06:fa:68:4a brd ff:ff:ff:ff:ff:ff
inet 172.31.28.106/20 brd 172.31.31.255 scope global dynamic eth0
〜〜〜〜เนื้อหาที่ย่อแล้ว〜〜〜〜
$ curl http://169.254.169.254/latest/meta-data/instance-id
i-0ee**************

หรือจะเข้าไปตรวจสอบผ่าน network interface บน Management console ก็ได้ครับ

จะเห็นได้ว่า instance ID เปลี่ยนแต่ Private IP และ MAC address เดิมยังอยู่แล้วสามารถใช้งานต่อได้ครับ

  • " 02:d6:06:fa:68:4a " คือ MAC Address (link/ether 02:d6:06:fa:68:4a brd ff:ff:ff:ff:ff:ff)
  • " 172.31.28.106/20 " คือ Private IP (inet 172.31.28.106/20 brd 172.31.31.255 scope global dynamic eth0)
  • " i-0ee************** " คือ instance id

สุดท้ายนี้

เท่านี้เราก็สามารถเก็บ Private IP และ MAC Address เดิมไว้ใช้ได้แล้วครับ แต่ว่าหากลืมลบ ENI ที่ไม่จำเป็นต้องใช้งานแล้วแนะนำให้ลบดีกว่าเพราะว่ามันมีค่าบริการครับหวังว่าบทความนี้จะมีประโยชน์แก่ทุกท่านนะครับ