ทดลองเริ่มต้นใช้งาน Sample Elastic Beanstalk ด้วย PHP

AWS Elastic Beanstalk คือ Service ของ AWS ที่ใช้สำหรับ Deploy หรือ Scaling เว็บแอปพลิเคชั่นหรือบริการต่างๆ ที่พัฒนาโดยใช้ .NET Core on Linux, .NET on Windows Server, Docker, GlassFish, Go, Java, Node.js, PHP, Python, Ruby และ Tomcat บนเซิร์ฟเวอร์ที่คุ้นเคย เช่น Apache, Nginx, Passenger และ IIS โดยมี Environments ที่สามารถสร้างได้ แบ่งออกเป็น 2 ชนิดคือ Web server environments และ Worker environments

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

ครั้งนี้ผมจะมาอธิบายเกี่ยวกับการ ทดลองเริ่มต้นใช้งาน Sample Elastic Beanstalk ด้วย PHP โดยการสร้าง Application และ Environment ใน Elastic Beanstalk ตามองค์ประกอบหลักด้านล่างนี้ครับ

※องค์ประกอบหลัก
มีสององค์ประกอบใหญ่ๆที่ประกอบเป็น Elastic Beanstalk คือ "Environment" และ "Application" โดยมีความเกี่ยวข้องกันตามแผนภาพด้านล่างคือ จะมี "Application" เป็นหัวข้อหลัก แล้วในแต่ละ "Application" จะมี "Environment" อยู่

หน้าที่ของ "Application" คือ การอัพโหลดหรือควบคุมแอปพลิเคชันที่สร้างขึ้น
หน้าที่ของ "Environment" คือ กำหนดสภาพแวดล้อมที่แอปพลิเคชันที่ทำงานจริง

อ่านรายละเอียดเพิ่มเติมได้ที่ด้านล่างนี้ครับ ↓↓↓

การสร้าง Key Pairs

ดูตัวอย่างที่นี่: การ Create Key Pair

ตัวอย่างตั้งค่าการสร้าง Key Pairs ในบทความนี้
※Create Key pairs
Name:tinnakorn-eb-test
Private key file format:.ppk

การสร้าง Application และ Environment ใน Elastic Beanstalk

ขั้นตอนนี้ผมจะลองสร้าง Application และ Environment โดยใช้ Platform PHP ในการรัน Server ครับ

ค้นหาElastic Beanstalkและคลิกเข้ามาที่Elastic Beanstalk

สำหรับผู้ที่ยังไม่เคยใช้งานให้ดูที่ด้านขวาตรงหัวข้อ Get started และคลิกที่Create Application

เมื่อเข้ามาที่หน้า Create a web app แล้ว มาที่หัวข้อ Application information แล้วตั้งค่าดังนี้:
» Application name:tinnakorn-eb-test(ชื่ออะไรก็ได้)

ถัดมาหัวข้อ Platform โดย AWS Elastic Beanstalk มี Platform ที่รองรับดังนี้:

  • .NET Core on Linux
  • .NET on Windows Server
  • Docker
  • GlassFish
  • Go
  • Java
  • Node.js
  • PHP
  • Python
  • Ruby
  • Tomcat

การตั้งค่าในหัวข้อ Platform:
» การสาธิตในครั้งนี้ผมจะใช้ Platform:PHP
» Platform branch จะถูกเลือกให้อัตโนมัติ
» Platform version ก็จะถูกเลือกให้อัตโนมัติเหมือนกัน (Platform version จะมีการอัปเดตเวอร์ชันใหม่มาเรื่อยๆ ดังนั้นแนะนำให้ใช้เวอร์ชันที่มี (Recommended) ครับ)

ถัดมาหัวข้อ Application code ผมจะใช้เป็น ◉Sample application
เมื่อตั้งค่าหน้านี้เสร็จแล้ว คลิกที่ปุ่มConfigure more options


