การ Restore EC2 Instance โดยใช้ IP Address และ Mac Address เดิม

วิธีการ Restore EC2 Instance ตัวใหม่ให้มีรายละเอียดเครือข่าย เช่น IP Address และ Mac Address เหมือนกับ EC2 Instance ตัวเก่าที่ไม่สามารถใช้งานต่อได้นี้ สามารถใช้ได้ทั้ง EC2 Instance ที่เป็น AMI แบบ Windows Server และ Amazon Linux ครับ

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

การใช้งาน EC2 Instance บางครั้งอาจมีการตั้งค่าผิดพลาด เช่น ติดตั้งคำสั่งหรือดำเนินการสิ่งต่างๆ ในระบบ Server EC2 Instance ผิดพลาดจนทำให้ระบบรวนถึงขั้นต้องเปลี่ยน EC2 Instance ใหม่ !
แต่การเปลี่ยน EC2 Instance ตัวใหม่ในบางกรณี ก็ต้องการให้มีรายละเอียดเครือข่ายต่างๆ เช่น Network interface ID (ENI), VPC ID, Subnet ID, Private IPv4 address, Public IPv4 address, Mac Address เหมือนกับ EC2 Instance ตัวเก่า ดังนั้นผมจะมาแนะนำวิธีการสร้าง EC2 Instance ตัวใหม่โดย Restore EC2 Instance จาก AMI เพื่อให้มีรายละเอียดเครือข่ายเหมือนกับที่กล่าวมาทุกประการครับ

*การ Restore EC2 Instance ครั้งนี้ สามารถใช้ได้ทั้ง EC2 Instance ที่เป็น AMI แบบ Windows Server และ Amazon Linux ครับ

สิ่งที่ต้องเตรียม

※EC2 Instance ที่มีการเชื่อมโยงกับ Elastic IP แล้ว

สร้าง EC2 Instance

สร้าง EC2 Instance เพื่อใช้จำลองสถานการณ์ในการ Terminate
*ครั้งนี้จะใช้เป็น AMI แบบ Windows Server ครับ

ดูรายละเอียดการสร้าง EC2 Instance สำหรับ Windows Server ได้ที่ลิงก์ด้านล่างนี้ครับ

ตัวอย่างตั้งค่าการสร้าง Windows Server ใน EC2

※Create Key pairs
Key pairs: tinnakorn-test (ป้อนชื่อที่ต้องการ)
Key pair type: RSA
Private key file format: ◉ .pem

※Launch instances
Name and tags
Name: tinnakorn-test (ป้อนชื่อที่ต้องการ)

Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI): Microsoft Windows Server 2022 Base

Instance type
Instance type: t3a.medium (เลือกสเปคตามต้องการ)

Key pair (login)
Key pair name - required: tinnakorn-test (key pair ที่สร้างขึ้นเมื่อสักครู่นี้)

Network settings
Firewall (security groups)
Security group name - required: tinnakorn-test (ตั้งชื่อที่ต้องการ)
Description - required: tinnakorn-test (ป้อนตามต้องการ)
Inbound security groups rules
▼ Security group rule 1 (TCP, 3389, xx.xx.xx.xx/32)
Type: rdp | Source type: My IP | Source: xx.xx.xx.xx/32

Configure storage
1x: 30 GiB gp2 Root volume (Default)

เชื่อมโยง Elastic IP

เมื่อสร้าง EC2 Instance เสร็จแล้วให้เชื่อมโยง Elastic IP เข้ากับ EC2 Instance โดยดูรายละเอียดได้ที่ลิงก์ด้านล่างนี้ครับ

ตั้งค่า Network interface (ENI)

*จากนี้ไปจะเรียก Network interface ว่า ENI

ก่อนอื่นต้องตั้งค่า ENI เพื่อให้ ENI ยังคงอยู่หลังจากที่ Terminate Instance ไปแล้ว ก็จะสามารถนำ ENI นี้ไปใช้งานต่อได้ครับ

มาที่หน้าจอ EC2 Instance แล้วเลือก Instance ID ของเรา แล้วจะมีข้อมูลแสดงด้านล่าง ให้เลือกแท็บ Networking แล้วคลิก Interface ID

