[Minecraft for AWS] ลองสร้างเซิร์ฟเวอร์ Minecraft ด้วย EC2 Instance

2022.07.30

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

ต้า จาก Technical Support Team ครับ

1. เกี่ยวกับ Series Minecraft for AWS

ผมคิดว่ามันคงน่าสนุก ถ้าเราได้ใช้ Minecraft มาใช้ในการเรียนรู้เกี่ยวกับ AWS จึงเกิดมาเป็นบทความนี้ขึ้นมาครับ

โดยเนื้อหาในบทความนี้จะเน้นกลุ่มเป้าหมายไปที่ ผู้ที่ไม่มีความรู้เกี่ยวกับ AWS หรือพึ่งเริ่มใช้ AWS แล้วอยากที่จะลองใช้ Cloud Service ในการตั้ง Server ของ Minecraft ดูครับ

ปัจจุบัน AWS มีจำนวน Service มากกว่า 200 ชนิด ซึ่งตัวผมเองก็ไม่ได้รู้จักหมดทุกอย่าง จึงอาจจะวิธีการเลือกใช้ AWS ที่เหมาะสมกว่านี้อยู่ก็เป็นได้ แต่จุดประสงค์ของบทความนี้คือเน้นความเข้าใจง่ายสำหรับผู้เริ่มใช้ AWS

เพิ่มเติมคือ อาจจะมีเนื้อหาบางส่วนที่จริงๆอาจจะไม่จำเป็นต้องใช้ AWS จัดการก็ได้ แต่โดยพื้นฐานแล้วเราจะใช้ "Minecraft for AWS" ในการแก้ไขปัญหาทุกอย่างในบทความนี้ (ยกเว้น SaaS บางส่วน)

2. สิ่งที่ต้องเตรียมก่อนเริ่ม

  • มี AWS Account
  • มี Minecraft: Java Edition
  • ถ้ามี Monitor หลายๆตัวจะดี (จะได้ดูไปทำไปได้)
  • มีความตั้งใจในการเรียน

สำหรับคนที่ไม่มี AWS Account สามารถอ่านวิธีการสร้าง Account ได้ที่บทความด้านล่างนี้ครับ

2.1 ทำไมต้องสร้าง Server Minecraft

เพราะเล่นกับเพื่อนมันสนุกกว่าน่ะสิ

Minecraft เป็นเกมที่สามารถเล่นได้ทั้ง Single และ Multiplayer

แต่เนื่องจากแนวเกมที่เป็น Survival Sandbox ถ้ามีเพื่อนมาร่วมผจญภัย สร้างสิ่งต่างๆไปด้วย ผมคิดว่าการได้เล่นกับเพื่อนคงสนุกกว่าแน่ๆ
แต่ในเวลาแบบนั้นเองหากใช้ Hamachi เปิดเซิร์ฟเวอร์จำเป็นต้องมีคนนึงที่มีคอมแรงๆพอที่จะเป็น Host ได้ แล้วถ้าเพื่อนคนนั้นปิดเซิร์ฟเวอร์ไป คนอื่นก็ไม่สามารถเล่นได้
หรือจะเล่นเซิร์ฟออนไลน์สาธารณะ ก็ไม่รู้สึกส่วนตัวแบบเหมือนเปิดเซิร์ฟเอง

วันนี้เราเลยจะมาลองใช้ Amazon EC2 ในการเปิดเซิร์ฟเวอร์ Minecraft กันครับ

3. เริ่มสร้าง Instance 

3.1 สร้าง Key Pair

Key pair เปรียบเสมือนกุญแจที่เอาไว้เปิดเข้าบ้าน เราสามารถสร้าง Instance โดยที่ไม่จำเป็นต้องมี Key pair ก็ได้
แต่นั่นก็ไม่ปลอดภัย เหมือนกับการไม่ล็อกกุญแจบ้านนั่นเอง

ในขั้นตอนแรก เราเลยจะมาสร้าง Key pair สำหรับ Instance กันครับ
โดยทำการเปิด AWS Managment Console แล้วเลือก EC2 ครับ

จากนั้นสังเกตบริเวณซ้ายมือเลือกKey Pairs