※หน้า Configure [Yourname]-env
เมื่อคลิกปุ่ม Configure more options แล้วจะเข้ามาหน้า Configure [Yourname]-env แล้วจะแสดงหน้าจอแบบนี้
จากนั้นทำการตั้งค่าในขั้นตอนถัดไปได้เลยครับ

การตั้งค่าหน้า Modify instances

มาที่หัวข้อ Instances คลิกที่Edit

การตั้งค่าหน้า Modify instances หัวข้อ Root volume (boot device):
» Root volume type:General Purpose (SSD)(volume type นี้คือ gp2 ครับ)
» Size:8GB (ใส่ตามจำนวนที่ต้องการใช้งาน)

เมื่อตั้งค่าเสร็จแล้ว เลื่อนลงมาด้านล่างขวาสุด คลิกปุ่มSave

การตั้งค่าหน้า Modify capacity

มาที่หัวข้อ Capacity คลิกที่Edit

การตั้งค่าหน้า Modify capacity หัวข้อ Auto scaling group:
» เลื่อนลงมาข้างล่างที่ Instance types แล้วคลิกที่ t2.micro และ t2.small ออกไป
หมายเหตุ: ในส่วนนี้ให้เลือก EC2 Instance Type เพื่อเริ่มต้นใช้งานจาก Elastic Beanstalk ในกรณีที่ตั้งค่าหลายอัน หนึ่งในนั้นจะถูกสุ่มเลือกมาใช้งาน แต่ครั้งนี้ผมจะเปลี่ยนการตั้งค่า เนื่องจากว่าผมต้องการใช้แค่t3a.nanoในการสาธิตครับ

จากนั้นพิมพ์ค้นหาและเลือก Instance types ที่เราต้องการ เช่นt3a.nano

เมื่อตั้งค่าเสร็จแล้ว เลื่อนลงมาด้านล่างขวาสุด คลิกปุ่มSave

การตั้งค่าหน้า Modify security

มาที่หัวข้อ Security คลิกที่Edit

การตั้งค่า Modify security:
※Service role
» Service role จะถูกเลือกโดยอัตโนมัติ

※Virtual machine permissions
» EC2 key pair:tinnakorn-eb-test(เลือก Key Pair ที่เราสร้างไว้ตอนแรก)
» IAM instance profile จะถูกเลือกโดยอัตโนมัติ
» เมื่อตั้งค่าเสร็จแล้ว คลิกปุ่มSave

การตั้งค่าหน้า Modify Managed Updates

มาที่หัวข้อ Managed Updates คลิกที่Edit

การตั้งค่าหน้า Modify managed updates หัวข้อ Managed platform updates:
» Managed updates: ติ๊ก ✅ ออกให้เป็น □ Enabled เพื่อไม่ให้มีการอัปเดต
» คลิกปุ่มSave
เมื่อตั้งค่าในหน้า Configure [Yourname]-env เสร็จแล้ว เลื่อนลงมาด้านล่างสุด คลิกปุ่มCreate app

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

การตรวจสอบ Monitoring

มาที่เมนูด้านซ้าย เลือกMonitoring

เราสามารถตรวจสอบ Monitoring ได้จากหน้าจอนี้เลยครับ

การตรวจสอบ Events

มาที่เมนูด้านซ้าย เลือกEvents

เราสามารถตรวจสอบEventsได้จากหน้าจอนี้เลยครับ
อย่างเช่นSuccessfully launched environment: Tinnakornebtest-envคือการเริ่มต้นระบบเสร็จสิ้นแล้ว เป็นต้น

การตรวจสอบหน้าเว็บเบราว์เซอร์

มาที่เมนูด้านซ้าย เลือก▼ [Yourname]-env

คลิกที่ URL ตามรูปภาพได้เลยครับ

เมื่อแสดงหน้าจอแบบนี้แล้ว ถือว่าเราสามารถใช้งาน Elastic Beanstalk ด้วย PHP ได้แล้วครับ

การเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY

สิ่งที่จะทำในขั้นตอนนี้คือ:
・ตรวจสอบ Instance ID จาก Health
・ตรวจสอบ IP Address จาก EC2
・ทำการเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY
・ตรวจสอบไฟล์ PHP หน้า Sample ที่มีอยู่ใน [ /var/www/html/index.php ]