แล้วจะเข้ามาที่หน้าจอ Network interfaces แบบนี้ ซึ่งในตอนแรกในช่อง Name จะยังไม่มีชื่อ แนะนำให้ตั้งชื่อที่ต้องการเพื่อให้ง่ายต่อการค้นหา โดยครั้งนี้จะตั้งชื่อเดียวกับ EC2 Instance คือ tinnakorn-test

แล้วติ๊ก Network interface ID เลือก Actions เลือก Change termination behavior

แล้วปิดการใช้งาน Delete on instance termination โดยนำเครื่องหมาย ✅ ออก แล้วคลิก Save

เมื่อตั้งค่านี้แล้วต่อให้ทำการ Terminate Instance ไปแล้ว ENI ก็จะยังคงอยู่ครับ

บันทึกรายละเอียด ENI ที่ Attach กับ EC2 Instance

เมื่อตั้งค่า ENI เสร็จแล้ว จะต้องบันทึกรายละเอียด ENI เพื่อใช้เป็นข้อมูลต้นแบบในการสร้าง EC2 Instance ตัวใหม่ให้มีรายละเอียด ENI เหมือนเดิมกับ EC2 Instance ตัวเก่าที่จะ Terminate ครับ

จากขั้นตอนที่แล้ว คลิก Network interface ID

แล้วบันทึกรายละเอียด ENI ที่ Attach กับ EC2 Instance ตัวเก่าที่จะ Terminate เนื่องจาก ENI นี้เป็นรายละเอียดเดียวกับ EC2 Instance ตัวเก่า โดยครั้งนี้จะบันทึกใน Notepad ของ Windows ตามด้านล่างนี้ครับ

  • Network interface ID: eni-0cbfd89170ffb7096 (ENI)
  • VPC ID: vpc-ab00ebcd
  • Subnet ID: subnet-1166aa59
  • Private IPv4 address: 172.31.39.82
  • Public IPv4 address: 18.143.230.26 (Elastic IP)
  • Mac Address: 06:ba:f9:3f:00:26

*เมื่อบันทึกตามที่กล่าวมาเสร็จแล้ว แนะนำให้ไปตรวจสอบข้อมูลเหล่านี้ในหน้าจอ EC2 Instance ด้วยครับ

ตรวจสอบรายละเอียด ENI เพิ่มเติมใน Terminal บน Windows Server ตัวเก่า

การตรวจสอบนี้จะดำเนินการใน Windows Server โดยให้ตรวจสอบ Physical Address(Mac Address) และ IPv4 Address ว่าตรงกับรายละเอียด ENI ที่เราบันทึกมาจากขั้นตอนที่แล้วหรือไม่

Login เข้าไปยัง Windows Server ตัวเก่า แล้วเปิดโปรแกรม Command Prompt แล้วรันคำสั่งแสดงข้อมูลเกี่ยวกับการกำหนดค่าเครือข่ายของ Windows Server นี้

ipconfig /all

Output (example): แล้วดูที่ Physical Address(Mac Address) และ IPv4 Address จะเห็นว่ามีรายละเอียดเหมือนกับที่บันทึกมาจากขั้นตอนที่แล้วครับ

Command Prompt

C:\Users\Administrator>ipconfig /all
~~~~เนื้อหาที่ละเว้น~~~~
Ethernet adapter Ethernet 3:

   Connection-specific DNS Suffix  . : ap-southeast-1.compute.internal
   Description . . . . . . . . . . . : Amazon Elastic Network Adapter
   Physical Address. . . . . . . . . : 06-BA-F9-3F-00-26
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::b262:aaf5:461c:d39%2(Preferred)
   IPv4 Address. . . . . . . . . . . : 172.31.39.82(Preferred)
~~~~เนื้อหาที่ละเว้น~~~~

เมื่อมั่นใจว่าบันทึกรายละเอียด ENI และตรวจสอบว่า ENI ที่จะใช้ตรงกับ EC2 Instance ตัวเก่าที่จะ Terminate แล้ว ให้เริ่มทำขั้นตอนต่อไปได้เลยครับ

*ในกรณีของ Linux สามารถตรวจสอบ IP Address และ Mac Address ได้โดยรันคำสั่งด้านล่างนี้

ifconfig

สร้าง AMI โดยใช้ Create Image จาก EC2