คลิกCreate key pair

แล้วใส่ค่าต่างๆตามนี้ Name: Minecraft-key
Private key file format: .ppk
แล้วคลิกCreate key pair

หลังจากสร้าง Key Pair เสร็จแล้ว จะมีลักษณะดังนี้
» มีข้อความแจ้งเตือนขึ้นมาว่า Successfully created key pair
» ไฟล์.ppkจะถูกดาวน์โหลดมาที่คอมพิวเตอร์

3.2 สร้าง EC2 Instance

EC2 Instance คืออะไร?

การประมวลผลบนระบบคลาวด์ที่ปลอดภัยและปรับขนาดได้ – Amazon EC2 – Amazon Web Services
Amazon Elastic Compute Cloud (Amazon EC2) นำเสนอแพลตฟอร์มการประมวลผลที่หลากหลายและครบวงจรที่สุด โดยมีมากกว่า 500 อินสแตนซ์และตัวเลือกล่าสุดของโปรเซสเซอร์ พื้นที่จัดเก็บ ระบบเครือข่าย ระบบปฏิบัติการ และโมเดลการซื้อ เพื่อช่วยให้คุณตอบสนองความต้องการด้านปริมาณงานได้อย่างมีประสิทธิภาพที่สุด เราคือผู้ให้บริการระบบคลาวด์รายใหญ่รายแรกที่สนับสนุนโปรเซสเซอร์ Intel, AMD และ Arm และเป็นระบบคลาวด์เพียงแห่งเดียวที่มีอินสแตนซ์ EC2 Mac แบบตามความต้องการ รวมถึงเป็นระบบคลาวด์เพียงแห่งเดียวที่มีระบบเครือข่าย Ethernet 400 Gbps เรานำเสนอประสิทธิภาพต่อราคาที่ดีที่สุดสำหรับการฝึกแมชชีนเลิร์นนิง รวมถึงราคาต่ออินสแตนซ์การอนุมานที่ต่ำที่สุดในระบบคลาวด์ ปริมาณงาน SAP, การประมวลผลสมรรถนะสูง (HPC), ML และ Windows รันบน AWS มากกว่าระบบคลาวด์อื่นๆ ทั้งหมด

สังเกตแถบด้านซ้ายเลือกInstances

คลิกLaunch instances

ให้เราทำการตั้งค่าตามนี้

Name:Minecraft_Server(หรือจะเป็นชื่ออื่นก็ได้)
Application and OS Images (Amazon Machine Image):Amazon Linux 2 Kernel 5.10

Instance type:t3.medium
(หากใช้เป็น Free tier จะสามารถเลือกได้แค่ t3.micro รายละเอียดเกี่ยวกับ Free Tier จะเขียนอยู่ด้านล่าง)
Key pair (login):Minecraft_Server(เลือก Key pair ที่เราสร้างเมื่อกี้)

Network settings: กดปุ่ม Edit ที่อยู่ขวาบน

Security group name: Minecraft_SG
Description: Minecraft_SG
Source type: My IP
กดปุ่ม Add security group rule เพื่อสร้าง Inbound security groups อีก 1 ตัว

เพื่มข้อมูลตามด้านล่างนี้
Source type: Anywhere
Port range: 25565

หลังจากนั้นกด Launch instance

จากนั้นกดปุ่ม View all instances

ให้รอจน Status check ขึ้น 2/2 checks passed ซึ่งหมายความว่าสร้าง Instance เสร็จแล้ว

จากนั้นให้คลิกเข้าไปใน Instance ที่เราสร้างขึ้น

จากนั้นให้ Copy Public IPv4 address เก็บไว้ จะใช้ในขั้นต่อไป (หากยังสร้างไม่เสร็จ จะไม่มี Public IPv4 address ขึ้น ให้รอให้เสร็จ)

4. เชื่อมต่อเข้าไปใน Instance ด้วย Putty