ตรวจสอบ Instance ID จาก Health

ผมจะทำการตรวจสอบ Instance ID จาก Health เพื่อนำไปค้นหา Instance ที่เป็นของเราใน EC2

มาที่เมนูด้านซ้าย เลือกHealth

เมื่อเข้ามาแล้วเราจะเห็น Instance ID ของเรา ให้คลิกตามรูปภาพได้เลยครับ

เราสามารถดู Instance ID แบบนี้ได้ด้วย และในกรณีที่ Instance ใน EC2 มีเยอะ เราสามารถ Copy Instance ID นี้ไปค้นหาอันที่เป็นของเราได้ ซึ่งผมจะทำการสาธิตในขั้นตอนถัดไปครับ

ตรวจสอบ IP Address จาก EC2

ผมจะทำการตรวจสอบ IP Address จาก EC2 เพื่อ Copy IP Address ไปใช้ในการ Login ในโปรแกรม PuTTY

มาที่หน้า Console Instance แล้ววาง Instance ID ที่ Copy มาเมื่อสักครู่นี้ลงในช่อง?︎ Search+ Enter
แล้ว Instance ของเราที่ถูกสร้างจาก Elastic Beanstalk จะแสดงขึ้นมา
จากนั้นให้คลิกเข้าไปที่ Instance ID ของเราได้เลยครับ

เมื่อเข้ามาแล้วจะแสดงหน้าจอแบบนี้ จากนั้นให้ CopyPublic IPv4 address เตรียมไว้เพื่อที่จะนำมาใช้ในการเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY ในขั้นตอนถัดไปครับ (ให้บันทึก Public IPv4 address ไว้ที่ Nodepad เพื่อใช้ในการเทียบกับ Instance ตัวใหม่ในขั้นตอนสุดท้ายด้วยครับ ซึ่งในส่วนนี้มีอธิบายไว้ในขั้นตอนสุดท้ายครับ)

ทำการเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY

ในขั้นตอนนี้ให้ทำการเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY

ดูตัวอย่างที่นี่: การ Connect to EC2 by PuTTY

※ตัวอย่างตั้งค่าการเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY
・Session:
Host Name: Your Public IPv4 address (EC2 Instance)
Saved Sessions:tinnakorn-eb-test(ชื่ออะไรก็ได้)

・Connection:
Seconds between keepalives (0 to turn off):60

・Connection → Data:
Auto-login username:ec2-user(บังคับให้ใส่ตามนี้เพราะว่าเป็น AMI: Amazon Linux 2)

・Connection → SSH → Auth:
Private key file for authentication: [Browse...]tinnakorn-eb-test.ppk(เลือก key_pairs.ppk ของเรา)

・Session:
Saved Sessions:tinnakorn-eb-test[Save and Open]

Output (example)

root@ip-172-31-9-54:~