การสร้าง AMI ครั้งนี้จะไม่สร้างใน EC2 โดยตรง แต่จะสร้างใน AWS Backup แบบ "on-demand backup" เพื่อให้มีข้อมูลสำรองไว้ใช้กู้คืน และหากสำรองข้อมูลใน AWS Backup แล้ว ข้อมูลที่สำรองไว้ก็จะเข้าไปอยู่ใน AMI ด้วยครับ

เข้าไปที่ Service AWS Backup เลือก Protected resources จากเมนูด้านซ้าย แล้วคลิก Create on-demand backup ด้านขวา

แล้วจะเข้ามาหน้าจอ Create on-demand backup แล้วจะตั้งค่า Settings ตามนี้
・Resource type: EC2
・Instance ID: i-0d96374d45942a02b (ป้อน Instance ID ของตัวที่จะ Terminate)
・Backup window: Create backup now
・Retention period: 1 | Day
・Backup vault: Default
・IAM role: Default role
・คลิก Create on-demand backup

แล้วจะเข้ามาหน้าจอ Jobs โดยอัตโนมัติ จากนั้นให้รอสักครู่จนกว่า Status เป็น ✅ Completed

ต่อไปจะตรวจสอบที่ Recovery points โดยเลือก Backup vaults จากเมนูด้านซ้าย แล้วเลือก Default ด้านขวา

จะเห็นว่ามีการสำรองข้อมูลเข้ามาที่ Default ใน Recovery points เรียบร้อย และก็จะถูกสร้างใน AMI ด้วยเช่นกันครับ
ซึ่งเราสามารถคัดลอก ami-xxxx ใน Recovery points หรือ ชื่อ ใน Resource name ไปค้นหาใน AMI ได้ครับ

ต่อไปจะตรวจสอบที่ AMI โดยเข้าไปที่หน้าจอ Service EC2 เลือก AMIs จากเมนูด้านซ้าย แล้วค้นหาและติ๊ก AMI ที่ชื่อของเรา แล้วดูที่ Status จะเห็นว่าเป็น ✅ Available (พร้อมใช้งาน)

จนถึงตอนนี้เราก็เตรียม Resource ที่ต้องใช้เสร็จเรียบร้อยแล้ว ก็ให้เริ่มทำขั้นตอนถัดไปได้เลยครับ

หากสนใจเกี่ยวกับการสำรองข้อมูลแบบ on-demand ดูรายละเอียดเพิ่มเติมได้ที่ลิงก์ด้านล่างนี้

หากสนใจเกี่ยวกับการใช้ AMI ดูรายละเอียดเพิ่มเติมได้ที่ลิงก์ด้านล่างนี้

ขั้นตอน

Terminate EC2 Instance

สมมติว่า EC2 Instance ตัวเก่านี้ไม่สามารถใช้งานต่อได้แล้ว เราก็จะทำการ Terminate ครับ
*ก่อนจะ Terminate ต้องมั่นใจก่อนว่าได้ทำการ ตั้งค่า ENI เรียบร้อยแล้ว

มาที่หน้าจอ EC2 Instance เลือก Instance ID ของเรา แล้วเลือก Instance state เลือก Terminate instance แล้วรอจนกว่า Instance state เป็น Terminated

ตรวจสอบรายละเอียด ENI หลัง Terminate EC2 Instance ตัวเก่า

ต่อไปให้ตรวจสอบ ENI โดยเลือก Network Interfaces จากเมนูด้านซ้าย แล้วค้นหา ENI ของเราด้วย Network interface ID ที่บันทึกไว้ก่อนหน้านี้ แล้วคลิก Network interface ID

แล้วตรวจสอบรายละเอียด ENI ในช่องสีแดงที่บันทึกไว้ก่อนหน้านี้อีกครั้ง จะเห็นว่ารายละเอียด ENI ยังคงอยู่เหมือนเดิมครับ
ส่วน Network interface status ในช่องสีน้ำเงินคือตอนแรกจะมีสถานะเป็น ✅ In-use (ใช้งานอยู่) แต่ตอนนี้มีสถานะเป็น ⚠ Available (พร้อมใช้งาน) เนื่องจากไม่มีการ Attach กับ Instance นั่นเอง
*ถ้าไม่เอา ✅ ออกจาก Delete on instance termination ในขั้นตอนก่อนหน้านี้ ENI นี้จะถูกลบไปด้วย*