ในขั้นตอนนี้เราจะมาพาทุกท่านเชื่อมต่อเข้าไปใน Linux ที่อยู่ใน Instance ที่เราสร้างขึ้น
โดยผมจะใช้ Putty เชื่อมเข้าไป (อาจจะใช้วิธีอื่นก็ได้ แต่คิดว่าผู้ใช้งานส่วนใหญ่น่าจะใช้ Windows เลยคิดว่า Putty นั้นง่ายที่สุด)

โปรแกรม Putty นั้นสามารถดาวน์โหลดได้จากลิ้งค์ด้านล่างนี้ครับ

4.1 PuTTY Configuretion

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

การตั้งค่า Basic options for your PuTTY session นี้คือ
» เลือกSession
» นำ Public IPv4 address ที่คัดลอกมาสักครู่นี้มาวางที่ Host Name
» ในช่อง Saved Sessions เราสามารถเก็บข้อมูล Session ที่เราสร้างขึ้นแล้วเอามาโหลดใหม่ได้เมื่อจะใช้

การตั้งค่า Options controlling the connection นี้คือ
» เลือกConnection
» ใส่ค่าการเชื่อมต่อที่ช่อง Seconds between keepalives (0 to turn off):60

การตั้งค่า Data to send to the server นี้คือ
» เลือกData
» ใส่ Auto-login username:ec2-user

» เลือกSSHAuth
» คลิกBrowse...

มาที่เก็บไฟล์ Key pair ของเรา เช่น This PC › Downloads
แล้วคลิกที่ Key pair ของเรา ตามด้วยคลิกOpen(หรือจะดับเบิ้ลคลิกที่ตัวไฟล์เลยก็ได้)

จากนั้นกลับมาที่หน้าต่าง Session (ถึงขั้นตอนนี้แล้วแนะนำให้ Save Session ไว้)
จากนั้นกด Open

ถ้าเจอหน้าต่างตามด้านล่างก็คลิกAccept ไปเลย

เมื่อเข้ามาแล้วจะได้หน้าตาแบบนี้โดยมี username "ec2-user" ก็คือเราสามารถ Login เข้ามายัง Amazon Linux 2 ได้แล้ว

5. Install package และเปิดเซิร์ฟเวอร์

ให้เราทำการ Run Command นี้เพื่ออัพเดทตัว Package ต่างๆ ที่อยู่ใน Linux ###5.1 Package update

sudo yum -y update

(คลิกขวาจะวางข้อความ)
(รันโดยการกด Enter)

5.2 JDK Install

เราจะทำการ Install Amazon Corretto ซึ่งเป็น JDK distribution ที่ AWS เตรียมไว้

sudo rpm --import https://yum.corretto.aws/corretto.key
sudo curl -L -o /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
sudo yum install -y java-18-amazon-corretto-devel

(จะก็อบไปลงทีละบรรทัด หรือทั้งหมดทีเดียวก็ได้ แต่อย่าลืมกด Enter)

5.3 Server Install

ในบทความนี้จะเป็นการลง Spigot ซึ่งเป็นตัว Server แบบไม่เป็นทางการ ที่สามารถลง mod เพิ่มเติมได้
ตอนที่ Install จำเป็นต้องมี git ด้วย เราเลยจะมี Command เกี่ยวกับ git ด้วย
โดยตัว Server ที่เราจะติดตั้งในครั้งนี้คือ Minecraft server 1.19.1 ครับ

sudo yum install -y git
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
java -jar BuildTools.jar --rev 1.19.1

ถ้าใครอยากได้เวอร์ชั่นอื่น ก็ให้เปลี่ยนตัวเลขครับ เช่น java -jar BuildTools.jar --rev 1.18.1

จากนั้นเราจะสร้างไฟล์ที่มีชื่อว่า Minecraft_start.sh ขึ้นมา ซึ่งไฟล์นี้จะมีหน้าที่เปิด server Minecraft

vi Minecraft_start.sh

จากนั้นให้กดปุ่ม i เพื่อเข้าสู่โหมดเขียนข้อมูลในไฟล์
จากนั้นให้ Copy คำสั่งด้านล่างลงไปวางในไฟล์

#!/bin/sh
java -Xmx3500M -Xms2048M -jar /home/ec2-user/spigot-1.19.1.jar nogui

