วิธีตรวจสอบปัญหาภายใน EC2 instance ที่ไม่สามารถ Launch ได้
ปัญหาที่เกิดขึ้น
EC2 instance เปิดไม่ติดครับ พอตรวจสอบก็พบว่า Status checks ของ instance แสดงขึ้นว่า "instance status check fails"
ปัญหาอาจจะเกิดภายใน Instance ซึ่งต้องตรวจสอบ OS หรือ File System ว่าเกิดปัญหาที่จุดใด แต่เราไม่สามารถล็อกอินเข้าไปใน EC2 instance ได้ เนื่องจากไม่สามารถ Launch ได้
มีวิธีตรวจสอบปัญหาภายใน EC2 instance ที่ไม่สามารถ Launch ได้ไหมครับ
วิธีแก้ปัญหา
ในกรณีที่เกิดปัญหาไม่สามารถ Lanuch หรือ ล็อกอินเข้าไปใน EC2 instance ได้ เราสามารถนำ EBS ที่ Attach ติดกับ EC2 instance ที่เกิดปัญหา ไป Attach กับ EC2 instance อื่นๆเพื่อทำการตรวจสอบปัญหาที่เกิดขึ้นได้
ขั้นตอนการดำเนินการ
สิ่งที่ต้องเตรียมก่อนการดำเนินการ
- Instance ที่ Status checks ของ instance แสดงขึ้นว่า "instance status check fails"
- Instance อีกตัวนึง ที่ทำการ Launched ไว้แล้ว สามารถ Login และ เข้าไปตรวจสอบได้
- OS คือ Amazon Linux 2 ※ถ้าเป็น OS อื่นนอกจากนี้จำเป็นต้องอ่าน Command ตามแต่ละ OS
ทำการ Stopped instance ที่ Status checks ของ instance แสดงขึ้นว่า "instance status check fails"
พอตรวจสอบ Status ของ EC2 instance จะแสดงข้อความแจ้งเตื่อนขึ้นมาว่า [1/2 checks passed]
เพราะว่าการ Detach Volume ที่ติดอยู่กับ EC2 instance จำเป็นหยุด EC2 instance นั้นๆก่อน ในหน้าต่างของ Management Console ให้เราทำการหยุด instance โดยกดไปที่ [Instance state]-[Stop instance]
ทำการ Detach EBS
เมื่อสถานะของ EC2 instance เป็น [Stopped] แล้ว ให้ทำการ Detach EBS ครับ
เลือกไปที่ EC2 instance ของเรา แล้วกดไปที่ [Storage]
แล้วเราสามารถตรวจสอบ path ของ Root Ddevice ได้ (โดยในที่นี้คือ /dev/xvda)
ดูที่ Volume ID ให้เราทำการจด ID(vol-xxxxxxxxxxxxxxxxx) นี้ไว้ เพราะจำเป็นต้องใช้เมื่อใช้นำ EBS ไปติดกับ EC2 instance ที่ใช้ในการตรวจสอบ
คลิกที่ [vol-xxxxxxxxxxxxxxxxx] จะเข้าไปยังหน้า [Volume]
เลือก Volume ที่แสดงอยู่แล้ว แล้วกด [Actions]-[Detach volume]
เมื่อสถานะเปลี่ยนจาก [in-use] เป็น [available] แล้ว [Attached Instances] จะไม่มี instance ID แสดงอยู่
Attach EBS ไปยัง EC2 instance อีกตัวที่ทำการ launched แล้ว
ให้เราทำการจด ID instance ของ EC2 instance อีกตัว ที่เราเตรียมไว้สำหรับการตรวจสอบปัญหา
จากนั้น ทำการ Attach EBS ตัวที่เราพึ่ง Detach ไปเมื่อกี้ไปยัง instance ที่เราเตรียมไว้สำหรับการตรวจสอบปัญหาโดยการกด [Actions]-[Attach volume]
โดยการกด [Actions]-[Attach volume]
ในแถว [Instance]、เลือก ID ของ EC2 instance ที่เตรียมไว้สำหรับการตรวจสอบปัญหาที่ได้มีจดบันทึกไว้
ในแถว [Device name] ครั้งนี้เราไม่ต้องตั้งค่าอะไร ปล่อยให้เป็นค่า Default
กด [Attach volume]
รอจนสถานะจาก [available] เปลี่ยนเป็น [in-use]
ทำการ mount volume ของ EC2 instance ที่เราเตรียมไว้สำหรับการตรวจสอบปัญหา
ใช้การควบคุม OS ทำการ mount volume เพื่อให้ EBS ที่ attach เข้าไปสามารถใช้งานได้
จากนั้นทำการ link กับ device ที่เราตั้งค่าไปทางด้านบน
$ ll /dev/ | grep sdf
lrwxrwxrwx. 1 root root 4 Jun 15 04:39 sdf -> xvdf
lrwxrwxrwx. 1 root root 5 Jun 15 04:39 sdf1 -> xvdf1
lrwxrwxrwx. 1 root root 7 Jun 15 04:39 sdf127 -> xvdf127
lrwxrwxrwx. 1 root root 7 Jun 15 04:39 sdf128 -> xvdf128
ทำการตรวจสอบ disk partitions
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda 202:0 0 8G 0 disk
├─xvda1 202:1 0 8G 0 part /
├─xvda127 259:0 0 1M 0 part
└─xvda128 259:1 0 10M 0 part
xvdf 202:80 0 8G 0 disk
├─xvdf1 202:81 0 8G 0 part
├─xvdf127 259:2 0 1M 0 part
└─xvdf128 259:3 0 10M 0 part
จะเห็นได้ว่า「xvdf1」เป็น disk partitions ของ「xvdf」
ทำการสร้าง mount point แล้ว mount Volume นั้น
$ sudo mkdir /mnt/ebs
$ sudo mount /dev/xvdf1 /mnt/ebs
หากเกิน Error ทำให้ไม่สามารถ mount ไม่ได้
อาจจะมีบางกรณีที่ UUID ซ้ำซ้อนกันทำให้เกิด error จนไม่สามารถใช้คำสั่ง mount ได้
$ sudo mount /dev/xvdf1 /mnt/ebs
mount: /mnt/ebs: wrong fs type, bad option, bad superblock on /dev/xvdf1, missing codepage or helper program, or other error.
ในกรณีนี้เราสามารถ mount ได้โดยไม่สนว่า UUID จะซ้ำซ้อนกันหรือไม่
โดยทางเราขอแนะนำให้ใช้คำสั่งนี้เพื่อใช้ในการแก้ปัญหาชั่วคราวในการ mount EBS
$ sudo mount -t xfs -o nouuid /dev/xvdf1 /mnt/ebs
บทความอ้างอิง
Status checks for your instances - Amazon Elastic Compute Cloud (English)
ログインできないec2インスタンスを調査する | DevelopersIO (Japanese)