ต่อไปให้ดูที่ EIP โดยเลือก Elastic IPs จากเมนูด้านซ้าย ค้นหาและติ๊ก Allocated IPv4 address ของเรา แล้วรายละเอียดจะแสดงด้านล่าง แล้วดูที่ Network interface ID จะเห็นว่าตัว EIP ตัวนี้ยังคงแนบกับ ENI อยู่เหมือนเดิมครับ

การ Restore EC2 Instance

ขั้นตอนนี้จะมา Restore EC2 Instance โดยจะทำให้มีรายละเอียด ENI ตรงกับที่บันทึกไว้ก่อนหน้านี้

ตรวจสอบ AMI

เข้าไปที่ Service AWS Backup เลือก Backup vaults จากเมนูด้านซ้าย เลือก Default ให้ดูที่หัวข้อ Recovery points แล้วคัดลอก AMI ID ด้านหลังในช่อง Recovery point ID เพื่อนำไปค้นหาใน AMI
*เราสามารถ Restore EC2 Instance จากที่นี่ได้ แต่ไม่สามารถตั้งค่า IP Address ได้ ซึ่งครั้งนี้จำเป็นต้องตั้งค่า IP Address จึงต้องไป Launch instance จาก AMI ครับ

เข้าไปที่ Service EC2 เลือก AMIs จากเมนูด้านซ้าย ค้นหาโดยเลือกเป็น Private images ▼|AMI ID แล้วคลิก AMI ID

แล้วจะมีรายละเอียดเกี่ยวกับ AMI ของ Instance ที่ Terminate ไปก่อนหน้านี้
ต่อไปเราจะทำการสร้าง EC2 Instance ตัวใหม่จาก AMI นี้โดยคลิก Launch instance from AMI แล้วจะทำการตั้งค่าในขั้นตอนถัดไป

สร้าง EC2 Instance ตัวใหม่

จากขั้นตอนที่แล้ว เมื่อคลิก Launch instance from AMI ก็จะเข้ามายังหน้าจอ Launch an instance แล้วจะทำการตั้งค่าดังนี้

การสร้าง EC2 Instance ตัวใหม่ครั้งนี้จะตั้งค่าตาม ตัวอย่างตั้งค่าการสร้าง Windows Server ใน EC2 แค่บางส่วนเท่านั้น
แต่ในส่วนของ Network settings ต้องตั้งค่าตามรายละเอียด ENI เพื่อให้มีข้อมูลการกำหนดค่าเครือข่ายเหมือนกับ EC2 Instance ตัวเก่าครับ

มาเริ่มกันที่หัวข้อ Name and tags
Name: tinnakorn-test

หัวข้อ Application and OS Images (Amazon Machine Image)
ไม่ต้องดำเนินการใดๆ เนื่องจากเป็นการตั้งค่าที่ Launch มาจาก AMI

หัวข้อ Instance Type
Instance type: t3a.medium

หัวข้อ Key Pair (login)
Key Pair name: tinnakorn-test

หัวข้อ Network settings
คลิก Edit

แล้วตั้งค่าหัวข้อ Network settings ตามรายละเอียด ENI ที่บันทึกไว้ก่อนหน้านี้
VPC: vpc-ab00ebcd
Subnet: subnet-1166aa59
Auto-assign public IP: Disable
*หากไม่เลือก Subnet และ VPC เดียวกับ EC2 Instance ที่ลบไปแล้วจะไม่สามารถเลือก ENI ตัวเดิมได้*

Firewall (security groups)
เลือก 🔵 Select existing security group

▼ Advanced network configuration
Network interface 1
Network interface: eni-0cbfd89170ffb7096
*การเลือก ENI จะไม่สามารถระบุ Security Group ได้ เพราะ ENI จะผูก Security Group ตัวก่อนไว้อยู่แล้ว*

หัวข้อ Configure storage
ใช้เป็นค่าเริ่มต้น

หัวข้อ Summary
ตรวจสอบรายละเอียดการตั้งค่า แล้วคลิก Launch instance

เมื่อแสดงข้อความ Success แบบนี้แล้ว คลิก Instance ID

แล้วรอการเปิดใช้งาน Instance สักครู่จนกว่า Status check จะเปลี่ยนจาก Initializing เป็น ✅ 2/2 checks passed