ถ้าหากใช้เวอร์ชั่นอื่น อย่าลืมเปลี่ยนตัวเลขด้วยนะครับ เช่น java -Xmx3500M -Xms2048M -jar /home/ec2-user/spigot-1.18.1.jar nogui
จากนั้นกดปุ่ม Esc เพื่อออกจากโหมดเขียนข้อมูล
แล้วกดปุ่ม : w q แล้วกด Enter เพื่อ Save ไฟล์

ใช้คำสั่งต่อไปหนี้เพื่อมอบสิทธิการเปิดใช้งานให้ไฟล์

chmod +x Minecraft_start.sh

จากนั้นลองเปิดใช้งานดูตามคำสั่งนี้

sh Minecraft_start.sh

จะเห็นผลลัพท์ว่า เราจำเป็นต้องยอมรับ EULA ก่อนถึงจะสามารถเปิดเซิร์ฟเวอรได้

Loading libraries, please wait...
[11:50:06] [main/ERROR]: Failed to load properties from file: server.properties
[11:50:06] [main/WARN]: Failed to load eula.txt
[11:50:06] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

ให้เราใช้ Command ด้านล่างเพื่อยอมรับ EULA และ เปิดใช้งาน Server

sed -i -e "s/eula=false/eula=true/g" eula.txt
sh Minecraft_start.sh

เซิร์ฟเวอร์จะค่อยๆดาวน์โหลดตัวเองจนเสร็จจะขึ้นประมาณนี้

[โหลดต่างๆมากมาย]
[12:59:52] [Server thread/INFO]: Time elapsed: 5072 ms
[12:59:52] [Server thread/INFO]: Server permissions file permissions.yml is empty, ignoring it
[12:59:52] [Server thread/INFO]: Done (46.876s)! For help, type "help"
>
[เสร็จ]

*หมายเหตุ เราสามารถกดปิดเซิร์ฟเวอร์ได้ด้วยการกด Ctrl + C

6. ใช้ Minecraft เชื่อมต่อ server ที่เราสร้าง

  1. เปิด Minecraft Java Edition
  2. เลือก Multiplayer
  3. กด Add server
  4. ในส่วน Server Address ให้ใส่ Public IPv4 address ของ EC2 Instance ที่เราสร้างขึ้น
  5. กด Done
  6. เล่นได้เลย



โดยในการเทสเซิร์ฟเวอร์ครั้งนี้ เราได้เชิญทีมงาน Classmethod คุณ Tinnakorn และคุณ LIGHT มาร่วมทดสอบเซิร์ฟเวอร์ในครั้งนี้ว่าใช้งานได้จริงหรือเปล่า
ซึ่งทำให้ทราบได้ว่า t3.medium ก็เล่น Minecraft 3 คนกันได้สบายๆ

7.การลบ Resource ที่เราสร้างมา

วิธีคิดของ AWS คือ Start เมื่อต้องการใช้ Stop เมื่อไม่ใช้งาน และเมื่อเลิกใช้ก็ให้ลบ Terminate (เพื่อลดค่าใช้จ่ายที่จะเกิดขึ้นโดยไม่จำเป็นต่อเรา) โดยเราสามารถดูวิธีการลบ Resource ได้จากลิ้งค์ด้านล่างนี้

เพิ่มเติม

เมื่อเราทำการ Stop แล้ว Start หรือ Restart EC2 Instance จะทำให้ Public IPv4 address นั้นเปลี่ยนไป ทำให้เราไม่สามารถเข้า server ได้ด้วย IP เดิมได้
แต่เราสามารถแก้ไขปัญหานี้ได้ โดยการใช้ Elastic IP ซึ่งสามารถเข้าไปดูรายละเอียดได้ที่บทความด้านล่าง

นอกจากนั้น เมื่อคอมพิวเตอร์เราทำการเชื่อมต่อ Internet เราจะได้รับ IP address ที่แตกต่างกันทุกครั้ง ทำให้ Security Group เกิดปัญหา และทำให้เราไม่สามารถเชื่อมต่อ EC2 ได้ ซึ่งเราสามารถแก้ไขปัญหานั้นได้ โดยสามารถเข้าไปดูรายละเอียดได้ที่บทความด้านล่าง