Using username "ec2-user".
Authenticating with public key "tinnakorn-eb-test"
  _____ _           _   _      ____                       _        _ _
 | ____| | __   ___| |_(_) ___| __ )  ___  __ _ _ __  ___| |_ __ _| | | __
 |  _| | |/ _ \/ __| __| |/ __|  _ \ / _ \/ _\ | '_ \/ __| __/ _\ | | |/ /
 | |___| | (_| \__ \ |_| | (__| |_) |  __/ (_| | | | \__ \ || (_| | |   <
 |_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\

 Amazon Linux 2 AMI

 This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
 WILL BE LOST if the instance is replaced by auto-scaling. For more information
 on customizing your Elastic Beanstalk environment, see our documentation here:
 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

[ec2-user@ip-172-31-9-54 ~]$


รันคำสั่งนี้เพื่อเข้าสู่ระบบในฐานะผู้ใช้ที่มีสิทธิ์ root

sudo su -

Output (example)

root@ip-172-31-9-54:~

[ec2-user@ip-172-31-9-54 ~]$ sudo su -
[root@ip-172-31-9-54 ~]#

ตรวจสอบไฟล์ PHP หน้า Sample ที่มีอยู่ใน [ /var/www/html/index.php ]

รันคำสั่งนี้เพื่อเข้าไปที่/var/www/html/

cd /var/www/html/

Output (example)

root@ip-172-31-9-54:~

[root@ip-172-31-9-54 ~]# cd /var/www/html/
[root@ip-172-31-9-54 html]#


รันคำสั่งนี้เพื่อตรวจสอบไฟล์ index.php ในโฟลเดอร์ html

ll

Output (example)

root@ip-172-31-9-54:~

[root@ip-172-31-9-54 html]# ll
total 20
-rw-r--r-- 1 webapp webapp   90 Sep  1  2020 cron.yaml
-rw-r--r-- 1 webapp webapp 2784 Sep  1  2020 index.php
-rw-r--r-- 1 webapp webapp  189 Sep  1  2020 logo_aws_reduced.gif
-rw-r--r-- 1 webapp webapp  367 Sep  1  2020 scheduled.php
-rw-r--r-- 1 webapp webapp 3490 Sep  1  2020 styles.css
[root@ip-172-31-9-54 html]#


รันคำสั่งนี้เพื่อตรวจสอบข้อมูลในไฟล์ index.php

less index.php

Output (example)
ค้นหาคำว่าCongratulations!ตามที่มาร์คไว้ จากนั้น Copy เตรียมไว้เพื่อที่จะไปค้นหาในหน้าเว็บเบราว์เซอร์ (ถ้าต้องการออกจากหน้านี้ให้กดปุ่มq)

root@ip-172-31-9-54:~

" ...ตัดส่วนบนออก... "

<body>
    <section class="congratulations">
        <h1>Congratulations!
        <p>Your AWS Elastic Beanstalk PHP application is now running on your own dedicated environment in the AWS Cloud

<p>You are running PHP version

<p>This environment is launched with Elastic Beanstalk PHP Platform

</section> <section class="instructions"> <h2>What's Next? <ul> <li>AWS Elastic Beanstalk overview <li>Deploying AWS Elastic Beanstalk Applications in PHP Using Eb and Git <li>Using Amazon RDS with PHP <li>Customizing the Software on EC2 Instances <li>Customizing Environment Resources </ul> " ...ตัดส่วนล่างออก... "


กลับมาที่หน้าเว็บเบราว์เซอร์ของเรา จากนั้นกดปุ่มCtrl + fให้กล่องค้นหาข้อความด้านขวาบนแสดงขึ้นมา แล้ววางข้อความที่เรา Copy เมื่อสักครู่นี้ลงไป + Enter ก็จะเห็นว่ามีข้อความที่ตรงกันเหมือนกับรูปภาพครับ

ทดสอบการ Shutdown Instance

ขั้นตอนนี้ผมจะทดสอบการ Shutdown Instance ซึ่งหลังจากที่ทำการ Shutdown ไปแล้ว Instance ตัวเก่าจะถูก Terminate โดยอัตโนมัติ และ Instance ตัวใหม่จะถูกสร้างขึ้นมาเองโดยอัตโนมัติ ซึ่งจะคล้ายๆกับฟังก์ชันของ Auto Scaling นั่นเองครับ

รันคำสั่งนี้เพื่อ Shutdown Instance

shutdown -h now

หลังจากที่รันคำสั่งนี้ไปแล้วโปรแกรม PuTTY ที่เรากำลัง Login อยู่นั้นจะถูกตัดการเชื่อมต่อทันทีครับ ทีนี้ให้เรากดOKไปได้เลย ! แต่ว่ายังไม่ต้องปิดโปรแกรม PuTTY นะครับ

ทีนี้ให้กลับมาที่หน้า EC2 Instance ของเราอีกครั้ง จะเห็นว่า Instance:i-09efxxxxxxxxxxxxxตัวเก่าถูก Terminate ไปแล้ว
! แต่มี Instance:i-0285xxxxxxxxxxxxxตัวใหม่ถูกสร้างขึ้นมาแทนที่อัตโนมัติ
ทีนี้ให้คลิกเข้าไปที่ Instance ID ตัวใหม่ได้เลยครับ

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

กลับมาที่หน้าโปรแกรม PuTTY แล้วคลิกขวาที่แถบด้านบน และเลือกRestart Session

เลือกAcceptเพื่อเชื่อมต่อกับ EC2 อีกครั้ง

Output (example)
จะเห็นว่าเราสามารถเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk ได้โดยที่ไม่ต้องไปตั้งค่าใน PuTTY ใหม่อีกครั้งครับ

root@ip-172-31-19-243:~

Using username "ec2-user".
Authenticating with public key "tinnakorn-eb-test"
  _____ _           _   _      ____                       _        _ _
 | ____| | __   ___| |_(_) ___| __ )  ___  __ _ _ __  ___| |_ __ _| | | __
 |  _| | |/ _ \/ __| __| |/ __|  _ \ / _ \/ _\ | '_ \/ __| __/ _\ | | |/ /
 | |___| | (_| \__ \ |_| | (__| |_) |  __/ (_| | | | \__ \ || (_| | |   <
 |_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\

 Amazon Linux 2 AMI

 This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
 WILL BE LOST if the instance is replaced by auto-scaling. For more information
 on customizing your Elastic Beanstalk environment, see our documentation here:
 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

[ec2-user@ip-172-31-19-243 ~]$


กลับมาที่หน้าเว็บเบราว์เซอร์อีกครั้ง และทำการ Reload ดูครับ
จะเห็นว่าเราก็ยังสามารถใช้งานหน้าเว็บเบราว์เซอร์นี้ได้โดยผ่าน Instance ตัวใหม่ที่ถูกสร้างขึ้นมาแทนที่ตัวเก่าโดยอัตโนมัติครับ

การสาธิตของผมก็มีเพียงเท่านี้ครับ ต่อไปจะเป็นขั้นตอนการลบ AWS Resource ที่สร้างขึ้นในบทความนี้ครับ

วิธีการลบ AWS Resource ที่สร้างขึ้นในบทความนี้

การลบฟังก์ชันที่ได้สร้างขึ้นใน Service ต่างๆ

ลบโดยเรียงตามขั้นตอนดังนี้:

  • Elastic Beanstalk
    • Environments
    • Applications
  • Amazon EC2
    • Key Pairs

การลบ Environments และ Applications ใน Elastic Beanstalk

เข้ามาที่ 「 Service Elastic Beanstalk » Environments 」 แล้วทำการ Termminate

เข้ามาที่ 「 Service Elastic Beanstalk » Applications 」 แล้วทำการลบ

เข้ามาที่ 「 Service EC2 » Key Pairs 」 แล้วทำการลบ

สรุป

การสาธิตทดลองเริ่มต้นใช้งาน Sample Elastic Beanstalk ด้วย PHP ก็มีเพียงเท่านี้ครับ ซึ่งการใช้งานนี้เราสามารถเลือกใช้ Platform อื่นๆได้อีกมากมาย เช่น 「 .NET Core on Linux, .NET on Windows Server, Docker, GlassFish, Go, Java, Node.js, PHP, Python, Ruby, Tomcat 」 เป็นต้น

นอกจากนี้ Elastic Beanstalk ยังมีฟังก์ชันที่คล้ายกับ Auto Scaling อยู่ในตัวด้วยครับ โดยจะสังเกตได้จากตอนที่ผมทำการ Shutdown Instance ตัวเก่าไปแล้วก็จะถูก Terminate โดยอัตโนมัติ และ Instance ตัวใหม่ก็ถูกสร้างขึ้นมาแทนที่ตัวเก่าทันทีโดยอัตโนมัติ ซึ่งจะทำให้เราสามารถใช้งานเว็บเบราว์เซอร์ที่เรากำลังใช้อยู่ได้อย่างต่อเนื่องอีกด้วยครับ

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