ตรวจสอบรายละเอียด ENI หลังสร้าง EC2 Instance ตัวใหม่

ต่อจากขั้นตอนที่แล้ว ผมจะลอง Filter ด้วยชื่อ Tag ของ Instance คือ tinnakorn-test ตามที่ตั้งไว้ก่อนหน้านี้
แล้วดูที่ Instance state จะเห็นว่ามีตัวที่ Terminate ไปก่อนหน้านี้(Terminated) และตัวที่สร้างเมื่อสักครู่นี้(✅ Running) ครับ

ติ๊ก Instance ที่กำลัง ✅ Running ก็จะเห็นรายละเอียด Instance แสดงด้านล่าง แล้วดู Public IPv4 address, Private IPv4 addresses, VPC ID, Subnet ID ในแท็บ Details จะเห็นว่ารายละเอียดตรงกับที่บันทึกไว้ครับ

แล้วเลือกแท็บ Networking ก็จะเห็น Interface ID ตัวที่บันทึกไว้ก่อนหน้านี้ ให้คลิกเข้าไปได้เลย

แล้วคลิก Network interface ID

แล้วตรวจสอบรายละเอียด ENI ในช่องสีแดงที่บันทึกไว้ก่อนหน้านี้อีกครั้ง จะเห็นว่ารายละเอียด ENI ยังคงอยู่เหมือนเดิมครับ
ส่วน Network interface status ในช่องสีน้ำเงินก็เปลี่ยนจากสถานะ ⚠ Available (พร้อมใช้งาน) เป็น ✅ In-use (ใช้งานอยู่) เนื่องจากมีการ Attach กับ Instance นั่นเอง

ตรวจสอบรายละเอียด ENI เพิ่มเติมใน Terminal บน Windows Server ตัวใหม่

Login เข้าไปยัง Windows Server ตัวใหม่ แล้วเปิดโปรแกรม Command Prompt แล้วรันคำสั่งแสดงข้อมูลเกี่ยวกับการกำหนดค่าเครือข่ายของ Windows Server นี้

ipconfig /all

Output (example): แล้วดูที่ Physical Address(Mac Address) และ IPv4 Address จะเห็นว่า EC2 Instance ตัวใหม่นี้ก็มีรายละเอียดเหมือนกับที่บันทึกมาจากขั้นตอนที่แล้วจริงๆ ครับ

Command Prompt

C:\Users\Administrator>ipconfig /all
~~~~เนื้อหาที่ละเว้น~~~~
Ethernet adapter Ethernet 3:

   Connection-specific DNS Suffix  . : ap-southeast-1.compute.internal
   Description . . . . . . . . . . . : Amazon Elastic Network Adapter
   Physical Address. . . . . . . . . : 06-BA-F9-3F-00-26
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::b262:aaf5:461c:d39%2(Preferred)
   IPv4 Address. . . . . . . . . . . : 172.31.39.82(Preferred)
~~~~เนื้อหาที่ละเว้น~~~~

*ในกรณีของ Linux สามารถตรวจสอบ IP Address และ Mac Address ได้โดยรันคำสั่งด้านล่างนี้

ifconfig

ลบ AWS Resource

ลบ Resource ใน EC2

ดูวิธีการ Terminate Instance, ลบ Key Pair และ Security Group ได้ที่ลิงก์ด้านล่างนี้

สำหรับ Network interface ที่ไม่มีการ Attach กับ Instance จะมีสถานะเป็น ✅ Available สามารถลบได้ด้วยตัวเองดังนี้
เข้าไปที่หน้าจอ Network interfaces เลือก Network interface ID ที่ต้องการลบ แล้วคลิก Actions เลือก Delete แล้วยืนยันการลบตามคำแนะนำ

สรุป

การสาธิตนี้สามารถใช้แก้ไขปัญหาในกรณีที่ EC2 Instance ตัวเก่ามีปัญหาจนถึงขั้นต้องเปลี่ยนไปใช้ EC2 Instance ตัวใหม่ แล้วต้องการใช้ IP Address และ Mac Address เดิมได้ นอกจากนี้วิธีนี้ยังสามารถใช้ได้ทั้ง EC2 Instance ที่เป็น AMI แบบ Windows Server และ Amazon Linux ครับ

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

POP จากบริษัท Classmethod (Thailand) ครับ !

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