นอกจากนี้ AWS ยังมี Auto scaling service ที่สามารถปรับขนาด EC2 ให้เหมาะกับขนาดผู้เล่นได้ด้วย
(มีเยอะใช้ตัวใหญ่ มีน้อยใช้ตัวเล็ก)
โดยสามารถดูรายละเอียดเพิ่มเติมได้ที่ลิ้งค์ด้านล่างนี้ครับ

ลองคิดค่าใช้จ่ายถ้าเกิดจะเปิดเซิร์ฟจริงๆ

Free Tier

AWS นั้นจะมีระบบ Free Tier ซึ่งจะเป็นส่วน Cloud service ที่เปิดให้ใช้ฟรีๆโดยไม่มีค่าใช้จ่ายซึ่งจะมีอะไรบ้างนั้นสามารถเข้าไปดูได้ที่บทความด้านล่างนี้

คำนวณค่าใช้จ่ายในครั้งนี้

สำหรับใครที่ไม่รู้ EC2 นั้นเป็น Service ที่จ่ายเท่าที่ใช้
หมายความว่า คุณใช้ 1 ชั่วโมงก็จ่ายแค่ราคา 1 ชั่วโมง ใช้ 1 เดือนก็จ่ายแค่ 1 เดือน AWS จะมีเครื่องมือที่จะคำนวณค่าใช้จ่าย

โดยจากคำนวนแล้ว การทำตามขั้นตอนในบทความนี้ทุกอย่างมีค่าใช้จ่าย 39.50 USD

แต่อย่าพึ่งตกใจ!
39.50 USD คือราคาที่คุณจะเปิดเซิร์ฟเวอร์ทั้งวัน 24 ชั่วโมง เป็นเวลา 1 เดือน
ซึ่งเวลาเล่นกับเพื่อนจริงๆ เราอาจจะเปิดเซิร์ฟเวอร์กัน 1-6 ชม แล้วก็ปิดไป
ซึ่งเมื่อคำนวณค่าใช้จ่ายออกมาแล้วจะได้
39.50/30/24 = 0.05486111111 USD หรือตกชั่วโมงละ 2.02 บาทเท่านั้นเอง
นอกจากนี้แล้ว ในส่วนของ Free Tier ยังให้เราสามารถใช้ EBS (เป็นเหมือน Storage ของ EC2)ได้ฟรีอีก
ซึ่งราคา EBS ต่อเดือนในที่นี้แล้วคือ 0.96 USD ซึ่งนั่นหมายความว่าสามารถลดราคาได้อีก ซึ่งราคาที่แท้จริงคือ
(39.50-0.96)/30/24 = 0.05352777777 USD หรือประมาณ 1.97 บาท ต่อชั่วโมงนั่นเอง!!!

สรุป

เป็นยังไงกันบ้างครับกับ Minecraft for AWS
ส่วนตัวผมแล้ว ถ้าพูดถึงเซิร์ฟเวอร์สิ่งแรกที่ผมนึกถึงก็ต้องเป็นเกมออนไลน์
แล้วถ้าพูดถึงออนไลน์แล้วก็ต้องพูดถึงการเปิดเซิร์ฟ
ซึ่งครั้งนี้ก็ถือเป็นโอกาสดีที่จะได้มาเล่าให้ทุกคนได้ฟังกันเกี่ยวกับการเปิดเซิร์ฟด้วย EC2
ซึ่งบทความนี้ก็ได้นำเสนอวิธีเปิดเซิร์ฟเวอร์ที่ง่ายๆ ทำให้อาจจะไม่ครอบคลุมเนื้อหาแบบละเอียดนัก(ถ้าใส่หมด ตอนลองทำคงเหนื่อยกันพอดี) ซึ่งถ้าถูกใจบทความแบบนี้ก็สามารถกดแชร์เพื่อเป็นกำลังใจได้ ถ้ามีคนชอบเยอะก็จะมีบทความแบบนี้ออกมาเรื่อยๆ ครับ
แล้วเจอกันในบทความต่อไปครับ สวัสดีครับ / ต้า

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